Compare commits
	
		
			3 Commits
		
	
	
		
			ae8710e6d8
			...
			05-28-a
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| bdf1a8060f | |||
| 54799f54ec | |||
| 7eba0fa25a | 
							
								
								
									
										27
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										27
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							| @ -351,9 +351,36 @@ ASALocalRun/ | |||||||
| /Fab2ApprovalMKLink/Utilities | /Fab2ApprovalMKLink/Utilities | ||||||
| /Fab2ApprovalMKLink/ViewModels | /Fab2ApprovalMKLink/ViewModels | ||||||
|  |  | ||||||
|  | /Fab2ApprovalMKLink/Views/Account | ||||||
|  | /Fab2ApprovalMKLink/Views/Admin | ||||||
|  | /Fab2ApprovalMKLink/Views/Audit | ||||||
|  | /Fab2ApprovalMKLink/Views/ChangeControl | ||||||
|  | /Fab2ApprovalMKLink/Views/CorrectiveAction | ||||||
|  | /Fab2ApprovalMKLink/Views/ECN | ||||||
|  | /Fab2ApprovalMKLink/Views/Home | ||||||
|  | /Fab2ApprovalMKLink/Views/LotDisposition | ||||||
|  | /Fab2ApprovalMKLink/Views/LotTraveler | ||||||
|  | /Fab2ApprovalMKLink/Views/Manager | ||||||
|  | /Fab2ApprovalMKLink/Views/MRB | ||||||
|  | /Fab2ApprovalMKLink/Views/PartsRequest | ||||||
|  | /Fab2ApprovalMKLink/Views/Reports | ||||||
|  | /Fab2ApprovalMKLink/Views/Shared | ||||||
|  | /Fab2ApprovalMKLink/Views/Training | ||||||
|  | /Fab2ApprovalMKLink/Views/Workflow | ||||||
|  |  | ||||||
| /Fab2ApprovalMKLink/.vscode/.UserSecrets | /Fab2ApprovalMKLink/.vscode/.UserSecrets | ||||||
| /Fab2ApprovalSystem/.vscode/.UserSecrets | /Fab2ApprovalSystem/.vscode/.UserSecrets | ||||||
| /Fab2ApprovalTests/.vscode/.UserSecrets | /Fab2ApprovalTests/.vscode/.UserSecrets | ||||||
| /MesaFabApproval.API/.vscode/.UserSecrets | /MesaFabApproval.API/.vscode/.UserSecrets | ||||||
| /MesaFabApproval.Client/.vscode/.UserSecrets | /MesaFabApproval.Client/.vscode/.UserSecrets | ||||||
| /MesaFabApproval.Shared/.vscode/.UserSecrets | /MesaFabApproval.Shared/.vscode/.UserSecrets | ||||||
|  |  | ||||||
|  | fab-001 | ||||||
|  | fab-002 | ||||||
|  | fab-004 | ||||||
|  | fab-004 | ||||||
|  | fab-005 | ||||||
|  | fab-006 | ||||||
|  | fab-007 | ||||||
|  | fab-008 | ||||||
|  | fab-009 | ||||||
							
								
								
									
										42
									
								
								.vscode/launch.json
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										42
									
								
								.vscode/launch.json
									
									
									
									
										vendored
									
									
								
							| @ -15,6 +15,48 @@ | |||||||
|             "console": "integratedTerminal", |             "console": "integratedTerminal", | ||||||
|             "stopAtEntry": false |             "stopAtEntry": false | ||||||
|         }, |         }, | ||||||
|  |         { | ||||||
|  |             "name": ".NET Core Launch (web) - Fab2ApprovalMKLink", | ||||||
|  |             "type": "coreclr", | ||||||
|  |             "request": "launch", | ||||||
|  |             "preLaunchTask": "Fab2ApprovalMKLink-build", | ||||||
|  |             "program": "${workspaceFolder}/Fab2ApprovalMKLink/bin/Debug/net8.0/Fab2ApprovalMKLink.dll", | ||||||
|  |             "args": [], | ||||||
|  |             "cwd": "${workspaceFolder}", | ||||||
|  |             "stopAtEntry": false, | ||||||
|  |             "serverReadyAction": { | ||||||
|  |                 "action": "openExternally", | ||||||
|  |                 "pattern": "\\bNow listening on:\\s+(https?://\\S+)", | ||||||
|  |                 "uriFormat": "%s/swagger/index.html" | ||||||
|  |             }, | ||||||
|  |             "env": { | ||||||
|  |                 "ASPNETCORE_ENVIRONMENT": "Development" | ||||||
|  |             }, | ||||||
|  |             "sourceFileMap": { | ||||||
|  |                 "/Views": "${workspaceFolder}/Views" | ||||||
|  |             } | ||||||
|  |         }, | ||||||
|  |         { | ||||||
|  |             "name": ".NET Core Launch (web) - fab-004", | ||||||
|  |             "type": "coreclr", | ||||||
|  |             "request": "launch", | ||||||
|  |             "preLaunchTask": "fab-004-build", | ||||||
|  |             "program": "${workspaceFolder}/fab-004/bin/net8.0/fab-004.dll", | ||||||
|  |             "args": [], | ||||||
|  |             "cwd": "${workspaceFolder}", | ||||||
|  |             "stopAtEntry": false, | ||||||
|  |             "serverReadyAction": { | ||||||
|  |                 "action": "openExternally", | ||||||
|  |                 "pattern": "\\bNow listening on:\\s+(https?://\\S+)", | ||||||
|  |                 "uriFormat": "%s/swagger/index.html" | ||||||
|  |             }, | ||||||
|  |             "env": { | ||||||
|  |                 "ASPNETCORE_ENVIRONMENT": "Development" | ||||||
|  |             }, | ||||||
|  |             "sourceFileMap": { | ||||||
|  |                 "/Views": "${workspaceFolder}/Views" | ||||||
|  |             } | ||||||
|  |         }, | ||||||
|         { |         { | ||||||
|             "name": ".NET Core Launch (console) - MesaFabApproval.API", |             "name": ".NET Core Launch (console) - MesaFabApproval.API", | ||||||
|             "type": "coreclr", |             "type": "coreclr", | ||||||
|  | |||||||
							
								
								
									
										16
									
								
								.vscode/tasks.json
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										16
									
								
								.vscode/tasks.json
									
									
									
									
										vendored
									
									
								
							| @ -63,6 +63,7 @@ | |||||||
|             "type": "process", |             "type": "process", | ||||||
|             "args": [ |             "args": [ | ||||||
|                 "format", |                 "format", | ||||||
|  |                 "${workspaceFolder}/Fab2ApprovalMKLink/Fab2ApprovalMKLink.csproj", | ||||||
|                 "--report", |                 "--report", | ||||||
|                 ".vscode", |                 ".vscode", | ||||||
|                 "--verbosity", |                 "--verbosity", | ||||||
| @ -78,7 +79,8 @@ | |||||||
|             "type": "process", |             "type": "process", | ||||||
|             "args": [ |             "args": [ | ||||||
|                 "format", |                 "format", | ||||||
|                 "whitespace" |                 "whitespace", | ||||||
|  |                 "${workspaceFolder}/Fab2ApprovalMKLink/Fab2ApprovalMKLink.csproj" | ||||||
|             ], |             ], | ||||||
|             "problemMatcher": "$msCompile" |             "problemMatcher": "$msCompile" | ||||||
|         }, |         }, | ||||||
| @ -94,6 +96,18 @@ | |||||||
|             ], |             ], | ||||||
|             "problemMatcher": "$msCompile" |             "problemMatcher": "$msCompile" | ||||||
|         }, |         }, | ||||||
|  |         { | ||||||
|  |             "label": "fab-004-build", | ||||||
|  |             "command": "dotnet", | ||||||
|  |             "type": "process", | ||||||
|  |             "args": [ | ||||||
|  |                 "build", | ||||||
|  |                 "${workspaceFolder}/fab-004/fab-004.csproj", | ||||||
|  |                 "/property:GenerateFullPaths=true", | ||||||
|  |                 "/consoleloggerparameters:NoSummary" | ||||||
|  |             ], | ||||||
|  |             "problemMatcher": "$msCompile" | ||||||
|  |         }, | ||||||
|         { |         { | ||||||
|             "label": "Fab2ApprovalMKLink-publish", |             "label": "Fab2ApprovalMKLink-publish", | ||||||
|             "command": "dotnet", |             "command": "dotnet", | ||||||
|  | |||||||
							
								
								
									
										42
									
								
								Fab2ApprovalMKLink/.vscode/mklink.md
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										42
									
								
								Fab2ApprovalMKLink/.vscode/mklink.md
									
									
									
									
										vendored
									
									
								
							| @ -36,14 +36,36 @@ mklink /J "L:\DevOps\Mesa_FI\MesaFabApproval\Fab2ApprovalMKLink\Jobs" "L:\DevOps | |||||||
| mklink /J "L:\DevOps\Mesa_FI\MesaFabApproval\Fab2ApprovalMKLink\JobSchedules" "L:\DevOps\Mesa_FI\MesaFabApproval\Fab2ApprovalSystem\JobSchedules" | mklink /J "L:\DevOps\Mesa_FI\MesaFabApproval\Fab2ApprovalMKLink\JobSchedules" "L:\DevOps\Mesa_FI\MesaFabApproval\Fab2ApprovalSystem\JobSchedules" | ||||||
| ``` | ``` | ||||||
|  |  | ||||||
| ```bash 1734015544321 = 638696123443210000 = Thu Dec 12 2024 07:59:03 GMT-0700 (Mountain Standard Time) | ```bash 1747242128286 = 638828389282860000 = 2025-2.Spring = Wed May 14 2025 10:02:07 GMT-0700 (Mountain Standard Time) | ||||||
| mklink /J ".vscode\.UserSecrets" "%AppData%\Microsoft\UserSecrets\f2da5035-aba9-4676-9f8d-d6689f84663d" | mklink /J "Fab2ApprovalMKLink\.vscode\.UserSecrets" "%AppData%\Microsoft\UserSecrets\f2da5035-aba9-4676-9f8d-d6689f84663d" | ||||||
| mklink /J "DMO" "..\Fab2ApprovalSystem\DMO" | mklink /J "Fab2ApprovalMKLink\Controllers" "Fab2ApprovalSystem\Controllers" | ||||||
| mklink /J "Jobs" "..\Fab2ApprovalSystem\Jobs" | mklink /J "Fab2ApprovalMKLink\DMO" "Fab2ApprovalSystem\DMO" | ||||||
| mklink /J "JobSchedules" "..\Fab2ApprovalSystem\JobSchedules" | mklink /J "Fab2ApprovalMKLink\Jobs" "Fab2ApprovalSystem\Jobs" | ||||||
| mklink /J "Misc" "..\Fab2ApprovalSystem\Misc" | mklink /J "Fab2ApprovalMKLink\JobSchedules" "Fab2ApprovalSystem\JobSchedules" | ||||||
| mklink /J "Models" "..\Fab2ApprovalSystem\Models" | mklink /J "Fab2ApprovalMKLink\Misc" "Fab2ApprovalSystem\Misc" | ||||||
| mklink /J "PdfGenerator" "..\Fab2ApprovalSystem\PdfGenerator" | mklink /J "Fab2ApprovalMKLink\Models" "Fab2ApprovalSystem\Models" | ||||||
| mklink /J "Utilities" "..\Fab2ApprovalSystem\Utilities" | mklink /J "Fab2ApprovalMKLink\PdfGenerator" "Fab2ApprovalSystem\PdfGenerator" | ||||||
| mklink /J "ViewModels" "..\Fab2ApprovalSystem\ViewModels" | mklink /J "Fab2ApprovalMKLink\Utilities" "Fab2ApprovalSystem\Utilities" | ||||||
|  | mklink /J "Fab2ApprovalMKLink\ViewModels" "Fab2ApprovalSystem\ViewModels" | ||||||
|  | mklink /J "Fab2ApprovalMKLink\ViewModels" "Fab2ApprovalSystem\ViewModels" | ||||||
|  | ``` | ||||||
|  |  | ||||||
|  | ```bash 1747249935803 = 638828467358030000 = 2025-2.Spring = Wed May 14 2025 12:12:15 GMT-0700 (Mountain Standard Time) | ||||||
|  | mkdir "Fab2ApprovalMKLink\Views" | ||||||
|  | mklink /J "Fab2ApprovalMKLink\Views\Account" "Fab2ApprovalSystem\Views\Account" | ||||||
|  | mklink /J "Fab2ApprovalMKLink\Views\Admin" "Fab2ApprovalSystem\Views\Admin" | ||||||
|  | mklink /J "Fab2ApprovalMKLink\Views\Audit" "Fab2ApprovalSystem\Views\Audit" | ||||||
|  | mklink /J "Fab2ApprovalMKLink\Views\ChangeControl" "Fab2ApprovalSystem\Views\ChangeControl" | ||||||
|  | mklink /J "Fab2ApprovalMKLink\Views\CorrectiveAction" "Fab2ApprovalSystem\Views\CorrectiveAction" | ||||||
|  | mklink /J "Fab2ApprovalMKLink\Views\ECN" "Fab2ApprovalSystem\Views\ECN" | ||||||
|  | mklink /J "Fab2ApprovalMKLink\Views\Home" "Fab2ApprovalSystem\Views\Home" | ||||||
|  | mklink /J "Fab2ApprovalMKLink\Views\LotDisposition" "Fab2ApprovalSystem\Views\LotDisposition" | ||||||
|  | mklink /J "Fab2ApprovalMKLink\Views\LotTraveler" "Fab2ApprovalSystem\Views\LotTraveler" | ||||||
|  | mklink /J "Fab2ApprovalMKLink\Views\Manager" "Fab2ApprovalSystem\Views\Manager" | ||||||
|  | mklink /J "Fab2ApprovalMKLink\Views\MRB" "Fab2ApprovalSystem\Views\MRB" | ||||||
|  | mklink /J "Fab2ApprovalMKLink\Views\PartsRequest" "Fab2ApprovalSystem\Views\PartsRequest" | ||||||
|  | mklink /J "Fab2ApprovalMKLink\Views\Reports" "Fab2ApprovalSystem\Views\Reports" | ||||||
|  | mklink /J "Fab2ApprovalMKLink\Views\Shared" "Fab2ApprovalSystem\Views\Shared" | ||||||
|  | mklink /J "Fab2ApprovalMKLink\Views\Training" "Fab2ApprovalSystem\Views\Training" | ||||||
|  | mklink /J "Fab2ApprovalMKLink\Views\Workflow" "Fab2ApprovalSystem\Views\Workflow" | ||||||
| ``` | ``` | ||||||
|  | |||||||
| @ -30,6 +30,7 @@ | |||||||
|     <PackageReference Include="EntityFramework" Version="6.5.1" /> |     <PackageReference Include="EntityFramework" Version="6.5.1" /> | ||||||
|     <PackageReference Include="ExcelDataReader" Version="3.7.0" /> |     <PackageReference Include="ExcelDataReader" Version="3.7.0" /> | ||||||
|     <PackageReference Include="jQuery" Version="3.7.1" /> |     <PackageReference Include="jQuery" Version="3.7.1" /> | ||||||
|  |     <PackageReference Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="8.0.8" /> | ||||||
|     <PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly.Server" Version="8.0.10" /> |     <PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly.Server" Version="8.0.10" /> | ||||||
|     <PackageReference Include="Microsoft.Data.SqlClient" Version="5.2.0" /> |     <PackageReference Include="Microsoft.Data.SqlClient" Version="5.2.0" /> | ||||||
|     <PackageReference Include="Microsoft.Data.Sqlite" Version="8.0.2" /> |     <PackageReference Include="Microsoft.Data.Sqlite" Version="8.0.2" /> | ||||||
|  | |||||||
| @ -1,15 +1,23 @@ | |||||||
| using System; | using System; | ||||||
| using System.Diagnostics; | using System.Diagnostics; | ||||||
|  | using System.Text; | ||||||
|  |  | ||||||
|  | using Fab2ApprovalSystem.Misc; | ||||||
| using Fab2ApprovalSystem.Models; | using Fab2ApprovalSystem.Models; | ||||||
|  | using Fab2ApprovalSystem.Services; | ||||||
|  |  | ||||||
|  | using Microsoft.AspNetCore.Authentication.JwtBearer; | ||||||
|  | using Microsoft.AspNetCore.Authorization; | ||||||
| using Microsoft.AspNetCore.Builder; | using Microsoft.AspNetCore.Builder; | ||||||
|  | using Microsoft.AspNetCore.Http; | ||||||
| using Microsoft.AspNetCore.Mvc; | using Microsoft.AspNetCore.Mvc; | ||||||
|  | using Microsoft.AspNetCore.Mvc.ViewEngines; | ||||||
| using Microsoft.Extensions.Configuration; | using Microsoft.Extensions.Configuration; | ||||||
| using Microsoft.Extensions.DependencyInjection; | using Microsoft.Extensions.DependencyInjection; | ||||||
| using Microsoft.Extensions.Hosting; | using Microsoft.Extensions.Hosting; | ||||||
| using Microsoft.Extensions.Hosting.WindowsServices; | using Microsoft.Extensions.Hosting.WindowsServices; | ||||||
| using Microsoft.Extensions.Logging; | using Microsoft.Extensions.Logging; | ||||||
|  | using Microsoft.IdentityModel.Tokens; | ||||||
|  |  | ||||||
| namespace Fab2ApprovalMKLink; | namespace Fab2ApprovalMKLink; | ||||||
|  |  | ||||||
| @ -24,12 +32,36 @@ public class Program { | |||||||
|             throw new Exception("Company name must have a value!"); |             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!"); | ||||||
|  |         GlobalVars.AppSettings = appSettings; | ||||||
|  |         GlobalVars.AttachmentUrl = appSettings.AttachmentUrl is null ? string.Empty : appSettings.AttachmentUrl; | ||||||
|  |         GlobalVars.CA_BlankFormsLocation = appSettings.CABlankFormsLocation; | ||||||
|  |         GlobalVars.DBConnection = appSettings.DBConnection; | ||||||
|  |         GlobalVars.DB_CONNECTION_STRING = appSettings.DBConnectionString; | ||||||
|  |         GlobalVars.hostURL = appSettings.HostURL; | ||||||
|  |         GlobalVars.IS_INFINEON_DOMAIN = appSettings.IsInfineonDomain; | ||||||
|  |         GlobalVars.MesaTemplateFiles = appSettings.MesaTemplateFiles; | ||||||
|  |         GlobalVars.NDriveURL = appSettings.NDriveURL; | ||||||
|  |         GlobalVars.SENDER_EMAIL = appSettings.SenderEmail; | ||||||
|  |         GlobalVars.USER_ID = appSettings.UserId; | ||||||
|  |         GlobalVars.USER_ISADMIN = appSettings.UserIsAdmin; | ||||||
|  |         GlobalVars.WSR_URL = appSettings.WSR_URL; | ||||||
|         try { |         try { | ||||||
|             _ = webApplicationBuilder.Services.Configure<ApiBehaviorOptions>(options => options.SuppressModelStateInvalidFilter = true); |             _ = webApplicationBuilder.Services.Configure<ApiBehaviorOptions>(options => options.SuppressModelStateInvalidFilter = true); | ||||||
|             _ = webApplicationBuilder.Services.AddControllers(); |             _ = webApplicationBuilder.Services.AddControllers(); | ||||||
|  |             _ = webApplicationBuilder.Services.AddControllersWithViews(); | ||||||
|             _ = webApplicationBuilder.Services.AddDistributedMemoryCache(); |             _ = webApplicationBuilder.Services.AddDistributedMemoryCache(); | ||||||
|             _ = webApplicationBuilder.Services.AddHttpClient(); |             _ = webApplicationBuilder.Services.AddHttpClient(); | ||||||
|  |             _ = webApplicationBuilder.Services.AddMemoryCache(); | ||||||
|             _ = webApplicationBuilder.Services.AddSingleton(_ => appSettings); |             _ = webApplicationBuilder.Services.AddSingleton(_ => appSettings); | ||||||
|  |             _ = webApplicationBuilder.Services.AddSingleton<ICompositeViewEngine, CompositeViewEngine>(); | ||||||
|  |             // _ = webApplicationBuilder.Services.AddTransient<IViewRenderingService, ViewRenderingService>(); | ||||||
|  |             // _ = webApplicationBuilder.Services.AddScoped<IViewRenderService, ViewRenderService>(); | ||||||
|  |             // _ = webApplicationBuilder.Services.AddSingleton<ITempDataProvider, ITempDataProvider>(); | ||||||
|  |             _ = webApplicationBuilder.Services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>(); | ||||||
|  |             _ = webApplicationBuilder.Services.AddScoped<IAuthenticationService, AuthenticationService>(); | ||||||
|  |             _ = webApplicationBuilder.Services.AddScoped<IDalService, DalService>(); | ||||||
|  |             _ = webApplicationBuilder.Services.AddScoped<IDbConnectionService, DbConnectionService>(); | ||||||
|  |             _ = webApplicationBuilder.Services.AddScoped<IUserService, UserService>(); | ||||||
|             _ = webApplicationBuilder.Services.AddSwaggerGen(); |             _ = webApplicationBuilder.Services.AddSwaggerGen(); | ||||||
|             _ = webApplicationBuilder.Services.AddSession(sessionOptions => { |             _ = webApplicationBuilder.Services.AddSession(sessionOptions => { | ||||||
|                 sessionOptions.IdleTimeout = TimeSpan.FromSeconds(2000); |                 sessionOptions.IdleTimeout = TimeSpan.FromSeconds(2000); | ||||||
| @ -37,6 +69,29 @@ public class Program { | |||||||
|                 sessionOptions.Cookie.IsEssential = true; |                 sessionOptions.Cookie.IsEssential = true; | ||||||
|             } |             } | ||||||
|             ); |             ); | ||||||
|  |  | ||||||
|  |             _ = webApplicationBuilder.Services.AddAuthentication(options => { | ||||||
|  |                 options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme; | ||||||
|  |                 options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme; | ||||||
|  |             }) | ||||||
|  |             .AddJwtBearer(options => { | ||||||
|  |                 options.RequireHttpsMetadata = false; | ||||||
|  |                 options.SaveToken = true; | ||||||
|  |                 options.TokenValidationParameters = new TokenValidationParameters { | ||||||
|  |                     ValidateIssuerSigningKey = true, | ||||||
|  |                     ValidIssuer = appSettings.JwtIssuer, | ||||||
|  |                     ValidateAudience = false, | ||||||
|  |                     IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(appSettings.JwtKey)), | ||||||
|  |                     ClockSkew = TimeSpan.Zero | ||||||
|  |                 }; | ||||||
|  |             }); | ||||||
|  |  | ||||||
|  |             _ = webApplicationBuilder.Services.AddAuthorization(options => { | ||||||
|  |                 options.DefaultPolicy = new AuthorizationPolicyBuilder() | ||||||
|  |                                             .AddAuthenticationSchemes(JwtBearerDefaults.AuthenticationScheme) | ||||||
|  |                                             .RequireAuthenticatedUser() | ||||||
|  |                                             .Build(); | ||||||
|  |             }); | ||||||
|             if (WindowsServiceHelpers.IsWindowsService()) { |             if (WindowsServiceHelpers.IsWindowsService()) { | ||||||
|                 _ = webApplicationBuilder.Services.AddSingleton<IHostLifetime, WindowsServiceLifetime>(); |                 _ = webApplicationBuilder.Services.AddSingleton<IHostLifetime, WindowsServiceLifetime>(); | ||||||
|                 _ = webApplicationBuilder.Logging.AddEventLog(settings => { |                 _ = webApplicationBuilder.Logging.AddEventLog(settings => { | ||||||
| @ -65,6 +120,8 @@ public class Program { | |||||||
|             } |             } | ||||||
|             _ = webApplication.UseSession(); |             _ = webApplication.UseSession(); | ||||||
|             _ = webApplication.MapControllers(); |             _ = webApplication.MapControllers(); | ||||||
|  |             _ = webApplication.UseAuthentication(); | ||||||
|  |             _ = webApplication.UseAuthorization(); | ||||||
|             logger.LogInformation("Starting Web Application"); |             logger.LogInformation("Starting Web Application"); | ||||||
|             webApplication.Run(); |             webApplication.Run(); | ||||||
|             return 0; |             return 0; | ||||||
|  | |||||||
							
								
								
									
										266
									
								
								Fab2ApprovalMKLink/Services/AuthenticationService.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										266
									
								
								Fab2ApprovalMKLink/Services/AuthenticationService.cs
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,266 @@ | |||||||
|  | using System; | ||||||
|  | using System.Collections.Generic; | ||||||
|  | using System.DirectoryServices.AccountManagement; | ||||||
|  | using System.IdentityModel.Tokens.Jwt; | ||||||
|  | using System.Security.Authentication; | ||||||
|  | using System.Security.Claims; | ||||||
|  | using System.Security.Cryptography; | ||||||
|  | using System.Security.Principal; | ||||||
|  | using System.Text; | ||||||
|  | using System.Threading.Tasks; | ||||||
|  |  | ||||||
|  | using Fab2ApprovalSystem.Models; | ||||||
|  |  | ||||||
|  | using Microsoft.Extensions.Caching.Memory; | ||||||
|  | using Microsoft.Extensions.Logging; | ||||||
|  | using Microsoft.IdentityModel.Tokens; | ||||||
|  |  | ||||||
|  | namespace Fab2ApprovalSystem.Services; | ||||||
|  |  | ||||||
|  | public interface IAuthenticationService { | ||||||
|  |     public Task<LoginResult> AuthenticateUser(AuthAttempt login); | ||||||
|  |     public Task<LoginResult> AttemptLocalUserAuth(WindowsIdentity identity); | ||||||
|  |     public AuthTokens GenerateAuthTokens(AuthAttempt authAttempt, IEnumerable<string> roles); | ||||||
|  |     public Task<LoginResult> RefreshAuthTokens(AuthAttempt authAttempt); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | public class AuthenticationService : IAuthenticationService { | ||||||
|  |     private readonly ILogger<AuthenticationService> _logger; | ||||||
|  |     private readonly IMemoryCache _cache; | ||||||
|  |     private readonly IUserService _userService; | ||||||
|  |  | ||||||
|  |     private readonly string? _jwtIssuer; | ||||||
|  |     private readonly string? _jwtAudience; | ||||||
|  |     private readonly string? _jwtKey; | ||||||
|  |  | ||||||
|  |     public AuthenticationService(ILogger<AuthenticationService> logger, IMemoryCache cache, IUserService userService, AppSettings appSettings) { | ||||||
|  |         _logger = logger ?? throw new ArgumentNullException("ILogger not injected"); | ||||||
|  |         _cache = cache ?? throw new ArgumentNullException("IMemoryCache not injected"); | ||||||
|  |         _userService = userService ?? throw new ArgumentNullException("IUserService not injected"); | ||||||
|  |         _jwtKey = appSettings.JwtKey; | ||||||
|  |         _jwtIssuer = appSettings.JwtIssuer; | ||||||
|  |         _jwtAudience = appSettings.JwtAudience; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     public async Task<LoginResult> AuthenticateUser(AuthAttempt login) { | ||||||
|  |         try { | ||||||
|  |             _logger.LogInformation("Attempting to authenticate user"); | ||||||
|  |  | ||||||
|  |             if (login is null) | ||||||
|  |                 throw new ArgumentNullException("Login cannot be null"); | ||||||
|  |  | ||||||
|  |             string domain = "infineon.com"; | ||||||
|  |  | ||||||
|  |             using (PrincipalContext pc = new(ContextType.Domain, domain)) { | ||||||
|  |                 bool isValid = pc.ValidateCredentials(login.LoginID, login.Password); | ||||||
|  |  | ||||||
|  |                 if (isValid) { | ||||||
|  |                     User? user = _cache.Get<User>($"user{login.LoginID}"); | ||||||
|  |  | ||||||
|  |                     if (user is null) { | ||||||
|  |                         user = await _userService.GetUserByLoginId(login.LoginID); | ||||||
|  |  | ||||||
|  |                         _cache.Set($"user{login.LoginID}", user, DateTimeOffset.Now.AddDays(1)); | ||||||
|  |                     } | ||||||
|  |  | ||||||
|  |                     List<string> roles = new(); | ||||||
|  |  | ||||||
|  |                     if (user.IsManager) | ||||||
|  |                         roles.Add("manager"); | ||||||
|  |                     if (user.IsAdmin) | ||||||
|  |                         roles.Add("admin"); | ||||||
|  |  | ||||||
|  |                     AuthTokens tokens = GenerateAuthTokens(login, roles); | ||||||
|  |  | ||||||
|  |                     return new LoginResult { | ||||||
|  |                         IsAuthenticated = true, | ||||||
|  |                         AuthTokens = tokens, | ||||||
|  |                         User = user | ||||||
|  |                     }; | ||||||
|  |                 } else { | ||||||
|  |                     return new LoginResult() { | ||||||
|  |                         IsAuthenticated = false, | ||||||
|  |                         AuthTokens = new() { | ||||||
|  |                             JwtToken = "", | ||||||
|  |                             RefreshToken = "" | ||||||
|  |                         }, | ||||||
|  |                         User = null | ||||||
|  |                     }; | ||||||
|  |                 } | ||||||
|  |             } | ||||||
|  |         } catch (Exception ex) { | ||||||
|  |             _logger.LogError($"An exception occurred when attempting to authenticate user. Exception: {ex.Message}"); | ||||||
|  |             throw; | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     public async Task<LoginResult> AttemptLocalUserAuth(WindowsIdentity identity) { | ||||||
|  |         try { | ||||||
|  |             _logger.LogInformation("Attempting to authenticate local Windows system user"); | ||||||
|  |  | ||||||
|  |             if (identity is null) | ||||||
|  |                 throw new ArgumentNullException("WindowsIdentity cannot be null"); | ||||||
|  |  | ||||||
|  |             User user = await _userService.GetUserByLoginId(identity.Name); | ||||||
|  |  | ||||||
|  |             List<string> roles = new(); | ||||||
|  |  | ||||||
|  |             if (user.IsManager) | ||||||
|  |                 roles.Add("manager"); | ||||||
|  |             if (user.IsAdmin) | ||||||
|  |                 roles.Add("admin"); | ||||||
|  |  | ||||||
|  |             AuthAttempt authAttempt = new() { | ||||||
|  |                 LoginID = user.LoginID, | ||||||
|  |             }; | ||||||
|  |  | ||||||
|  |             AuthTokens tokens = GenerateAuthTokens(authAttempt, roles); | ||||||
|  |  | ||||||
|  |             return new LoginResult { | ||||||
|  |                 IsAuthenticated = true, | ||||||
|  |                 AuthTokens = tokens, | ||||||
|  |                 User = user | ||||||
|  |             }; | ||||||
|  |         } catch (Exception ex) { | ||||||
|  |             _logger.LogError($"Unable to authenticate local Windows system user, because {ex.Message}"); | ||||||
|  |             throw; | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     public AuthTokens GenerateAuthTokens(AuthAttempt authAttempt, IEnumerable<string> roles) { | ||||||
|  |         try { | ||||||
|  |             _logger.LogInformation("Attempting to generate JWT"); | ||||||
|  |  | ||||||
|  |             if (authAttempt is null) | ||||||
|  |                 throw new ArgumentNullException("AuthAttempt cannot be null"); | ||||||
|  |             if (string.IsNullOrWhiteSpace(authAttempt.LoginID)) | ||||||
|  |                 throw new ArgumentException("UserName cannot be null or empty"); | ||||||
|  |             if (roles is null) | ||||||
|  |                 throw new ArgumentNullException("roles cannot be null"); | ||||||
|  |  | ||||||
|  |             byte[] key = Encoding.ASCII.GetBytes(_jwtKey); | ||||||
|  |  | ||||||
|  |             List<Claim> claims = new() { | ||||||
|  |                 new Claim(nameof(authAttempt.LoginID), authAttempt.LoginID) | ||||||
|  |             }; | ||||||
|  |  | ||||||
|  |             foreach (string role in roles) { | ||||||
|  |                 claims.Add(new Claim(ClaimTypes.Role, role)); | ||||||
|  |             } | ||||||
|  |  | ||||||
|  |             ClaimsIdentity identity = new(claims); | ||||||
|  |  | ||||||
|  |             SecurityTokenDescriptor tokenDescriptor = new() { | ||||||
|  |                 Issuer = _jwtIssuer, | ||||||
|  |                 Audience = _jwtAudience, | ||||||
|  |                 Subject = identity, | ||||||
|  |                 NotBefore = DateTime.Now, | ||||||
|  |                 Expires = DateTime.Now.AddHours(8), | ||||||
|  |                 SigningCredentials = new SigningCredentials(new SymmetricSecurityKey(key), SecurityAlgorithms.HmacSha256Signature) | ||||||
|  |             }; | ||||||
|  |  | ||||||
|  |             JwtSecurityTokenHandler tokenHandler = new(); | ||||||
|  |  | ||||||
|  |             JwtSecurityToken token = tokenHandler.CreateJwtSecurityToken(tokenDescriptor); | ||||||
|  |  | ||||||
|  |             string jwt = tokenHandler.WriteToken(token); | ||||||
|  |  | ||||||
|  |             string refreshToken = GenerateRefreshToken(); | ||||||
|  |  | ||||||
|  |             List<string>? refreshTokensForUser = _cache.Get<List<string>>(authAttempt.LoginID); | ||||||
|  |  | ||||||
|  |             refreshTokensForUser ??= new List<string>(); | ||||||
|  |  | ||||||
|  |             if (refreshTokensForUser.Count > 9) | ||||||
|  |                 refreshTokensForUser.RemoveRange(9, refreshTokensForUser.Count - 9); | ||||||
|  |  | ||||||
|  |             refreshTokensForUser.Insert(0, refreshToken); | ||||||
|  |  | ||||||
|  |             _cache.Set(authAttempt.LoginID, refreshTokensForUser, DateTimeOffset.Now.AddHours(4)); | ||||||
|  |  | ||||||
|  |             return new AuthTokens { | ||||||
|  |                 JwtToken = jwt, | ||||||
|  |                 RefreshToken = refreshToken | ||||||
|  |             }; | ||||||
|  |         } catch (Exception ex) { | ||||||
|  |             _logger.LogError($"An exception occurred when attempting to generate JWT. Exception: {ex.Message}"); | ||||||
|  |             throw; | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     public async Task<LoginResult> RefreshAuthTokens(AuthAttempt authAttempt) { | ||||||
|  |         try { | ||||||
|  |             _logger.LogInformation("Attempting to refresh auth tokens"); | ||||||
|  |  | ||||||
|  |             if (authAttempt is null) | ||||||
|  |                 throw new ArgumentNullException("AuthAttempt cannot be null"); | ||||||
|  |             if (authAttempt.AuthTokens is null) | ||||||
|  |                 throw new ArgumentNullException("AuthTokens cannot be null"); | ||||||
|  |  | ||||||
|  |             bool refreshTokenIsValid = IsRefreshTokenValid(authAttempt.LoginID, authAttempt.AuthTokens.RefreshToken); | ||||||
|  |  | ||||||
|  |             if (refreshTokenIsValid) { | ||||||
|  |                 User? user = _cache.Get<User>($"user{authAttempt.LoginID}"); | ||||||
|  |  | ||||||
|  |                 if (user is null) { | ||||||
|  |                     user = await _userService.GetUserByLoginId(authAttempt.LoginID); | ||||||
|  |  | ||||||
|  |                     _cache.Set($"user{authAttempt.LoginID}", user, DateTimeOffset.Now.AddDays(1)); | ||||||
|  |                 } | ||||||
|  |  | ||||||
|  |                 List<string> roles = new(); | ||||||
|  |  | ||||||
|  |                 if (user.IsManager) | ||||||
|  |                     roles.Add("manager"); | ||||||
|  |                 if (user.IsAdmin) | ||||||
|  |                     roles.Add("admin"); | ||||||
|  |  | ||||||
|  |                 AuthTokens refreshedTokens = GenerateAuthTokens(authAttempt, roles); | ||||||
|  |  | ||||||
|  |                 LoginResult loginResult = new() { | ||||||
|  |                     IsAuthenticated = true, | ||||||
|  |                     AuthTokens = refreshedTokens, | ||||||
|  |                     User = user | ||||||
|  |                 }; | ||||||
|  |  | ||||||
|  |                 return loginResult; | ||||||
|  |             } else { | ||||||
|  |                 throw new AuthenticationException("Invalid refresh token"); | ||||||
|  |             } | ||||||
|  |         } catch (Exception ex) { | ||||||
|  |             _logger.LogError($"An exception occurred when attempting to refresh auth tokens. Exception: {ex.Message}"); | ||||||
|  |             throw; | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     private string GenerateRefreshToken() { | ||||||
|  |         byte[] randomNumber = new byte[32]; | ||||||
|  |         using (RandomNumberGenerator rng = RandomNumberGenerator.Create()) { | ||||||
|  |             rng.GetBytes(randomNumber); | ||||||
|  |             return Convert.ToBase64String(randomNumber); | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     private bool IsRefreshTokenValid(string loginId, string refreshToken) { | ||||||
|  |         try { | ||||||
|  |             _logger.LogInformation("Attempting to determine if refresh token is valid"); | ||||||
|  |  | ||||||
|  |             if (string.IsNullOrWhiteSpace(loginId)) | ||||||
|  |                 throw new ArgumentNullException("LoginID cannot be null or empty"); | ||||||
|  |             if (string.IsNullOrWhiteSpace(refreshToken)) | ||||||
|  |                 throw new ArgumentNullException("Refresh token cannot be null or empty"); | ||||||
|  |  | ||||||
|  |             List<string>? cachedRefreshTokensForUser = _cache.Get<List<string>>(loginId); | ||||||
|  |  | ||||||
|  |             if (cachedRefreshTokensForUser is null || !cachedRefreshTokensForUser.Contains(refreshToken)) { | ||||||
|  |                 _logger.LogInformation($"Could not find cached refresh tokens for user {loginId}"); | ||||||
|  |                 return false; | ||||||
|  |             } | ||||||
|  |  | ||||||
|  |             return true; | ||||||
|  |         } catch (Exception ex) { | ||||||
|  |             _logger.LogError($"An exception occurred when attempting to validate refresh token. Exception: {ex.Message}"); | ||||||
|  |             throw; | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | } | ||||||
							
								
								
									
										168
									
								
								Fab2ApprovalMKLink/Services/DalService.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										168
									
								
								Fab2ApprovalMKLink/Services/DalService.cs
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,168 @@ | |||||||
|  | using System; | ||||||
|  | using System.Collections.Generic; | ||||||
|  | using System.Data; | ||||||
|  | using System.Text; | ||||||
|  | using System.Threading.Tasks; | ||||||
|  |  | ||||||
|  | using Dapper; | ||||||
|  |  | ||||||
|  | using Microsoft.Extensions.Logging; | ||||||
|  |  | ||||||
|  | namespace Fab2ApprovalSystem.Services; | ||||||
|  |  | ||||||
|  | public interface IDalService { | ||||||
|  |     Task<IEnumerable<T>> QueryAsync<T>(string sql); | ||||||
|  |     Task<IEnumerable<T>> QueryAsync<T>(string sql, object parameters); | ||||||
|  |     Task<int> ExecuteAsync(string sql); | ||||||
|  |     Task<int> ExecuteAsync<T>(string sql, T parameters); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | public class DalService : IDalService { | ||||||
|  |     private static readonly int RETRIES = 3; | ||||||
|  |     private static readonly int BACKOFF_SECONDS_INTERVAL = 30; | ||||||
|  |  | ||||||
|  |     private readonly ILogger<DalService> _logger; | ||||||
|  |     private readonly IDbConnectionService _dbConnectionService; | ||||||
|  |  | ||||||
|  |     public DalService(IDbConnectionService dbConnectionService, ILogger<DalService> logger) { | ||||||
|  |         _dbConnectionService = dbConnectionService ?? | ||||||
|  |             throw new ArgumentNullException("IDbConnectionService not injected"); | ||||||
|  |         _logger = logger ?? | ||||||
|  |             throw new ArgumentNullException("ILogger not injected"); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     public async Task<IEnumerable<T>> QueryAsync<T>(string sql) { | ||||||
|  |         if (sql is null) throw new ArgumentNullException("sql cannot be null"); | ||||||
|  |  | ||||||
|  |         int remainingRetries = RETRIES; | ||||||
|  |         bool queryWasSuccessful = false; | ||||||
|  |         Exception exception = null; | ||||||
|  |         IEnumerable<T> result = new List<T>(); | ||||||
|  |         while (!queryWasSuccessful && remainingRetries > 0) { | ||||||
|  |             int backoffSeconds = (RETRIES - remainingRetries--) * BACKOFF_SECONDS_INTERVAL; | ||||||
|  |             Task.Delay(backoffSeconds * 1000).Wait(); | ||||||
|  |  | ||||||
|  |             try { | ||||||
|  |                 _logger.LogInformation($"Attempting to perform query with {sql}. Remaining retries: {remainingRetries}"); | ||||||
|  |  | ||||||
|  |                 using (IDbConnection conn = _dbConnectionService.GetConnection()) { | ||||||
|  |                     result = await conn.QueryAsync<T>(sql); | ||||||
|  |                 } | ||||||
|  |  | ||||||
|  |                 queryWasSuccessful = true; | ||||||
|  |             } catch (Exception ex) { | ||||||
|  |                 _logger.LogError($"An exception occurred while attempting to perform a query. Exception: {ex.Message}"); | ||||||
|  |                 exception = ex; | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         if (!queryWasSuccessful && exception is not null) { | ||||||
|  |             throw exception; | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         return result; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     public async Task<IEnumerable<T>> QueryAsync<T>(string sql, object parameters) { | ||||||
|  |         if (sql is null) throw new ArgumentNullException("sql cannot be null"); | ||||||
|  |         if (parameters is null) throw new ArgumentNullException("parameters cannot be null"); | ||||||
|  |  | ||||||
|  |         StringBuilder logBuilder = new(); | ||||||
|  |  | ||||||
|  |         int remainingRetries = RETRIES; | ||||||
|  |         bool queryWasSuccessful = false; | ||||||
|  |         Exception exception = null; | ||||||
|  |         IEnumerable<T> result = new List<T>(); | ||||||
|  |         while (!queryWasSuccessful && remainingRetries > 0) { | ||||||
|  |             int backoffSeconds = (RETRIES - remainingRetries--) * BACKOFF_SECONDS_INTERVAL; | ||||||
|  |             Task.Delay(backoffSeconds * 1000).Wait(); | ||||||
|  |  | ||||||
|  |             try { | ||||||
|  |                 logBuilder.Clear(); | ||||||
|  |                 logBuilder.Append($"Attempting to perform query with {sql} "); | ||||||
|  |                 logBuilder.Append($"and parameters {parameters.ToString()}. "); | ||||||
|  |                 logBuilder.Append($"Remaining retries: {remainingRetries}"); | ||||||
|  |                 _logger.LogInformation(logBuilder.ToString()); | ||||||
|  |  | ||||||
|  |                 using (IDbConnection conn = _dbConnectionService.GetConnection()) { | ||||||
|  |                     result = await conn.QueryAsync<T>(sql, parameters); | ||||||
|  |                 } | ||||||
|  |  | ||||||
|  |                 queryWasSuccessful = true; | ||||||
|  |             } catch (Exception ex) { | ||||||
|  |                 _logger.LogError($"An exception occurred while attempting to perform a query. Exception: {ex.Message}"); | ||||||
|  |                 exception = ex; | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         if (!queryWasSuccessful && exception is not null) { | ||||||
|  |             throw exception; | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         return result; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     public async Task<int> ExecuteAsync(string sql) { | ||||||
|  |         if (sql is null) throw new ArgumentNullException("sql cannot be null"); | ||||||
|  |  | ||||||
|  |         int remainingRetries = RETRIES; | ||||||
|  |         bool queryWasSuccessful = false; | ||||||
|  |         Exception exception = null; | ||||||
|  |         int rowsAffected = 0; | ||||||
|  |         while (!queryWasSuccessful && remainingRetries > 0) { | ||||||
|  |             int backoffSeconds = (RETRIES - remainingRetries--) * BACKOFF_SECONDS_INTERVAL; | ||||||
|  |             Task.Delay(backoffSeconds * 1000).Wait(); | ||||||
|  |  | ||||||
|  |             try { | ||||||
|  |                 _logger.LogInformation($"Attempting to execute {sql}. Remaining retries: {remainingRetries}"); | ||||||
|  |  | ||||||
|  |                 using (IDbConnection conn = _dbConnectionService.GetConnection()) { | ||||||
|  |                     rowsAffected = await conn.ExecuteAsync(sql); | ||||||
|  |                 } | ||||||
|  |  | ||||||
|  |                 queryWasSuccessful = true; | ||||||
|  |             } catch (Exception ex) { | ||||||
|  |                 _logger.LogError($"An exception occurred while attempting to execute a query. Exception: {ex.Message}"); | ||||||
|  |                 exception = ex; | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         if (!queryWasSuccessful && exception is not null) { | ||||||
|  |             throw exception; | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         return rowsAffected; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     public async Task<int> ExecuteAsync<T>(string sql, T parameters) { | ||||||
|  |         if (sql is null) throw new ArgumentNullException("sql cannot be null"); | ||||||
|  |  | ||||||
|  |         int remainingRetries = RETRIES; | ||||||
|  |         bool queryWasSuccessful = false; | ||||||
|  |         Exception exception = null; | ||||||
|  |         int rowsAffected = 0; | ||||||
|  |         while (!queryWasSuccessful && remainingRetries > 0) { | ||||||
|  |             int backoffSeconds = (RETRIES - remainingRetries--) * BACKOFF_SECONDS_INTERVAL; | ||||||
|  |             Task.Delay(backoffSeconds * 1000).Wait(); | ||||||
|  |  | ||||||
|  |             try { | ||||||
|  |                 _logger.LogInformation($"Attempting to execute {sql} with parameters. Remaining retries: {remainingRetries}"); | ||||||
|  |  | ||||||
|  |                 using (IDbConnection conn = _dbConnectionService.GetConnection()) { | ||||||
|  |                     rowsAffected = await conn.ExecuteAsync(sql, parameters); | ||||||
|  |                 } | ||||||
|  |  | ||||||
|  |                 queryWasSuccessful = true; | ||||||
|  |             } catch (Exception ex) { | ||||||
|  |                 _logger.LogError($"An exception occurred while attempting to execute a query. Exception: {ex.Message}"); | ||||||
|  |                 exception = ex; | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         if (!queryWasSuccessful && exception is not null) { | ||||||
|  |             throw exception; | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         return rowsAffected; | ||||||
|  |     } | ||||||
|  | } | ||||||
							
								
								
									
										22
									
								
								Fab2ApprovalMKLink/Services/DbConnectionService.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										22
									
								
								Fab2ApprovalMKLink/Services/DbConnectionService.cs
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,22 @@ | |||||||
|  | using System.Data; | ||||||
|  |  | ||||||
|  | using Fab2ApprovalSystem.Models; | ||||||
|  |  | ||||||
|  | using Microsoft.Data.SqlClient; | ||||||
|  |  | ||||||
|  | namespace Fab2ApprovalSystem.Services; | ||||||
|  |  | ||||||
|  | public interface IDbConnectionService { | ||||||
|  |     IDbConnection GetConnection(); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | public class DbConnectionService : IDbConnectionService { | ||||||
|  |     private readonly string _dbConnectionString; | ||||||
|  |  | ||||||
|  |     public DbConnectionService(AppSettings appSettings) { | ||||||
|  |         _dbConnectionString = appSettings.DBConnectionString; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     public IDbConnection GetConnection() => | ||||||
|  |         new SqlConnection(_dbConnectionString); | ||||||
|  | } | ||||||
							
								
								
									
										150
									
								
								Fab2ApprovalMKLink/Services/UserService.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										150
									
								
								Fab2ApprovalMKLink/Services/UserService.cs
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,150 @@ | |||||||
|  | using System; | ||||||
|  | using System.Collections.Generic; | ||||||
|  | using System.Linq; | ||||||
|  | using System.Text; | ||||||
|  | using System.Threading.Tasks; | ||||||
|  |  | ||||||
|  | using Fab2ApprovalSystem.Models; | ||||||
|  |  | ||||||
|  | using Microsoft.Extensions.Caching.Memory; | ||||||
|  | using Microsoft.Extensions.Logging; | ||||||
|  |  | ||||||
|  | namespace Fab2ApprovalSystem.Services; | ||||||
|  |  | ||||||
|  | public interface IUserService { | ||||||
|  |     Task<IEnumerable<User>> GetAllActiveUsers(); | ||||||
|  |     Task<User> GetUserByLoginId(string loginId); | ||||||
|  |     Task<User> GetUserByUserId(int userId); | ||||||
|  |     Task<IEnumerable<int>> GetApproverUserIdsBySubRoleCategoryItem(string item); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | public class UserService : IUserService { | ||||||
|  |     private readonly ILogger<UserService> _logger; | ||||||
|  |     private readonly IDalService _dalService; | ||||||
|  |     private readonly IMemoryCache _cache; | ||||||
|  |  | ||||||
|  |     public UserService(ILogger<UserService> logger, IDalService dalService, IMemoryCache cache) { | ||||||
|  |         _logger = logger ?? | ||||||
|  |             throw new ArgumentNullException("ILogger not injected"); | ||||||
|  |         _dalService = dalService ?? | ||||||
|  |             throw new ArgumentNullException("IDalService not injected"); | ||||||
|  |         _cache = cache ?? | ||||||
|  |             throw new ArgumentNullException("IMemoryCache not injected"); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     public async Task<IEnumerable<User>> GetAllActiveUsers() { | ||||||
|  |         try { | ||||||
|  |             _logger.LogInformation("Attempting to get all active users"); | ||||||
|  |  | ||||||
|  |             IEnumerable<User>? allActiveUsers = _cache.Get<IEnumerable<User>>("allActiveUsers"); | ||||||
|  |  | ||||||
|  |             if (allActiveUsers is null) { | ||||||
|  |                 string sql = "select * from Users where IsActive = 1"; | ||||||
|  |  | ||||||
|  |                 allActiveUsers = (await _dalService.QueryAsync<User>(sql)).ToList(); | ||||||
|  |  | ||||||
|  |                 _cache.Set("allActiveUsers", allActiveUsers, DateTimeOffset.Now.AddHours(1)); | ||||||
|  |             } | ||||||
|  |  | ||||||
|  |             if (allActiveUsers is null || allActiveUsers.Count() == 0) { | ||||||
|  |                 throw new Exception("No users found"); | ||||||
|  |             } | ||||||
|  |  | ||||||
|  |             return allActiveUsers; | ||||||
|  |         } catch (Exception ex) { | ||||||
|  |             string errMsg = $"An exception occurred when attempting to get all users. Exception: {ex.Message}"; | ||||||
|  |             _logger.LogError(errMsg); | ||||||
|  |             throw; | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     public async Task<User> GetUserByLoginId(string loginId) { | ||||||
|  |         try { | ||||||
|  |             _logger.LogInformation("Attempting to get user by LoginId"); | ||||||
|  |  | ||||||
|  |             if (string.IsNullOrWhiteSpace(loginId)) | ||||||
|  |                 throw new ArgumentException("LoginId cannot be null or empty"); | ||||||
|  |  | ||||||
|  |             User? user = _cache.Get<User>($"userByLoginId{loginId}"); | ||||||
|  |  | ||||||
|  |             user ??= _cache.Get<IEnumerable<User>>("allActiveUsers")?.FirstOrDefault(u => u.LoginID == loginId); | ||||||
|  |  | ||||||
|  |             if (user is null) { | ||||||
|  |                 string sql = $"select * from Users where LoginID = '{loginId}';"; | ||||||
|  |  | ||||||
|  |                 user = (await _dalService.QueryAsync<User>(sql)).FirstOrDefault(); | ||||||
|  |  | ||||||
|  |                 _cache.Set($"userByLoginId{loginId}", user, DateTimeOffset.Now.AddHours(1)); | ||||||
|  |             } | ||||||
|  |  | ||||||
|  |             if (user is null) throw new Exception($"No user found with LoginID {loginId}"); | ||||||
|  |  | ||||||
|  |             return user; | ||||||
|  |         } catch (Exception ex) { | ||||||
|  |             string errMsg = $"An exception occurred when attempting to get user for LoginID {loginId}. Exception: {ex.Message}"; | ||||||
|  |             _logger.LogError(errMsg); | ||||||
|  |             throw; | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     public async Task<User> GetUserByUserId(int userId) { | ||||||
|  |         try { | ||||||
|  |             _logger.LogInformation("Attempting to get user by user ID"); | ||||||
|  |  | ||||||
|  |             if (userId <= 0) throw new ArgumentException($"{userId} is not a valid user ID"); | ||||||
|  |  | ||||||
|  |             User? user = _cache.Get<User>($"userByUserId{userId}"); | ||||||
|  |  | ||||||
|  |             user ??= _cache.Get<IEnumerable<User>>("allActiveUsers")?.FirstOrDefault(u => u.UserID == userId); | ||||||
|  |  | ||||||
|  |             if (user is null) { | ||||||
|  |                 string sql = $"select * from Users where UserID = '{userId}';"; | ||||||
|  |  | ||||||
|  |                 user = (await _dalService.QueryAsync<User>(sql)).FirstOrDefault(); | ||||||
|  |  | ||||||
|  |                 _cache.Set($"userByUserId{userId}", user, DateTimeOffset.Now.AddHours(1)); | ||||||
|  |             } | ||||||
|  |  | ||||||
|  |             if (user is null) throw new Exception($"No user found with UserID {userId}"); | ||||||
|  |  | ||||||
|  |             return user; | ||||||
|  |         } catch (Exception ex) { | ||||||
|  |             string errMsg = $"An exception occurred when attempting to get user for UserID {userId}. Exception: {ex.Message}"; | ||||||
|  |             _logger.LogError(errMsg); | ||||||
|  |             throw; | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     public async Task<IEnumerable<int>> GetApproverUserIdsBySubRoleCategoryItem(string item) { | ||||||
|  |         try { | ||||||
|  |             _logger.LogInformation("Attempting to get approver user IDs"); | ||||||
|  |  | ||||||
|  |             if (string.IsNullOrWhiteSpace(item)) throw new ArgumentException("SubRoleCategoryItem cannot be null or empty"); | ||||||
|  |  | ||||||
|  |             IEnumerable<int>? userIds = _cache.Get<IEnumerable<int>>($"approverUserIdsBySubRollCategory{item}"); | ||||||
|  |  | ||||||
|  |             if (userIds is null) { | ||||||
|  |                 StringBuilder queryBuilder = new(); | ||||||
|  |                 queryBuilder.Append("select us.UserID "); | ||||||
|  |                 queryBuilder.Append("from SubRole as sr "); | ||||||
|  |                 queryBuilder.Append("join UserSubRole as us on sr.SubRoleID=us.SubRoleID "); | ||||||
|  |                 queryBuilder.Append("join SubRoleCategory as sc on sr.SubRoleCategoryID=sc.SubRoleCategoryID "); | ||||||
|  |                 queryBuilder.Append($"where sc.SubRoleCategoryItem='{item}'"); | ||||||
|  |  | ||||||
|  |                 userIds = (await _dalService.QueryAsync<int>(queryBuilder.ToString())).ToList(); | ||||||
|  |  | ||||||
|  |                 _cache.Set($"approverUserIdsBySubRollCategory{item}", userIds, DateTimeOffset.Now.AddHours(1)); | ||||||
|  |             } | ||||||
|  |  | ||||||
|  |             if (userIds is null || userIds.Count() == 0) { | ||||||
|  |                 throw new Exception($"No users found for SubRoleCategoryItem {item}"); | ||||||
|  |             } | ||||||
|  |  | ||||||
|  |             return userIds; | ||||||
|  |         } catch (Exception ex) { | ||||||
|  |             string errMsg = $"An exception occurred when attempting to get approver user IDs. Exception: {ex.Message}"; | ||||||
|  |             _logger.LogError(errMsg); | ||||||
|  |             throw; | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | } | ||||||
							
								
								
									
										8
									
								
								Fab2ApprovalMKLink/Views/_ViewImports.cshtml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										8
									
								
								Fab2ApprovalMKLink/Views/_ViewImports.cshtml
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,8 @@ | |||||||
|  | @using Fab2ApprovalSystem.DMO | ||||||
|  | @using Fab2ApprovalSystem.JobSchedules | ||||||
|  | @using Fab2ApprovalSystem.Misc | ||||||
|  | @using Fab2ApprovalSystem.Models | ||||||
|  | @using Fab2ApprovalSystem.PdfGenerator | ||||||
|  | @using Fab2ApprovalSystem.Utilities | ||||||
|  | @using Fab2ApprovalSystem.ViewModels | ||||||
|  | @addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers | ||||||
							
								
								
									
										3
									
								
								Fab2ApprovalMKLink/Views/_ViewStart.cshtml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								Fab2ApprovalMKLink/Views/_ViewStart.cshtml
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,3 @@ | |||||||
|  | @{ | ||||||
|  |     Layout = null; | ||||||
|  | } | ||||||
| @ -1,5 +1,7 @@ | |||||||
| using System.Web; | using System.Web; | ||||||
|  | #if !NET8 | ||||||
| using System.Web.Mvc; | using System.Web.Mvc; | ||||||
|  | #endif | ||||||
|  |  | ||||||
| namespace Fab2ApprovalSystem; | namespace Fab2ApprovalSystem; | ||||||
|  |  | ||||||
|  | |||||||
| @ -3,13 +3,16 @@ using System.Collections.Generic; | |||||||
| using System.Linq; | using System.Linq; | ||||||
| using System.Web; | using System.Web; | ||||||
| using System.Web.Http; | using System.Web.Http; | ||||||
|  | #if !NET8 | ||||||
| using System.Web.Mvc; | using System.Web.Mvc; | ||||||
|  | #endif | ||||||
| using System.Web.Routing; | using System.Web.Routing; | ||||||
|  |  | ||||||
| namespace Fab2ApprovalSystem; | namespace Fab2ApprovalSystem; | ||||||
|  |  | ||||||
| public class RouteConfig { | public class RouteConfig { | ||||||
|     public static void RegisterRoutes(RouteCollection routes) { |     public static void RegisterRoutes(RouteCollection routes) { | ||||||
|  | #if !NET8 | ||||||
|         routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); |         routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); | ||||||
|  |  | ||||||
|         routes.MapRoute( |         routes.MapRoute( | ||||||
| @ -20,5 +23,6 @@ public class RouteConfig { | |||||||
|             // otherwise MVC generates the wrong form action url |             // otherwise MVC generates the wrong form action url | ||||||
|             defaults: new { controller = "Home", action = "MyTasks", id = UrlParameter.Optional } |             defaults: new { controller = "Home", action = "MyTasks", id = UrlParameter.Optional } | ||||||
|         ); |         ); | ||||||
|  | #endif | ||||||
|     } |     } | ||||||
| } | } | ||||||
| @ -6,10 +6,12 @@ public static class WebApiConfig { | |||||||
|     public static void Register(HttpConfiguration config) { |     public static void Register(HttpConfiguration config) { | ||||||
|         config.MapHttpAttributeRoutes(); |         config.MapHttpAttributeRoutes(); | ||||||
|  |  | ||||||
|  | #if !NET8 | ||||||
|         config.Routes.MapHttpRoute( |         config.Routes.MapHttpRoute( | ||||||
|             name: "DefaultApi", |             name: "DefaultApi", | ||||||
|             routeTemplate: "api/{controller}/{id}", |             routeTemplate: "api/{controller}/{id}", | ||||||
|             defaults: new { id = RouteParameter.Optional } |             defaults: new { id = RouteParameter.Optional } | ||||||
|         ); |         ); | ||||||
|  | #endif | ||||||
|     } |     } | ||||||
| } | } | ||||||
| @ -116,3 +116,7 @@ input[type="checkbox"].input-validation-error { | |||||||
|   top: 55px; |   top: 55px; | ||||||
|   left: 25px; |   left: 25px; | ||||||
| } | } | ||||||
|  |  | ||||||
|  | .navbar-header-hidden { | ||||||
|  |     display: none; | ||||||
|  | } | ||||||
| @ -1,30 +1,47 @@ | |||||||
|  | #if !NET8 | ||||||
|  | using System.Web; | ||||||
|  | using System.Web.Mvc; | ||||||
|  | using System.Web.Security; | ||||||
|  | #endif | ||||||
|  |  | ||||||
|  | #if NET8 | ||||||
|  | using Microsoft.AspNetCore.Authorization; | ||||||
|  | using Microsoft.AspNetCore.Mvc; | ||||||
|  | #endif | ||||||
|  |  | ||||||
|  | #if !NET8 | ||||||
|  | using Fab2ApprovalSystem.DMO; | ||||||
|  | using Fab2ApprovalSystem.Misc; | ||||||
|  | using Fab2ApprovalSystem.Models; | ||||||
|  | #endif | ||||||
|  |  | ||||||
|  | #if !NET8 | ||||||
|  | using Microsoft.AspNet.Identity; | ||||||
|  | using Microsoft.AspNet.Identity.EntityFramework; | ||||||
|  | using Microsoft.AspNet.Identity.Owin; | ||||||
|  | using Microsoft.Owin.Security; | ||||||
|  | #endif | ||||||
|  |  | ||||||
|  | #if !NET8 | ||||||
| using System; | using System; | ||||||
| using System.Collections.Generic; | using System.Collections.Generic; | ||||||
| using System.Net; | using System.Net; | ||||||
| using System.Net.Http; | using System.Net.Http; | ||||||
| using System.Security.Claims; | using System.Security.Claims; | ||||||
| using System.Text; |  | ||||||
| using System.Threading.Tasks; | using System.Threading.Tasks; | ||||||
| using System.Web; |  | ||||||
| using System.Web.Mvc; |  | ||||||
| using System.Web.Security; |  | ||||||
|  |  | ||||||
| using Fab2ApprovalSystem.DMO; |  | ||||||
| using Fab2ApprovalSystem.Misc; |  | ||||||
| using Fab2ApprovalSystem.Models; |  | ||||||
|  |  | ||||||
| using Microsoft.AspNet.Identity; |  | ||||||
| using Microsoft.AspNet.Identity.EntityFramework; |  | ||||||
| using Microsoft.AspNet.Identity.Owin; |  | ||||||
| using Microsoft.Owin.Security; |  | ||||||
|  |  | ||||||
| using Newtonsoft.Json; | using Newtonsoft.Json; | ||||||
|  | #endif | ||||||
|  |  | ||||||
| namespace Fab2ApprovalSystem.Controllers; | namespace Fab2ApprovalSystem.Controllers; | ||||||
|  |  | ||||||
| [Authorize] | [Authorize] | ||||||
|  | #if NET8 | ||||||
|  | [Route("[controller]")] | ||||||
|  | #endif | ||||||
| public class AccountController : Controller { | public class AccountController : Controller { | ||||||
|  |  | ||||||
|  | #if !NET8 | ||||||
|  |  | ||||||
|     public AccountController() |     public AccountController() | ||||||
|         : this(new UserManager<ApplicationUser>(new UserStore<ApplicationUser>(new ApplicationDbContext()))) { |         : this(new UserManager<ApplicationUser>(new UserStore<ApplicationUser>(new ApplicationDbContext()))) { | ||||||
|     } |     } | ||||||
| @ -35,25 +52,23 @@ public class AccountController : Controller { | |||||||
|  |  | ||||||
|     public UserManager<ApplicationUser> UserManager { get; private set; } |     public UserManager<ApplicationUser> UserManager { get; private set; } | ||||||
|  |  | ||||||
|  | #endif | ||||||
|  |  | ||||||
|  | #if !NET8 | ||||||
|     // GET: /Account/Login |     // GET: /Account/Login | ||||||
|     [AllowAnonymous] |     [AllowAnonymous] | ||||||
|     // try to make the browser refresh the login page every time, to prevent issues with changing usernames and the anti-forgery token validation |     // try to make the browser refresh the login page every time, to prevent issues with changing usernames and the anti-forgery token validation | ||||||
|     [OutputCache(NoStore = true, Duration = 0, VaryByParam = "*")] |     [OutputCache(NoStore = true, Duration = 0, VaryByParam = "*")] | ||||||
|  | #endif | ||||||
|     public ActionResult Login(string returnUrl) { |     public ActionResult Login(string returnUrl) { | ||||||
|         ViewBag.ReturnUrl = returnUrl; |         ViewBag.ReturnUrl = returnUrl; | ||||||
|         return View(); |         return View(); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     private void SetSessionParameters(LoginResult loginResult, LoginModel user) { | #if !NET8 | ||||||
|         Session["JWT"] = loginResult.AuthTokens.JwtToken; |  | ||||||
|         Session["RefreshToken"] = loginResult.AuthTokens.RefreshToken; |  | ||||||
|  |  | ||||||
|         Session[GlobalVars.SESSION_USERID] = user.UserID; |     private void SetSessionParameters(LoginResult loginResult, LoginModel user) { | ||||||
|         Session[GlobalVars.SESSION_USERNAME] = user.FullName; |         GlobalVars.SetSessionParameters(GetSession(), loginResult, user); | ||||||
|         Session[GlobalVars.IS_ADMIN] = user.IsAdmin; |  | ||||||
|         Session[GlobalVars.IS_MANAGER] = user.IsManager; |  | ||||||
|         Session[GlobalVars.OOO] = user.OOO; |  | ||||||
|         Session[GlobalVars.CAN_CREATE_PARTS_REQUEST] = user.IsAdmin || PartsRequestController.CanCreatePartsRequest(user.UserID); |  | ||||||
|  |  | ||||||
|         FormsAuthentication.SetAuthCookie(user.LoginID, true); |         FormsAuthentication.SetAuthCookie(user.LoginID, true); | ||||||
|     } |     } | ||||||
| @ -102,8 +117,8 @@ public class AccountController : Controller { | |||||||
|                 ModelState.AddModelError("", "The user name or password provided is incorrect."); |                 ModelState.AddModelError("", "The user name or password provided is incorrect."); | ||||||
|             } |             } | ||||||
|         } catch (Exception ex) { |         } catch (Exception ex) { | ||||||
|             Functions.WriteEvent(GlobalVars.AppSettings, @User.Identity.Name + " " + ex.InnerException, System.Diagnostics.EventLogEntryType.Error); |             Functions.WriteEvent(GlobalVars.AppSettings, GetUserIdentityName() + " " + ex.InnerException, System.Diagnostics.EventLogEntryType.Error); | ||||||
|             EventLogDMO.Add(new WinEventLog() { IssueID = 99999, UserID = @User.Identity.Name, DocumentType = "Login", OperationType = "Error", Comments = "Reject - " + ex.Message }); |             EventLogDMO.Add(new WinEventLog() { IssueID = 99999, UserID = GetUserIdentityName(), DocumentType = "Login", OperationType = "Error", Comments = "Reject - " + ex.Message }); | ||||||
|             ModelState.AddModelError("", ex.Message); |             ModelState.AddModelError("", ex.Message); | ||||||
|         } |         } | ||||||
|  |  | ||||||
| @ -158,20 +173,24 @@ public class AccountController : Controller { | |||||||
|                 return new HttpResponseMessage(HttpStatusCode.Unauthorized); |                 return new HttpResponseMessage(HttpStatusCode.Unauthorized); | ||||||
|             } |             } | ||||||
|         } catch (Exception ex) { |         } catch (Exception ex) { | ||||||
|             Functions.WriteEvent(GlobalVars.AppSettings, @User.Identity.Name + " " + ex.InnerException, System.Diagnostics.EventLogEntryType.Error); |             Functions.WriteEvent(GlobalVars.AppSettings, GetUserIdentityName() + " " + ex.InnerException, System.Diagnostics.EventLogEntryType.Error); | ||||||
|             EventLogDMO.Add(new WinEventLog() { IssueID = 99999, UserID = @User.Identity.Name, DocumentType = "Login", OperationType = "Error", Comments = "Reject - " + ex.Message }); |             EventLogDMO.Add(new WinEventLog() { IssueID = 99999, UserID = GetUserIdentityName(), DocumentType = "Login", OperationType = "Error", Comments = "Reject - " + ex.Message }); | ||||||
|             ModelState.AddModelError("", ex.Message); |             ModelState.AddModelError("", ex.Message); | ||||||
|  |  | ||||||
|             return new HttpResponseMessage(HttpStatusCode.InternalServerError); |             return new HttpResponseMessage(HttpStatusCode.InternalServerError); | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  | #endif | ||||||
|  |  | ||||||
|     // GET: /Account/Register |     // GET: /Account/Register | ||||||
|     [AllowAnonymous] |     [AllowAnonymous] | ||||||
|     public ActionResult Register() { |     public ActionResult Register() { | ||||||
|         return View(); |         return View(); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  | #if !NET8 | ||||||
|  |  | ||||||
|     // POST: /Account/Disassociate |     // POST: /Account/Disassociate | ||||||
|     [HttpPost] |     [HttpPost] | ||||||
|     [ValidateAntiForgeryToken] |     [ValidateAntiForgeryToken] | ||||||
| @ -186,6 +205,8 @@ public class AccountController : Controller { | |||||||
|         return RedirectToAction("Manage", new { Message = message }); |         return RedirectToAction("Manage", new { Message = message }); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  | #endif | ||||||
|  |  | ||||||
|     // GET: /Account/Manage |     // GET: /Account/Manage | ||||||
| #pragma warning disable IDE0060 // Remove unused parameter | #pragma warning disable IDE0060 // Remove unused parameter | ||||||
|     public ActionResult Manage(ManageMessageId? message) { |     public ActionResult Manage(ManageMessageId? message) { | ||||||
| @ -193,6 +214,8 @@ public class AccountController : Controller { | |||||||
|     } |     } | ||||||
| #pragma warning restore IDE0060 // Remove unused parameter | #pragma warning restore IDE0060 // Remove unused parameter | ||||||
|  |  | ||||||
|  | #if !NET8 | ||||||
|  |  | ||||||
|     // POST: /Account/ExternalLogin |     // POST: /Account/ExternalLogin | ||||||
|     [HttpPost] |     [HttpPost] | ||||||
|     [AllowAnonymous] |     [AllowAnonymous] | ||||||
| @ -223,7 +246,6 @@ public class AccountController : Controller { | |||||||
|         return RedirectToAction("Manage", new { Message = ManageMessageId.Error }); |         return RedirectToAction("Manage", new { Message = ManageMessageId.Error }); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     // POST: /Account/LogOff |  | ||||||
|     [HttpPost] |     [HttpPost] | ||||||
|     [ValidateAntiForgeryToken] |     [ValidateAntiForgeryToken] | ||||||
|     public ActionResult LogOff() { |     public ActionResult LogOff() { | ||||||
| @ -231,12 +253,15 @@ public class AccountController : Controller { | |||||||
|         return RedirectToAction("Login", "Account"); |         return RedirectToAction("Login", "Account"); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     // GET: /Account/ExternalLoginFailure | #endif | ||||||
|  |  | ||||||
|     [AllowAnonymous] |     [AllowAnonymous] | ||||||
|     public ActionResult ExternalLoginFailure() { |     public ActionResult ExternalLoginFailure() { | ||||||
|         return View(); |         return View(); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  | #if !NET8 | ||||||
|  |  | ||||||
|     [ChildActionOnly] |     [ChildActionOnly] | ||||||
|     public ActionResult RemoveAccountList() { |     public ActionResult RemoveAccountList() { | ||||||
|         IList<UserLoginInfo> linkedAccounts = UserManager.GetLogins(User.Identity.GetUserId()); |         IList<UserLoginInfo> linkedAccounts = UserManager.GetLogins(User.Identity.GetUserId()); | ||||||
| @ -252,10 +277,14 @@ public class AccountController : Controller { | |||||||
|         base.Dispose(disposing); |         base.Dispose(disposing); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  | #endif | ||||||
|  |  | ||||||
|     #region Helpers |     #region Helpers | ||||||
|     // Used for XSRF protection when adding external logins |     // Used for XSRF protection when adding external logins | ||||||
|     private const string XsrfKey = "XsrfId"; |     private const string XsrfKey = "XsrfId"; | ||||||
|  |  | ||||||
|  | #if !NET8 | ||||||
|  |  | ||||||
|     private IAuthenticationManager AuthenticationManager { |     private IAuthenticationManager AuthenticationManager { | ||||||
|         get { |         get { | ||||||
|             return HttpContext.GetOwinContext().Authentication; |             return HttpContext.GetOwinContext().Authentication; | ||||||
| @ -282,6 +311,8 @@ public class AccountController : Controller { | |||||||
|         return false; |         return false; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  | #endif | ||||||
|  |  | ||||||
|     public enum ManageMessageId { |     public enum ManageMessageId { | ||||||
|         ChangePasswordSuccess, |         ChangePasswordSuccess, | ||||||
|         SetPasswordSuccess, |         SetPasswordSuccess, | ||||||
| @ -297,7 +328,18 @@ public class AccountController : Controller { | |||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  | #if !NET8 | ||||||
|  |  | ||||||
|     private class ChallengeResult : HttpUnauthorizedResult { |     private class ChallengeResult : HttpUnauthorizedResult { | ||||||
|  |  | ||||||
|  | #endif | ||||||
|  |  | ||||||
|  | #if NET8 | ||||||
|  |  | ||||||
|  |     private class ChallengeResult { | ||||||
|  |  | ||||||
|  | #endif | ||||||
|  |  | ||||||
|         public ChallengeResult(string provider, string redirectUri) : this(provider, redirectUri, null) { |         public ChallengeResult(string provider, string redirectUri) : this(provider, redirectUri, null) { | ||||||
|         } |         } | ||||||
|  |  | ||||||
| @ -311,6 +353,8 @@ public class AccountController : Controller { | |||||||
|         public string RedirectUri { get; set; } |         public string RedirectUri { get; set; } | ||||||
|         public string UserId { get; set; } |         public string UserId { get; set; } | ||||||
|  |  | ||||||
|  | #if !NET8 | ||||||
|  |  | ||||||
|         public override void ExecuteResult(ControllerContext context) { |         public override void ExecuteResult(ControllerContext context) { | ||||||
|             AuthenticationProperties properties = new AuthenticationProperties() { RedirectUri = RedirectUri }; |             AuthenticationProperties properties = new AuthenticationProperties() { RedirectUri = RedirectUri }; | ||||||
|             if (UserId != null) { |             if (UserId != null) { | ||||||
| @ -318,6 +362,40 @@ public class AccountController : Controller { | |||||||
|             } |             } | ||||||
|             context.HttpContext.GetOwinContext().Authentication.Challenge(properties, LoginProvider); |             context.HttpContext.GetOwinContext().Authentication.Challenge(properties, LoginProvider); | ||||||
|         } |         } | ||||||
|  |  | ||||||
|  | #endif | ||||||
|  |  | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     #endregion |     #endregion | ||||||
|  |  | ||||||
|  | #if !NET8 | ||||||
|  |  | ||||||
|  |     private System.Web.HttpSessionStateBase GetSession() => | ||||||
|  |         Session; | ||||||
|  |  | ||||||
|  |     private JsonResult GetJsonResult(object? data) => | ||||||
|  |         Json(data, JsonRequestBehavior.AllowGet); | ||||||
|  |  | ||||||
|  |     private bool IsAjaxRequest() => | ||||||
|  |         Request.IsAjaxRequest(); | ||||||
|  |  | ||||||
|  | #endif | ||||||
|  |  | ||||||
|  | #if NET8 | ||||||
|  |  | ||||||
|  |     private Microsoft.AspNetCore.Http.ISession GetSession() => | ||||||
|  |         HttpContext.Session; | ||||||
|  |  | ||||||
|  |     private JsonResult GetJsonResult(object? data) => | ||||||
|  |         Json(data); | ||||||
|  |  | ||||||
|  |     private bool IsAjaxRequest() => | ||||||
|  |         Request.Headers.TryGetValue("X-Requested-With", out Microsoft.Extensions.Primitives.StringValues strings) && strings[0] == "XMLHttpRequest"; | ||||||
|  |  | ||||||
|  | #endif | ||||||
|  |  | ||||||
|  |     private string GetUserIdentityName() => | ||||||
|  |         @User.Identity.Name; | ||||||
|  |  | ||||||
| } | } | ||||||
| @ -1,31 +1,47 @@ | |||||||
| using System; | using System; | ||||||
| using System.Collections.Generic; | using System.Collections.Generic; | ||||||
| using System.Linq; | #if !NET8 | ||||||
| using System.Web; | using System.Web; | ||||||
| using System.Web.Mvc; | using System.Web.Mvc; | ||||||
|  | #endif | ||||||
|  |  | ||||||
|  | #if NET8 | ||||||
|  | using Microsoft.AspNetCore.Mvc; | ||||||
|  | using Microsoft.AspNetCore.Authorization; | ||||||
|  | #endif | ||||||
|  |  | ||||||
| using Fab2ApprovalSystem.DMO; | using Fab2ApprovalSystem.DMO; | ||||||
| using Fab2ApprovalSystem.Misc; | using Fab2ApprovalSystem.Misc; | ||||||
| using Fab2ApprovalSystem.Models; | using Fab2ApprovalSystem.Models; | ||||||
|  | #if !NET8 | ||||||
|  | using System.Linq; | ||||||
| using Fab2ApprovalSystem.ViewModels; | using Fab2ApprovalSystem.ViewModels; | ||||||
|  | #endif | ||||||
|  |  | ||||||
|  | #if !NET8 | ||||||
| using Kendo.Mvc.Extensions; | using Kendo.Mvc.Extensions; | ||||||
| using Kendo.Mvc.UI; | using Kendo.Mvc.UI; | ||||||
|  | #endif | ||||||
|  |  | ||||||
| namespace Fab2ApprovalSystem.Controllers; | namespace Fab2ApprovalSystem.Controllers; | ||||||
|  |  | ||||||
| [Authorize] | [Authorize] | ||||||
|  | #if !NET8 | ||||||
| [SessionExpireFilter] | [SessionExpireFilter] | ||||||
|  | #endif | ||||||
|  | #if NET8 | ||||||
|  | [Route("[controller]")] | ||||||
|  | #endif | ||||||
| public class AdminController : Controller { | public class AdminController : Controller { | ||||||
|     // GET: /Admin/ |     // GET: /Admin/ | ||||||
|     UserAccountDMO userDMO = new UserAccountDMO(); |     private readonly UserAccountDMO userDMO = new(); | ||||||
|     AdminDMO adminDMO = new AdminDMO(); |     private readonly AdminDMO adminDMO = new(); | ||||||
|     TrainingDMO trainingDMO = new TrainingDMO(); |     private readonly TrainingDMO trainingDMO = new(); | ||||||
|     LotDispositionDMO ldDMO = new LotDispositionDMO(); |     private readonly LotDispositionDMO ldDMO = new(); | ||||||
|     private readonly AppSettings _AppSettings = GlobalVars.AppSettings; |     private readonly AppSettings? _AppSettings = GlobalVars.AppSettings; | ||||||
|  |  | ||||||
|     public ActionResult Index() { |     public ActionResult Index() { | ||||||
|         if ((bool)Session[GlobalVars.IS_ADMIN]) { |         if (GlobalVars.IsAdmin(GetSession())) { | ||||||
|             var model = userDMO.GetAllUsers(); |             var model = userDMO.GetAllUsers(); | ||||||
|             ViewBag.AllActiveUsers = userDMO.GetAllActiveUsers(); |             ViewBag.AllActiveUsers = userDMO.GetAllActiveUsers(); | ||||||
|             return View(model); |             return View(model); | ||||||
| @ -33,8 +49,10 @@ public class AdminController : Controller { | |||||||
|             return Content("Not Autthorized"); |             return Content("Not Autthorized"); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  | #if !NET8 | ||||||
|  |  | ||||||
|     public ActionResult AssignRoles() { |     public ActionResult AssignRoles() { | ||||||
|         if ((bool)Session[GlobalVars.IS_ADMIN]) { |         if (GlobalVars.IsAdmin(GetSession())) { | ||||||
|             ViewBag.ToplevelNode = GetRoles_SubRolesList(); |             ViewBag.ToplevelNode = GetRoles_SubRolesList(); | ||||||
|             return View(); |             return View(); | ||||||
|         } else |         } else | ||||||
| @ -43,36 +61,33 @@ public class AdminController : Controller { | |||||||
|  |  | ||||||
|     public ActionResult GetAllUserList([DataSourceRequest] DataSourceRequest request) { |     public ActionResult GetAllUserList([DataSourceRequest] DataSourceRequest request) { | ||||||
|         IEnumerable<LoginModel> userlist = userDMO.GetAllActiveUsers(); |         IEnumerable<LoginModel> userlist = userDMO.GetAllActiveUsers(); | ||||||
|         return Json(userlist, JsonRequestBehavior.AllowGet); |         return GetJsonResult(userlist); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     /// <summary> |  | ||||||
|     /// For the Administration of the Users |  | ||||||
|     /// </summary> |  | ||||||
|     public ActionResult GetGridUserList([DataSourceRequest] DataSourceRequest request) { |     public ActionResult GetGridUserList([DataSourceRequest] DataSourceRequest request) { | ||||||
|         return Json(userDMO.GetAllUsers().ToDataSourceResult(request)); |         return GetJsonResult(userDMO.GetAllUsers().ToDataSourceResult(request)); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  | #endif | ||||||
|  |  | ||||||
|     public JsonResult GetAllUserListBySubRole(int subRole) { |     public JsonResult GetAllUserListBySubRole(int subRole) { | ||||||
|         IEnumerable<LoginModel> userlist = adminDMO.GetAllUsersBySubRole(subRole); |         IEnumerable<LoginModel> userlist = adminDMO.GetAllUsersBySubRole(subRole); | ||||||
|         return Json(userlist, JsonRequestBehavior.AllowGet); |         return GetJsonResult(userlist); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     public JsonResult AllSubRoles(string showInactiveRoles = "") { |     public JsonResult AllSubRoles(string showInactiveRoles = "") { | ||||||
|         List<ParentChildModel> newRoles = adminDMO.GetAllSubRoles(showInactiveRoles); |         List<ParentChildModel> newRoles = adminDMO.GetAllSubRoles(showInactiveRoles); | ||||||
|  |         return GetJsonResult(newRoles); | ||||||
|         return Json(newRoles, JsonRequestBehavior.AllowGet); |  | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  | #if !NET8 | ||||||
|  |  | ||||||
|     public ActionResult GetSubRoleListByUserId([DataSourceRequest] DataSourceRequest request, string userId) { |     public ActionResult GetSubRoleListByUserId([DataSourceRequest] DataSourceRequest request, string userId) { | ||||||
|         int userIdInt = Convert.ToInt32(userId); |         int userIdInt = Convert.ToInt32(userId); | ||||||
|  |  | ||||||
|         return Json(adminDMO.GetUserSubRoles(userIdInt).ToDataSourceResult(request)); |         return Json(adminDMO.GetUserSubRoles(userIdInt).ToDataSourceResult(request)); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     /// <summary> |  | ||||||
|     /// OBSOLETE FUNCTION BELOW FOR THE KENDO TREEVIEW  |  | ||||||
|     /// </summary> |  | ||||||
|     private IEnumerable<TreeViewItemModel> GetRoles_SubRolesList() { |     private IEnumerable<TreeViewItemModel> GetRoles_SubRolesList() { | ||||||
|         List<Role> roles = adminDMO.GetSubRoles(); |         List<Role> roles = adminDMO.GetSubRoles(); | ||||||
|  |  | ||||||
| @ -103,6 +118,8 @@ public class AdminController : Controller { | |||||||
|         return ToplevelNode; |         return ToplevelNode; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  | #endif | ||||||
|  |  | ||||||
|     public ActionResult AddUserRoles(int subRole, string users) { |     public ActionResult AddUserRoles(int subRole, string users) { | ||||||
|         adminDMO.AddUserRoles(subRole, users); |         adminDMO.AddUserRoles(subRole, users); | ||||||
|         return View(); |         return View(); | ||||||
| @ -128,6 +145,8 @@ public class AdminController : Controller { | |||||||
|         return View(); |         return View(); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  | #if !NET8 | ||||||
|  |  | ||||||
|     // POST: /Workflow/Create |     // POST: /Workflow/Create | ||||||
|     [HttpPost] |     [HttpPost] | ||||||
|     public ActionResult Create(FormCollection collection) { |     public ActionResult Create(FormCollection collection) { | ||||||
| @ -154,12 +173,16 @@ public class AdminController : Controller { | |||||||
|         return Json(new[] { model }.ToDataSourceResult(request, ModelState)); |         return Json(new[] { model }.ToDataSourceResult(request, ModelState)); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  | #endif | ||||||
|  |  | ||||||
|     public ActionResult DeleteUser(string userId) { |     public ActionResult DeleteUser(string userId) { | ||||||
|         LoginModel loginModel = userDMO.GetUserByID(Convert.ToInt32(userId)); |         LoginModel loginModel = userDMO.GetUserByID(Convert.ToInt32(userId)); | ||||||
|         adminDMO.DeleteUser(userDMO, trainingDMO, loginModel); |         adminDMO.DeleteUser(userDMO, trainingDMO, loginModel); | ||||||
|         return Content("Success"); |         return Content("Success"); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  | #if !NET8 | ||||||
|  |  | ||||||
|     [AcceptVerbs(HttpVerbs.Post)] |     [AcceptVerbs(HttpVerbs.Post)] | ||||||
|     public ActionResult InsertUser([DataSourceRequest] DataSourceRequest request, LoginModel model) { |     public ActionResult InsertUser([DataSourceRequest] DataSourceRequest request, LoginModel model) { | ||||||
|         try { |         try { | ||||||
| @ -174,6 +197,8 @@ public class AdminController : Controller { | |||||||
|         return Json(new[] { model }.ToDataSourceResult(request, ModelState)); |         return Json(new[] { model }.ToDataSourceResult(request, ModelState)); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  | #endif | ||||||
|  |  | ||||||
|     public ActionResult EnableOOOStatus(int oooUserID, int delegatedTo, DateTime startDate, DateTime endDate) { |     public ActionResult EnableOOOStatus(int oooUserID, int delegatedTo, DateTime startDate, DateTime endDate) { | ||||||
|         int returnValue = MiscDMO.EnableOOOStatus(oooUserID, delegatedTo, startDate, endDate); |         int returnValue = MiscDMO.EnableOOOStatus(oooUserID, delegatedTo, startDate, endDate); | ||||||
|         if (returnValue == 3) // the delegator is already a delegator to someone else |         if (returnValue == 3) // the delegator is already a delegator to someone else | ||||||
| @ -191,7 +216,7 @@ public class AdminController : Controller { | |||||||
|     } |     } | ||||||
|  |  | ||||||
|     public ActionResult ManageTrainingGroups() { |     public ActionResult ManageTrainingGroups() { | ||||||
|         if ((bool)Session[GlobalVars.IS_ADMIN]) { |         if (GlobalVars.IsAdmin(GetSession())) { | ||||||
|             ViewBag.AllGroups = GetTrainingGroups(); |             ViewBag.AllGroups = GetTrainingGroups(); | ||||||
|             return View(); |             return View(); | ||||||
|         } else |         } else | ||||||
| @ -212,15 +237,17 @@ public class AdminController : Controller { | |||||||
|         return TrainingGroups; |         return TrainingGroups; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  | #if !NET8 | ||||||
|  |  | ||||||
|     public ActionResult GetTaskListByUser([DataSourceRequest] DataSourceRequest request, string userId) { |     public ActionResult GetTaskListByUser([DataSourceRequest] DataSourceRequest request, string userId) { | ||||||
|         IEnumerable<IssuesViewModel> data = ldDMO.GetTaskList(Convert.ToInt32(userId)); |         IEnumerable<IssuesViewModel> data = ldDMO.GetTaskList(Convert.ToInt32(userId)); | ||||||
|         data = from a in data where a.PendingApprovers != null select a; |         data = from a in data where a.PendingApprovers != null select a; | ||||||
|         return Json(data.ToDataSourceResult(request), JsonRequestBehavior.AllowGet); |         return GetJsonResult(data.ToDataSourceResult(request)); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     public ActionResult GetOpenActionItemsByUser([DataSourceRequest] DataSourceRequest request, string userId) { |     public ActionResult GetOpenActionItemsByUser([DataSourceRequest] DataSourceRequest request, string userId) { | ||||||
|         IEnumerable<OpenActionItemViewModel> data = ldDMO.GetMyOpenActionItems(Convert.ToInt32(userId)); |         IEnumerable<OpenActionItemViewModel> data = ldDMO.GetMyOpenActionItems(Convert.ToInt32(userId)); | ||||||
|         return Json(data.ToDataSourceResult(request), JsonRequestBehavior.AllowGet); |         return GetJsonResult(data.ToDataSourceResult(request)); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     public ActionResult AddNewTrainingGroup(string groupName) { |     public ActionResult AddNewTrainingGroup(string groupName) { | ||||||
| @ -232,6 +259,8 @@ public class AdminController : Controller { | |||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  | #endif | ||||||
|  |  | ||||||
|     public ActionResult DeleteTrainingGroup(int groupID) { |     public ActionResult DeleteTrainingGroup(int groupID) { | ||||||
|         try { |         try { | ||||||
|             adminDMO.DeleteTrainingGroup(groupID); |             adminDMO.DeleteTrainingGroup(groupID); | ||||||
| @ -246,6 +275,8 @@ public class AdminController : Controller { | |||||||
|         return View(); |         return View(); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  | #if !NET8 | ||||||
|  |  | ||||||
|     public ActionResult TrainingGroupPartial(int TrainingGroupID) { |     public ActionResult TrainingGroupPartial(int TrainingGroupID) { | ||||||
|         ViewBag.AllUsers = userDMO.GetAllActiveUsers(); |         ViewBag.AllUsers = userDMO.GetAllActiveUsers(); | ||||||
|         ViewBag.TrainingGroupId = TrainingGroupID; |         ViewBag.TrainingGroupId = TrainingGroupID; | ||||||
| @ -263,6 +294,8 @@ public class AdminController : Controller { | |||||||
|         return Json(new { test = "Succesfully saved" }); |         return Json(new { test = "Succesfully saved" }); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  | #endif | ||||||
|  |  | ||||||
|     public ActionResult DeleteFromGroup(int userId, int groupId) { |     public ActionResult DeleteFromGroup(int userId, int groupId) { | ||||||
|         try { |         try { | ||||||
|             adminDMO.DeleteFromGroup(userId, groupId); |             adminDMO.DeleteFromGroup(userId, groupId); | ||||||
| @ -274,7 +307,7 @@ public class AdminController : Controller { | |||||||
|     } |     } | ||||||
|  |  | ||||||
|     public ActionResult JobSchedulerConfiguration() { |     public ActionResult JobSchedulerConfiguration() { | ||||||
|         if ((bool)Session[GlobalVars.IS_ADMIN]) { |         if (GlobalVars.IsAdmin(GetSession())) { | ||||||
|             return View(); |             return View(); | ||||||
|         } else |         } else | ||||||
|             return Content("Not Autthorized"); |             return Content("Not Autthorized"); | ||||||
| @ -283,7 +316,7 @@ public class AdminController : Controller { | |||||||
|     public ActionResult TrainingReportConfig() { |     public ActionResult TrainingReportConfig() { | ||||||
|         ViewBag.AllUsers = userDMO.GetAllActiveUsers(); |         ViewBag.AllUsers = userDMO.GetAllActiveUsers(); | ||||||
|         List<TrainingReportUser> currentTrainingReportUsersIds = adminDMO.GetTrainingReportUsers(); |         List<TrainingReportUser> currentTrainingReportUsersIds = adminDMO.GetTrainingReportUsers(); | ||||||
|         List<LoginModel> currentTrainingReportUsers = new List<LoginModel>(); |         List<LoginModel> currentTrainingReportUsers = new(); | ||||||
|  |  | ||||||
|         foreach (TrainingReportUser id in currentTrainingReportUsersIds) { |         foreach (TrainingReportUser id in currentTrainingReportUsersIds) { | ||||||
|             currentTrainingReportUsers.Add(userDMO.GetUserByID(id.UserId)); |             currentTrainingReportUsers.Add(userDMO.GetUserByID(id.UserId)); | ||||||
| @ -292,10 +325,12 @@ public class AdminController : Controller { | |||||||
|         return PartialView(); |         return PartialView(); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  | #if !NET8 | ||||||
|  |  | ||||||
|     public ActionResult TECNNotificationConfig() { |     public ActionResult TECNNotificationConfig() { | ||||||
|         ViewBag.AllUsers = userDMO.GetAllActiveUsers(); |         ViewBag.AllUsers = userDMO.GetAllActiveUsers(); | ||||||
|         List<TECNNotificationsUser> currentTECNNotificationUsersIds = adminDMO.GetTECNNotificationUsers(); |         List<TECNNotificationsUser> currentTECNNotificationUsersIds = adminDMO.GetTECNNotificationUsers(); | ||||||
|         List<LoginModel> currentTECNNotificationUsers = new List<LoginModel>(); |         List<LoginModel> currentTECNNotificationUsers = new(); | ||||||
|  |  | ||||||
|         foreach (TECNNotificationsUser id in currentTECNNotificationUsersIds) { |         foreach (TECNNotificationsUser id in currentTECNNotificationUsersIds) { | ||||||
|             currentTECNNotificationUsers.Add(userDMO.GetUserByID(id.UserId)); |             currentTECNNotificationUsers.Add(userDMO.GetUserByID(id.UserId)); | ||||||
| @ -304,8 +339,10 @@ public class AdminController : Controller { | |||||||
|         return PartialView(); |         return PartialView(); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  | #endif | ||||||
|  |  | ||||||
|     public ActionResult AddToTrainingReport(int userId) { |     public ActionResult AddToTrainingReport(int userId) { | ||||||
|         if ((bool)Session[GlobalVars.IS_ADMIN]) { |         if (GlobalVars.IsAdmin(GetSession())) { | ||||||
|             // Check to make sure user is not apart of the group already |             // Check to make sure user is not apart of the group already | ||||||
|             bool userExists = false; |             bool userExists = false; | ||||||
|             List<TrainingReportUser> existingUsers = adminDMO.GetTrainingReportUsers(); |             List<TrainingReportUser> existingUsers = adminDMO.GetTrainingReportUsers(); | ||||||
| @ -329,8 +366,10 @@ public class AdminController : Controller { | |||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  | #if !NET8 | ||||||
|  |  | ||||||
|     public ActionResult AddToTECNNotification(int userId) { |     public ActionResult AddToTECNNotification(int userId) { | ||||||
|         if ((bool)Session[GlobalVars.IS_ADMIN]) { |         if (GlobalVars.IsAdmin(GetSession())) { | ||||||
|             // Check to make sure user is not apart of the group already |             // Check to make sure user is not apart of the group already | ||||||
|             bool userExists = false; |             bool userExists = false; | ||||||
|             List<TECNNotificationsUser> existingUsers = adminDMO.GetTECNNotificationUsers(); |             List<TECNNotificationsUser> existingUsers = adminDMO.GetTECNNotificationUsers(); | ||||||
| @ -360,8 +399,10 @@ public class AdminController : Controller { | |||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  | #endif | ||||||
|  |  | ||||||
|     public ActionResult DeleteFromTrainingReport(int userId) { |     public ActionResult DeleteFromTrainingReport(int userId) { | ||||||
|         if ((bool)Session[GlobalVars.IS_ADMIN]) { |         if (GlobalVars.IsAdmin(GetSession())) { | ||||||
|             try { |             try { | ||||||
|                 adminDMO.TrainingReportDeleteUser(userId); |                 adminDMO.TrainingReportDeleteUser(userId); | ||||||
|                 return Content("Successfully Deleted"); |                 return Content("Successfully Deleted"); | ||||||
| @ -374,7 +415,7 @@ public class AdminController : Controller { | |||||||
|     } |     } | ||||||
|  |  | ||||||
|     public ActionResult DeleteFromTECNNotification(int userId) { |     public ActionResult DeleteFromTECNNotification(int userId) { | ||||||
|         if ((bool)Session[GlobalVars.IS_ADMIN]) { |         if (GlobalVars.IsAdmin(GetSession())) { | ||||||
|             try { |             try { | ||||||
|                 adminDMO.TECNExpirationDeleteUser(userId); |                 adminDMO.TECNExpirationDeleteUser(userId); | ||||||
|                 return Content("Successfully Deleted"); |                 return Content("Successfully Deleted"); | ||||||
| @ -386,4 +427,33 @@ public class AdminController : Controller { | |||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  | #if !NET8 | ||||||
|  |  | ||||||
|  |     private System.Web.HttpSessionStateBase GetSession() => | ||||||
|  |         Session; | ||||||
|  |  | ||||||
|  |     private JsonResult GetJsonResult(object? data) => | ||||||
|  |         Json(data, JsonRequestBehavior.AllowGet); | ||||||
|  |  | ||||||
|  |     private bool IsAjaxRequest() => | ||||||
|  |         Request.IsAjaxRequest(); | ||||||
|  |  | ||||||
|  | #endif | ||||||
|  |  | ||||||
|  | #if NET8 | ||||||
|  |  | ||||||
|  |     private Microsoft.AspNetCore.Http.ISession GetSession() => | ||||||
|  |         HttpContext.Session; | ||||||
|  |  | ||||||
|  |     private JsonResult GetJsonResult(object? data) => | ||||||
|  |         Json(data); | ||||||
|  |  | ||||||
|  |     private bool IsAjaxRequest() => | ||||||
|  |         Request.Headers.TryGetValue("X-Requested-With", out Microsoft.Extensions.Primitives.StringValues strings) && strings[0] == "XMLHttpRequest"; | ||||||
|  |  | ||||||
|  | #endif | ||||||
|  |  | ||||||
|  |     private string GetUserIdentityName() => | ||||||
|  |         @User.Identity.Name; | ||||||
|  |  | ||||||
| } | } | ||||||
| @ -1,27 +1,43 @@ | |||||||
| using System; | using System; | ||||||
| using System.Collections.Generic; | using System.Collections.Generic; | ||||||
| using System.Configuration; | #if !NET8 | ||||||
| using System.Linq; |  | ||||||
| using System.Web; | using System.Web; | ||||||
| using System.Web.Mvc; | using System.Web.Mvc; | ||||||
|  | #endif | ||||||
|  |  | ||||||
|  | #if NET8 | ||||||
|  | using Microsoft.AspNetCore.Mvc; | ||||||
|  | using Microsoft.AspNetCore.Authorization; | ||||||
|  | #endif | ||||||
|  |  | ||||||
| using Fab2ApprovalSystem.DMO; | using Fab2ApprovalSystem.DMO; | ||||||
| using Fab2ApprovalSystem.Misc; | using Fab2ApprovalSystem.Misc; | ||||||
| using Fab2ApprovalSystem.Models; | using Fab2ApprovalSystem.Models; | ||||||
|  | #if !NET8 | ||||||
|  | using System.Configuration; | ||||||
|  | using System.Linq; | ||||||
| using Fab2ApprovalSystem.Utilities; | using Fab2ApprovalSystem.Utilities; | ||||||
|  | #endif | ||||||
|  |  | ||||||
|  | #if !NET8 | ||||||
| using Kendo.Mvc.Extensions; | using Kendo.Mvc.Extensions; | ||||||
| using Kendo.Mvc.UI; | using Kendo.Mvc.UI; | ||||||
|  | #endif | ||||||
|  |  | ||||||
| namespace Fab2ApprovalSystem.Controllers; | namespace Fab2ApprovalSystem.Controllers; | ||||||
|  |  | ||||||
| [Authorize] | [Authorize] | ||||||
|  | #if !NET8 | ||||||
| [OutputCache(NoStore = true, Duration = 0, VaryByParam = "*")] | [OutputCache(NoStore = true, Duration = 0, VaryByParam = "*")] | ||||||
| [SessionExpireFilter] | [SessionExpireFilter] | ||||||
|  | #endif | ||||||
|  | #if NET8 | ||||||
|  | [Route("[controller]")] | ||||||
|  | #endif | ||||||
| public class AuditController : Controller { | public class AuditController : Controller { | ||||||
|  |  | ||||||
|     AuditDMO auditDMO = new AuditDMO(GlobalVars.AppSettings); |     private readonly AuditDMO auditDMO = new(GlobalVars.AppSettings); | ||||||
|     CorrectiveActionDMO caDMO = new CorrectiveActionDMO(); |     private readonly CorrectiveActionDMO caDMO = new(); | ||||||
|     private readonly AppSettings _AppSettings = GlobalVars.AppSettings; |     private readonly AppSettings _AppSettings = GlobalVars.AppSettings; | ||||||
|  |  | ||||||
|     // GET: Audit |     // GET: Audit | ||||||
| @ -30,11 +46,11 @@ public class AuditController : Controller { | |||||||
|     } |     } | ||||||
|  |  | ||||||
|     public ActionResult Create() { |     public ActionResult Create() { | ||||||
|         Audit audit = new Audit(); |         Audit audit = new(); | ||||||
|         try { |         try { | ||||||
|             // TODO: Add insert logic here |             // TODO: Add insert logic here | ||||||
|  |  | ||||||
|             audit.OriginatorID = (int)Session[GlobalVars.SESSION_USERID]; |             audit.OriginatorID = GlobalVars.GetUserId(GetSession()); | ||||||
|             auditDMO.InsertAudit(audit); |             auditDMO.InsertAudit(audit); | ||||||
|             return RedirectToAction("Edit", new { issueID = audit.AuditNo }); |             return RedirectToAction("Edit", new { issueID = audit.AuditNo }); | ||||||
|         } catch (Exception e) { |         } catch (Exception e) { | ||||||
| @ -45,19 +61,19 @@ public class AuditController : Controller { | |||||||
|                 detailedException = e.Message; |                 detailedException = e.Message; | ||||||
|             } |             } | ||||||
|             string exceptionString = e.Message.ToString().Trim().Length > 500 ? "Issue=" + audit.AuditNo.ToString() + e.Message.ToString().Substring(0, 250) : e.Message.ToString(); |             string exceptionString = e.Message.ToString().Trim().Length > 500 ? "Issue=" + audit.AuditNo.ToString() + e.Message.ToString().Substring(0, 250) : e.Message.ToString(); | ||||||
|             Functions.WriteEvent(_AppSettings, @User.Identity.Name + "\r\n SubmitDocument - Audit\r\n" + audit.AuditNo.ToString() + "\r\n" + detailedException, System.Diagnostics.EventLogEntryType.Error); |             Functions.WriteEvent(_AppSettings, GetUserIdentityName() + "\r\n SubmitDocument - Audit\r\n" + audit.AuditNo.ToString() + "\r\n" + detailedException, System.Diagnostics.EventLogEntryType.Error); | ||||||
|             EventLogDMO.Add(new WinEventLog() { IssueID = audit.AuditNo, UserID = @User.Identity.Name, DocumentType = "Audit", OperationType = "Error", Comments = "SubmitDocument - " + exceptionString }); |             EventLogDMO.Add(new WinEventLog() { IssueID = audit.AuditNo, UserID = GetUserIdentityName(), DocumentType = "Audit", OperationType = "Error", Comments = "SubmitDocument - " + exceptionString }); | ||||||
|             throw new Exception(e.Message); |             throw new Exception(e.Message); | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     public ActionResult Edit(int issueID) { |     public ActionResult Edit(int issueID) { | ||||||
|         int isITARCompliant = 1; |         int isITARCompliant = 1; | ||||||
|         Audit audit = new Audit(); |         Audit audit = new(); | ||||||
|  |  | ||||||
|         try { |         try { | ||||||
|             bool isAdmin = (bool)Session[GlobalVars.IS_ADMIN]; |             bool isAdmin = GlobalVars.IsAdmin(GetSession()); | ||||||
|             int userId = (int)Session[GlobalVars.SESSION_USERID]; |             int userId = GlobalVars.GetUserId(GetSession()); | ||||||
|             audit = auditDMO.GetAuditItem(issueID, userId); |             audit = auditDMO.GetAuditItem(issueID, userId); | ||||||
|             AuditEdit auditEdit = auditDMO.GetAuditEdit(issueID, audit, isAdmin, userId); |             AuditEdit auditEdit = auditDMO.GetAuditEdit(issueID, audit, isAdmin, userId); | ||||||
|             if (auditEdit.RedirectToAction) |             if (auditEdit.RedirectToAction) | ||||||
| @ -81,8 +97,8 @@ public class AuditController : Controller { | |||||||
|                 detailedException = e.Message; |                 detailedException = e.Message; | ||||||
|             } |             } | ||||||
|             string exceptionString = e.Message.ToString().Trim().Length > 500 ? "Issue=" + audit.AuditNo.ToString() + e.Message.ToString().Substring(0, 250) : e.Message.ToString(); |             string exceptionString = e.Message.ToString().Trim().Length > 500 ? "Issue=" + audit.AuditNo.ToString() + e.Message.ToString().Substring(0, 250) : e.Message.ToString(); | ||||||
|             Functions.WriteEvent(_AppSettings, @User.Identity.Name + "\r\n Edit - Audit\r\n" + audit.AuditNo.ToString() + "\r\n" + detailedException, System.Diagnostics.EventLogEntryType.Error); |             Functions.WriteEvent(_AppSettings, GetUserIdentityName() + "\r\n Edit - Audit\r\n" + audit.AuditNo.ToString() + "\r\n" + detailedException, System.Diagnostics.EventLogEntryType.Error); | ||||||
|             EventLogDMO.Add(new WinEventLog() { IssueID = audit.AuditNo, UserID = @User.Identity.Name, DocumentType = "Audit", OperationType = "Error", Comments = "Edit - " + exceptionString }); |             EventLogDMO.Add(new WinEventLog() { IssueID = audit.AuditNo, UserID = GetUserIdentityName(), DocumentType = "Audit", OperationType = "Error", Comments = "Edit - " + exceptionString }); | ||||||
|             throw new Exception(e.Message); |             throw new Exception(e.Message); | ||||||
|         } |         } | ||||||
|  |  | ||||||
| @ -93,7 +109,7 @@ public class AuditController : Controller { | |||||||
|     public ActionResult Edit(Audit model) { |     public ActionResult Edit(Audit model) { | ||||||
|         try { |         try { | ||||||
|             var data = model; |             var data = model; | ||||||
|             auditDMO.UpdateAudit(model, (int)Session[GlobalVars.SESSION_USERID]); |             auditDMO.UpdateAudit(model, GlobalVars.GetUserId(GetSession())); | ||||||
|         } catch (Exception ex) { |         } catch (Exception ex) { | ||||||
|             return Content(ex.Message); |             return Content(ex.Message); | ||||||
|         } |         } | ||||||
| @ -113,8 +129,8 @@ public class AuditController : Controller { | |||||||
|     } |     } | ||||||
|  |  | ||||||
|     public ActionResult ReadOnlyAudit(int auditNo) { |     public ActionResult ReadOnlyAudit(int auditNo) { | ||||||
|         Audit audit = new Audit(); |         Audit audit = new(); | ||||||
|         audit = auditDMO.GetAuditItemReadOnly(auditNo, (int)Session[GlobalVars.SESSION_USERID]); |         audit = auditDMO.GetAuditItemReadOnly(auditNo, GlobalVars.GetUserId(GetSession())); | ||||||
|  |  | ||||||
|         ViewBag.AuditTypeList = auditDMO.GetAuditTypeList(); |         ViewBag.AuditTypeList = auditDMO.GetAuditTypeList(); | ||||||
|         ViewBag.AuditorList = auditDMO.GetAuditorList(); |         ViewBag.AuditorList = auditDMO.GetAuditorList(); | ||||||
| @ -124,11 +140,13 @@ public class AuditController : Controller { | |||||||
|         return View(audit); |         return View(audit); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  | #if !NET8 | ||||||
|  |  | ||||||
|     public ActionResult AuditReportAttachSave(IEnumerable<HttpPostedFileBase> AuditReportFiles, int auditNo) { |     public ActionResult AuditReportAttachSave(IEnumerable<HttpPostedFileBase> AuditReportFiles, int auditNo) { | ||||||
|         try { |         try { | ||||||
|             // The Name of the Upload component is "files" |             // The Name of the Upload component is "files" | ||||||
|             if (AuditReportFiles != null) { |             if (AuditReportFiles != null) { | ||||||
|                 int userId = (int)Session[GlobalVars.SESSION_USERID]; |                 int userId = GlobalVars.GetUserId(GetSession()); | ||||||
|                 foreach (var file in AuditReportFiles) { |                 foreach (var file in AuditReportFiles) { | ||||||
|                     AuditHelper.AuditReportAttachSave(_AppSettings, auditDMO, auditNo, userId, file.FileName, file.InputStream); |                     AuditHelper.AuditReportAttachSave(_AppSettings, auditDMO, auditNo, userId, file.FileName, file.InputStream); | ||||||
|                 } |                 } | ||||||
| @ -145,6 +163,8 @@ public class AuditController : Controller { | |||||||
|         return Json(auditDMO.GetAuditReportAttachments(auditNo).ToDataSourceResult(request)); |         return Json(auditDMO.GetAuditReportAttachments(auditNo).ToDataSourceResult(request)); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  | #endif | ||||||
|  |  | ||||||
|     [HttpPost] |     [HttpPost] | ||||||
|     public void DeleteAuditReportAttachment(int attachID) { |     public void DeleteAuditReportAttachment(int attachID) { | ||||||
|         auditDMO.DeleteAuditReportAttachment(attachID); |         auditDMO.DeleteAuditReportAttachment(attachID); | ||||||
| @ -173,18 +193,21 @@ public class AuditController : Controller { | |||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  | #if !NET8 | ||||||
|  |  | ||||||
|     public ActionResult GetAuditFindingsList([DataSourceRequest] DataSourceRequest request, int auditNo) { |     public ActionResult GetAuditFindingsList([DataSourceRequest] DataSourceRequest request, int auditNo) { | ||||||
|         return Json(auditDMO.GetAuditFindingsList(auditNo).ToDataSourceResult(request)); |         return Json(auditDMO.GetAuditFindingsList(auditNo).ToDataSourceResult(request)); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  | #endif | ||||||
|  |  | ||||||
|     public ActionResult InsertAuditFindingsItem(AuditFindings data) { |     public ActionResult InsertAuditFindingsItem(AuditFindings data) { | ||||||
|         if ((data.FindingType == "Major" || data.FindingType == "Minor") && data.CANo == 0) { |         if ((data.FindingType == "Major" || data.FindingType == "Minor") && data.CANo == 0) { | ||||||
|             throw new ArgumentException("You must select add a CA for a Major or Minor finding."); |             throw new ArgumentException("You must select add a CA for a Major or Minor finding."); | ||||||
|         } else { |         } else { | ||||||
|             int userId = (int)Session[GlobalVars.SESSION_USERID]; |             int userId = GlobalVars.GetUserId(GetSession()); | ||||||
|             Audit audit = auditDMO.InsertAndGetAudit(caDMO, data, userId); |             Audit audit = auditDMO.InsertAndGetAudit(caDMO, data, userId); | ||||||
|  |             return GetJsonResult(audit); | ||||||
|             return Json(audit, JsonRequestBehavior.AllowGet); |  | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  |  | ||||||
| @ -192,25 +215,24 @@ public class AuditController : Controller { | |||||||
|         if ((data.FindingType == "Major" || data.FindingType == "Minor") && data.CANo == 0) { |         if ((data.FindingType == "Major" || data.FindingType == "Minor") && data.CANo == 0) { | ||||||
|             throw new ArgumentException("You must select add a CA for a Major or Minor finding."); |             throw new ArgumentException("You must select add a CA for a Major or Minor finding."); | ||||||
|         } else { |         } else { | ||||||
|             int userId = (int)Session[GlobalVars.SESSION_USERID]; |             int userId = GlobalVars.GetUserId(GetSession()); | ||||||
|             Audit audit = auditDMO.UpdateAndGetAudit(caDMO, data, userId); |             Audit audit = auditDMO.UpdateAndGetAudit(caDMO, data, userId); | ||||||
|  |             return GetJsonResult(audit); | ||||||
|             return Json(audit, JsonRequestBehavior.AllowGet); |  | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     public ActionResult DeleteAuditFindingsItem(int auditFindingsID) { |     public ActionResult DeleteAuditFindingsItem(int auditFindingsID) { | ||||||
|         int userId = (int)Session[GlobalVars.SESSION_USERID]; |         int userId = GlobalVars.GetUserId(GetSession()); | ||||||
|         Audit audit = auditDMO.DeleteAndGetAudit(auditFindingsID, userId); |         Audit audit = auditDMO.DeleteAndGetAudit(auditFindingsID, userId); | ||||||
|         return Json(audit, JsonRequestBehavior.AllowGet); |         return GetJsonResult(audit); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     public void ReleaseLockOnDocument(int issueID) { |     public void ReleaseLockOnDocument(int issueID) { | ||||||
|         try { |         try { | ||||||
|             auditDMO.ReleaseLockOnDocument((int)Session[GlobalVars.SESSION_USERID], issueID); |             auditDMO.ReleaseLockOnDocument(GlobalVars.GetUserId(GetSession()), issueID); | ||||||
|         } catch (Exception e) { |         } catch (Exception e) { | ||||||
|             try { |             try { | ||||||
|                 Functions.WriteEvent(_AppSettings, @User.Identity.Name + "\r\n ReleaseLockOnDocument CA\r\n" + issueID.ToString() + "\r\n" + e.Message, System.Diagnostics.EventLogEntryType.Error); |                 Functions.WriteEvent(_AppSettings, GetUserIdentityName() + "\r\n ReleaseLockOnDocument CA\r\n" + issueID.ToString() + "\r\n" + e.Message, System.Diagnostics.EventLogEntryType.Error); | ||||||
|             } catch { } |             } catch { } | ||||||
|             auditDMO.ReleaseLockOnDocument(-1, issueID); |             auditDMO.ReleaseLockOnDocument(-1, issueID); | ||||||
|         } |         } | ||||||
| @ -237,6 +259,8 @@ public class AuditController : Controller { | |||||||
|         return Content(""); |         return Content(""); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  | #if !NET8 | ||||||
|  |  | ||||||
|     public ActionResult GetCAFindingsList([DataSourceRequest] DataSourceRequest request, int auditNo) { |     public ActionResult GetCAFindingsList([DataSourceRequest] DataSourceRequest request, int auditNo) { | ||||||
|         return Json(auditDMO.GetCAFindingsList(auditNo).ToDataSourceResult(request)); |         return Json(auditDMO.GetCAFindingsList(auditNo).ToDataSourceResult(request)); | ||||||
|     } |     } | ||||||
| @ -245,8 +269,10 @@ public class AuditController : Controller { | |||||||
|         return Json(auditDMO.GetCAFindingsItemAttachments(caFindingsID).ToDataSourceResult(request)); |         return Json(auditDMO.GetCAFindingsItemAttachments(caFindingsID).ToDataSourceResult(request)); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  | #endif | ||||||
|  |  | ||||||
|     public ActionResult GetCAFindingsItem(int caFindingsID) { |     public ActionResult GetCAFindingsItem(int caFindingsID) { | ||||||
|         var model = new CAFindings(); |         CAFindings model = new(); | ||||||
|         model = auditDMO.GetCAFindingsItem(caFindingsID); |         model = auditDMO.GetCAFindingsItem(caFindingsID); | ||||||
|  |  | ||||||
|         return PartialView("_CAFindingsAttachment", model); |         return PartialView("_CAFindingsAttachment", model); | ||||||
| @ -257,11 +283,13 @@ public class AuditController : Controller { | |||||||
|         auditDMO.DeleteCAFindingsItem(caFindingsID); |         auditDMO.DeleteCAFindingsItem(caFindingsID); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  | #if !NET8 | ||||||
|  |  | ||||||
|     public ActionResult SaveCAFindings_Attachemnt(IEnumerable<HttpPostedFileBase> CAFindings_Attachemnt, int caFindingsID, int auditNo) { |     public ActionResult SaveCAFindings_Attachemnt(IEnumerable<HttpPostedFileBase> CAFindings_Attachemnt, int caFindingsID, int auditNo) { | ||||||
|         try { |         try { | ||||||
|             // The Name of the Upload component is "files" |             // The Name of the Upload component is "files" | ||||||
|             if (CAFindings_Attachemnt != null) { |             if (CAFindings_Attachemnt != null) { | ||||||
|                 int userId = (int)Session[GlobalVars.SESSION_USERID]; |                 int userId = GlobalVars.GetUserId(GetSession()); | ||||||
|                 foreach (var file in CAFindings_Attachemnt) { |                 foreach (var file in CAFindings_Attachemnt) { | ||||||
|                     AuditHelper.SaveAndInsert(_AppSettings, auditDMO, caFindingsID, auditNo, userId, file.FileName, file.InputStream); |                     AuditHelper.SaveAndInsert(_AppSettings, auditDMO, caFindingsID, auditNo, userId, file.FileName, file.InputStream); | ||||||
|                 } |                 } | ||||||
| @ -273,12 +301,14 @@ public class AuditController : Controller { | |||||||
|         return Content(""); |         return Content(""); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  | #endif | ||||||
|  |  | ||||||
|     public void NotifyActionItemOwner(int issueID, DateTime? dueDate, int? responsibleOwnerID) { |     public void NotifyActionItemOwner(int issueID, DateTime? dueDate, int? responsibleOwnerID) { | ||||||
|         try { |         try { | ||||||
|             string email = auditDMO.NotifyActionItemOwner(issueID, dueDate, responsibleOwnerID, _AppSettings.EmailTemplatesPath); |             string email = auditDMO.NotifyActionItemOwner(issueID, dueDate, responsibleOwnerID, _AppSettings.EmailTemplatesPath); | ||||||
|  |  | ||||||
|             try { |             try { | ||||||
|                 EventLogDMO.Add(new WinEventLog() { IssueID = issueID, UserID = @User.Identity.Name, DocumentType = "Corrective Action", OperationType = "Email", Comments = "Task Assigned for 5S/CA Findings" + ":" + email }); |                 EventLogDMO.Add(new WinEventLog() { IssueID = issueID, UserID = GetUserIdentityName(), DocumentType = "Corrective Action", OperationType = "Email", Comments = "Task Assigned for 5S/CA Findings" + ":" + email }); | ||||||
|             } catch { } |             } catch { } | ||||||
|         } catch (Exception e) { |         } catch (Exception e) { | ||||||
|             string detailedException = ""; |             string detailedException = ""; | ||||||
| @ -289,8 +319,8 @@ public class AuditController : Controller { | |||||||
|             } |             } | ||||||
|  |  | ||||||
|             string exceptionString = e.Message.ToString().Trim().Length > 500 ? "Issue=" + issueID.ToString() + " 5s/CAFindings:" + e.Message.ToString().Substring(0, 250) : e.Message.ToString(); |             string exceptionString = e.Message.ToString().Trim().Length > 500 ? "Issue=" + issueID.ToString() + " 5s/CAFindings:" + e.Message.ToString().Substring(0, 250) : e.Message.ToString(); | ||||||
|             Functions.WriteEvent(_AppSettings, @User.Identity.Name + "\r\n 5s/CAFindings - NotifyActionItemOwner\r\n" + detailedException, System.Diagnostics.EventLogEntryType.Error); |             Functions.WriteEvent(_AppSettings, GetUserIdentityName() + "\r\n 5s/CAFindings - NotifyActionItemOwner\r\n" + detailedException, System.Diagnostics.EventLogEntryType.Error); | ||||||
|             EventLogDMO.Add(new WinEventLog() { IssueID = issueID, UserID = @User.Identity.Name, DocumentType = "Corrective Action", OperationType = "Error", Comments = "5s/CAFindings Notification - " + exceptionString }); |             EventLogDMO.Add(new WinEventLog() { IssueID = issueID, UserID = GetUserIdentityName(), DocumentType = "Corrective Action", OperationType = "Error", Comments = "5s/CAFindings Notification - " + exceptionString }); | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  |  | ||||||
| @ -298,4 +328,33 @@ public class AuditController : Controller { | |||||||
|         return Content(auditDMO.IsCAAssignedToAudit(caNo, auditNo).ToString()); |         return Content(auditDMO.IsCAAssignedToAudit(caNo, auditNo).ToString()); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  | #if !NET8 | ||||||
|  |  | ||||||
|  |     private System.Web.HttpSessionStateBase GetSession() => | ||||||
|  |         Session; | ||||||
|  |  | ||||||
|  |     private JsonResult GetJsonResult(object? data) => | ||||||
|  |         Json(data, JsonRequestBehavior.AllowGet); | ||||||
|  |  | ||||||
|  |     private bool IsAjaxRequest() => | ||||||
|  |         Request.IsAjaxRequest(); | ||||||
|  |  | ||||||
|  | #endif | ||||||
|  |  | ||||||
|  | #if NET8 | ||||||
|  |  | ||||||
|  |     private Microsoft.AspNetCore.Http.ISession GetSession() => | ||||||
|  |         HttpContext.Session; | ||||||
|  |  | ||||||
|  |     private JsonResult GetJsonResult(object? data) => | ||||||
|  |         Json(data); | ||||||
|  |  | ||||||
|  |     private bool IsAjaxRequest() => | ||||||
|  |         Request.Headers.TryGetValue("X-Requested-With", out Microsoft.Extensions.Primitives.StringValues strings) && strings[0] == "XMLHttpRequest"; | ||||||
|  |  | ||||||
|  | #endif | ||||||
|  |  | ||||||
|  |     private string GetUserIdentityName() => | ||||||
|  |         @User.Identity.Name; | ||||||
|  |  | ||||||
| } | } | ||||||
| @ -1,36 +1,50 @@ | |||||||
| using System; | using System; | ||||||
| using System.Collections.Generic; | using System.Collections.Generic; | ||||||
| using System.Linq; | using System.Linq; | ||||||
|  | #if !NET8 | ||||||
| using System.Web; | using System.Web; | ||||||
| using System.Web.Mvc; | using System.Web.Mvc; | ||||||
| using System.Web.Services; | using System.Web.Services; | ||||||
|  | #endif | ||||||
|  |  | ||||||
|  | #if NET8 | ||||||
|  | using Microsoft.AspNetCore.Mvc; | ||||||
|  | using Microsoft.AspNetCore.Authorization; | ||||||
|  | #endif | ||||||
|  |  | ||||||
| using Fab2ApprovalSystem.DMO; | using Fab2ApprovalSystem.DMO; | ||||||
| using Fab2ApprovalSystem.Misc; | using Fab2ApprovalSystem.Misc; | ||||||
| using Fab2ApprovalSystem.Models; | using Fab2ApprovalSystem.Models; | ||||||
| using Fab2ApprovalSystem.ViewModels; | using Fab2ApprovalSystem.ViewModels; | ||||||
|  |  | ||||||
|  | #if !NET8 | ||||||
| using Kendo.Mvc.Extensions; | using Kendo.Mvc.Extensions; | ||||||
| using Kendo.Mvc.UI; | using Kendo.Mvc.UI; | ||||||
|  | #endif | ||||||
|  |  | ||||||
| namespace Fab2ApprovalSystem.Controllers; | namespace Fab2ApprovalSystem.Controllers; | ||||||
|  |  | ||||||
| [Authorize] | [Authorize] | ||||||
|  | #if !NET8 | ||||||
| [OutputCache(NoStore = true, Duration = 0, VaryByParam = "*")] | [OutputCache(NoStore = true, Duration = 0, VaryByParam = "*")] | ||||||
| [SessionExpireFilter] | [SessionExpireFilter] | ||||||
|  | #endif | ||||||
|  | #if NET8 | ||||||
|  | [Route("[controller]")] | ||||||
|  | #endif | ||||||
| public class ChangeControlController : Controller { | public class ChangeControlController : Controller { | ||||||
|  |  | ||||||
|     ChangeControlDMO ccDMO = new ChangeControlDMO(); |     private readonly ChangeControlDMO ccDMO = new(); | ||||||
|     private readonly AppSettings _AppSettings = GlobalVars.AppSettings; |     private readonly AppSettings? _AppSettings = GlobalVars.AppSettings; | ||||||
|  |  | ||||||
|     public ActionResult Index() { |     public ActionResult Index() { | ||||||
|         return View(); |         return View(); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     public ActionResult Create() { |     public ActionResult Create() { | ||||||
|         ChangeControlViewModel cc = new ChangeControlViewModel(); |         ChangeControlViewModel cc = new(); | ||||||
|         try { |         try { | ||||||
|             cc.OwnerID = (int)Session[GlobalVars.SESSION_USERID]; |             cc.OwnerID = GlobalVars.GetUserId(GetSession()); | ||||||
|             ccDMO.InsertChangeControl(cc); |             ccDMO.InsertChangeControl(cc); | ||||||
|             return RedirectToAction("Edit", new { issueID = cc.PlanNumber }); |             return RedirectToAction("Edit", new { issueID = cc.PlanNumber }); | ||||||
|         } catch (Exception e) { |         } catch (Exception e) { | ||||||
| @ -41,16 +55,16 @@ public class ChangeControlController : Controller { | |||||||
|                 detailedException = e.Message; |                 detailedException = e.Message; | ||||||
|             } |             } | ||||||
|             string exceptionString = e.Message.ToString().Trim().Length > 500 ? "Issue=" + cc.PlanNumber.ToString() + e.Message.ToString().Substring(0, 250) : e.Message.ToString(); |             string exceptionString = e.Message.ToString().Trim().Length > 500 ? "Issue=" + cc.PlanNumber.ToString() + e.Message.ToString().Substring(0, 250) : e.Message.ToString(); | ||||||
|             Functions.WriteEvent(_AppSettings, @User.Identity.Name + "\r\n Create - Change Control\r\n" + cc.PlanNumber.ToString() + "\r\n" + detailedException, System.Diagnostics.EventLogEntryType.Error); |             Functions.WriteEvent(_AppSettings, GetUserIdentityName() + "\r\n Create - Change Control\r\n" + cc.PlanNumber.ToString() + "\r\n" + detailedException, System.Diagnostics.EventLogEntryType.Error); | ||||||
|             EventLogDMO.Add(new WinEventLog() { IssueID = cc.PlanNumber, UserID = @User.Identity.Name, DocumentType = "Change Control", OperationType = "Error", Comments = "Create - " + exceptionString }); |             EventLogDMO.Add(new WinEventLog() { IssueID = cc.PlanNumber, UserID = GetUserIdentityName(), DocumentType = "Change Control", OperationType = "Error", Comments = "Create - " + exceptionString }); | ||||||
|             throw new Exception(e.Message); |             throw new Exception(e.Message); | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     public ActionResult Edit(int issueID) { |     public ActionResult Edit(int issueID) { | ||||||
|         string jwt = Session["JWT"].ToString(); |         string jwt = GlobalVars.GetJWT(GetSession()); | ||||||
|         string encodedJwt = System.Net.WebUtility.UrlEncode(jwt); |         string encodedJwt = System.Net.WebUtility.UrlEncode(jwt); | ||||||
|         string refreshToken = Session["RefreshToken"].ToString(); |         string refreshToken = GlobalVars.GetRefreshToken(GetSession()); | ||||||
|         string encodedRefreshToken = System.Net.WebUtility.UrlEncode(refreshToken); |         string encodedRefreshToken = System.Net.WebUtility.UrlEncode(refreshToken); | ||||||
|         string mrbUrl = $"{GlobalVars.AppSettings.WasmClientUrl}/redirect?jwt={encodedJwt}&refreshToken={encodedRefreshToken}&redirectPath=pcrb/{issueID}"; |         string mrbUrl = $"{GlobalVars.AppSettings.WasmClientUrl}/redirect?jwt={encodedJwt}&refreshToken={encodedRefreshToken}&redirectPath=pcrb/{issueID}"; | ||||||
|  |  | ||||||
| @ -58,9 +72,9 @@ public class ChangeControlController : Controller { | |||||||
|     } |     } | ||||||
|  |  | ||||||
|     public ActionResult ReadOnlyCC(int issueID) { |     public ActionResult ReadOnlyCC(int issueID) { | ||||||
|         string jwt = Session["JWT"].ToString(); |         string jwt = GlobalVars.GetJWT(GetSession()); | ||||||
|         string encodedJwt = System.Net.WebUtility.UrlEncode(jwt); |         string encodedJwt = System.Net.WebUtility.UrlEncode(jwt); | ||||||
|         string refreshToken = Session["RefreshToken"].ToString(); |         string refreshToken = GlobalVars.GetRefreshToken(GetSession()); | ||||||
|         string encodedRefreshToken = System.Net.WebUtility.UrlEncode(refreshToken); |         string encodedRefreshToken = System.Net.WebUtility.UrlEncode(refreshToken); | ||||||
|         string mrbUrl = $"{GlobalVars.AppSettings.WasmClientUrl}/redirect?jwt={encodedJwt}&refreshToken={encodedRefreshToken}&redirectPath=pcrb/{issueID}"; |         string mrbUrl = $"{GlobalVars.AppSettings.WasmClientUrl}/redirect?jwt={encodedJwt}&refreshToken={encodedRefreshToken}&redirectPath=pcrb/{issueID}"; | ||||||
|  |  | ||||||
| @ -71,7 +85,7 @@ public class ChangeControlController : Controller { | |||||||
|     public ActionResult Edit(ChangeControlViewModel model) { |     public ActionResult Edit(ChangeControlViewModel model) { | ||||||
|         try { |         try { | ||||||
|             var data = model; |             var data = model; | ||||||
|             ccDMO.UpdateChangeControl(model, (int)Session[GlobalVars.SESSION_USERID]); |             ccDMO.UpdateChangeControl(model, GlobalVars.GetUserId(GetSession())); | ||||||
|             ViewBag.AIResponsibles = ccDMO.GetActionItemResponsible(); |             ViewBag.AIResponsibles = ccDMO.GetActionItemResponsible(); | ||||||
|         } catch (Exception ex) { |         } catch (Exception ex) { | ||||||
|             return Content(ex.Message); |             return Content(ex.Message); | ||||||
| @ -93,10 +107,12 @@ public class ChangeControlController : Controller { | |||||||
|     } |     } | ||||||
|  |  | ||||||
|     public JsonResult SearchParts(string searchText) { |     public JsonResult SearchParts(string searchText) { | ||||||
|         List<String> partList = MiscDMO.SearchLTParts(searchText.Trim()).Select(x => x.WIPPartData).ToList<String>(); |         List<string> partList = MiscDMO.SearchLTParts(searchText.Trim()).Select(x => x.WIPPartData).ToList(); | ||||||
|         return Json(partList, JsonRequestBehavior.AllowGet); |         return GetJsonResult(partList); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  | #if !NET8 | ||||||
|  |  | ||||||
|     public ActionResult GetCCAttachments([DataSourceRequest] DataSourceRequest request, int planNumber) { |     public ActionResult GetCCAttachments([DataSourceRequest] DataSourceRequest request, int planNumber) { | ||||||
|         return Json(ccDMO.GetCCAttachment(planNumber).ToDataSourceResult(request)); |         return Json(ccDMO.GetCCAttachment(planNumber).ToDataSourceResult(request)); | ||||||
|     } |     } | ||||||
| @ -130,7 +146,7 @@ public class ChangeControlController : Controller { | |||||||
|     public ActionResult AttachSaveCC(IEnumerable<HttpPostedFileBase> files, int planNumber, int attachID) { |     public ActionResult AttachSaveCC(IEnumerable<HttpPostedFileBase> files, int planNumber, int attachID) { | ||||||
|         // The Name of the Upload component is "files" |         // The Name of the Upload component is "files" | ||||||
|         if (files != null) { |         if (files != null) { | ||||||
|             int userId = (int)Session[GlobalVars.SESSION_USERID]; |             int userId = GlobalVars.GetUserId(GetSession()); | ||||||
|             foreach (var file in files) { |             foreach (var file in files) { | ||||||
|                 ChangeControlHelper.AttachSaveCC(_AppSettings, ccDMO, planNumber, attachID, userId, file.FileName, file.InputStream); |                 ChangeControlHelper.AttachSaveCC(_AppSettings, ccDMO, planNumber, attachID, userId, file.FileName, file.InputStream); | ||||||
|             } |             } | ||||||
| @ -145,6 +161,7 @@ public class ChangeControlController : Controller { | |||||||
|     public ActionResult GetMeetingAttachments([DataSourceRequest] DataSourceRequest request, int meetingID) { |     public ActionResult GetMeetingAttachments([DataSourceRequest] DataSourceRequest request, int meetingID) { | ||||||
|         return Json(ccDMO.GetMeetingAttachments(meetingID).ToDataSourceResult(request)); |         return Json(ccDMO.GetMeetingAttachments(meetingID).ToDataSourceResult(request)); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     public ActionResult GetPCRB([DataSourceRequest] DataSourceRequest request, int PlanNumber, string PCRB) { |     public ActionResult GetPCRB([DataSourceRequest] DataSourceRequest request, int PlanNumber, string PCRB) { | ||||||
|         return Json(ccDMO.GetPCRB(PlanNumber, PCRB).ToDataSourceResult(request)); |         return Json(ccDMO.GetPCRB(PlanNumber, PCRB).ToDataSourceResult(request)); | ||||||
|     } |     } | ||||||
| @ -177,7 +194,7 @@ public class ChangeControlController : Controller { | |||||||
|     public ActionResult AttachSaveMeeting(IEnumerable<HttpPostedFileBase> files, int planNumber, int meetingID, int attachID) { |     public ActionResult AttachSaveMeeting(IEnumerable<HttpPostedFileBase> files, int planNumber, int meetingID, int attachID) { | ||||||
|         // The Name of the Upload component is "files" |         // The Name of the Upload component is "files" | ||||||
|         if (files != null) { |         if (files != null) { | ||||||
|             int userId = (int)Session[GlobalVars.SESSION_USERID]; |             int userId = GlobalVars.GetUserId(GetSession()); | ||||||
|             foreach (var file in files) { |             foreach (var file in files) { | ||||||
|                 ChangeControlHelper.AttachSaveMeeting(_AppSettings, ccDMO, planNumber, attachID, userId, file.FileName, file.InputStream); |                 ChangeControlHelper.AttachSaveMeeting(_AppSettings, ccDMO, planNumber, attachID, userId, file.FileName, file.InputStream); | ||||||
|             } |             } | ||||||
| @ -185,6 +202,8 @@ public class ChangeControlController : Controller { | |||||||
|         return Content(""); |         return Content(""); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  | #endif | ||||||
|  |  | ||||||
|     public FileResult DownloadCCFile(string fileGuid, int planNumber) { |     public FileResult DownloadCCFile(string fileGuid, int planNumber) { | ||||||
|         string fileName = ccDMO.GetCCFileName(fileGuid); |         string fileName = ccDMO.GetCCFileName(fileGuid); | ||||||
|  |  | ||||||
| @ -219,20 +238,20 @@ public class ChangeControlController : Controller { | |||||||
|                 detailedException = e.Message; |                 detailedException = e.Message; | ||||||
|             } |             } | ||||||
|             string exceptionString = e.Message.ToString().Trim().Length > 500 ? "Issue=" + planNumber.ToString() + e.Message.ToString().Substring(0, 250) : e.Message.ToString(); |             string exceptionString = e.Message.ToString().Trim().Length > 500 ? "Issue=" + planNumber.ToString() + e.Message.ToString().Substring(0, 250) : e.Message.ToString(); | ||||||
|             Functions.WriteEvent(_AppSettings, @User.Identity.Name + "\r\n Create - Meeting\r\n" + planNumber.ToString() + "\r\n" + detailedException, System.Diagnostics.EventLogEntryType.Error); |             Functions.WriteEvent(_AppSettings, GetUserIdentityName() + "\r\n Create - Meeting\r\n" + planNumber.ToString() + "\r\n" + detailedException, System.Diagnostics.EventLogEntryType.Error); | ||||||
|             EventLogDMO.Add(new WinEventLog() { IssueID = planNumber, UserID = @User.Identity.Name, DocumentType = "Meeting", OperationType = "Error", Comments = "Create - " + exceptionString }); |             EventLogDMO.Add(new WinEventLog() { IssueID = planNumber, UserID = GetUserIdentityName(), DocumentType = "Meeting", OperationType = "Error", Comments = "Create - " + exceptionString }); | ||||||
|             throw new Exception("Error: " + e.Message); |             throw new Exception("Error: " + e.Message); | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     public ActionResult EditMeeting(int meetingID) { |     public ActionResult EditMeeting(int meetingID) { | ||||||
|         int isITARCompliant = 1; |         int isITARCompliant = 1; | ||||||
|         CCMeeting meeting = new CCMeeting(); |         CCMeeting meeting = new(); | ||||||
|         meeting = ccDMO.GetMeetingRead(meetingID, out isITARCompliant, (int)Session[GlobalVars.SESSION_USERID]); |         meeting = ccDMO.GetMeetingRead(meetingID, out isITARCompliant, GlobalVars.GetUserId(GetSession())); | ||||||
|         ViewBag.MeetingList = ccDMO.GetMeetingList(meeting.PlanNumber); |         ViewBag.MeetingList = ccDMO.GetMeetingList(meeting.PlanNumber); | ||||||
|         // TODO locked functionality |         // TODO locked functionality | ||||||
|         List<ApproversListViewModel> userList = MiscDMO.GetApproversListByDocument(meeting.PlanNumber, meeting.CurrentStep, (int)GlobalVars.DocumentType.ChangeControl); |         List<ApproversListViewModel> userList = MiscDMO.GetApproversListByDocument(meeting.PlanNumber, meeting.CurrentStep, (int)GlobalVars.DocumentType.ChangeControl); | ||||||
|         ApproversListViewModel appUser = userList.Find(delegate (ApproversListViewModel al) { return al.UserID == (int)Session[GlobalVars.SESSION_USERID]; }); |         ApproversListViewModel appUser = userList.Find(delegate (ApproversListViewModel al) { return al.UserID == GlobalVars.GetUserId(GetSession()); }); | ||||||
|         if (appUser != null) { |         if (appUser != null) { | ||||||
|             ViewBag.IsApprover = "true"; |             ViewBag.IsApprover = "true"; | ||||||
|         } |         } | ||||||
| @ -241,7 +260,7 @@ public class ChangeControlController : Controller { | |||||||
|         { |         { | ||||||
|             return View("UnAuthorizedAccess"); |             return View("UnAuthorizedAccess"); | ||||||
|         } else { |         } else { | ||||||
|             if ((meeting.RecordLockIndicator && meeting.RecordLockedBy != (int)Session[GlobalVars.SESSION_USERID]) |             if ((meeting.RecordLockIndicator && meeting.RecordLockedBy != GlobalVars.GetUserId(GetSession())) | ||||||
|                 || (meeting.PCRBClosed)) { |                 || (meeting.PCRBClosed)) { | ||||||
|                 return RedirectToAction("ReadOnlyMeeting", new { meetingID = meetingID }); |                 return RedirectToAction("ReadOnlyMeeting", new { meetingID = meetingID }); | ||||||
|             } else if (meeting.Decision != -1) { |             } else if (meeting.Decision != -1) { | ||||||
| @ -251,7 +270,7 @@ public class ChangeControlController : Controller { | |||||||
|                 ViewBag.Attendees = ccDMO.GetUsers(); |                 ViewBag.Attendees = ccDMO.GetUsers(); | ||||||
|                 ViewBag.Sites = ccDMO.GetSites(); |                 ViewBag.Sites = ccDMO.GetSites(); | ||||||
|                 ViewBag.PCRValues = ccDMO.GetPCRValues(); |                 ViewBag.PCRValues = ccDMO.GetPCRValues(); | ||||||
|                 meeting = ccDMO.GetMeeting(meetingID, out isITARCompliant, (int)Session[GlobalVars.SESSION_USERID]); |                 meeting = ccDMO.GetMeeting(meetingID, out isITARCompliant, GlobalVars.GetUserId(GetSession())); | ||||||
|  |  | ||||||
|                 return View(meeting); |                 return View(meeting); | ||||||
|             } |             } | ||||||
| @ -260,8 +279,8 @@ public class ChangeControlController : Controller { | |||||||
|  |  | ||||||
|     public ActionResult ReadOnlyMeeting(int meetingID) { |     public ActionResult ReadOnlyMeeting(int meetingID) { | ||||||
|         int isITARCompliant = 1; |         int isITARCompliant = 1; | ||||||
|         CCMeeting meeting = new CCMeeting(); |         CCMeeting meeting = new(); | ||||||
|         meeting = ccDMO.GetMeetingRead(meetingID, out isITARCompliant, (int)Session[GlobalVars.SESSION_USERID]); |         meeting = ccDMO.GetMeetingRead(meetingID, out isITARCompliant, GlobalVars.GetUserId(GetSession())); | ||||||
|         ViewBag.MeetingList = ccDMO.GetMeetingList(meeting.PlanNumber); |         ViewBag.MeetingList = ccDMO.GetMeetingList(meeting.PlanNumber); | ||||||
|         ViewBag.PCRValues = ccDMO.GetPCRValues(); |         ViewBag.PCRValues = ccDMO.GetPCRValues(); | ||||||
|  |  | ||||||
| @ -286,13 +305,13 @@ public class ChangeControlController : Controller { | |||||||
|  |  | ||||||
|     public ActionResult EditMeetingUpdate(int meetingID) { |     public ActionResult EditMeetingUpdate(int meetingID) { | ||||||
|         int isITARCompliant = 1; |         int isITARCompliant = 1; | ||||||
|         CCMeeting meeting = new CCMeeting(); |         CCMeeting meeting = new(); | ||||||
|         meeting = ccDMO.GetMeetingRead(meetingID, out isITARCompliant, (int)Session[GlobalVars.SESSION_USERID]); |         meeting = ccDMO.GetMeetingRead(meetingID, out isITARCompliant, GlobalVars.GetUserId(GetSession())); | ||||||
|         ViewBag.MeetingList = ccDMO.GetMeetingList(meeting.PlanNumber); |         ViewBag.MeetingList = ccDMO.GetMeetingList(meeting.PlanNumber); | ||||||
|         ViewBag.PCRValues = ccDMO.GetPCRValues(); |         ViewBag.PCRValues = ccDMO.GetPCRValues(); | ||||||
|         // TODO locked functionality |         // TODO locked functionality | ||||||
|         List<ApproversListViewModel> userList = MiscDMO.GetApproversListByDocument(meeting.PlanNumber, meeting.CurrentStep, (int)GlobalVars.DocumentType.ChangeControl); |         List<ApproversListViewModel> userList = MiscDMO.GetApproversListByDocument(meeting.PlanNumber, meeting.CurrentStep, (int)GlobalVars.DocumentType.ChangeControl); | ||||||
|         ApproversListViewModel appUser = userList.Find(delegate (ApproversListViewModel al) { return al.UserID == (int)Session[GlobalVars.SESSION_USERID]; }); |         ApproversListViewModel appUser = userList.Find(delegate (ApproversListViewModel al) { return al.UserID == GlobalVars.GetUserId(GetSession()); }); | ||||||
|         if (appUser != null) { |         if (appUser != null) { | ||||||
|             ViewBag.IsApprover = "true"; |             ViewBag.IsApprover = "true"; | ||||||
|         } |         } | ||||||
| @ -301,11 +320,11 @@ public class ChangeControlController : Controller { | |||||||
|         { |         { | ||||||
|             return View("UnAuthorizedAccess"); |             return View("UnAuthorizedAccess"); | ||||||
|         } else { |         } else { | ||||||
|             if ((meeting.RecordLockIndicator && meeting.RecordLockedBy != (int)Session[GlobalVars.SESSION_USERID]) |             if ((meeting.RecordLockIndicator && meeting.RecordLockedBy != GlobalVars.GetUserId(GetSession())) | ||||||
|                 || (meeting.PCRBClosed)) { |                 || (meeting.PCRBClosed)) { | ||||||
|                 return RedirectToAction("ReadOnlyMeeting", new { meetingID = meetingID }); |                 return RedirectToAction("ReadOnlyMeeting", new { meetingID = meetingID }); | ||||||
|             } else { |             } else { | ||||||
|                 meeting = ccDMO.GetMeeting(meetingID, out isITARCompliant, (int)Session[GlobalVars.SESSION_USERID]); |                 meeting = ccDMO.GetMeeting(meetingID, out isITARCompliant, GlobalVars.GetUserId(GetSession())); | ||||||
|  |  | ||||||
|                 ViewBag.AIResponsibles = ccDMO.GetActionItemResponsible(); |                 ViewBag.AIResponsibles = ccDMO.GetActionItemResponsible(); | ||||||
|  |  | ||||||
| @ -336,10 +355,14 @@ public class ChangeControlController : Controller { | |||||||
|         return File(sDocument, System.Net.Mime.MediaTypeNames.Application.Octet, fileName); |         return File(sDocument, System.Net.Mime.MediaTypeNames.Application.Octet, fileName); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  | #if !NET8 | ||||||
|  |  | ||||||
|     public ActionResult GetDecisionsSummaryList([DataSourceRequest] DataSourceRequest request, int meetingID) { |     public ActionResult GetDecisionsSummaryList([DataSourceRequest] DataSourceRequest request, int meetingID) { | ||||||
|         return Json(ccDMO.GetDecisionsSummaryList(meetingID).ToDataSourceResult(request)); |         return Json(ccDMO.GetDecisionsSummaryList(meetingID).ToDataSourceResult(request)); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  | #endif | ||||||
|  |  | ||||||
|     public ActionResult UpdateMeetingDecisionNotes(CCDecisionSummary model) { |     public ActionResult UpdateMeetingDecisionNotes(CCDecisionSummary model) { | ||||||
|         try { |         try { | ||||||
|             ccDMO.UpdateDecisionSummary(model); |             ccDMO.UpdateDecisionSummary(model); | ||||||
| @ -349,6 +372,8 @@ public class ChangeControlController : Controller { | |||||||
|         return Content("Saved Succesfully"); |         return Content("Saved Succesfully"); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  | #if !NET8 | ||||||
|  |  | ||||||
|     [AcceptVerbs(HttpVerbs.Post)] |     [AcceptVerbs(HttpVerbs.Post)] | ||||||
|     public ActionResult DeleteDecisionsSummary([DataSourceRequest] DataSourceRequest request, CCDecisionSummary model) { |     public ActionResult DeleteDecisionsSummary([DataSourceRequest] DataSourceRequest request, CCDecisionSummary model) { | ||||||
|         if (model != null && ModelState.IsValid) { |         if (model != null && ModelState.IsValid) { | ||||||
| @ -357,6 +382,8 @@ public class ChangeControlController : Controller { | |||||||
|         return Json(new[] { model }.ToDataSourceResult(request, ModelState)); |         return Json(new[] { model }.ToDataSourceResult(request, ModelState)); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  | #endif | ||||||
|  |  | ||||||
|     public ActionResult InsertDecisionsSummary(CCDecisionSummary model) { |     public ActionResult InsertDecisionsSummary(CCDecisionSummary model) { | ||||||
|         try { |         try { | ||||||
|             ccDMO.InsertDecisionSummary(model); |             ccDMO.InsertDecisionSummary(model); | ||||||
| @ -375,19 +402,23 @@ public class ChangeControlController : Controller { | |||||||
|         return Content("Saved Succesfully", "application/json"); |         return Content("Saved Succesfully", "application/json"); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  | #if !NET8 | ||||||
|  |  | ||||||
|     public ActionResult GetMeetingList([DataSourceRequest] DataSourceRequest request, int planNumber) { |     public ActionResult GetMeetingList([DataSourceRequest] DataSourceRequest request, int planNumber) { | ||||||
|         var meetingList = ccDMO.GetMeetingList(planNumber); |         var meetingList = ccDMO.GetMeetingList(planNumber); | ||||||
|         return Json(meetingList.ToDataSourceResult(request)); |         return Json(meetingList.ToDataSourceResult(request)); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     ///  |  | ||||||
|     public ActionResult GetMeetingAttendees([DataSourceRequest] DataSourceRequest request, int meetingID) { |     public ActionResult GetMeetingAttendees([DataSourceRequest] DataSourceRequest request, int meetingID) { | ||||||
|         return Json(ccDMO.GetMeetingAttendees(meetingID).ToDataSourceResult(request)); |         return Json(ccDMO.GetMeetingAttendees(meetingID).ToDataSourceResult(request)); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     public ActionResult GetPCRBAttendees([DataSourceRequest] DataSourceRequest request, int PCRBID) { |     public ActionResult GetPCRBAttendees([DataSourceRequest] DataSourceRequest request, int PCRBID) { | ||||||
|         return Json(ccDMO.GetPCRBAttendees(PCRBID).ToDataSourceResult(request)); |         return Json(ccDMO.GetPCRBAttendees(PCRBID).ToDataSourceResult(request)); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  | #endif | ||||||
|  |  | ||||||
|     public void InsertNewMeetingAttendee(string attendeeName, string jobTitle, string siteName) { |     public void InsertNewMeetingAttendee(string attendeeName, string jobTitle, string siteName) { | ||||||
|         try { |         try { | ||||||
|         } catch (Exception e) { |         } catch (Exception e) { | ||||||
| @ -412,8 +443,8 @@ public class ChangeControlController : Controller { | |||||||
|                 detailedException = e.Message; |                 detailedException = e.Message; | ||||||
|             } |             } | ||||||
|             string exceptionString = e.Message.ToString().Trim().Length > 500 ? "Issue=" + docid.ToString() + e.Message.ToString().Substring(0, 250) : e.Message.ToString(); |             string exceptionString = e.Message.ToString().Trim().Length > 500 ? "Issue=" + docid.ToString() + e.Message.ToString().Substring(0, 250) : e.Message.ToString(); | ||||||
|             Functions.WriteEvent(_AppSettings, @User.Identity.Name + "\r\n UpdateMeetingAttendee - Change Control\r\n" + docid.ToString() + "\r\n" + detailedException, System.Diagnostics.EventLogEntryType.Error); |             Functions.WriteEvent(_AppSettings, GetUserIdentityName() + "\r\n UpdateMeetingAttendee - Change Control\r\n" + docid.ToString() + "\r\n" + detailedException, System.Diagnostics.EventLogEntryType.Error); | ||||||
|             EventLogDMO.Add(new WinEventLog() { IssueID = docid, UserID = @User.Identity.Name, DocumentType = "Change Control", OperationType = "Error", Comments = "UpdateMeetingAttendee - " + exceptionString }); |             EventLogDMO.Add(new WinEventLog() { IssueID = docid, UserID = GetUserIdentityName(), DocumentType = "Change Control", OperationType = "Error", Comments = "UpdateMeetingAttendee - " + exceptionString }); | ||||||
|             throw new Exception(e.Message); |             throw new Exception(e.Message); | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
| @ -432,12 +463,14 @@ public class ChangeControlController : Controller { | |||||||
|                 detailedException = e.Message; |                 detailedException = e.Message; | ||||||
|             } |             } | ||||||
|             string exceptionString = e.Message.ToString().Trim().Length > 500 ? "Issue=" + docid.ToString() + e.Message.ToString().Substring(0, 250) : e.Message.ToString(); |             string exceptionString = e.Message.ToString().Trim().Length > 500 ? "Issue=" + docid.ToString() + e.Message.ToString().Substring(0, 250) : e.Message.ToString(); | ||||||
|             Functions.WriteEvent(_AppSettings, @User.Identity.Name + "\r\n UpdateMeetingAttendee - Change Control\r\n" + docid.ToString() + "\r\n" + detailedException, System.Diagnostics.EventLogEntryType.Error); |             Functions.WriteEvent(_AppSettings, GetUserIdentityName() + "\r\n UpdateMeetingAttendee - Change Control\r\n" + docid.ToString() + "\r\n" + detailedException, System.Diagnostics.EventLogEntryType.Error); | ||||||
|             EventLogDMO.Add(new WinEventLog() { IssueID = docid, UserID = @User.Identity.Name, DocumentType = "Change Control", OperationType = "Error", Comments = "UpdateMeetingAttendee - " + exceptionString }); |             EventLogDMO.Add(new WinEventLog() { IssueID = docid, UserID = GetUserIdentityName(), DocumentType = "Change Control", OperationType = "Error", Comments = "UpdateMeetingAttendee - " + exceptionString }); | ||||||
|             throw new Exception(e.Message); |             throw new Exception(e.Message); | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  | #if !NET8 | ||||||
|  |  | ||||||
|     [AcceptVerbs(HttpVerbs.Post)] |     [AcceptVerbs(HttpVerbs.Post)] | ||||||
|     public ActionResult DeleteMeetingAttendee([DataSourceRequest] DataSourceRequest request, CCMeetingAttendee model) { |     public ActionResult DeleteMeetingAttendee([DataSourceRequest] DataSourceRequest request, CCMeetingAttendee model) { | ||||||
|         if (model != null && ModelState.IsValid) { |         if (model != null && ModelState.IsValid) { | ||||||
| @ -475,6 +508,8 @@ public class ChangeControlController : Controller { | |||||||
|         return Json(ccDMO.GetMeetingActionItems_All(planNumber).ToDataSourceResult(request)); |         return Json(ccDMO.GetMeetingActionItems_All(planNumber).ToDataSourceResult(request)); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  | #endif | ||||||
|  |  | ||||||
|     public ActionResult InsertPCRBActionItem(CCPCRBActionItem model) { |     public ActionResult InsertPCRBActionItem(CCPCRBActionItem model) { | ||||||
|         try { |         try { | ||||||
|             if (model != null) { |             if (model != null) { | ||||||
| @ -501,6 +536,8 @@ public class ChangeControlController : Controller { | |||||||
|         return Content("1"); |         return Content("1"); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  | #if !NET8 | ||||||
|  |  | ||||||
|     public ActionResult InsertPCRBAttendee([DataSourceRequest] DataSourceRequest request, int pcrId, int attendeeId, string jobTitle, string siteName) { |     public ActionResult InsertPCRBAttendee([DataSourceRequest] DataSourceRequest request, int pcrId, int attendeeId, string jobTitle, string siteName) { | ||||||
|         CCPCRBAttendee newAttendee = new CCPCRBAttendee(); |         CCPCRBAttendee newAttendee = new CCPCRBAttendee(); | ||||||
|         newAttendee.AttendeeID = attendeeId; |         newAttendee.AttendeeID = attendeeId; | ||||||
| @ -517,6 +554,8 @@ public class ChangeControlController : Controller { | |||||||
|         return Content("1"); |         return Content("1"); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  | #endif | ||||||
|  |  | ||||||
|     public ActionResult UpdatePCRBActionItem(CCPCRBActionItem model) { |     public ActionResult UpdatePCRBActionItem(CCPCRBActionItem model) { | ||||||
|         try { |         try { | ||||||
|             if (model != null) { |             if (model != null) { | ||||||
| @ -529,10 +568,12 @@ public class ChangeControlController : Controller { | |||||||
|         return Content("1"); |         return Content("1"); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  | #if !NET8 | ||||||
|  |  | ||||||
|     [AcceptVerbs(HttpVerbs.Post)] |     [AcceptVerbs(HttpVerbs.Post)] | ||||||
|     public ActionResult UpdateMeetingActionItemAll([DataSourceRequest] DataSourceRequest request, CCMeetingActionItemAll model) { |     public ActionResult UpdateMeetingActionItemAll([DataSourceRequest] DataSourceRequest request, CCMeetingActionItemAll model) { | ||||||
|         if (model != null && ModelState.IsValid) { |         if (model != null && ModelState.IsValid) { | ||||||
|             model.ClosedBy = (int)Session[GlobalVars.SESSION_USERID]; |             model.ClosedBy = GlobalVars.GetUserId(GetSession()); | ||||||
|             ccDMO.UpdateMeetingActionItem_All(model); |             ccDMO.UpdateMeetingActionItem_All(model); | ||||||
|         } |         } | ||||||
|         if (model.ClosedStatus) |         if (model.ClosedStatus) | ||||||
| @ -543,6 +584,8 @@ public class ChangeControlController : Controller { | |||||||
|         return Json(new[] { model }.ToDataSourceResult(request, ModelState)); |         return Json(new[] { model }.ToDataSourceResult(request, ModelState)); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  | #endif | ||||||
|  |  | ||||||
|     public ActionResult UpdateMeetingActionItem(CCMeetingActionItem model) { |     public ActionResult UpdateMeetingActionItem(CCMeetingActionItem model) { | ||||||
|         try { |         try { | ||||||
|             if (model != null) { |             if (model != null) { | ||||||
| @ -557,11 +600,11 @@ public class ChangeControlController : Controller { | |||||||
|  |  | ||||||
|     [HttpPost] |     [HttpPost] | ||||||
|     public ActionResult ReassignMeetingActionItemResponsiblePersons(int meetingActionItemId, string newResponsiblePersonIDs, string comments) { |     public ActionResult ReassignMeetingActionItemResponsiblePersons(int meetingActionItemId, string newResponsiblePersonIDs, string comments) { | ||||||
|         if (Session[GlobalVars.IS_ADMIN] == null) |         if (GlobalVars.IsAdminValueNull(GetSession())) | ||||||
|             throw new Exception("Permission denied"); |             throw new Exception("Permission denied"); | ||||||
|  |  | ||||||
|         try { |         try { | ||||||
|             ccDMO.ReassignMeetingActionItemResponsiblePersons(meetingActionItemId, newResponsiblePersonIDs, comments, (int)Session[GlobalVars.SESSION_USERID]); |             ccDMO.ReassignMeetingActionItemResponsiblePersons(meetingActionItemId, newResponsiblePersonIDs, comments, GlobalVars.GetUserId(GetSession())); | ||||||
|         } catch (Exception ex) { |         } catch (Exception ex) { | ||||||
|             return Content(ex.Message.ToString()); |             return Content(ex.Message.ToString()); | ||||||
|         } |         } | ||||||
| @ -569,6 +612,8 @@ public class ChangeControlController : Controller { | |||||||
|         return Content("1"); |         return Content("1"); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  | #if !NET8 | ||||||
|  |  | ||||||
|     [AcceptVerbs(HttpVerbs.Post)] |     [AcceptVerbs(HttpVerbs.Post)] | ||||||
|     public ActionResult DeleteMeetingActionItem([DataSourceRequest] DataSourceRequest request, CCMeetingActionItem model) { |     public ActionResult DeleteMeetingActionItem([DataSourceRequest] DataSourceRequest request, CCMeetingActionItem model) { | ||||||
|         if (model != null && ModelState.IsValid) { |         if (model != null && ModelState.IsValid) { | ||||||
| @ -584,6 +629,8 @@ public class ChangeControlController : Controller { | |||||||
|         return Json(new[] { model }.ToDataSourceResult(request, ModelState)); |         return Json(new[] { model }.ToDataSourceResult(request, ModelState)); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  | #endif | ||||||
|  |  | ||||||
|     public void CompleteCC(int planNumber) { |     public void CompleteCC(int planNumber) { | ||||||
|         int docid = planNumber; |         int docid = planNumber; | ||||||
|         try { |         try { | ||||||
| @ -596,8 +643,8 @@ public class ChangeControlController : Controller { | |||||||
|                 detailedException = e.Message; |                 detailedException = e.Message; | ||||||
|             } |             } | ||||||
|             string exceptionString = e.Message.ToString().Trim().Length > 500 ? "Issue=" + docid.ToString() + e.Message.ToString().Substring(0, 250) : e.Message.ToString(); |             string exceptionString = e.Message.ToString().Trim().Length > 500 ? "Issue=" + docid.ToString() + e.Message.ToString().Substring(0, 250) : e.Message.ToString(); | ||||||
|             Functions.WriteEvent(_AppSettings, @User.Identity.Name + "\r\n CompleteCC - Change Control\r\n" + docid.ToString() + "\r\n" + detailedException, System.Diagnostics.EventLogEntryType.Error); |             Functions.WriteEvent(_AppSettings, GetUserIdentityName() + "\r\n CompleteCC - Change Control\r\n" + docid.ToString() + "\r\n" + detailedException, System.Diagnostics.EventLogEntryType.Error); | ||||||
|             EventLogDMO.Add(new WinEventLog() { IssueID = docid, UserID = @User.Identity.Name, DocumentType = "Change Control", OperationType = "Error", Comments = "CompleteCC - " + exceptionString }); |             EventLogDMO.Add(new WinEventLog() { IssueID = docid, UserID = GetUserIdentityName(), DocumentType = "Change Control", OperationType = "Error", Comments = "CompleteCC - " + exceptionString }); | ||||||
|             throw new Exception(e.Message); |             throw new Exception(e.Message); | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
| @ -614,16 +661,18 @@ public class ChangeControlController : Controller { | |||||||
|                 detailedException = e.Message; |                 detailedException = e.Message; | ||||||
|             } |             } | ||||||
|             string exceptionString = e.Message.ToString().Trim().Length > 500 ? "Issue=" + docid.ToString() + e.Message.ToString().Substring(0, 250) : e.Message.ToString(); |             string exceptionString = e.Message.ToString().Trim().Length > 500 ? "Issue=" + docid.ToString() + e.Message.ToString().Substring(0, 250) : e.Message.ToString(); | ||||||
|             Functions.WriteEvent(_AppSettings, @User.Identity.Name + "\r\n CompleteCC - Change Control\r\n" + docid.ToString() + "\r\n" + detailedException, System.Diagnostics.EventLogEntryType.Error); |             Functions.WriteEvent(_AppSettings, GetUserIdentityName() + "\r\n CompleteCC - Change Control\r\n" + docid.ToString() + "\r\n" + detailedException, System.Diagnostics.EventLogEntryType.Error); | ||||||
|             EventLogDMO.Add(new WinEventLog() { IssueID = docid, UserID = @User.Identity.Name, DocumentType = "Change Control", OperationType = "Error", Comments = "CancelCC - " + exceptionString }); |             EventLogDMO.Add(new WinEventLog() { IssueID = docid, UserID = GetUserIdentityName(), DocumentType = "Change Control", OperationType = "Error", Comments = "CancelCC - " + exceptionString }); | ||||||
|             throw new Exception(e.Message); |             throw new Exception(e.Message); | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  | #if !NET8 | ||||||
|  |  | ||||||
|     public ActionResult AttachSaveActionItem(IEnumerable<HttpPostedFileBase> AIfiles, int planNumber, int attachID) { |     public ActionResult AttachSaveActionItem(IEnumerable<HttpPostedFileBase> AIfiles, int planNumber, int attachID) { | ||||||
|         // The Name of the Upload component is "files" |         // The Name of the Upload component is "files" | ||||||
|         if (AIfiles != null) { |         if (AIfiles != null) { | ||||||
|             int userId = (int)Session[GlobalVars.SESSION_USERID]; |             int userId = GlobalVars.GetUserId(GetSession()); | ||||||
|             foreach (var file in AIfiles) { |             foreach (var file in AIfiles) { | ||||||
|                 ChangeControlHelper.AttachSaveActionItem(_AppSettings, ccDMO, planNumber, attachID, userId, file.FileName, file.InputStream); |                 ChangeControlHelper.AttachSaveActionItem(_AppSettings, ccDMO, planNumber, attachID, userId, file.FileName, file.InputStream); | ||||||
|             } |             } | ||||||
| @ -631,6 +680,8 @@ public class ChangeControlController : Controller { | |||||||
|         return Content(""); |         return Content(""); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  | #endif | ||||||
|  |  | ||||||
|     public FileResult DownloadActionItemFile(string fileGuid, int planNumber) { |     public FileResult DownloadActionItemFile(string fileGuid, int planNumber) { | ||||||
|         string fileName = ccDMO.GetActionItemFileName(fileGuid); |         string fileName = ccDMO.GetActionItemFileName(fileGuid); | ||||||
|  |  | ||||||
| @ -658,36 +709,36 @@ public class ChangeControlController : Controller { | |||||||
|     } |     } | ||||||
|  |  | ||||||
|     public void ReleaseLockOnDocument(int planNumber) { |     public void ReleaseLockOnDocument(int planNumber) { | ||||||
|         ccDMO.ReleaseLockOnDocument((int)Session[GlobalVars.SESSION_USERID], planNumber); |         ccDMO.ReleaseLockOnDocument(GlobalVars.GetUserId(GetSession()), planNumber); | ||||||
|  |  | ||||||
|         try { |         try { | ||||||
|             ccDMO.ReleaseLockOnDocument((int)Session[GlobalVars.SESSION_USERID], planNumber); |             ccDMO.ReleaseLockOnDocument(GlobalVars.GetUserId(GetSession()), planNumber); | ||||||
|         } catch (Exception e) { |         } catch (Exception e) { | ||||||
|             try { |             try { | ||||||
|                 Functions.WriteEvent(_AppSettings, @User.Identity.Name + "\r\n ReleaseLockOnDocument LD\r\n" + planNumber.ToString() + "\r\n" + e.Message, System.Diagnostics.EventLogEntryType.Error); |                 Functions.WriteEvent(_AppSettings, GetUserIdentityName() + "\r\n ReleaseLockOnDocument LD\r\n" + planNumber.ToString() + "\r\n" + e.Message, System.Diagnostics.EventLogEntryType.Error); | ||||||
|             } catch { } |             } catch { } | ||||||
|             ccDMO.ReleaseLockOnDocument(-1, planNumber); |             ccDMO.ReleaseLockOnDocument(-1, planNumber); | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     public JsonResult GetAllUsersList() { |     public JsonResult GetAllUsersList() { | ||||||
|         UserAccountDMO userDMO = new UserAccountDMO(); |         UserAccountDMO userDMO = new(); | ||||||
|         IEnumerable<LoginModel> userlist = userDMO.GetAllUsers(); |         IEnumerable<LoginModel> userlist = userDMO.GetAllUsers(); | ||||||
|         return Json(userlist, JsonRequestBehavior.AllowGet); |         return GetJsonResult(userlist); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     [HttpPost] |     [HttpPost] | ||||||
|     public void ReAssignOwnerByAdmin(string planNumber, string comments, int newOwnerId) { |     public void ReAssignOwnerByAdmin(string planNumber, string comments, int newOwnerId) { | ||||||
|         if (Session[GlobalVars.IS_ADMIN] == null) |         if (GlobalVars.IsAdminValueNull(GetSession())) | ||||||
|             throw new Exception("Permission denied"); |             throw new Exception("Permission denied"); | ||||||
|  |  | ||||||
|         int planNumberInt = 0; |         int planNumberInt = 0; | ||||||
|  |  | ||||||
|         try { |         try { | ||||||
|             // remove non-numeric characters from Plan # then convert to int |             // remove non-numeric characters from Plan # then convert to int | ||||||
|             planNumberInt = Int32.Parse(new String(planNumber.Where<char>(c => char.IsNumber(c)).ToArray())); |             planNumberInt = int.Parse(new string(planNumber.Where(char.IsNumber).ToArray())); | ||||||
|  |  | ||||||
|             ccDMO.ReassignOwner(planNumberInt, newOwnerId, comments, (int)Session[GlobalVars.SESSION_USERID]); |             ccDMO.ReassignOwner(planNumberInt, newOwnerId, comments, GlobalVars.GetUserId(GetSession())); | ||||||
|         } catch (Exception e) { |         } catch (Exception e) { | ||||||
|             string detailedException = ""; |             string detailedException = ""; | ||||||
|             try { |             try { | ||||||
| @ -698,17 +749,46 @@ public class ChangeControlController : Controller { | |||||||
|             string exceptionString = e.Message.ToString().Trim(); |             string exceptionString = e.Message.ToString().Trim(); | ||||||
|             if (exceptionString.Length > 450) |             if (exceptionString.Length > 450) | ||||||
|                 exceptionString = exceptionString.Substring(0, 450); |                 exceptionString = exceptionString.Substring(0, 450); | ||||||
|             Functions.WriteEvent(_AppSettings, @User.Identity.Name + "\r\n ReAssignOwnerByAdmin\r\n" + planNumber.ToString() + "\r\n" + detailedException, System.Diagnostics.EventLogEntryType.Error); |             Functions.WriteEvent(_AppSettings, GetUserIdentityName() + "\r\n ReAssignOwnerByAdmin\r\n" + planNumber.ToString() + "\r\n" + detailedException, System.Diagnostics.EventLogEntryType.Error); | ||||||
|             EventLogDMO.Add(new WinEventLog() { IssueID = planNumberInt, UserID = @User.Identity.Name, DocumentType = "ChangeControl", OperationType = "Error", Comments = "ReAssignOwnerByAdmin - " + exceptionString }); |             EventLogDMO.Add(new WinEventLog() { IssueID = planNumberInt, UserID = GetUserIdentityName(), DocumentType = "ChangeControl", OperationType = "Error", Comments = "ReAssignOwnerByAdmin - " + exceptionString }); | ||||||
|             throw new Exception(e.Message); |             throw new Exception(e.Message); | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     public ActionResult GetPCRBMesaTitle(int issueID) { |     public ActionResult GetPCRBMesaTitle(int issueID) { | ||||||
|         int isItarCompliant = 1; |         int isItarCompliant = 1; | ||||||
|         ChangeControlViewModel cc = ccDMO.GetChangeControlRead(issueID, out isItarCompliant, (int)Session[GlobalVars.SESSION_USERID]); |         ChangeControlViewModel cc = ccDMO.GetChangeControlRead(issueID, out isItarCompliant, GlobalVars.GetUserId(GetSession())); | ||||||
|         string content = cc.PlanTitle; |         string content = cc.PlanTitle; | ||||||
|         return Content(content); |         return Content(content); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  | #if !NET8 | ||||||
|  |  | ||||||
|  |     private System.Web.HttpSessionStateBase GetSession() => | ||||||
|  |         Session; | ||||||
|  |  | ||||||
|  |     private JsonResult GetJsonResult(object? data) => | ||||||
|  |         Json(data, JsonRequestBehavior.AllowGet); | ||||||
|  |  | ||||||
|  |     private bool IsAjaxRequest() => | ||||||
|  |         Request.IsAjaxRequest(); | ||||||
|  |  | ||||||
|  | #endif | ||||||
|  |  | ||||||
|  | #if NET8 | ||||||
|  |  | ||||||
|  |     private Microsoft.AspNetCore.Http.ISession GetSession() => | ||||||
|  |         HttpContext.Session; | ||||||
|  |  | ||||||
|  |     private JsonResult GetJsonResult(object? data) => | ||||||
|  |         Json(data); | ||||||
|  |  | ||||||
|  |     private bool IsAjaxRequest() => | ||||||
|  |         Request.Headers.TryGetValue("X-Requested-With", out Microsoft.Extensions.Primitives.StringValues strings) && strings[0] == "XMLHttpRequest"; | ||||||
|  |  | ||||||
|  | #endif | ||||||
|  |  | ||||||
|  |     private string GetUserIdentityName() => | ||||||
|  |         @User.Identity.Name; | ||||||
|  |  | ||||||
| } | } | ||||||
| @ -1,43 +1,63 @@ | |||||||
| using System; | using System; | ||||||
| using System.Collections.Generic; | using System.Collections.Generic; | ||||||
| using System.Configuration; |  | ||||||
| using System.Linq; | using System.Linq; | ||||||
|  | #if !NET8 | ||||||
| using System.Web; | using System.Web; | ||||||
| using System.Web.Mvc; | using System.Web.Mvc; | ||||||
|  | #endif | ||||||
|  |  | ||||||
|  | #if NET8 | ||||||
|  | using Microsoft.AspNetCore.Mvc; | ||||||
|  | using Microsoft.AspNetCore.Authorization; | ||||||
|  | #endif | ||||||
|  |  | ||||||
| using Fab2ApprovalSystem.DMO; | using Fab2ApprovalSystem.DMO; | ||||||
| using Fab2ApprovalSystem.Misc; | using Fab2ApprovalSystem.Misc; | ||||||
| using Fab2ApprovalSystem.Models; | using Fab2ApprovalSystem.Models; | ||||||
|  | #if !NET8 | ||||||
| using Fab2ApprovalSystem.Utilities; | using Fab2ApprovalSystem.Utilities; | ||||||
|  | #endif | ||||||
| using Fab2ApprovalSystem.ViewModels; | using Fab2ApprovalSystem.ViewModels; | ||||||
|  |  | ||||||
|  | #if !NET8 | ||||||
| using Kendo.Mvc.Extensions; | using Kendo.Mvc.Extensions; | ||||||
| using Kendo.Mvc.UI; | using Kendo.Mvc.UI; | ||||||
|  | #endif | ||||||
|  |  | ||||||
| namespace Fab2ApprovalSystem.Controllers; | namespace Fab2ApprovalSystem.Controllers; | ||||||
|  |  | ||||||
| [Authorize] | [Authorize] | ||||||
|  | #if !NET8 | ||||||
| [OutputCache(NoStore = true, Duration = 0, VaryByParam = "*")] | [OutputCache(NoStore = true, Duration = 0, VaryByParam = "*")] | ||||||
| [SessionExpireFilter] | [SessionExpireFilter] | ||||||
|  | #endif | ||||||
|  | #if NET8 | ||||||
|  | [Route("[controller]")] | ||||||
|  | #endif | ||||||
| public class CorrectiveActionController : Controller { | public class CorrectiveActionController : Controller { | ||||||
|  |  | ||||||
|     AuditDMO auditDMO = new AuditDMO(GlobalVars.AppSettings); |     private readonly AuditDMO auditDMO = new(GlobalVars.AppSettings); | ||||||
|     CorrectiveActionDMO caDMO = new CorrectiveActionDMO(); |     private readonly CorrectiveActionDMO caDMO = new(); | ||||||
|     WorkflowDMO wfDMO = new WorkflowDMO(); |     private readonly WorkflowDMO wfDMO = new(); | ||||||
|     private readonly AppSettings _AppSettings = GlobalVars.AppSettings; |     private readonly AppSettings _AppSettings = GlobalVars.AppSettings; | ||||||
|     UserAccountDMO userDMO = new UserAccountDMO(); |     private readonly UserAccountDMO userDMO = new(); | ||||||
|  |  | ||||||
|  | #if !NET8 | ||||||
|  |  | ||||||
|     FileUtilities<System.Web.Mvc.FileContentResult> fileUtilities = new FileUtilities<System.Web.Mvc.FileContentResult>(); |     FileUtilities<System.Web.Mvc.FileContentResult> fileUtilities = new FileUtilities<System.Web.Mvc.FileContentResult>(); | ||||||
|  |  | ||||||
|  | #endif | ||||||
|  |  | ||||||
|     public ActionResult Index() { |     public ActionResult Index() { | ||||||
|         return View(); |         return View(); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     public ActionResult Create() { |     public ActionResult Create() { | ||||||
|         CorrectiveAction ca = new CorrectiveAction(); |         CorrectiveAction ca = new(); | ||||||
|         try { |         try { | ||||||
|             // TODO: Add insert logic here |             // TODO: Add insert logic here | ||||||
|  |  | ||||||
|             ca.RequestorID = (int)Session[GlobalVars.SESSION_USERID]; |             ca.RequestorID = GlobalVars.GetUserId(GetSession()); | ||||||
|             caDMO.InsertCA(ca); |             caDMO.InsertCA(ca); | ||||||
|             return RedirectToAction("Edit", new { issueID = ca.CANo }); |             return RedirectToAction("Edit", new { issueID = ca.CANo }); | ||||||
|         } catch (Exception e) { |         } catch (Exception e) { | ||||||
| @ -48,18 +68,18 @@ public class CorrectiveActionController : Controller { | |||||||
|                 detailedException = e.Message; |                 detailedException = e.Message; | ||||||
|             } |             } | ||||||
|             string exceptionString = e.Message.ToString().Trim().Length > 500 ? "Issue=" + ca.CANo.ToString() + e.Message.ToString().Substring(0, 250) : e.Message.ToString(); |             string exceptionString = e.Message.ToString().Trim().Length > 500 ? "Issue=" + ca.CANo.ToString() + e.Message.ToString().Substring(0, 250) : e.Message.ToString(); | ||||||
|             Functions.WriteEvent(_AppSettings, @User.Identity.Name + "\r\n SubmitDocument - Audit\r\n" + ca.CANo.ToString() + "\r\n" + detailedException, System.Diagnostics.EventLogEntryType.Error); |             Functions.WriteEvent(_AppSettings, GetUserIdentityName() + "\r\n SubmitDocument - Audit\r\n" + ca.CANo.ToString() + "\r\n" + detailedException, System.Diagnostics.EventLogEntryType.Error); | ||||||
|             EventLogDMO.Add(new WinEventLog() { IssueID = ca.CANo, UserID = @User.Identity.Name, DocumentType = "CA", OperationType = "Error", Comments = "SubmitDocument - " + exceptionString }); |             EventLogDMO.Add(new WinEventLog() { IssueID = ca.CANo, UserID = GetUserIdentityName(), DocumentType = "CA", OperationType = "Error", Comments = "SubmitDocument - " + exceptionString }); | ||||||
|             throw new Exception(e.Message); |             throw new Exception(e.Message); | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     public ActionResult CreateFromAudit(string title) { |     public ActionResult CreateFromAudit(string title) { | ||||||
|         CorrectiveAction ca = new CorrectiveAction(); |         CorrectiveAction ca = new(); | ||||||
|         try { |         try { | ||||||
|             // TODO: Add insert logic here |             // TODO: Add insert logic here | ||||||
|  |  | ||||||
|             ca.RequestorID = (int)Session[GlobalVars.SESSION_USERID]; |             ca.RequestorID = GlobalVars.GetUserId(GetSession()); | ||||||
|             ca.CASource = "Audit"; |             ca.CASource = "Audit"; | ||||||
|             caDMO.InsertCA(ca); |             caDMO.InsertCA(ca); | ||||||
|             string test = ca.CANoDisp; |             string test = ca.CANoDisp; | ||||||
| @ -72,43 +92,43 @@ public class CorrectiveActionController : Controller { | |||||||
|                 detailedException = e.Message; |                 detailedException = e.Message; | ||||||
|             } |             } | ||||||
|             string exceptionString = e.Message.ToString().Trim().Length > 500 ? "Issue=" + ca.CANo.ToString() + e.Message.ToString().Substring(0, 250) : e.Message.ToString(); |             string exceptionString = e.Message.ToString().Trim().Length > 500 ? "Issue=" + ca.CANo.ToString() + e.Message.ToString().Substring(0, 250) : e.Message.ToString(); | ||||||
|             Functions.WriteEvent(_AppSettings, @User.Identity.Name + "\r\n SubmitDocument - Audit\r\n" + ca.CANo.ToString() + "\r\n" + detailedException, System.Diagnostics.EventLogEntryType.Error); |             Functions.WriteEvent(_AppSettings, GetUserIdentityName() + "\r\n SubmitDocument - Audit\r\n" + ca.CANo.ToString() + "\r\n" + detailedException, System.Diagnostics.EventLogEntryType.Error); | ||||||
|             EventLogDMO.Add(new WinEventLog() { IssueID = ca.CANo, UserID = @User.Identity.Name, DocumentType = "CA", OperationType = "Error", Comments = "SubmitDocument - " + exceptionString }); |             EventLogDMO.Add(new WinEventLog() { IssueID = ca.CANo, UserID = GetUserIdentityName(), DocumentType = "CA", OperationType = "Error", Comments = "SubmitDocument - " + exceptionString }); | ||||||
|             throw new Exception(e.Message); |             throw new Exception(e.Message); | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     public ActionResult Edit(int issueID) { |     public ActionResult Edit(int issueID) { | ||||||
|         CorrectiveAction ca = new CorrectiveAction(); |         CorrectiveAction ca = new(); | ||||||
|         string s = Functions.ReturnCANoStringFormat(issueID); |         string s = Functions.ReturnCANoStringFormat(issueID); | ||||||
|         try { |         try { | ||||||
|             List<int> _8DQAList = caDMO.Get8DQA(); |             List<int> _8DQAList = caDMO.Get8DQA(); | ||||||
|  |  | ||||||
|             int QAs = _8DQAList.Find(delegate (int al) { return al == (int)Session[GlobalVars.SESSION_USERID]; }); |             int QAs = _8DQAList.Find(delegate (int al) { return al == GlobalVars.GetUserId(GetSession()); }); | ||||||
|  |  | ||||||
|             ViewBag.Is8DQA = "false"; |             ViewBag.Is8DQA = "false"; | ||||||
|             if (QAs != 0) { |             if (QAs != 0) { | ||||||
|                 ViewBag.Is8DQA = "true"; |                 ViewBag.Is8DQA = "true"; | ||||||
|             } |             } | ||||||
|  |  | ||||||
|             ca = caDMO.GetCAItem(issueID, (int)Session[GlobalVars.SESSION_USERID]); |             ca = caDMO.GetCAItem(issueID, GlobalVars.GetUserId(GetSession())); | ||||||
|  |  | ||||||
|             ViewBag.CanCompleteCA = "false"; |             ViewBag.CanCompleteCA = "false"; | ||||||
|             if (ca.D1AssigneeID == (int)Session[GlobalVars.SESSION_USERID]) |             if (ca.D1AssigneeID == GlobalVars.GetUserId(GetSession())) | ||||||
|                 ViewBag.CanCompleteCA = "true"; |                 ViewBag.CanCompleteCA = "true"; | ||||||
|  |  | ||||||
|             List<ApproversListViewModel> userList = MiscDMO.GetPendingApproversListByDocument(issueID, ca.CurrentStep, (int)GlobalVars.DocumentType.CorrectiveAction); |             List<ApproversListViewModel> userList = MiscDMO.GetPendingApproversListByDocument(issueID, ca.CurrentStep, (int)GlobalVars.DocumentType.CorrectiveAction); | ||||||
|             ApproversListViewModel approver = userList.Find(delegate (ApproversListViewModel al) { return al.UserID == (int)Session[GlobalVars.SESSION_USERID]; }); |             ApproversListViewModel approver = userList.Find(delegate (ApproversListViewModel al) { return al.UserID == GlobalVars.GetUserId(GetSession()); }); | ||||||
|             if (approver == null) |             if (approver == null) | ||||||
|                 ViewBag.IsApprover = "false"; |                 ViewBag.IsApprover = "false"; | ||||||
|             else |             else | ||||||
|                 ViewBag.IsApprover = "true"; |                 ViewBag.IsApprover = "true"; | ||||||
|  |  | ||||||
|             ViewBag.IsAIAssignee = caDMO.IsAIAssignee((int)Session[GlobalVars.SESSION_USERID], issueID); |             ViewBag.IsAIAssignee = caDMO.IsAIAssignee(GlobalVars.GetUserId(GetSession()), issueID); | ||||||
|             ViewBag.IsSectionApprover = caDMO.IsUserSectionApprover(ca.CANo, (int)Session[GlobalVars.SESSION_USERID]); |             ViewBag.IsSectionApprover = caDMO.IsUserSectionApprover(ca.CANo, GlobalVars.GetUserId(GetSession())); | ||||||
|             ViewBag.AuditFindingCategoriesOptions = auditDMO.GetAuditFindingCategories().ToList(); |             ViewBag.AuditFindingCategoriesOptions = auditDMO.GetAuditFindingCategories().ToList(); | ||||||
|             if (ca.RelatedAudit != null && ca.RelatedAudit > 0) { |             if (ca.RelatedAudit > 0) { | ||||||
|                 Audit audit = auditDMO.GetAuditItem(ca.RelatedAudit, (int)Session[GlobalVars.SESSION_USERID]); |                 Audit audit = auditDMO.GetAuditItem(ca.RelatedAudit, GlobalVars.GetUserId(GetSession())); | ||||||
|                 IEnumerable<AuditFindings> auditFindings = auditDMO.GetAuditFindingsList(audit.AuditNo); |                 IEnumerable<AuditFindings> auditFindings = auditDMO.GetAuditFindingsList(audit.AuditNo); | ||||||
|  |  | ||||||
|                 AuditFindings relatedFinding = (from a in auditFindings where a.CANo == ca.CANo select a).First(); |                 AuditFindings relatedFinding = (from a in auditFindings where a.CANo == ca.CANo select a).First(); | ||||||
| @ -129,7 +149,7 @@ public class CorrectiveActionController : Controller { | |||||||
|             if ((ca.ClosedDate != null) || |             if ((ca.ClosedDate != null) || | ||||||
|                  // TODO Aproverslist================================================================ |                  // TODO Aproverslist================================================================ | ||||||
|                  (ca.ClosedDate != null && ViewBag.IsApprover == "false" && ViewBag.IsAIAssignee == "false") || |                  (ca.ClosedDate != null && ViewBag.IsApprover == "false" && ViewBag.IsAIAssignee == "false") || | ||||||
|                 (ca.RecordLockIndicator && ca.RecordLockedBy != (int)Session[GlobalVars.SESSION_USERID]) || (ca.Status == 11 && ViewBag.IsApprover == "false")) { |                 (ca.RecordLockIndicator && ca.RecordLockedBy != GlobalVars.GetUserId(GetSession())) || (ca.Status == 11 && ViewBag.IsApprover == "false")) { | ||||||
|                 return RedirectToAction("ReadOnlyCA", new { caNo = ca.CANo }); |                 return RedirectToAction("ReadOnlyCA", new { caNo = ca.CANo }); | ||||||
|             } else { |             } else { | ||||||
|                 ViewBag.ECNList = caDMO.GetECNList(); |                 ViewBag.ECNList = caDMO.GetECNList(); | ||||||
| @ -154,8 +174,8 @@ public class CorrectiveActionController : Controller { | |||||||
|                 detailedException = e.Message; |                 detailedException = e.Message; | ||||||
|             } |             } | ||||||
|             string exceptionString = e.Message.ToString().Trim().Length > 500 ? "Issue=" + ca.CANo.ToString() + e.Message.ToString().Substring(0, 250) : e.Message.ToString(); |             string exceptionString = e.Message.ToString().Trim().Length > 500 ? "Issue=" + ca.CANo.ToString() + e.Message.ToString().Substring(0, 250) : e.Message.ToString(); | ||||||
|             Functions.WriteEvent(_AppSettings, @User.Identity.Name + "\r\n Edit - CA\r\n" + ca.CANo.ToString() + "\r\n" + detailedException, System.Diagnostics.EventLogEntryType.Error); |             Functions.WriteEvent(_AppSettings, GetUserIdentityName() + "\r\n Edit - CA\r\n" + ca.CANo.ToString() + "\r\n" + detailedException, System.Diagnostics.EventLogEntryType.Error); | ||||||
|             EventLogDMO.Add(new WinEventLog() { IssueID = ca.CANo, UserID = @User.Identity.Name, DocumentType = "Audit", OperationType = "Error", Comments = "Edit - " + exceptionString }); |             EventLogDMO.Add(new WinEventLog() { IssueID = ca.CANo, UserID = GetUserIdentityName(), DocumentType = "Audit", OperationType = "Error", Comments = "Edit - " + exceptionString }); | ||||||
|             throw new Exception(e.Message); |             throw new Exception(e.Message); | ||||||
|         } |         } | ||||||
|  |  | ||||||
| @ -164,7 +184,7 @@ public class CorrectiveActionController : Controller { | |||||||
|  |  | ||||||
|     [HttpPost] |     [HttpPost] | ||||||
|     public ActionResult Edit(CorrectiveAction model) { |     public ActionResult Edit(CorrectiveAction model) { | ||||||
|         int currentUserId = (int)Session[GlobalVars.SESSION_USERID]; |         int currentUserId = GlobalVars.GetUserId(GetSession()); | ||||||
|         CorrectiveAction caPrevious = caDMO.GetCAItemReadOnly(model.CANo, currentUserId); |         CorrectiveAction caPrevious = caDMO.GetCAItemReadOnly(model.CANo, currentUserId); | ||||||
|         if ((currentUserId != caPrevious.D1AssigneeID && currentUserId != caPrevious.QAID && currentUserId != caPrevious.RequestorID)) { |         if ((currentUserId != caPrevious.D1AssigneeID && currentUserId != caPrevious.QAID && currentUserId != caPrevious.RequestorID)) { | ||||||
|             return Content("User is not authorized to save the CA."); |             return Content("User is not authorized to save the CA."); | ||||||
| @ -201,7 +221,7 @@ public class CorrectiveActionController : Controller { | |||||||
|                 return Content("Successfully Saved...Approval initiated!"); |                 return Content("Successfully Saved...Approval initiated!"); | ||||||
|             } |             } | ||||||
|             if (model.TriggerApproval) { |             if (model.TriggerApproval) { | ||||||
|                 caDMO.StartApproval(model.CANo, (int)Session[GlobalVars.SESSION_USERID], model.WorkFlowNumber); |                 caDMO.StartApproval(model.CANo, GlobalVars.GetUserId(GetSession()), model.WorkFlowNumber); | ||||||
|                 NotifyApprovers(model.CANo, 1); |                 NotifyApprovers(model.CANo, 1); | ||||||
|                 return Content("Successfully Saved...Approval initiated!"); |                 return Content("Successfully Saved...Approval initiated!"); | ||||||
|             } |             } | ||||||
| @ -213,9 +233,9 @@ public class CorrectiveActionController : Controller { | |||||||
|     } |     } | ||||||
|  |  | ||||||
|     public ActionResult ReadOnlyCA(int caNo) { |     public ActionResult ReadOnlyCA(int caNo) { | ||||||
|         CorrectiveAction ca = new CorrectiveAction(); |         CorrectiveAction ca = new(); | ||||||
|  |  | ||||||
|         ca = caDMO.GetCAItemReadOnly(caNo, (int)Session[GlobalVars.SESSION_USERID]); |         ca = caDMO.GetCAItemReadOnly(caNo, GlobalVars.GetUserId(GetSession())); | ||||||
|         if (ca.Status == 1 || ca.Status == 2 || ca.Status == 11 || ca.ClosedDate != null) { |         if (ca.Status == 1 || ca.Status == 2 || ca.Status == 11 || ca.ClosedDate != null) { | ||||||
|             ViewBag.UserList = caDMO.GetAllUserList(); |             ViewBag.UserList = caDMO.GetAllUserList(); | ||||||
|         } else { |         } else { | ||||||
| @ -227,8 +247,8 @@ public class CorrectiveActionController : Controller { | |||||||
|         ViewBag.D5D6ImprovementIDs = caDMO.GetD5D6Improvement(); |         ViewBag.D5D6ImprovementIDs = caDMO.GetD5D6Improvement(); | ||||||
|  |  | ||||||
|         ViewBag.AuditFindingCategoriesOptions = auditDMO.GetAuditFindingCategories().ToList(); |         ViewBag.AuditFindingCategoriesOptions = auditDMO.GetAuditFindingCategories().ToList(); | ||||||
|         if (ca.RelatedAudit != null && ca.RelatedAudit > 0) { |         if (ca.RelatedAudit > 0) { | ||||||
|             Audit audit = auditDMO.GetAuditItem(ca.RelatedAudit, (int)Session[GlobalVars.SESSION_USERID]); |             Audit audit = auditDMO.GetAuditItem(ca.RelatedAudit, GlobalVars.GetUserId(GetSession())); | ||||||
|             IEnumerable<AuditFindings> auditFindings = auditDMO.GetAuditFindingsList(audit.AuditNo); |             IEnumerable<AuditFindings> auditFindings = auditDMO.GetAuditFindingsList(audit.AuditNo); | ||||||
|  |  | ||||||
|             AuditFindings relatedFinding = (from a in auditFindings where a.CANo == ca.CANo select a).First(); |             AuditFindings relatedFinding = (from a in auditFindings where a.CANo == ca.CANo select a).First(); | ||||||
| @ -254,26 +274,32 @@ public class CorrectiveActionController : Controller { | |||||||
|             caDMO.ReleaseLockOnDocument(-1, issueID); |             caDMO.ReleaseLockOnDocument(-1, issueID); | ||||||
|         } catch (Exception e) { |         } catch (Exception e) { | ||||||
|             try { |             try { | ||||||
|                 Functions.WriteEvent(_AppSettings, @User.Identity.Name + "\r\n ReleaseLockOnDocument CA\r\n" + issueID.ToString() + "\r\n" + e.Message, System.Diagnostics.EventLogEntryType.Error); |                 Functions.WriteEvent(_AppSettings, GetUserIdentityName() + "\r\n ReleaseLockOnDocument CA\r\n" + issueID.ToString() + "\r\n" + e.Message, System.Diagnostics.EventLogEntryType.Error); | ||||||
|             } catch { } |             } catch { } | ||||||
|             caDMO.ReleaseLockOnDocument(-1, issueID); |             caDMO.ReleaseLockOnDocument(-1, issueID); | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  | #if !NET8 | ||||||
|  |  | ||||||
|     public ActionResult GetD2AttachmentList([DataSourceRequest] DataSourceRequest request, int caNo) { |     public ActionResult GetD2AttachmentList([DataSourceRequest] DataSourceRequest request, int caNo) { | ||||||
|  |  | ||||||
|         return Json(caDMO.GetCAAttachmentsList(caNo, Functions.CASectionMapper(GlobalVars.CASection.D2)).ToDataSourceResult(request)); |         return Json(caDMO.GetCAAttachmentsList(caNo, Functions.CASectionMapper(GlobalVars.CASection.D2)).ToDataSourceResult(request)); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     public ActionResult Attachment_Read([DataSourceRequest] DataSourceRequest request, int caNO) { |     public ActionResult Attachment_Read([DataSourceRequest] DataSourceRequest request, int caNO) { | ||||||
|         return Json(caDMO.GetCAAttachmentsList(caNO, "Main").ToDataSourceResult(request), JsonRequestBehavior.AllowGet); |         return GetJsonResult(caDMO.GetCAAttachmentsList(caNO, "Main").ToDataSourceResult(request)); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  | #endif | ||||||
|  |  | ||||||
|     [HttpPost] |     [HttpPost] | ||||||
|     public void DeleteCAAttachment(int attachmentID) { |     public void DeleteCAAttachment(int attachmentID) { | ||||||
|         caDMO.DeleteCAAttachment(attachmentID); |         caDMO.DeleteCAAttachment(attachmentID); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  | #if !NET8 | ||||||
|  |  | ||||||
|     public ActionResult DownloadCAAttachment(string fileGuid, int caNo) { |     public ActionResult DownloadCAAttachment(string fileGuid, int caNo) { | ||||||
|         try { |         try { | ||||||
|             string fileName = caDMO.GetCAAttachmentFileName(fileGuid); |             string fileName = caDMO.GetCAAttachmentFileName(fileGuid); | ||||||
| @ -312,7 +338,7 @@ public class CorrectiveActionController : Controller { | |||||||
|         try { |         try { | ||||||
|             // The Name of the Upload component is "files" |             // The Name of the Upload component is "files" | ||||||
|             if (files != null) { |             if (files != null) { | ||||||
|                 int userId = (int)Session[GlobalVars.SESSION_USERID]; |                 int userId = GlobalVars.GetUserId(GetSession()); | ||||||
|                 foreach (var file in files) { |                 foreach (var file in files) { | ||||||
|                     CorrectiveActionHelper.AttachSave(_AppSettings, caDMO, caNo, userId, file.FileName, file.InputStream); |                     CorrectiveActionHelper.AttachSave(_AppSettings, caDMO, caNo, userId, file.FileName, file.InputStream); | ||||||
|                 } |                 } | ||||||
| @ -328,6 +354,8 @@ public class CorrectiveActionController : Controller { | |||||||
|         return Json(caDMO.GetD3ContainmentActions(caNo).ToDataSourceResult(request)); |         return Json(caDMO.GetD3ContainmentActions(caNo).ToDataSourceResult(request)); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  | #endif | ||||||
|  |  | ||||||
|     public ActionResult UpdateD3ContainmentAction(D3ContainmentAction data) { |     public ActionResult UpdateD3ContainmentAction(D3ContainmentAction data) { | ||||||
|         caDMO.UpdateD3ContainmentAction(data); |         caDMO.UpdateD3ContainmentAction(data); | ||||||
|         if (data.ResponsibilityOwnerID != data.CurrentResponsibilityOwnerID && data.ResponsibilityOwnerID != 0) { |         if (data.ResponsibilityOwnerID != data.CurrentResponsibilityOwnerID && data.ResponsibilityOwnerID != 0) { | ||||||
| @ -339,7 +367,7 @@ public class CorrectiveActionController : Controller { | |||||||
|  |  | ||||||
|     public ActionResult InsertD3ContainmentAction(D3ContainmentAction data) { |     public ActionResult InsertD3ContainmentAction(D3ContainmentAction data) { | ||||||
|         caDMO.InsertD3ContainmentAction(data); |         caDMO.InsertD3ContainmentAction(data); | ||||||
|         if (data.ResponsibilityOwnerID != null && data.ResponsibilityOwnerID != 0) { |         if (data.ResponsibilityOwnerID != 0) { | ||||||
|             NotifyActionItemOwner(data.CANo, data.ECD, data.ResponsibilityOwnerID, "CorrectiveActionAIAssigned.txt"); |             NotifyActionItemOwner(data.CANo, data.ECD, data.ResponsibilityOwnerID, "CorrectiveActionAIAssigned.txt"); | ||||||
|         } |         } | ||||||
|         return Content(""); |         return Content(""); | ||||||
| @ -350,6 +378,8 @@ public class CorrectiveActionController : Controller { | |||||||
|         caDMO.DeleteD3ContainmentActionItem(d3ContainmentActionID); |         caDMO.DeleteD3ContainmentActionItem(d3ContainmentActionID); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  | #if !NET8 | ||||||
|  |  | ||||||
|     public ActionResult GetD4AttachmentList([DataSourceRequest] DataSourceRequest request, int caNo) { |     public ActionResult GetD4AttachmentList([DataSourceRequest] DataSourceRequest request, int caNo) { | ||||||
|         return Json(caDMO.GetCAAttachmentsList(caNo, Functions.CASectionMapper(GlobalVars.CASection.D4)).ToDataSourceResult(request)); |         return Json(caDMO.GetCAAttachmentsList(caNo, Functions.CASectionMapper(GlobalVars.CASection.D4)).ToDataSourceResult(request)); | ||||||
|     } |     } | ||||||
| @ -358,7 +388,7 @@ public class CorrectiveActionController : Controller { | |||||||
|         try { |         try { | ||||||
|             // The Name of the Upload component is "files" |             // The Name of the Upload component is "files" | ||||||
|             if (D4Files != null) { |             if (D4Files != null) { | ||||||
|                 int userId = (int)Session[GlobalVars.SESSION_USERID]; |                 int userId = GlobalVars.GetUserId(GetSession()); | ||||||
|                 foreach (var file in D4Files) { |                 foreach (var file in D4Files) { | ||||||
|                     CorrectiveActionHelper.D4FilesAttachSave(_AppSettings, caDMO, caNo, userId, file.FileName, file.InputStream); |                     CorrectiveActionHelper.D4FilesAttachSave(_AppSettings, caDMO, caNo, userId, file.FileName, file.InputStream); | ||||||
|                 } |                 } | ||||||
| @ -374,6 +404,8 @@ public class CorrectiveActionController : Controller { | |||||||
|         return Json(caDMO.GetD5D6CorrectivetActions(caNo).ToDataSourceResult(request)); |         return Json(caDMO.GetD5D6CorrectivetActions(caNo).ToDataSourceResult(request)); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  | #endif | ||||||
|  |  | ||||||
|     public ActionResult InsertD5D6CAItem(D5D6CorrectivetAction data) { |     public ActionResult InsertD5D6CAItem(D5D6CorrectivetAction data) { | ||||||
|         try { |         try { | ||||||
|             caDMO.InsertD5D6CorrectivetAction(data); |             caDMO.InsertD5D6CorrectivetAction(data); | ||||||
| @ -385,7 +417,7 @@ public class CorrectiveActionController : Controller { | |||||||
|  |  | ||||||
|     public ActionResult UpdateD5D6CAItem(D5D6CorrectivetAction data) { |     public ActionResult UpdateD5D6CAItem(D5D6CorrectivetAction data) { | ||||||
|         D5D6CorrectivetAction previousData = caDMO.GetD5D5CAItem(data.ID); |         D5D6CorrectivetAction previousData = caDMO.GetD5D5CAItem(data.ID); | ||||||
|         CorrectiveAction caData = caDMO.GetCAItem(data.CANo, (int)Session[GlobalVars.SESSION_USERID]); |         CorrectiveAction caData = caDMO.GetCAItem(data.CANo, GlobalVars.GetUserId(GetSession())); | ||||||
|         try { |         try { | ||||||
|             caDMO.UpdateD5D6CorrectivetAction(data); |             caDMO.UpdateD5D6CorrectivetAction(data); | ||||||
|         } catch (Exception e) { |         } catch (Exception e) { | ||||||
| @ -404,26 +436,32 @@ public class CorrectiveActionController : Controller { | |||||||
|     } |     } | ||||||
|  |  | ||||||
|     public ActionResult GetD5D6CAItem(int d5d6CAID) { |     public ActionResult GetD5D6CAItem(int d5d6CAID) { | ||||||
|         var model = new D5D6CorrectivetAction(); |         D5D6CorrectivetAction model = new(); | ||||||
|         model = caDMO.GetD5D5CAItem(d5d6CAID); |         model = caDMO.GetD5D5CAItem(d5d6CAID); | ||||||
|  |  | ||||||
|         return PartialView("_D5D6CAAttachment", model); |         return PartialView("_D5D6CAAttachment", model); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  | #if !NET8 | ||||||
|  |  | ||||||
|     public ActionResult GetD5D6ItemAttachments([DataSourceRequest] DataSourceRequest request, int d5d6CAID) { |     public ActionResult GetD5D6ItemAttachments([DataSourceRequest] DataSourceRequest request, int d5d6CAID) { | ||||||
|         return Json(caDMO.GetD5D6ItemAttachments(d5d6CAID).ToDataSourceResult(request)); |         return Json(caDMO.GetD5D6ItemAttachments(d5d6CAID).ToDataSourceResult(request)); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  | #endif | ||||||
|  |  | ||||||
|     [HttpPost] |     [HttpPost] | ||||||
|     public void DeleteD5D6CAItem(int d5d6CAID) { |     public void DeleteD5D6CAItem(int d5d6CAID) { | ||||||
|         caDMO.DeleteD5D6CorrectivetAction(d5d6CAID); |         caDMO.DeleteD5D6CorrectivetAction(d5d6CAID); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  | #if !NET8 | ||||||
|  |  | ||||||
|     public ActionResult SaveD5D6CA_Attachemnt(IEnumerable<HttpPostedFileBase> D5D6CA_Attachemnt, int d5d6CAID, int caNo) { |     public ActionResult SaveD5D6CA_Attachemnt(IEnumerable<HttpPostedFileBase> D5D6CA_Attachemnt, int d5d6CAID, int caNo) { | ||||||
|         try { |         try { | ||||||
|             // The Name of the Upload component is "files" |             // The Name of the Upload component is "files" | ||||||
|             if (D5D6CA_Attachemnt != null) { |             if (D5D6CA_Attachemnt != null) { | ||||||
|                 int userId = (int)Session[GlobalVars.SESSION_USERID]; |                 int userId = GlobalVars.GetUserId(GetSession()); | ||||||
|                 foreach (var file in D5D6CA_Attachemnt) { |                 foreach (var file in D5D6CA_Attachemnt) { | ||||||
|                     CorrectiveActionHelper.SaveD5D6CA_Attachemnt(_AppSettings, caDMO, d5d6CAID, caNo, userId, file.FileName, file.InputStream); |                     CorrectiveActionHelper.SaveD5D6CA_Attachemnt(_AppSettings, caDMO, d5d6CAID, caNo, userId, file.FileName, file.InputStream); | ||||||
|                 } |                 } | ||||||
| @ -435,14 +473,15 @@ public class CorrectiveActionController : Controller { | |||||||
|         return Content(""); |         return Content(""); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     // D7 ==================================================================================== |  | ||||||
|     public ActionResult GetD7PreventiveActionList([DataSourceRequest] DataSourceRequest request, int caNo) { |     public ActionResult GetD7PreventiveActionList([DataSourceRequest] DataSourceRequest request, int caNo) { | ||||||
|         return Json(caDMO.GetD7PreventiveActions(caNo).ToDataSourceResult(request)); |         return Json(caDMO.GetD7PreventiveActions(caNo).ToDataSourceResult(request)); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  | #endif | ||||||
|  |  | ||||||
|     public ActionResult InsertD7PAItem(D7PreventiveAction data) { |     public ActionResult InsertD7PAItem(D7PreventiveAction data) { | ||||||
|         caDMO.InsertD7PreventiveAction(data); |         caDMO.InsertD7PreventiveAction(data); | ||||||
|         if (data.ResponsibilityOwnerID != null && data.ResponsibilityOwnerID != 0) { |         if (data.ResponsibilityOwnerID != 0) { | ||||||
|             NotifyActionItemOwner(data.CANo, data.ECD, data.ResponsibilityOwnerID, "CorrectiveActionAIAssigned.txt"); |             NotifyActionItemOwner(data.CANo, data.ECD, data.ResponsibilityOwnerID, "CorrectiveActionAIAssigned.txt"); | ||||||
|         } |         } | ||||||
|  |  | ||||||
| @ -459,26 +498,32 @@ public class CorrectiveActionController : Controller { | |||||||
|     } |     } | ||||||
|  |  | ||||||
|     public ActionResult GetD7PAItem(int d7paID) { |     public ActionResult GetD7PAItem(int d7paID) { | ||||||
|         var model = new D7PreventiveAction(); |         D7PreventiveAction model = new(); | ||||||
|         model = caDMO.GetD7PAItem(d7paID); |         model = caDMO.GetD7PAItem(d7paID); | ||||||
|  |  | ||||||
|         return PartialView("_D7PAAttachment", model); |         return PartialView("_D7PAAttachment", model); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  | #if !NET8 | ||||||
|  |  | ||||||
|     public ActionResult GetD7ItemAttachments([DataSourceRequest] DataSourceRequest request, int d7PAID) { |     public ActionResult GetD7ItemAttachments([DataSourceRequest] DataSourceRequest request, int d7PAID) { | ||||||
|         return Json(caDMO.GetD7ItemAttachments(d7PAID).ToDataSourceResult(request)); |         return Json(caDMO.GetD7ItemAttachments(d7PAID).ToDataSourceResult(request)); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  | #endif | ||||||
|  |  | ||||||
|     [HttpPost] |     [HttpPost] | ||||||
|     public void DeleteD7PAItem(int d7PAID) { |     public void DeleteD7PAItem(int d7PAID) { | ||||||
|         caDMO.DeleteD7PreventiveActionItem(d7PAID); |         caDMO.DeleteD7PreventiveActionItem(d7PAID); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  | #if !NET8 | ||||||
|  |  | ||||||
|     public ActionResult SaveD7PA_Attachemnt(IEnumerable<HttpPostedFileBase> D7PA_Attachemnt, int d7PAID, int caNo) { |     public ActionResult SaveD7PA_Attachemnt(IEnumerable<HttpPostedFileBase> D7PA_Attachemnt, int d7PAID, int caNo) { | ||||||
|         try { |         try { | ||||||
|             // The Name of the Upload component is "files" |             // The Name of the Upload component is "files" | ||||||
|             if (D7PA_Attachemnt != null) { |             if (D7PA_Attachemnt != null) { | ||||||
|                 int userId = (int)Session[GlobalVars.SESSION_USERID]; |                 int userId = GlobalVars.GetUserId(GetSession()); | ||||||
|                 foreach (var file in D7PA_Attachemnt) { |                 foreach (var file in D7PA_Attachemnt) { | ||||||
|                     CorrectiveActionHelper.SaveD7PA_Attachemnt(_AppSettings, caDMO, d7PAID, caNo, userId, file.FileName, file.InputStream); |                     CorrectiveActionHelper.SaveD7PA_Attachemnt(_AppSettings, caDMO, d7PAID, caNo, userId, file.FileName, file.InputStream); | ||||||
|                 } |                 } | ||||||
| @ -490,21 +535,23 @@ public class CorrectiveActionController : Controller { | |||||||
|         return Content(""); |         return Content(""); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  | #endif | ||||||
|  |  | ||||||
|     public void ReleaseLockOnDocument(int issueID) { |     public void ReleaseLockOnDocument(int issueID) { | ||||||
|         try { |         try { | ||||||
|             caDMO.ReleaseLockOnDocument((int)Session[GlobalVars.SESSION_USERID], issueID); |             caDMO.ReleaseLockOnDocument(GlobalVars.GetUserId(GetSession()), issueID); | ||||||
|         } catch (Exception e) { |         } catch (Exception e) { | ||||||
|             try { |             try { | ||||||
|                 Functions.WriteEvent(_AppSettings, @User.Identity.Name + "\r\n ReleaseLockOnDocument CA\r\n" + issueID.ToString() + "\r\n" + e.Message, System.Diagnostics.EventLogEntryType.Error); |                 Functions.WriteEvent(_AppSettings, GetUserIdentityName() + "\r\n ReleaseLockOnDocument CA\r\n" + issueID.ToString() + "\r\n" + e.Message, System.Diagnostics.EventLogEntryType.Error); | ||||||
|             } catch { } |             } catch { } | ||||||
|             caDMO.ReleaseLockOnDocument(-1, issueID); |             caDMO.ReleaseLockOnDocument(-1, issueID); | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     public JsonResult GetAllUsersList() { |     public JsonResult GetAllUsersList() { | ||||||
|         UserAccountDMO userDMO = new UserAccountDMO(); |         UserAccountDMO userDMO = new(); | ||||||
|         IEnumerable<LoginModel> userlist = userDMO.GetAllUsers(); |         IEnumerable<LoginModel> userlist = userDMO.GetAllUsers(); | ||||||
|         return Json(userlist, JsonRequestBehavior.AllowGet); |         return GetJsonResult(userlist); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     public void ReAssignApproverByAdmin(int issueID, int reAssignApproverFrom, int reAssignApproverTo, byte step, int docType) { |     public void ReAssignApproverByAdmin(int issueID, int reAssignApproverFrom, int reAssignApproverTo, byte step, int docType) { | ||||||
| @ -519,20 +566,20 @@ public class CorrectiveActionController : Controller { | |||||||
|                 detailedException = e.Message; |                 detailedException = e.Message; | ||||||
|             } |             } | ||||||
|             string exceptionString = e.Message.ToString().Trim().Length > 500 ? "Issue=" + issueID.ToString() + " Step:" + step + " " + e.Message.ToString().Substring(0, 250) : e.Message.ToString(); |             string exceptionString = e.Message.ToString().Trim().Length > 500 ? "Issue=" + issueID.ToString() + " Step:" + step + " " + e.Message.ToString().Substring(0, 250) : e.Message.ToString(); | ||||||
|             Functions.WriteEvent(_AppSettings, @User.Identity.Name + "\r\n ReAssignApproval\r\n" + detailedException, System.Diagnostics.EventLogEntryType.Error); |             Functions.WriteEvent(_AppSettings, GetUserIdentityName() + "\r\n ReAssignApproval\r\n" + detailedException, System.Diagnostics.EventLogEntryType.Error); | ||||||
|             EventLogDMO.Add(new WinEventLog() { IssueID = issueID, UserID = @User.Identity.Name, DocumentType = "CA", OperationType = "Error", Comments = "ReAssignApproval - " + exceptionString }); |             EventLogDMO.Add(new WinEventLog() { IssueID = issueID, UserID = GetUserIdentityName(), DocumentType = "CA", OperationType = "Error", Comments = "ReAssignApproval - " + exceptionString }); | ||||||
|             throw new Exception(e.Message); |             throw new Exception(e.Message); | ||||||
|         } |         } | ||||||
|         CorrectiveActionHelper.ReAssignApproverByAdmin(_AppSettings, issueID, email); |         CorrectiveActionHelper.ReAssignApproverByAdmin(_AppSettings, issueID, email); | ||||||
|         try { |         try { | ||||||
|             EventLogDMO.Add(new WinEventLog() { IssueID = issueID, UserID = @User.Identity.Name, DocumentType = "Corrective Action", OperationType = "Email", Comments = "ReAssign Approver: " + email }); |             EventLogDMO.Add(new WinEventLog() { IssueID = issueID, UserID = GetUserIdentityName(), DocumentType = "Corrective Action", OperationType = "Email", Comments = "ReAssign Approver: " + email }); | ||||||
|         } catch { } |         } catch { } | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     public void ReAssignApproval(int issueID, int userIDs, byte step) { |     public void ReAssignApproval(int issueID, int userIDs, byte step) { | ||||||
|         var email = ""; |         var email = ""; | ||||||
|         try { |         try { | ||||||
|             email = wfDMO.ReAssignApproval(issueID, (int)Session[GlobalVars.SESSION_USERID], userIDs, step, (int)GlobalVars.DocumentType.CorrectiveAction); |             email = wfDMO.ReAssignApproval(issueID, GlobalVars.GetUserId(GetSession()), userIDs, step, (int)GlobalVars.DocumentType.CorrectiveAction); | ||||||
|         } catch (Exception e) { |         } catch (Exception e) { | ||||||
|             string detailedException = ""; |             string detailedException = ""; | ||||||
|             try { |             try { | ||||||
| @ -541,20 +588,20 @@ public class CorrectiveActionController : Controller { | |||||||
|                 detailedException = e.Message; |                 detailedException = e.Message; | ||||||
|             } |             } | ||||||
|             string exceptionString = e.Message.ToString().Trim().Length > 500 ? "Issue=" + issueID.ToString() + " Step:" + step + " " + e.Message.ToString().Substring(0, 250) : e.Message.ToString(); |             string exceptionString = e.Message.ToString().Trim().Length > 500 ? "Issue=" + issueID.ToString() + " Step:" + step + " " + e.Message.ToString().Substring(0, 250) : e.Message.ToString(); | ||||||
|             Functions.WriteEvent(_AppSettings, @User.Identity.Name + "\r\n ReAssignApproval\r\n" + detailedException, System.Diagnostics.EventLogEntryType.Error); |             Functions.WriteEvent(_AppSettings, GetUserIdentityName() + "\r\n ReAssignApproval\r\n" + detailedException, System.Diagnostics.EventLogEntryType.Error); | ||||||
|             EventLogDMO.Add(new WinEventLog() { IssueID = issueID, UserID = @User.Identity.Name, DocumentType = "Corrective Action", OperationType = "Error", Comments = "ReAssignApproval - " + exceptionString }); |             EventLogDMO.Add(new WinEventLog() { IssueID = issueID, UserID = GetUserIdentityName(), DocumentType = "Corrective Action", OperationType = "Error", Comments = "ReAssignApproval - " + exceptionString }); | ||||||
|             throw new Exception(e.Message); |             throw new Exception(e.Message); | ||||||
|         } |         } | ||||||
|         CorrectiveActionHelper.ReAssignApproval(_AppSettings, issueID, email); |         CorrectiveActionHelper.ReAssignApproval(_AppSettings, issueID, email); | ||||||
|         try { |         try { | ||||||
|             EventLogDMO.Add(new WinEventLog() { IssueID = issueID, UserID = @User.Identity.Name, DocumentType = "Corrective Action", OperationType = "Email", Comments = "ReAssign Approver: " + email }); |             EventLogDMO.Add(new WinEventLog() { IssueID = issueID, UserID = GetUserIdentityName(), DocumentType = "Corrective Action", OperationType = "Email", Comments = "ReAssign Approver: " + email }); | ||||||
|         } catch { } |         } catch { } | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     public void Reject(int issueID, byte currentStep, string comments) { |     public void Reject(int issueID, byte currentStep, string comments) { | ||||||
|         try { |         try { | ||||||
|             if (Session[GlobalVars.SESSION_USERID] != null) { |             if (GlobalVars.IsUserIdValueNotNull(GetSession())) { | ||||||
|                 wfDMO.Reject(issueID, currentStep, comments, (int)Session[GlobalVars.SESSION_USERID], (int)GlobalVars.DocumentType.CorrectiveAction); |                 wfDMO.Reject(issueID, currentStep, comments, GlobalVars.GetUserId(GetSession()), (int)GlobalVars.DocumentType.CorrectiveAction); | ||||||
|                 NotifyRejectionToAssignee(issueID, comments); |                 NotifyRejectionToAssignee(issueID, comments); | ||||||
|             } else { |             } else { | ||||||
|                 Response.Redirect("~/Account/Login"); |                 Response.Redirect("~/Account/Login"); | ||||||
| @ -567,18 +614,18 @@ public class CorrectiveActionController : Controller { | |||||||
|                 detailedException = e.Message; |                 detailedException = e.Message; | ||||||
|             } |             } | ||||||
|             string exceptionString = e.Message.ToString().Trim().Length > 500 ? "Issue=" + issueID.ToString() + " Step:" + currentStep + " " + e.Message.ToString().Substring(0, 250) : e.Message.ToString(); |             string exceptionString = e.Message.ToString().Trim().Length > 500 ? "Issue=" + issueID.ToString() + " Step:" + currentStep + " " + e.Message.ToString().Substring(0, 250) : e.Message.ToString(); | ||||||
|             Functions.WriteEvent(_AppSettings, @User.Identity.Name + "\r\n Reject\r\n" + detailedException, System.Diagnostics.EventLogEntryType.Error); |             Functions.WriteEvent(_AppSettings, GetUserIdentityName() + "\r\n Reject\r\n" + detailedException, System.Diagnostics.EventLogEntryType.Error); | ||||||
|             EventLogDMO.Add(new WinEventLog() { IssueID = issueID, UserID = @User.Identity.Name, DocumentType = "Corrective Action", OperationType = "Error", Comments = "Reject - " + exceptionString }); |             EventLogDMO.Add(new WinEventLog() { IssueID = issueID, UserID = GetUserIdentityName(), DocumentType = "Corrective Action", OperationType = "Error", Comments = "Reject - " + exceptionString }); | ||||||
|             throw new Exception(e.Message); |             throw new Exception(e.Message); | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     public void NotifyRejectionToAssignee(int issueID, string comments) { |     public void NotifyRejectionToAssignee(int issueID, string comments) { | ||||||
|         string username = Session[GlobalVars.SESSION_USERNAME].ToString(); |         string username = GlobalVars.GetUserName(GetSession()); | ||||||
|         List<string> emailIst = caDMO.GetRejectionAssigneeEmailList(@issueID).Distinct().ToList(); |         List<string> emailIst = caDMO.GetRejectionAssigneeEmailList(@issueID).Distinct().ToList(); | ||||||
|         string userEmail = CorrectiveActionHelper.NotifyRejectionToAssignee(_AppSettings, issueID, comments, username, emailIst); |         string userEmail = CorrectiveActionHelper.NotifyRejectionToAssignee(_AppSettings, issueID, comments, username, emailIst); | ||||||
|         try { |         try { | ||||||
|             EventLogDMO.Add(new WinEventLog() { IssueID = issueID, UserID = @User.Identity.Name, DocumentType = "Corrective Action", OperationType = "Email", Comments = "Rejection: " + userEmail }); |             EventLogDMO.Add(new WinEventLog() { IssueID = issueID, UserID = GetUserIdentityName(), DocumentType = "Corrective Action", OperationType = "Email", Comments = "Rejection: " + userEmail }); | ||||||
|         } catch { } |         } catch { } | ||||||
|     } |     } | ||||||
|  |  | ||||||
| @ -586,9 +633,9 @@ public class CorrectiveActionController : Controller { | |||||||
|         int isITARCompliant = 1; |         int isITARCompliant = 1; | ||||||
|         try { |         try { | ||||||
|             bool lastStep = false; |             bool lastStep = false; | ||||||
|             CorrectiveAction ca = caDMO.GetCAItemReadOnly(issueID, (int)Session[GlobalVars.SESSION_USERID]); |             CorrectiveAction ca = caDMO.GetCAItemReadOnly(issueID, GlobalVars.GetUserId(GetSession())); | ||||||
|  |  | ||||||
|             bool lastApprover = wfDMO.Approve(_AppSettings, issueID, currentStep, comments, out lastStep, (int)Session[GlobalVars.SESSION_USERID], (int)GlobalVars.DocumentType.CorrectiveAction, ca.WorkFlowNumber); |             bool lastApprover = wfDMO.Approve(_AppSettings, issueID, currentStep, comments, out lastStep, GlobalVars.GetUserId(GetSession()), (int)GlobalVars.DocumentType.CorrectiveAction, ca.WorkFlowNumber); | ||||||
|  |  | ||||||
|             if (lastApprover && !lastStep) { |             if (lastApprover && !lastStep) { | ||||||
|                 // Set to complete |                 // Set to complete | ||||||
| @ -610,8 +657,8 @@ public class CorrectiveActionController : Controller { | |||||||
|                 detailedException = e.Message; |                 detailedException = e.Message; | ||||||
|             } |             } | ||||||
|             string exceptionString = e.Message.ToString().Trim().Length > 500 ? "Issue=" + issueID.ToString() + " Step:" + currentStep + " " + e.Message.ToString().Substring(0, 250) : e.Message.ToString(); |             string exceptionString = e.Message.ToString().Trim().Length > 500 ? "Issue=" + issueID.ToString() + " Step:" + currentStep + " " + e.Message.ToString().Substring(0, 250) : e.Message.ToString(); | ||||||
|             Functions.WriteEvent(_AppSettings, @User.Identity.Name + "\r\n " + "Approve\r\n" + issueID.ToString() + "\r\n" + detailedException, System.Diagnostics.EventLogEntryType.Error); |             Functions.WriteEvent(_AppSettings, GetUserIdentityName() + "\r\n " + "Approve\r\n" + issueID.ToString() + "\r\n" + detailedException, System.Diagnostics.EventLogEntryType.Error); | ||||||
|             EventLogDMO.Add(new WinEventLog() { IssueID = issueID, UserID = @User.Identity.Name, DocumentType = "Corrective Action", OperationType = "Error", Comments = "Approve - " + exceptionString }); |             EventLogDMO.Add(new WinEventLog() { IssueID = issueID, UserID = GetUserIdentityName(), DocumentType = "Corrective Action", OperationType = "Error", Comments = "Approve - " + exceptionString }); | ||||||
|             throw new Exception(e.Message); |             throw new Exception(e.Message); | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
| @ -621,7 +668,7 @@ public class CorrectiveActionController : Controller { | |||||||
|             string userEmail = userDMO.GetUserEmailByID(userId); |             string userEmail = userDMO.GetUserEmailByID(userId); | ||||||
|             CorrectiveActionHelper.NotifySectionApprover(_AppSettings, issueID, section, userEmail); |             CorrectiveActionHelper.NotifySectionApprover(_AppSettings, issueID, section, userEmail); | ||||||
|             try { |             try { | ||||||
|                 EventLogDMO.Add(new WinEventLog() { IssueID = issueID, UserID = @User.Identity.Name, DocumentType = "Corrective Action", OperationType = "Email", Comments = "Approvers for Step " }); |                 EventLogDMO.Add(new WinEventLog() { IssueID = issueID, UserID = GetUserIdentityName(), DocumentType = "Corrective Action", OperationType = "Email", Comments = "Approvers for Step " }); | ||||||
|             } catch { } |             } catch { } | ||||||
|         } catch (Exception e) { |         } catch (Exception e) { | ||||||
|             string detailedException = ""; |             string detailedException = ""; | ||||||
| @ -631,9 +678,9 @@ public class CorrectiveActionController : Controller { | |||||||
|                 detailedException = e.Message; |                 detailedException = e.Message; | ||||||
|             } |             } | ||||||
|             string exceptionString = e.Message.ToString().Trim().Length > 500 ? "Issue=" + issueID.ToString() + e.Message.ToString().Substring(0, 250) : e.Message.ToString(); |             string exceptionString = e.Message.ToString().Trim().Length > 500 ? "Issue=" + issueID.ToString() + e.Message.ToString().Substring(0, 250) : e.Message.ToString(); | ||||||
|             Functions.WriteEvent(_AppSettings, @User.Identity.Name + "\r\n Corrective Action - NotifyApprovers\r\n" + detailedException, System.Diagnostics.EventLogEntryType.Error); |             Functions.WriteEvent(_AppSettings, GetUserIdentityName() + "\r\n Corrective Action - NotifyApprovers\r\n" + detailedException, System.Diagnostics.EventLogEntryType.Error); | ||||||
|             EventLogDMO.Add(new WinEventLog() { IssueID = issueID, UserID = @User.Identity.Name, DocumentType = "Corrective Action", OperationType = "Error", Comments = "AddAdditionalApproval - " + exceptionString }); |             EventLogDMO.Add(new WinEventLog() { IssueID = issueID, UserID = GetUserIdentityName(), DocumentType = "Corrective Action", OperationType = "Error", Comments = "AddAdditionalApproval - " + exceptionString }); | ||||||
|             throw e; |             throw; | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  |  | ||||||
| @ -642,7 +689,7 @@ public class CorrectiveActionController : Controller { | |||||||
|             List<string> emailIst = MiscDMO.GetApproverEmailListByDocument(@issueID, currentStep, (int)GlobalVars.DocumentType.CorrectiveAction).Distinct().ToList(); |             List<string> emailIst = MiscDMO.GetApproverEmailListByDocument(@issueID, currentStep, (int)GlobalVars.DocumentType.CorrectiveAction).Distinct().ToList(); | ||||||
|             string emailSentList = CorrectiveActionHelper.NotifyApprovers(_AppSettings, issueID, emailIst); |             string emailSentList = CorrectiveActionHelper.NotifyApprovers(_AppSettings, issueID, emailIst); | ||||||
|             try { |             try { | ||||||
|                 EventLogDMO.Add(new WinEventLog() { IssueID = issueID, UserID = @User.Identity.Name, DocumentType = "Corrective Action", OperationType = "Email", Comments = "Approvers for Step " + currentStep.ToString() + ":" + emailSentList }); |                 EventLogDMO.Add(new WinEventLog() { IssueID = issueID, UserID = GetUserIdentityName(), DocumentType = "Corrective Action", OperationType = "Email", Comments = "Approvers for Step " + currentStep.ToString() + ":" + emailSentList }); | ||||||
|             } catch { } |             } catch { } | ||||||
|         } catch (Exception e) { |         } catch (Exception e) { | ||||||
|             string detailedException = ""; |             string detailedException = ""; | ||||||
| @ -652,9 +699,9 @@ public class CorrectiveActionController : Controller { | |||||||
|                 detailedException = e.Message; |                 detailedException = e.Message; | ||||||
|             } |             } | ||||||
|             string exceptionString = e.Message.ToString().Trim().Length > 500 ? "Issue=" + issueID.ToString() + " Step:" + currentStep + " " + e.Message.ToString().Substring(0, 250) : e.Message.ToString(); |             string exceptionString = e.Message.ToString().Trim().Length > 500 ? "Issue=" + issueID.ToString() + " Step:" + currentStep + " " + e.Message.ToString().Substring(0, 250) : e.Message.ToString(); | ||||||
|             Functions.WriteEvent(_AppSettings, @User.Identity.Name + "\r\n Corrective Action - NotifyApprovers\r\n" + detailedException, System.Diagnostics.EventLogEntryType.Error); |             Functions.WriteEvent(_AppSettings, GetUserIdentityName() + "\r\n Corrective Action - NotifyApprovers\r\n" + detailedException, System.Diagnostics.EventLogEntryType.Error); | ||||||
|             EventLogDMO.Add(new WinEventLog() { IssueID = issueID, UserID = @User.Identity.Name, DocumentType = "Corrective Action", OperationType = "Error", Comments = "AddAdditionalApproval - " + exceptionString }); |             EventLogDMO.Add(new WinEventLog() { IssueID = issueID, UserID = GetUserIdentityName(), DocumentType = "Corrective Action", OperationType = "Error", Comments = "AddAdditionalApproval - " + exceptionString }); | ||||||
|             throw e; |             throw; | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  |  | ||||||
| @ -673,18 +720,20 @@ public class CorrectiveActionController : Controller { | |||||||
|                 detailedException = e.Message; |                 detailedException = e.Message; | ||||||
|             } |             } | ||||||
|             string exceptionString = e.Message.ToString().Trim().Length > 500 ? "Issue=" + issueID.ToString() + " Step:" + step + " " + " Userid:" + userIDs + " " + e.Message.ToString().Substring(0, 250) : e.Message.ToString(); |             string exceptionString = e.Message.ToString().Trim().Length > 500 ? "Issue=" + issueID.ToString() + " Step:" + step + " " + " Userid:" + userIDs + " " + e.Message.ToString().Substring(0, 250) : e.Message.ToString(); | ||||||
|             Functions.WriteEvent(_AppSettings, @User.Identity.Name + "\r\n AddAdditionalApproval\r\n" + detailedException, System.Diagnostics.EventLogEntryType.Error); |             Functions.WriteEvent(_AppSettings, GetUserIdentityName() + "\r\n AddAdditionalApproval\r\n" + detailedException, System.Diagnostics.EventLogEntryType.Error); | ||||||
|             EventLogDMO.Add(new WinEventLog() { IssueID = issueID, UserID = @User.Identity.Name, DocumentType = "Corrective Action", OperationType = "Error", Comments = "AddAdditionalApproval - " + exceptionString }); |             EventLogDMO.Add(new WinEventLog() { IssueID = issueID, UserID = GetUserIdentityName(), DocumentType = "Corrective Action", OperationType = "Error", Comments = "AddAdditionalApproval - " + exceptionString }); | ||||||
|             throw new Exception(e.Message); |             throw new Exception(e.Message); | ||||||
|         } |         } | ||||||
|         emailSentList = CorrectiveActionHelper.AddAdditionalApproval(_AppSettings, issueID, emailSentList, emailArray); |         emailSentList = CorrectiveActionHelper.AddAdditionalApproval(_AppSettings, issueID, emailSentList, emailArray); | ||||||
|         try { |         try { | ||||||
|             EventLogDMO.Add(new WinEventLog() { IssueID = issueID, UserID = @User.Identity.Name, DocumentType = "Corrective Action", OperationType = "Email", Comments = "Additonal Approver: " + emailSentList }); |             EventLogDMO.Add(new WinEventLog() { IssueID = issueID, UserID = GetUserIdentityName(), DocumentType = "Corrective Action", OperationType = "Email", Comments = "Additonal Approver: " + emailSentList }); | ||||||
|         } catch { } |         } catch { } | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     #endregion |     #endregion | ||||||
|  |  | ||||||
|  | #if !NET8 | ||||||
|  |  | ||||||
|     public ActionResult GetApproversList([DataSourceRequest] DataSourceRequest request, int issueID, byte step) { |     public ActionResult GetApproversList([DataSourceRequest] DataSourceRequest request, int issueID, byte step) { | ||||||
|         return Json(MiscDMO.GetApproversListByDocument(issueID, step, (int)GlobalVars.DocumentType.CorrectiveAction).ToDataSourceResult(request)); |         return Json(MiscDMO.GetApproversListByDocument(issueID, step, (int)GlobalVars.DocumentType.CorrectiveAction).ToDataSourceResult(request)); | ||||||
|     } |     } | ||||||
| @ -693,12 +742,14 @@ public class CorrectiveActionController : Controller { | |||||||
|         return Json(caDMO.GetCASectionApprovalLog(caNo).ToDataSourceResult(request)); |         return Json(caDMO.GetCASectionApprovalLog(caNo).ToDataSourceResult(request)); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  | #endif | ||||||
|  |  | ||||||
|     public void NotifyRequestor(int issueID, DateTime? dueDate, int? responsibleOwnerID, string template) { |     public void NotifyRequestor(int issueID, DateTime? dueDate, int? responsibleOwnerID, string template) { | ||||||
|         try { |         try { | ||||||
|             string email = MiscDMO.GetEmail(responsibleOwnerID); |             string email = MiscDMO.GetEmail(responsibleOwnerID); | ||||||
|             CorrectiveActionHelper.NotifyRequestor(_AppSettings, issueID, dueDate, template, email); |             CorrectiveActionHelper.NotifyRequestor(_AppSettings, issueID, dueDate, template, email); | ||||||
|             try { |             try { | ||||||
|                 EventLogDMO.Add(new WinEventLog() { IssueID = issueID, UserID = @User.Identity.Name, DocumentType = "Corrective Action", OperationType = "Email", Comments = "Task Assigned for 8D Item" + ":" + email }); |                 EventLogDMO.Add(new WinEventLog() { IssueID = issueID, UserID = GetUserIdentityName(), DocumentType = "Corrective Action", OperationType = "Email", Comments = "Task Assigned for 8D Item" + ":" + email }); | ||||||
|             } catch { } |             } catch { } | ||||||
|         } catch (Exception e) { |         } catch (Exception e) { | ||||||
|             string detailedException = ""; |             string detailedException = ""; | ||||||
| @ -709,8 +760,8 @@ public class CorrectiveActionController : Controller { | |||||||
|             } |             } | ||||||
|  |  | ||||||
|             string exceptionString = e.Message.ToString().Trim().Length > 500 ? "Issue=" + issueID.ToString() + " 8D Action Item:" + e.Message.ToString().Substring(0, 250) : e.Message.ToString(); |             string exceptionString = e.Message.ToString().Trim().Length > 500 ? "Issue=" + issueID.ToString() + " 8D Action Item:" + e.Message.ToString().Substring(0, 250) : e.Message.ToString(); | ||||||
|             Functions.WriteEvent(_AppSettings, @User.Identity.Name + "\r\n 8D Action Item - NotifyActionItemOwner\r\n" + detailedException, System.Diagnostics.EventLogEntryType.Error); |             Functions.WriteEvent(_AppSettings, GetUserIdentityName() + "\r\n 8D Action Item - NotifyActionItemOwner\r\n" + detailedException, System.Diagnostics.EventLogEntryType.Error); | ||||||
|             EventLogDMO.Add(new WinEventLog() { IssueID = issueID, UserID = @User.Identity.Name, DocumentType = "Corrective Action", OperationType = "Error", Comments = "8D Action Item Notification - " + exceptionString }); |             EventLogDMO.Add(new WinEventLog() { IssueID = issueID, UserID = GetUserIdentityName(), DocumentType = "Corrective Action", OperationType = "Error", Comments = "8D Action Item Notification - " + exceptionString }); | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  |  | ||||||
| @ -719,7 +770,7 @@ public class CorrectiveActionController : Controller { | |||||||
|             string email = MiscDMO.GetEmail(responsibleOwnerID); |             string email = MiscDMO.GetEmail(responsibleOwnerID); | ||||||
|             CorrectiveActionHelper.NotifyAssignee(_AppSettings, issueID, template, D3DueDate, D5D7DueDate, email); |             CorrectiveActionHelper.NotifyAssignee(_AppSettings, issueID, template, D3DueDate, D5D7DueDate, email); | ||||||
|             try { |             try { | ||||||
|                 EventLogDMO.Add(new WinEventLog() { IssueID = issueID, UserID = @User.Identity.Name, DocumentType = "Corrective Action", OperationType = "Email", Comments = "Task Assigned for 8D Item" + ":" + email }); |                 EventLogDMO.Add(new WinEventLog() { IssueID = issueID, UserID = GetUserIdentityName(), DocumentType = "Corrective Action", OperationType = "Email", Comments = "Task Assigned for 8D Item" + ":" + email }); | ||||||
|             } catch { } |             } catch { } | ||||||
|         } catch (Exception e) { |         } catch (Exception e) { | ||||||
|             string detailedException = ""; |             string detailedException = ""; | ||||||
| @ -730,8 +781,8 @@ public class CorrectiveActionController : Controller { | |||||||
|             } |             } | ||||||
|  |  | ||||||
|             string exceptionString = e.Message.ToString().Trim().Length > 500 ? "Issue=" + issueID.ToString() + " 8D Action Item:" + e.Message.ToString().Substring(0, 250) : e.Message.ToString(); |             string exceptionString = e.Message.ToString().Trim().Length > 500 ? "Issue=" + issueID.ToString() + " 8D Action Item:" + e.Message.ToString().Substring(0, 250) : e.Message.ToString(); | ||||||
|             Functions.WriteEvent(_AppSettings, @User.Identity.Name + "\r\n 8D Action Item - NotifyActionItemOwner\r\n" + detailedException, System.Diagnostics.EventLogEntryType.Error); |             Functions.WriteEvent(_AppSettings, GetUserIdentityName() + "\r\n 8D Action Item - NotifyActionItemOwner\r\n" + detailedException, System.Diagnostics.EventLogEntryType.Error); | ||||||
|             EventLogDMO.Add(new WinEventLog() { IssueID = issueID, UserID = @User.Identity.Name, DocumentType = "Corrective Action", OperationType = "Error", Comments = "8D Action Item Notification - " + exceptionString }); |             EventLogDMO.Add(new WinEventLog() { IssueID = issueID, UserID = GetUserIdentityName(), DocumentType = "Corrective Action", OperationType = "Error", Comments = "8D Action Item Notification - " + exceptionString }); | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  |  | ||||||
| @ -739,7 +790,7 @@ public class CorrectiveActionController : Controller { | |||||||
|         try { |         try { | ||||||
|             string email = CorrectiveActionHelper.NotifyActionItemOwner(_AppSettings, issueID, dueDate, responsibleOwnerID, template); |             string email = CorrectiveActionHelper.NotifyActionItemOwner(_AppSettings, issueID, dueDate, responsibleOwnerID, template); | ||||||
|             try { |             try { | ||||||
|                 EventLogDMO.Add(new WinEventLog() { IssueID = issueID, UserID = @User.Identity.Name, DocumentType = "Corrective Action", OperationType = "Email", Comments = "Task Assigned for 8D Item" + ":" + email }); |                 EventLogDMO.Add(new WinEventLog() { IssueID = issueID, UserID = GetUserIdentityName(), DocumentType = "Corrective Action", OperationType = "Email", Comments = "Task Assigned for 8D Item" + ":" + email }); | ||||||
|             } catch { } |             } catch { } | ||||||
|         } catch (Exception e) { |         } catch (Exception e) { | ||||||
|             string detailedException = ""; |             string detailedException = ""; | ||||||
| @ -750,8 +801,8 @@ public class CorrectiveActionController : Controller { | |||||||
|             } |             } | ||||||
|  |  | ||||||
|             string exceptionString = e.Message.ToString().Trim().Length > 500 ? "Issue=" + issueID.ToString() + " 8D Action Item:" + e.Message.ToString().Substring(0, 250) : e.Message.ToString(); |             string exceptionString = e.Message.ToString().Trim().Length > 500 ? "Issue=" + issueID.ToString() + " 8D Action Item:" + e.Message.ToString().Substring(0, 250) : e.Message.ToString(); | ||||||
|             Functions.WriteEvent(_AppSettings, @User.Identity.Name + "\r\n 8D Action Item - NotifyActionItemOwner\r\n" + detailedException, System.Diagnostics.EventLogEntryType.Error); |             Functions.WriteEvent(_AppSettings, GetUserIdentityName() + "\r\n 8D Action Item - NotifyActionItemOwner\r\n" + detailedException, System.Diagnostics.EventLogEntryType.Error); | ||||||
|             EventLogDMO.Add(new WinEventLog() { IssueID = issueID, UserID = @User.Identity.Name, DocumentType = "Corrective Action", OperationType = "Error", Comments = "8D Action Item Notification - " + exceptionString }); |             EventLogDMO.Add(new WinEventLog() { IssueID = issueID, UserID = GetUserIdentityName(), DocumentType = "Corrective Action", OperationType = "Error", Comments = "8D Action Item Notification - " + exceptionString }); | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  |  | ||||||
| @ -759,7 +810,7 @@ public class CorrectiveActionController : Controller { | |||||||
|         try { |         try { | ||||||
|             string email = CorrectiveActionHelper.NotifyActionItemCompletion(_AppSettings, issueID, dueDate, recipientId, template); |             string email = CorrectiveActionHelper.NotifyActionItemCompletion(_AppSettings, issueID, dueDate, recipientId, template); | ||||||
|             try { |             try { | ||||||
|                 EventLogDMO.Add(new WinEventLog() { IssueID = issueID, UserID = @User.Identity.Name, DocumentType = "Corrective Action", OperationType = "Email", Comments = "Task Assigned for 8D Item" + ":" + email }); |                 EventLogDMO.Add(new WinEventLog() { IssueID = issueID, UserID = GetUserIdentityName(), DocumentType = "Corrective Action", OperationType = "Email", Comments = "Task Assigned for 8D Item" + ":" + email }); | ||||||
|             } catch { } |             } catch { } | ||||||
|         } catch (Exception e) { |         } catch (Exception e) { | ||||||
|             string detailedException = ""; |             string detailedException = ""; | ||||||
| @ -770,8 +821,8 @@ public class CorrectiveActionController : Controller { | |||||||
|             } |             } | ||||||
|  |  | ||||||
|             string exceptionString = e.Message.ToString().Trim().Length > 500 ? "Issue=" + issueID.ToString() + " 8D Action Item:" + e.Message.ToString().Substring(0, 250) : e.Message.ToString(); |             string exceptionString = e.Message.ToString().Trim().Length > 500 ? "Issue=" + issueID.ToString() + " 8D Action Item:" + e.Message.ToString().Substring(0, 250) : e.Message.ToString(); | ||||||
|             Functions.WriteEvent(_AppSettings, @User.Identity.Name + "\r\n 8D Action Item - NotifyActionItemCompletion\r\n" + detailedException, System.Diagnostics.EventLogEntryType.Error); |             Functions.WriteEvent(_AppSettings, GetUserIdentityName() + "\r\n 8D Action Item - NotifyActionItemCompletion\r\n" + detailedException, System.Diagnostics.EventLogEntryType.Error); | ||||||
|             EventLogDMO.Add(new WinEventLog() { IssueID = issueID, UserID = @User.Identity.Name, DocumentType = "Corrective Action", OperationType = "Error", Comments = "8D Action Item Notification - " + exceptionString }); |             EventLogDMO.Add(new WinEventLog() { IssueID = issueID, UserID = GetUserIdentityName(), DocumentType = "Corrective Action", OperationType = "Error", Comments = "8D Action Item Notification - " + exceptionString }); | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  |  | ||||||
| @ -779,7 +830,7 @@ public class CorrectiveActionController : Controller { | |||||||
|         try { |         try { | ||||||
|             string emailSentList = CorrectiveActionHelper.NotifyClosureOf8D(_AppSettings, issueID); |             string emailSentList = CorrectiveActionHelper.NotifyClosureOf8D(_AppSettings, issueID); | ||||||
|             try { |             try { | ||||||
|                 EventLogDMO.Add(new WinEventLog() { IssueID = issueID, UserID = @User.Identity.Name, DocumentType = "Corrective Action", OperationType = "Email", Comments = "Closure of 8D Item" + ":" + emailSentList }); |                 EventLogDMO.Add(new WinEventLog() { IssueID = issueID, UserID = GetUserIdentityName(), DocumentType = "Corrective Action", OperationType = "Email", Comments = "Closure of 8D Item" + ":" + emailSentList }); | ||||||
|             } catch { } |             } catch { } | ||||||
|         } catch (Exception e) { |         } catch (Exception e) { | ||||||
|             string detailedException = ""; |             string detailedException = ""; | ||||||
| @ -790,8 +841,8 @@ public class CorrectiveActionController : Controller { | |||||||
|             } |             } | ||||||
|  |  | ||||||
|             string exceptionString = e.Message.ToString().Trim().Length > 500 ? "Issue=" + issueID.ToString() + " Closure of 8D:" + e.Message.ToString().Substring(0, 250) : e.Message.ToString(); |             string exceptionString = e.Message.ToString().Trim().Length > 500 ? "Issue=" + issueID.ToString() + " Closure of 8D:" + e.Message.ToString().Substring(0, 250) : e.Message.ToString(); | ||||||
|             Functions.WriteEvent(_AppSettings, @User.Identity.Name + "\r\n Closure of 8D  - NotifyActionItemOwner\r\n" + detailedException, System.Diagnostics.EventLogEntryType.Error); |             Functions.WriteEvent(_AppSettings, GetUserIdentityName() + "\r\n Closure of 8D  - NotifyActionItemOwner\r\n" + detailedException, System.Diagnostics.EventLogEntryType.Error); | ||||||
|             EventLogDMO.Add(new WinEventLog() { IssueID = issueID, UserID = @User.Identity.Name, DocumentType = "Corrective Action", OperationType = "Error", Comments = "Closure of 8D Notification - " + exceptionString }); |             EventLogDMO.Add(new WinEventLog() { IssueID = issueID, UserID = GetUserIdentityName(), DocumentType = "Corrective Action", OperationType = "Error", Comments = "Closure of 8D Notification - " + exceptionString }); | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  |  | ||||||
| @ -799,7 +850,7 @@ public class CorrectiveActionController : Controller { | |||||||
|         try { |         try { | ||||||
|             string emailSentList = CorrectiveActionHelper.NotifyCompletionOf8D(_AppSettings, issueID, followUpDate); |             string emailSentList = CorrectiveActionHelper.NotifyCompletionOf8D(_AppSettings, issueID, followUpDate); | ||||||
|             try { |             try { | ||||||
|                 EventLogDMO.Add(new WinEventLog() { IssueID = issueID, UserID = @User.Identity.Name, DocumentType = "Corrective Action", OperationType = "Email", Comments = "Closure of 8D Item" + ":" + emailSentList }); |                 EventLogDMO.Add(new WinEventLog() { IssueID = issueID, UserID = GetUserIdentityName(), DocumentType = "Corrective Action", OperationType = "Email", Comments = "Closure of 8D Item" + ":" + emailSentList }); | ||||||
|             } catch { } |             } catch { } | ||||||
|         } catch (Exception e) { |         } catch (Exception e) { | ||||||
|             string detailedException = ""; |             string detailedException = ""; | ||||||
| @ -810,14 +861,14 @@ public class CorrectiveActionController : Controller { | |||||||
|             } |             } | ||||||
|  |  | ||||||
|             string exceptionString = e.Message.ToString().Trim().Length > 500 ? "Issue=" + issueID.ToString() + " Closure of 8D:" + e.Message.ToString().Substring(0, 250) : e.Message.ToString(); |             string exceptionString = e.Message.ToString().Trim().Length > 500 ? "Issue=" + issueID.ToString() + " Closure of 8D:" + e.Message.ToString().Substring(0, 250) : e.Message.ToString(); | ||||||
|             Functions.WriteEvent(_AppSettings, @User.Identity.Name + "\r\n Closure of 8D  - NotifyActionItemOwner\r\n" + detailedException, System.Diagnostics.EventLogEntryType.Error); |             Functions.WriteEvent(_AppSettings, GetUserIdentityName() + "\r\n Closure of 8D  - NotifyActionItemOwner\r\n" + detailedException, System.Diagnostics.EventLogEntryType.Error); | ||||||
|             EventLogDMO.Add(new WinEventLog() { IssueID = issueID, UserID = @User.Identity.Name, DocumentType = "Corrective Action", OperationType = "Error", Comments = "Closure of 8D Notification - " + exceptionString }); |             EventLogDMO.Add(new WinEventLog() { IssueID = issueID, UserID = GetUserIdentityName(), DocumentType = "Corrective Action", OperationType = "Error", Comments = "Closure of 8D Notification - " + exceptionString }); | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     public void StartSectionApproval(int issueID, string dSection) { |     public void StartSectionApproval(int issueID, string dSection) { | ||||||
|         try { |         try { | ||||||
|             CorrectiveAction ca = caDMO.GetCAItem(issueID, (int)Session[GlobalVars.SESSION_USERID]); |             CorrectiveAction ca = caDMO.GetCAItem(issueID, GlobalVars.GetUserId(GetSession())); | ||||||
|  |  | ||||||
|             int requestorId = ca.RequestorID; |             int requestorId = ca.RequestorID; | ||||||
|             int qaId = ca.QAID; |             int qaId = ca.QAID; | ||||||
| @ -834,16 +885,16 @@ public class CorrectiveActionController : Controller { | |||||||
|                 detailedException = e.Message; |                 detailedException = e.Message; | ||||||
|             } |             } | ||||||
|             string exceptionString = e.Message.ToString().Trim().Length > 500 ? "Issue=" + issueID.ToString() + e.Message.ToString().Substring(0, 250) : e.Message.ToString(); |             string exceptionString = e.Message.ToString().Trim().Length > 500 ? "Issue=" + issueID.ToString() + e.Message.ToString().Substring(0, 250) : e.Message.ToString(); | ||||||
|             Functions.WriteEvent(_AppSettings, @User.Identity.Name + "\r\n " + "Approve\r\n" + issueID.ToString() + "\r\n" + detailedException, System.Diagnostics.EventLogEntryType.Error); |             Functions.WriteEvent(_AppSettings, GetUserIdentityName() + "\r\n " + "Approve\r\n" + issueID.ToString() + "\r\n" + detailedException, System.Diagnostics.EventLogEntryType.Error); | ||||||
|             EventLogDMO.Add(new WinEventLog() { IssueID = issueID, UserID = @User.Identity.Name, DocumentType = "Corrective Action", OperationType = "Error", Comments = "Approve - " + exceptionString }); |             EventLogDMO.Add(new WinEventLog() { IssueID = issueID, UserID = GetUserIdentityName(), DocumentType = "Corrective Action", OperationType = "Error", Comments = "Approve - " + exceptionString }); | ||||||
|             throw new Exception(e.Message); |             throw new Exception(e.Message); | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
|     [HttpPost] |     [HttpPost] | ||||||
|     public ActionResult ApproveSection(int issueID, string dSection) { |     public ActionResult ApproveSection(int issueID, string dSection) { | ||||||
|         try { |         try { | ||||||
|             int userID = (int)Session[GlobalVars.SESSION_USERID]; |             int userID = GlobalVars.GetUserId(GetSession()); | ||||||
|             CorrectiveAction caItem = caDMO.GetCAItem(issueID, (int)Session[GlobalVars.SESSION_USERID]); |             CorrectiveAction caItem = caDMO.GetCAItem(issueID, GlobalVars.GetUserId(GetSession())); | ||||||
|             caDMO.ApproveSection(issueID, userID, dSection); |             caDMO.ApproveSection(issueID, userID, dSection); | ||||||
|             bool isLastApprover = caDMO.IsLastSectionApprover(issueID, dSection); |             bool isLastApprover = caDMO.IsLastSectionApprover(issueID, dSection); | ||||||
|             if (isLastApprover) { |             if (isLastApprover) { | ||||||
| @ -876,8 +927,8 @@ public class CorrectiveActionController : Controller { | |||||||
|                 detailedException = e.Message; |                 detailedException = e.Message; | ||||||
|             } |             } | ||||||
|             string exceptionString = e.Message.ToString().Trim().Length > 500 ? "Issue=" + issueID.ToString() + " Step:" + e.Message.ToString().Substring(0, 250) : e.Message.ToString(); |             string exceptionString = e.Message.ToString().Trim().Length > 500 ? "Issue=" + issueID.ToString() + " Step:" + e.Message.ToString().Substring(0, 250) : e.Message.ToString(); | ||||||
|             Functions.WriteEvent(_AppSettings, @User.Identity.Name + "\r\n " + "Approve\r\n" + issueID.ToString() + "\r\n" + detailedException, System.Diagnostics.EventLogEntryType.Error); |             Functions.WriteEvent(_AppSettings, GetUserIdentityName() + "\r\n " + "Approve\r\n" + issueID.ToString() + "\r\n" + detailedException, System.Diagnostics.EventLogEntryType.Error); | ||||||
|             EventLogDMO.Add(new WinEventLog() { IssueID = issueID, UserID = @User.Identity.Name, DocumentType = "Corrective Action", OperationType = "Error", Comments = "Approve - " + exceptionString }); |             EventLogDMO.Add(new WinEventLog() { IssueID = issueID, UserID = GetUserIdentityName(), DocumentType = "Corrective Action", OperationType = "Error", Comments = "Approve - " + exceptionString }); | ||||||
|             return Content(e.Message); |             return Content(e.Message); | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
| @ -885,7 +936,7 @@ public class CorrectiveActionController : Controller { | |||||||
|     public ActionResult RejectSection(int issueID, string dSection, string comments) { |     public ActionResult RejectSection(int issueID, string dSection, string comments) { | ||||||
|         try { |         try { | ||||||
|  |  | ||||||
|             int userID = (int)Session[GlobalVars.SESSION_USERID]; |             int userID = GlobalVars.GetUserId(GetSession()); | ||||||
|             CorrectiveAction ca = caDMO.GetCAItem(issueID, userID); |             CorrectiveAction ca = caDMO.GetCAItem(issueID, userID); | ||||||
|             caDMO.RejectSection(issueID, userID, dSection, comments); |             caDMO.RejectSection(issueID, userID, dSection, comments); | ||||||
|             // Notify Rejection to assignee and requestor |             // Notify Rejection to assignee and requestor | ||||||
| @ -905,18 +956,19 @@ public class CorrectiveActionController : Controller { | |||||||
|                 detailedException = e.Message; |                 detailedException = e.Message; | ||||||
|             } |             } | ||||||
|             string exceptionString = e.Message.ToString().Trim().Length > 500 ? "Issue=" + issueID.ToString() + " Step:" + e.Message.ToString().Substring(0, 250) : e.Message.ToString(); |             string exceptionString = e.Message.ToString().Trim().Length > 500 ? "Issue=" + issueID.ToString() + " Step:" + e.Message.ToString().Substring(0, 250) : e.Message.ToString(); | ||||||
|             Functions.WriteEvent(_AppSettings, @User.Identity.Name + "\r\n " + "Reject\r\n" + issueID.ToString() + "\r\n" + detailedException, System.Diagnostics.EventLogEntryType.Error); |             Functions.WriteEvent(_AppSettings, GetUserIdentityName() + "\r\n " + "Reject\r\n" + issueID.ToString() + "\r\n" + detailedException, System.Diagnostics.EventLogEntryType.Error); | ||||||
|             EventLogDMO.Add(new WinEventLog() { IssueID = issueID, UserID = @User.Identity.Name, DocumentType = "Corrective Action", OperationType = "Error", Comments = "Reject - " + exceptionString }); |             EventLogDMO.Add(new WinEventLog() { IssueID = issueID, UserID = GetUserIdentityName(), DocumentType = "Corrective Action", OperationType = "Error", Comments = "Reject - " + exceptionString }); | ||||||
|             return Content(e.Message); |             return Content(e.Message); | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     public void NotifySectionRejection(int issueID, int recipientUserId, int loggedInUserId, string section, string comment) { |     public void NotifySectionRejection(int issueID, int recipientUserId, int loggedInUserId, string section, string comment) { | ||||||
|         try { |         try { | ||||||
|             LoginModel recipient = userDMO.GetUserByID(recipientUserId); |             LoginModel recipient = userDMO.GetUserByID(recipientUserId); | ||||||
|             LoginModel loggedInUser = userDMO.GetUserByID(loggedInUserId); |             LoginModel loggedInUser = userDMO.GetUserByID(loggedInUserId); | ||||||
|             CorrectiveActionHelper.NotifySectionRejection(_AppSettings, issueID, section, comment, recipient, loggedInUser); |             CorrectiveActionHelper.NotifySectionRejection(_AppSettings, issueID, section, comment, recipient, loggedInUser); | ||||||
|             try { |             try { | ||||||
|                 EventLogDMO.Add(new WinEventLog() { IssueID = issueID, UserID = @User.Identity.Name, DocumentType = "Corrective Action", OperationType = "Email", Comments = "Approvers for Step " }); |                 EventLogDMO.Add(new WinEventLog() { IssueID = issueID, UserID = GetUserIdentityName(), DocumentType = "Corrective Action", OperationType = "Email", Comments = "Approvers for Step " }); | ||||||
|             } catch { } |             } catch { } | ||||||
|         } catch (Exception e) { |         } catch (Exception e) { | ||||||
|             string detailedException = ""; |             string detailedException = ""; | ||||||
| @ -926,9 +978,9 @@ public class CorrectiveActionController : Controller { | |||||||
|                 detailedException = e.Message; |                 detailedException = e.Message; | ||||||
|             } |             } | ||||||
|             string exceptionString = e.Message.ToString().Trim().Length > 500 ? "Issue=" + issueID.ToString() + e.Message.ToString().Substring(0, 250) : e.Message.ToString(); |             string exceptionString = e.Message.ToString().Trim().Length > 500 ? "Issue=" + issueID.ToString() + e.Message.ToString().Substring(0, 250) : e.Message.ToString(); | ||||||
|             Functions.WriteEvent(_AppSettings, @User.Identity.Name + "\r\n Corrective Action - NotifyApprovers\r\n" + detailedException, System.Diagnostics.EventLogEntryType.Error); |             Functions.WriteEvent(_AppSettings, GetUserIdentityName() + "\r\n Corrective Action - NotifyApprovers\r\n" + detailedException, System.Diagnostics.EventLogEntryType.Error); | ||||||
|             EventLogDMO.Add(new WinEventLog() { IssueID = issueID, UserID = @User.Identity.Name, DocumentType = "Corrective Action", OperationType = "Error", Comments = "AddAdditionalApproval - " + exceptionString }); |             EventLogDMO.Add(new WinEventLog() { IssueID = issueID, UserID = GetUserIdentityName(), DocumentType = "Corrective Action", OperationType = "Error", Comments = "AddAdditionalApproval - " + exceptionString }); | ||||||
|             throw e; |             throw; | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  |  | ||||||
| @ -937,7 +989,7 @@ public class CorrectiveActionController : Controller { | |||||||
|             string userEmail = userDMO.GetUserEmailByID(userId); |             string userEmail = userDMO.GetUserEmailByID(userId); | ||||||
|             CorrectiveActionHelper.NotifyForD5D6D7Validation(_AppSettings, issueID, dSection, userEmail); |             CorrectiveActionHelper.NotifyForD5D6D7Validation(_AppSettings, issueID, dSection, userEmail); | ||||||
|             try { |             try { | ||||||
|                 EventLogDMO.Add(new WinEventLog() { IssueID = issueID, UserID = @User.Identity.Name, DocumentType = "Corrective Action", OperationType = "Email", Comments = "Approvers for Step " }); |                 EventLogDMO.Add(new WinEventLog() { IssueID = issueID, UserID = GetUserIdentityName(), DocumentType = "Corrective Action", OperationType = "Email", Comments = "Approvers for Step " }); | ||||||
|             } catch { } |             } catch { } | ||||||
|         } catch (Exception e) { |         } catch (Exception e) { | ||||||
|             string detailedException = ""; |             string detailedException = ""; | ||||||
| @ -947,9 +999,9 @@ public class CorrectiveActionController : Controller { | |||||||
|                 detailedException = e.Message; |                 detailedException = e.Message; | ||||||
|             } |             } | ||||||
|             string exceptionString = e.Message.ToString().Trim().Length > 500 ? "Issue=" + issueID.ToString() + e.Message.ToString().Substring(0, 250) : e.Message.ToString(); |             string exceptionString = e.Message.ToString().Trim().Length > 500 ? "Issue=" + issueID.ToString() + e.Message.ToString().Substring(0, 250) : e.Message.ToString(); | ||||||
|             Functions.WriteEvent(_AppSettings, @User.Identity.Name + "\r\n Corrective Action - NotifyApprovers\r\n" + detailedException, System.Diagnostics.EventLogEntryType.Error); |             Functions.WriteEvent(_AppSettings, GetUserIdentityName() + "\r\n Corrective Action - NotifyApprovers\r\n" + detailedException, System.Diagnostics.EventLogEntryType.Error); | ||||||
|             EventLogDMO.Add(new WinEventLog() { IssueID = issueID, UserID = @User.Identity.Name, DocumentType = "Corrective Action", OperationType = "Error", Comments = "AddAdditionalApproval - " + exceptionString }); |             EventLogDMO.Add(new WinEventLog() { IssueID = issueID, UserID = GetUserIdentityName(), DocumentType = "Corrective Action", OperationType = "Error", Comments = "AddAdditionalApproval - " + exceptionString }); | ||||||
|             throw e; |             throw; | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  |  | ||||||
| @ -958,7 +1010,7 @@ public class CorrectiveActionController : Controller { | |||||||
|             string userEmail = userDMO.GetUserEmailByID(userId); |             string userEmail = userDMO.GetUserEmailByID(userId); | ||||||
|             CorrectiveActionHelper.NotifyUsersDSectionApproved(_AppSettings, issueID, dSection, userEmail); |             CorrectiveActionHelper.NotifyUsersDSectionApproved(_AppSettings, issueID, dSection, userEmail); | ||||||
|             try { |             try { | ||||||
|                 EventLogDMO.Add(new WinEventLog() { IssueID = issueID, UserID = @User.Identity.Name, DocumentType = "Corrective Action", OperationType = "Email", Comments = "Approvers for Step " }); |                 EventLogDMO.Add(new WinEventLog() { IssueID = issueID, UserID = GetUserIdentityName(), DocumentType = "Corrective Action", OperationType = "Email", Comments = "Approvers for Step " }); | ||||||
|             } catch { } |             } catch { } | ||||||
|         } catch (Exception e) { |         } catch (Exception e) { | ||||||
|             string detailedException = ""; |             string detailedException = ""; | ||||||
| @ -968,9 +1020,9 @@ public class CorrectiveActionController : Controller { | |||||||
|                 detailedException = e.Message; |                 detailedException = e.Message; | ||||||
|             } |             } | ||||||
|             string exceptionString = e.Message.ToString().Trim().Length > 500 ? "Issue=" + issueID.ToString() + e.Message.ToString().Substring(0, 250) : e.Message.ToString(); |             string exceptionString = e.Message.ToString().Trim().Length > 500 ? "Issue=" + issueID.ToString() + e.Message.ToString().Substring(0, 250) : e.Message.ToString(); | ||||||
|             Functions.WriteEvent(_AppSettings, @User.Identity.Name + "\r\n Corrective Action - NotifyApprovers\r\n" + detailedException, System.Diagnostics.EventLogEntryType.Error); |             Functions.WriteEvent(_AppSettings, GetUserIdentityName() + "\r\n Corrective Action - NotifyApprovers\r\n" + detailedException, System.Diagnostics.EventLogEntryType.Error); | ||||||
|             EventLogDMO.Add(new WinEventLog() { IssueID = issueID, UserID = @User.Identity.Name, DocumentType = "Corrective Action", OperationType = "Error", Comments = "AddAdditionalApproval - " + exceptionString }); |             EventLogDMO.Add(new WinEventLog() { IssueID = issueID, UserID = GetUserIdentityName(), DocumentType = "Corrective Action", OperationType = "Error", Comments = "AddAdditionalApproval - " + exceptionString }); | ||||||
|             throw e; |             throw; | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  |  | ||||||
| @ -979,10 +1031,12 @@ public class CorrectiveActionController : Controller { | |||||||
|  |  | ||||||
|         return d3DueDate; |         return d3DueDate; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     public DateTime SetD5D7DueDate(int caNo) { |     public DateTime SetD5D7DueDate(int caNo) { | ||||||
|         DateTime d5d7DueDate = caDMO.SetCAD5D7DueDate(caNo); |         DateTime d5d7DueDate = caDMO.SetCAD5D7DueDate(caNo); | ||||||
|         return d5d7DueDate; |         return d5d7DueDate; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     public bool ProcessCARDueDates() { |     public bool ProcessCARDueDates() { | ||||||
|         bool isSuccess = false; |         bool isSuccess = false; | ||||||
|         List<CAD3D5D7Due> dueCAs = caDMO.GetCAD3D5D7Due().ToList(); |         List<CAD3D5D7Due> dueCAs = caDMO.GetCAD3D5D7Due().ToList(); | ||||||
| @ -1006,8 +1060,8 @@ public class CorrectiveActionController : Controller { | |||||||
|                     detailedException = e.Message; |                     detailedException = e.Message; | ||||||
|                 } |                 } | ||||||
|                 string exceptionString = e.Message.ToString().Trim().Length > 500 ? "Issue=" + dueCA.CANo.ToString() + e.Message.ToString().Substring(0, 250) : e.Message.ToString(); |                 string exceptionString = e.Message.ToString().Trim().Length > 500 ? "Issue=" + dueCA.CANo.ToString() + e.Message.ToString().Substring(0, 250) : e.Message.ToString(); | ||||||
|                 Functions.WriteEvent(_AppSettings, @User.Identity.Name + "\r\n Corrective Action - ProcessCARDueDates\r\n" + detailedException, System.Diagnostics.EventLogEntryType.Error); |                 Functions.WriteEvent(_AppSettings, GetUserIdentityName() + "\r\n Corrective Action - ProcessCARDueDates\r\n" + detailedException, System.Diagnostics.EventLogEntryType.Error); | ||||||
|                 EventLogDMO.Add(new WinEventLog() { IssueID = dueCA.CANo, UserID = @User.Identity.Name, DocumentType = "Corrective Action", OperationType = "Error", Comments = "ProcessCARDueDates - Called via API - " + exceptionString }); |                 EventLogDMO.Add(new WinEventLog() { IssueID = dueCA.CANo, UserID = GetUserIdentityName(), DocumentType = "Corrective Action", OperationType = "Error", Comments = "ProcessCARDueDates - Called via API - " + exceptionString }); | ||||||
|  |  | ||||||
|             } |             } | ||||||
|  |  | ||||||
| @ -1018,4 +1072,33 @@ public class CorrectiveActionController : Controller { | |||||||
|     public void ProcessCAForFollowUp() { |     public void ProcessCAForFollowUp() { | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  | #if !NET8 | ||||||
|  |  | ||||||
|  |     private System.Web.HttpSessionStateBase GetSession() => | ||||||
|  |         Session; | ||||||
|  |  | ||||||
|  |     private JsonResult GetJsonResult(object? data) => | ||||||
|  |         Json(data, JsonRequestBehavior.AllowGet); | ||||||
|  |  | ||||||
|  |     private bool IsAjaxRequest() => | ||||||
|  |         Request.IsAjaxRequest(); | ||||||
|  |  | ||||||
|  | #endif | ||||||
|  |  | ||||||
|  | #if NET8 | ||||||
|  |  | ||||||
|  |     private Microsoft.AspNetCore.Http.ISession GetSession() => | ||||||
|  |         HttpContext.Session; | ||||||
|  |  | ||||||
|  |     private JsonResult GetJsonResult(object? data) => | ||||||
|  |         Json(data); | ||||||
|  |  | ||||||
|  |     private bool IsAjaxRequest() => | ||||||
|  |         Request.Headers.TryGetValue("X-Requested-With", out Microsoft.Extensions.Primitives.StringValues strings) && strings[0] == "XMLHttpRequest"; | ||||||
|  |  | ||||||
|  | #endif | ||||||
|  |  | ||||||
|  |     private string GetUserIdentityName() => | ||||||
|  |         @User.Identity.Name; | ||||||
|  |  | ||||||
| } | } | ||||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							| @ -1,35 +1,53 @@ | |||||||
| using System; | using System; | ||||||
| using System.Collections.Generic; | using System.Collections.Generic; | ||||||
| using System.Configuration; | #if !NET8 | ||||||
| using System.Linq; |  | ||||||
| using System.Web; | using System.Web; | ||||||
| using System.Web.Mvc; | using System.Web.Mvc; | ||||||
|  | #endif | ||||||
|  |  | ||||||
|  | #if NET8 | ||||||
|  | using Microsoft.AspNetCore.Mvc; | ||||||
|  | #endif | ||||||
|  |  | ||||||
| using Fab2ApprovalSystem.DMO; | using Fab2ApprovalSystem.DMO; | ||||||
| using Fab2ApprovalSystem.Misc; | using Fab2ApprovalSystem.Misc; | ||||||
| using Fab2ApprovalSystem.Models; | using Fab2ApprovalSystem.Models; | ||||||
| using Fab2ApprovalSystem.Utilities; | using Fab2ApprovalSystem.Utilities; | ||||||
| using Fab2ApprovalSystem.ViewModels; |  | ||||||
|  |  | ||||||
|  | #if !NET8 | ||||||
|  | using System.Configuration; | ||||||
|  | using System.Linq; | ||||||
|  | using Fab2ApprovalSystem.ViewModels; | ||||||
|  | #endif | ||||||
|  |  | ||||||
|  | #if !NET8 | ||||||
| using Kendo.Mvc.Extensions; | using Kendo.Mvc.Extensions; | ||||||
| using Kendo.Mvc.UI; | using Kendo.Mvc.UI; | ||||||
|  | #endif | ||||||
|  |  | ||||||
| namespace Fab2ApprovalSystem.Controllers; | namespace Fab2ApprovalSystem.Controllers; | ||||||
|  |  | ||||||
|  | #if !NET8 | ||||||
| [Authorize] | [Authorize] | ||||||
|  | #if !NET8 | ||||||
| [SessionExpireFilter] | [SessionExpireFilter] | ||||||
|  | #endif | ||||||
| [OutputCache(NoStore = true, Duration = 0, VaryByParam = "*")] | [OutputCache(NoStore = true, Duration = 0, VaryByParam = "*")] | ||||||
|  | #endif | ||||||
|  | #if NET8 | ||||||
|  | [Route("[controller]")] | ||||||
|  | #endif | ||||||
| public class HomeController : Controller { | public class HomeController : Controller { | ||||||
|  |  | ||||||
|     MRB_DMO mrbDMO = new MRB_DMO(GlobalVars.AppSettings); |     private readonly MRB_DMO mrbDMO = new(GlobalVars.AppSettings); | ||||||
|     PartsRequestDMO prDMO = new PartsRequestDMO(); |     private readonly PartsRequestDMO prDMO = new(); | ||||||
|     LotDispositionDMO ldDMO = new LotDispositionDMO(); |     private readonly LotDispositionDMO ldDMO = new(); | ||||||
|     WorkflowDMO wfDMO = new WorkflowDMO(); |     private readonly WorkflowDMO wfDMO = new(); | ||||||
|     ECN_DMO ecnDMO = new ECN_DMO(); |     private readonly ECN_DMO ecnDMO = new(); | ||||||
|     UserUtilities userDMO = new UserUtilities(); |     private readonly UserUtilities userDMO = new(); | ||||||
|     UserAccountDMO originalUserDMO = new UserAccountDMO(); |     private readonly UserAccountDMO originalUserDMO = new(); | ||||||
|     TrainingDMO trainingDMO = new TrainingDMO(); |     private readonly TrainingDMO trainingDMO = new(); | ||||||
|     MiscDMO miscDMO = new MiscDMO(); |     private readonly MiscDMO miscDMO = new(); | ||||||
|     private readonly AppSettings _AppSettings = GlobalVars.AppSettings; |     private readonly AppSettings _AppSettings = GlobalVars.AppSettings; | ||||||
|  |  | ||||||
|     public ActionResult Index(string tabName) { |     public ActionResult Index(string tabName) { | ||||||
| @ -57,6 +75,7 @@ public class HomeController : Controller { | |||||||
|     public ActionResult ECNList() { |     public ActionResult ECNList() { | ||||||
|         return View(); |         return View(); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     public ActionResult TrainingList() { |     public ActionResult TrainingList() { | ||||||
|         return View(); |         return View(); | ||||||
|     } |     } | ||||||
| @ -82,25 +101,25 @@ public class HomeController : Controller { | |||||||
|         return View(); |         return View(); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  | #if !NET8 | ||||||
|  |  | ||||||
|     public ActionResult GetTaskList([DataSourceRequest] DataSourceRequest request, string tabName) { |     public ActionResult GetTaskList([DataSourceRequest] DataSourceRequest request, string tabName) { | ||||||
|         try { |         try { | ||||||
|             ViewBag.ActiveTabName = tabName; |             ViewBag.ActiveTabName = tabName; | ||||||
|             List<IssuesViewModel> data = ldDMO.GetTaskList((int)Session[GlobalVars.SESSION_USERID]).Distinct().ToList(); |             List<IssuesViewModel> data = ldDMO.GetTaskList(GlobalVars.GetUserId(GetSession())).Distinct().ToList(); | ||||||
|             return Json(data.ToDataSourceResult(request), JsonRequestBehavior.AllowGet); |             return GetJsonResult(data.ToDataSourceResult(request)); | ||||||
|         } catch (Exception ex) { |         } catch (Exception ex) { | ||||||
|             // TODO record the error |             throw; | ||||||
|             throw ex; |  | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     public ActionResult GetMyOpenActionItems([DataSourceRequest] DataSourceRequest request, string tabName) { |     public ActionResult GetMyOpenActionItems([DataSourceRequest] DataSourceRequest request, string tabName) { | ||||||
|         try { |         try { | ||||||
|             ViewBag.ActiveTabName = tabName; |             ViewBag.ActiveTabName = tabName; | ||||||
|             List<OpenActionItemViewModel> data = ldDMO.GetMyOpenActionItems((int)Session[GlobalVars.SESSION_USERID]).Distinct().ToList(); |             List<OpenActionItemViewModel> data = ldDMO.GetMyOpenActionItems(GlobalVars.GetUserId(GetSession())).Distinct().ToList(); | ||||||
|             return Json(data.ToDataSourceResult(request), JsonRequestBehavior.AllowGet); |             return GetJsonResult(data.ToDataSourceResult(request)); | ||||||
|         } catch (Exception ex) { |         } catch (Exception ex) { | ||||||
|             // TODO record the error |             throw; | ||||||
|             throw ex; |  | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  |  | ||||||
| @ -116,76 +135,82 @@ public class HomeController : Controller { | |||||||
|     } |     } | ||||||
|  |  | ||||||
|     public ActionResult GetChangeControlList([DataSourceRequest] DataSourceRequest request) { |     public ActionResult GetChangeControlList([DataSourceRequest] DataSourceRequest request) { | ||||||
|         IEnumerable<ChangeControlList> data = ldDMO.GetChangeControls(int.Parse(Session[GlobalVars.SESSION_USERID].ToString())); |         IEnumerable<ChangeControlList> data = ldDMO.GetChangeControls(GlobalVars.GetUserId(GetSession())); | ||||||
|         return Json(data.ToDataSourceResult(request)); |         return Json(data.ToDataSourceResult(request)); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     public ActionResult GetAuditList([DataSourceRequest] DataSourceRequest request) { |     public ActionResult GetAuditList([DataSourceRequest] DataSourceRequest request) { | ||||||
|         IEnumerable<AuditList> data = ldDMO.GetAuditList(int.Parse(Session[GlobalVars.SESSION_USERID].ToString())); |         IEnumerable<AuditList> data = ldDMO.GetAuditList(GlobalVars.GetUserId(GetSession())); | ||||||
|         return Json(data.ToDataSourceResult(request)); |         return Json(data.ToDataSourceResult(request)); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     public ActionResult GetCorrectiveActionList([DataSourceRequest] DataSourceRequest request) { |     public ActionResult GetCorrectiveActionList([DataSourceRequest] DataSourceRequest request) { | ||||||
|         IEnumerable<CorrectiveAction> data = ldDMO.GetCorrectiveActionList(int.Parse(Session[GlobalVars.SESSION_USERID].ToString())); |         IEnumerable<CorrectiveAction> data = ldDMO.GetCorrectiveActionList(GlobalVars.GetUserId(GetSession())); | ||||||
|         return Json(data.ToDataSourceResult(request)); |         return Json(data.ToDataSourceResult(request)); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     public ActionResult GetMRBList([DataSourceRequest] DataSourceRequest request) { |     public ActionResult GetMRBList([DataSourceRequest] DataSourceRequest request) { | ||||||
|         IEnumerable<IssuesViewModel> data = ldDMO.GetMRBList(int.Parse(Session[GlobalVars.SESSION_USERID].ToString())); |         IEnumerable<IssuesViewModel> data = ldDMO.GetMRBList(GlobalVars.GetUserId(GetSession())); | ||||||
|         return Json(data.ToDataSourceResult(request)); |         return Json(data.ToDataSourceResult(request)); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     public ActionResult GetLotDispositionList([DataSourceRequest] DataSourceRequest request) { |     public ActionResult GetLotDispositionList([DataSourceRequest] DataSourceRequest request) { | ||||||
|         IEnumerable<IssuesViewModel> data = ldDMO.GetLotDispositionList(int.Parse(Session[GlobalVars.SESSION_USERID].ToString())); |         IEnumerable<IssuesViewModel> data = ldDMO.GetLotDispositionList(GlobalVars.GetUserId(GetSession())); | ||||||
|         return Json(data.ToDataSourceResult(request)); |         return Json(data.ToDataSourceResult(request)); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     public ActionResult GetECNList([DataSourceRequest] DataSourceRequest request) { |     public ActionResult GetECNList([DataSourceRequest] DataSourceRequest request) { | ||||||
|         IEnumerable<IssuesViewModel> data = ldDMO.GetECNList(int.Parse(Session[GlobalVars.SESSION_USERID].ToString())); |         IEnumerable<IssuesViewModel> data = ldDMO.GetECNList(GlobalVars.GetUserId(GetSession())); | ||||||
|         return Json(data.ToDataSourceResult(request)); |         return Json(data.ToDataSourceResult(request)); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     public ActionResult GetTrainingList([DataSourceRequest] DataSourceRequest request) { |     public ActionResult GetTrainingList([DataSourceRequest] DataSourceRequest request) { | ||||||
|         IEnumerable<Training> data = trainingDMO.GetAllTrainings(); |         IEnumerable<Training> data = trainingDMO.GetAllTrainings(); | ||||||
|         return Json(data.ToDataSourceResult(request)); |         return Json(data.ToDataSourceResult(request)); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  | #endif | ||||||
|  |  | ||||||
|     public ActionResult MyECNsTECNs(string dataType) { |     public ActionResult MyECNsTECNs(string dataType) { | ||||||
|         ViewBag.ActiveTabName = dataType; |         ViewBag.ActiveTabName = dataType; | ||||||
|         return View(); |         return View(); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  | #if !NET8 | ||||||
|  |  | ||||||
|     public ActionResult GetECN_TECNsPendingApproval([DataSourceRequest] DataSourceRequest request) { |     public ActionResult GetECN_TECNsPendingApproval([DataSourceRequest] DataSourceRequest request) { | ||||||
|         IEnumerable<IssuesViewModel> data = ecnDMO.GetECN_TECNPendingApprovals(int.Parse(Session[GlobalVars.SESSION_USERID].ToString())); |         IEnumerable<IssuesViewModel> data = ecnDMO.GetECN_TECNPendingApprovals(GlobalVars.GetUserId(GetSession())); | ||||||
|         ViewBag.ViewOption = "Pending Approvals"; |         ViewBag.ViewOption = "Pending Approvals"; | ||||||
|         Session[GlobalVars.ECN_VIEW_OPTION] = ViewBag.ViewOption; |         GlobalVars.SetECNViewOption(GetSession(), ViewBag.ViewOption); | ||||||
|         return Json(data.ToDataSourceResult(request)); |         return Json(data.ToDataSourceResult(request)); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     public ActionResult GetMyExpiredTECNs([DataSourceRequest] DataSourceRequest request) { |     public ActionResult GetMyExpiredTECNs([DataSourceRequest] DataSourceRequest request) { | ||||||
|  |  | ||||||
|         IEnumerable<IssuesViewModel> data = ecnDMO.GetMyExpiredTECNs(int.Parse(Session[GlobalVars.SESSION_USERID].ToString()), 7); |         IEnumerable<IssuesViewModel> data = ecnDMO.GetMyExpiredTECNs(GlobalVars.GetUserId(GetSession()), 7); | ||||||
|         ViewBag.ViewOption = "Expired TECNs"; |         ViewBag.ViewOption = "Expired TECNs"; | ||||||
|         Session[GlobalVars.ECN_VIEW_OPTION] = ViewBag.ViewOption; |         GlobalVars.SetECNViewOption(GetSession(), ViewBag.ViewOption); | ||||||
|         return Json(data.ToDataSourceResult(request)); |         return Json(data.ToDataSourceResult(request)); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     public ActionResult GetAllTECNs([DataSourceRequest] DataSourceRequest request) { |     public ActionResult GetAllTECNs([DataSourceRequest] DataSourceRequest request) { | ||||||
|         IEnumerable<IssuesViewModel> data = ecnDMO.GetAllTECNs(); |         IEnumerable<IssuesViewModel> data = ecnDMO.GetAllTECNs(); | ||||||
|         ViewBag.ViewOption = "All TECNs"; |         ViewBag.ViewOption = "All TECNs"; | ||||||
|         Session[GlobalVars.ECN_VIEW_OPTION] = ViewBag.ViewOption; |         GlobalVars.SetECNViewOption(GetSession(), ViewBag.ViewOption); | ||||||
|         return Json(data.ToDataSourceResult(request)); |         return Json(data.ToDataSourceResult(request)); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     public ActionResult GetMyConvertedTECNsToECNs([DataSourceRequest] DataSourceRequest request) { |     public ActionResult GetMyConvertedTECNsToECNs([DataSourceRequest] DataSourceRequest request) { | ||||||
|         IEnumerable<IssuesViewModel> data = ecnDMO.GetMyConvertedTECNsToECNs(int.Parse(Session[GlobalVars.SESSION_USERID].ToString()), 7); |         IEnumerable<IssuesViewModel> data = ecnDMO.GetMyConvertedTECNsToECNs(GlobalVars.GetUserId(GetSession()), 7); | ||||||
|         ViewBag.ViewOption = "Converted TECNs"; |         ViewBag.ViewOption = "Converted TECNs"; | ||||||
|         Session[GlobalVars.ECN_VIEW_OPTION] = ViewBag.ViewOption; |         GlobalVars.SetECNViewOption(GetSession(), ViewBag.ViewOption); | ||||||
|         return Json(data.ToDataSourceResult(request)); |         return Json(data.ToDataSourceResult(request)); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     public ActionResult GetMyExpiringTECNs([DataSourceRequest] DataSourceRequest request) { |     public ActionResult GetMyExpiringTECNs([DataSourceRequest] DataSourceRequest request) { | ||||||
|         IEnumerable<IssuesViewModel> data = ecnDMO.GetMyExpiringTECNs(int.Parse(Session[GlobalVars.SESSION_USERID].ToString()), 7); |         IEnumerable<IssuesViewModel> data = ecnDMO.GetMyExpiringTECNs(GlobalVars.GetUserId(GetSession()), 7); | ||||||
|         ViewBag.ViewOption = "Expiring TECNs"; |         ViewBag.ViewOption = "Expiring TECNs"; | ||||||
|         Session[GlobalVars.ECN_VIEW_OPTION] = ViewBag.ViewOption; |         GlobalVars.SetECNViewOption(GetSession(), ViewBag.ViewOption); | ||||||
|         return Json(data.ToDataSourceResult(request)); |         return Json(data.ToDataSourceResult(request)); | ||||||
|     } |     } | ||||||
|  |  | ||||||
| @ -194,17 +219,17 @@ public class HomeController : Controller { | |||||||
|         return Json(LotTravDMO.GetLotListBasedOnSWRNumber(workRequestID).ToDataSourceResult(request)); |         return Json(LotTravDMO.GetLotListBasedOnSWRNumber(workRequestID).ToDataSourceResult(request)); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     /// <returns></returns> | #endif | ||||||
|  |  | ||||||
|     public ActionResult SetOOOStatus(int delegatedTo, DateTime startDate, DateTime endDate, string tab) { |     public ActionResult SetOOOStatus(int delegatedTo, DateTime startDate, DateTime endDate, string tab) { | ||||||
|         if (Session[GlobalVars.SESSION_USERID] != null) { |         if (GlobalVars.IsUserIdValueNotNull(GetSession())) { | ||||||
|             int returnValue = MiscDMO.EnableOOOStatus(int.Parse(Session[GlobalVars.SESSION_USERID].ToString()), delegatedTo, startDate, endDate); |             int returnValue = MiscDMO.EnableOOOStatus(GlobalVars.GetUserId(GetSession()), delegatedTo, startDate, endDate); | ||||||
|             if (returnValue == 3) // the delegator is already a delegator to someone else |             if (returnValue == 3) // the delegator is already a delegator to someone else | ||||||
|             { |             { | ||||||
|                 return Content("3"); |                 return Content("3"); | ||||||
|             } |             } | ||||||
|             if (startDate <= DateTime.Today) |             if (startDate <= DateTime.Today) | ||||||
|                 Session[GlobalVars.OOO] = true; |                 GlobalVars.SetOOO(GetSession(), true); | ||||||
|  |  | ||||||
|             NotifyDelegation(delegatedTo, startDate, endDate); |             NotifyDelegation(delegatedTo, startDate, endDate); | ||||||
|         } |         } | ||||||
| @ -213,12 +238,14 @@ public class HomeController : Controller { | |||||||
|     } |     } | ||||||
|  |  | ||||||
|     public void ExpireOOOStatus(string tab) { |     public void ExpireOOOStatus(string tab) { | ||||||
|         if (Session[GlobalVars.SESSION_USERID] != null) { |         if (GlobalVars.IsUserIdValueNotNull(GetSession())) { | ||||||
|             MiscDMO.ExpireOOOStatus(int.Parse(Session[GlobalVars.SESSION_USERID].ToString())); |             MiscDMO.ExpireOOOStatus(GlobalVars.GetUserId(GetSession())); | ||||||
|             Session[GlobalVars.OOO] = false; |             GlobalVars.SetOOO(GetSession(), false); | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  | #if !NET8 | ||||||
|  |  | ||||||
|     [AcceptVerbs(HttpVerbs.Post)] |     [AcceptVerbs(HttpVerbs.Post)] | ||||||
|     public ActionResult DeleteItem([DataSourceRequest] DataSourceRequest request, IssuesViewModel issue) { |     public ActionResult DeleteItem([DataSourceRequest] DataSourceRequest request, IssuesViewModel issue) { | ||||||
|         GlobalVars.DocumentType dType; |         GlobalVars.DocumentType dType; | ||||||
| @ -228,20 +255,22 @@ public class HomeController : Controller { | |||||||
|         else if (dType == GlobalVars.DocumentType.LotDisposition) |         else if (dType == GlobalVars.DocumentType.LotDisposition) | ||||||
|             ldDMO.DeleteLotDisposition(issue.IssueID); |             ldDMO.DeleteLotDisposition(issue.IssueID); | ||||||
|         else if (dType == GlobalVars.DocumentType.ECN) |         else if (dType == GlobalVars.DocumentType.ECN) | ||||||
|             ecnDMO.DeleteDocument(issue.IssueID, int.Parse(Session[GlobalVars.SESSION_USERID].ToString()), "ECN"); |             ecnDMO.DeleteDocument(issue.IssueID, GlobalVars.GetUserId(GetSession()), "ECN"); | ||||||
|         else if (dType == GlobalVars.DocumentType.CorrectiveAction) |         else if (dType == GlobalVars.DocumentType.CorrectiveAction) | ||||||
|             ldDMO.DeleteCADocument(issue.IssueID, int.Parse(Session[GlobalVars.SESSION_USERID].ToString()), "Corrective Action"); |             ldDMO.DeleteCADocument(issue.IssueID, GlobalVars.GetUserId(GetSession()), "Corrective Action"); | ||||||
|  |  | ||||||
|         return Json(new[] { issue }.ToDataSourceResult(request, ModelState)); |         return Json(new[] { issue }.ToDataSourceResult(request, ModelState)); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     [AcceptVerbs(HttpVerbs.Post)] |     [AcceptVerbs(HttpVerbs.Post)] | ||||||
|     public ActionResult DeleteCAItem([DataSourceRequest] DataSourceRequest request, CorrectiveAction ca) { |     public ActionResult DeleteCAItem([DataSourceRequest] DataSourceRequest request, CorrectiveAction ca) { | ||||||
|         ldDMO.DeleteCADocument(ca.CANo, int.Parse(Session[GlobalVars.SESSION_USERID].ToString()), "Corrective Action"); |         ldDMO.DeleteCADocument(ca.CANo, GlobalVars.GetUserId(GetSession()), "Corrective Action"); | ||||||
|  |  | ||||||
|         return Json(new[] { ca }.ToDataSourceResult(request, ModelState)); |         return Json(new[] { ca }.ToDataSourceResult(request, ModelState)); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  | #endif | ||||||
|  |  | ||||||
|     public ActionResult About() { |     public ActionResult About() { | ||||||
|         ViewBag.Message = "Your application description page."; |         ViewBag.Message = "Your application description page."; | ||||||
|  |  | ||||||
| @ -283,61 +312,63 @@ public class HomeController : Controller { | |||||||
|  |  | ||||||
|     public void DelegateDocumentApproval(int issueID, int delegateTo, string ecnTypeString, string title) { |     public void DelegateDocumentApproval(int issueID, int delegateTo, string ecnTypeString, string title) { | ||||||
|         var email = ""; |         var email = ""; | ||||||
|         int delegateFrom = (int)Session[GlobalVars.SESSION_USERID]; |         int delegateFrom = GlobalVars.GetUserId(GetSession()); | ||||||
|         try { |         try { | ||||||
|             email = wfDMO.DelegateDocumentApproval(issueID, delegateFrom, delegateTo); |             email = wfDMO.DelegateDocumentApproval(issueID, delegateFrom, delegateTo); | ||||||
|             EventLogDMO.Add(new WinEventLog() { IssueID = issueID, UserID = @User.Identity.Name, DocumentType = ecnTypeString, OperationType = "Delegation", Comments = "Delegated from - " + delegateFrom + " to " + delegateTo }); |             EventLogDMO.Add(new WinEventLog() { IssueID = issueID, UserID = GetUserIdentityName(), DocumentType = ecnTypeString, OperationType = "Delegation", Comments = "Delegated from - " + delegateFrom + " to " + delegateTo }); | ||||||
|         } catch (Exception e) { |         } catch (Exception e) { | ||||||
|             string exceptionString = e.Message.ToString().Trim().Length > 500 ? "Issue=" + issueID.ToString() + " " + e.Message.ToString().Substring(0, 250) : e.Message.ToString(); |             string exceptionString = e.Message.ToString().Trim().Length > 500 ? "Issue=" + issueID.ToString() + " " + e.Message.ToString().Substring(0, 250) : e.Message.ToString(); | ||||||
|             Functions.WriteEvent(_AppSettings, @User.Identity.Name + "\r\n DelegateApproval\r\n" + e.Message.ToString(), System.Diagnostics.EventLogEntryType.Error); |             Functions.WriteEvent(_AppSettings, GetUserIdentityName() + "\r\n DelegateApproval\r\n" + e.Message.ToString(), System.Diagnostics.EventLogEntryType.Error); | ||||||
|             EventLogDMO.Add(new WinEventLog() { IssueID = issueID, UserID = @User.Identity.Name, DocumentType = " + ecnTypeString + ", OperationType = "Error", Comments = "DelegateApproval - " + exceptionString }); |             EventLogDMO.Add(new WinEventLog() { IssueID = issueID, UserID = GetUserIdentityName(), DocumentType = " + ecnTypeString + ", OperationType = "Error", Comments = "DelegateApproval - " + exceptionString }); | ||||||
|             throw new Exception(e.Message); |             throw new Exception(e.Message); | ||||||
|         } |         } | ||||||
|         HomeHelper.DelegateDocumentApproval(_AppSettings, issueID, ecnTypeString, title, email); |         HomeHelper.DelegateDocumentApproval(_AppSettings, issueID, ecnTypeString, title, email); | ||||||
|         try { |         try { | ||||||
|             EventLogDMO.Add(new WinEventLog() { IssueID = issueID, UserID = @User.Identity.Name, DocumentType = ecnTypeString, OperationType = "Email", Comments = "Delegated to Approver: " + email }); |             EventLogDMO.Add(new WinEventLog() { IssueID = issueID, UserID = GetUserIdentityName(), DocumentType = ecnTypeString, OperationType = "Email", Comments = "Delegated to Approver: " + email }); | ||||||
|         } catch { } |         } catch { } | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     public JsonResult GetAllUsersList() { |     public JsonResult GetAllUsersList() { | ||||||
|  |  | ||||||
|         UserAccountDMO userDMO = new UserAccountDMO(); |         UserAccountDMO userDMO = new(); | ||||||
|         IEnumerable<LoginModel> userlist = userDMO.GetAllUsers(); |         IEnumerable<LoginModel> userlist = userDMO.GetAllUsers(); | ||||||
|         return Json(userlist, JsonRequestBehavior.AllowGet); |         return GetJsonResult(userlist); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     public ActionResult SaveAllDocumentsFilter(string data) { |     public ActionResult SaveAllDocumentsFilter(string data) { | ||||||
|         Session["AllDocumentsFilterData"] = data; |         GlobalVars.SetAllDocumentsFilterData(GetSession(), data); | ||||||
|         return new EmptyResult(); |         return new EmptyResult(); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     public ActionResult LoadAllDocumentsFilter() { |     public ActionResult LoadAllDocumentsFilter() { | ||||||
|         return Json(Session["AllDocumentsFilterData"], JsonRequestBehavior.AllowGet); |         return GetJsonResult(GlobalVars.GetAllDocumentsFilterData(GetSession())); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     public ActionResult SaveSWRFilter(string data) { |     public ActionResult SaveSWRFilter(string data) { | ||||||
|         Session["SWRFilterData"] = data; |         GlobalVars.SetSWRFilterData(GetSession(), data); | ||||||
|         return new EmptyResult(); |         return new EmptyResult(); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     public ActionResult LoadSWRFilter() { |     public ActionResult LoadSWRFilter() { | ||||||
|         return Json(Session["SWRFilterData"], JsonRequestBehavior.AllowGet); |         return GetJsonResult(GlobalVars.GetSWRFilterData(GetSession())); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     public ActionResult SavePCRBFilter(string data) { |     public ActionResult SavePCRBFilter(string data) { | ||||||
|         Session["PCRBFilterData"] = data; |         GlobalVars.SetPCRBFilterData(GetSession(), data); | ||||||
|         return new EmptyResult(); |         return new EmptyResult(); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     public ActionResult LoadPCRBFilter() { |     public ActionResult LoadPCRBFilter() { | ||||||
|         return Json(Session["PCRBFilterData"], JsonRequestBehavior.AllowGet); |         return GetJsonResult(GlobalVars.GetPCRBFilterData(GetSession())); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     public ActionResult PartsRequestList() { |     public ActionResult PartsRequestList() { | ||||||
|         ViewBag.CanDeletePR = Session[GlobalVars.CAN_CREATE_PARTS_REQUEST]; |         ViewBag.CanDeletePR = GlobalVars.GetCanCreatePartsRequest(GetSession()); | ||||||
|         return View(); |         return View(); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  | #if !NET8 | ||||||
|  |  | ||||||
|     public ActionResult GetPartsRequestList([DataSourceRequest] DataSourceRequest request) { |     public ActionResult GetPartsRequestList([DataSourceRequest] DataSourceRequest request) { | ||||||
|         IEnumerable<PartsRequestList> data = prDMO.GetPartsRequestList(); |         IEnumerable<PartsRequestList> data = prDMO.GetPartsRequestList(); | ||||||
|         return Json(data.ToDataSourceResult(request)); |         return Json(data.ToDataSourceResult(request)); | ||||||
| @ -346,31 +377,32 @@ public class HomeController : Controller { | |||||||
|     public ActionResult GetMyPartsRequestsList([DataSourceRequest] DataSourceRequest request, string tabName) { |     public ActionResult GetMyPartsRequestsList([DataSourceRequest] DataSourceRequest request, string tabName) { | ||||||
|         try { |         try { | ||||||
|             ViewBag.ActiveTabName = tabName; |             ViewBag.ActiveTabName = tabName; | ||||||
|             var data = prDMO.GetMyPartsRequests((int)Session[GlobalVars.SESSION_USERID]); |             var data = prDMO.GetMyPartsRequests(GlobalVars.GetUserId(GetSession())); | ||||||
|             return Json(data.ToDataSourceResult(request), JsonRequestBehavior.AllowGet); |             return GetJsonResult(data.ToDataSourceResult(request)); | ||||||
|         } catch (Exception ex) { |         } catch (Exception ex) { | ||||||
|             // TODO record the error |             throw; | ||||||
|             throw ex; |  | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     [AcceptVerbs(HttpVerbs.Post)] |     [AcceptVerbs(HttpVerbs.Post)] | ||||||
|     public ActionResult DeletePR([DataSourceRequest] DataSourceRequest request, MyPartsRequestList pr) { |     public ActionResult DeletePR([DataSourceRequest] DataSourceRequest request, MyPartsRequestList pr) { | ||||||
|         try { |         try { | ||||||
|             if (Convert.ToBoolean(Session[GlobalVars.CAN_CREATE_PARTS_REQUEST]) == false) |             if (!GlobalVars.GetCanCreatePartsRequest(GetSession())) | ||||||
|                 throw new Exception("Permission denied"); |                 throw new Exception("Permission denied"); | ||||||
|  |  | ||||||
|             prDMO.DeleteDocument(pr.PRNumber, (int)Session[GlobalVars.SESSION_USERID]); |             prDMO.DeleteDocument(pr.PRNumber, GlobalVars.GetUserId(GetSession())); | ||||||
|             return Json(new[] { pr }.ToDataSourceResult(request, ModelState)); |             return Json(new[] { pr }.ToDataSourceResult(request, ModelState)); | ||||||
|         } catch (Exception ex) { |         } catch (Exception ex) { | ||||||
|             return new HttpStatusCodeResult(System.Net.HttpStatusCode.BadRequest, ex.Message); |             return new HttpStatusCodeResult(System.Net.HttpStatusCode.BadRequest, ex.Message); | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  | #endif | ||||||
|  |  | ||||||
|     public void NotifyDelegation(int delegatedUser, DateTime startDate, DateTime endDate) { |     public void NotifyDelegation(int delegatedUser, DateTime startDate, DateTime endDate) { | ||||||
|         LoginModel delegateFrom = originalUserDMO.GetUserByID((int)Session[GlobalVars.SESSION_USERID]); |         LoginModel delegateFrom = originalUserDMO.GetUserByID(GlobalVars.GetUserId(GetSession())); | ||||||
|         LoginModel delegateTo = originalUserDMO.GetUserByID(delegatedUser); |         LoginModel delegateTo = originalUserDMO.GetUserByID(delegatedUser); | ||||||
|         List<string> emailList = new List<string>(); |         List<string> emailList = new(); | ||||||
|         emailList.Add(delegateFrom.Email); |         emailList.Add(delegateFrom.Email); | ||||||
|         emailList.Add(delegateTo.Email); |         emailList.Add(delegateTo.Email); | ||||||
|         HomeHelper.NotifyDelegation(_AppSettings, startDate, endDate, delegateFrom, delegateTo, emailList); |         HomeHelper.NotifyDelegation(_AppSettings, startDate, endDate, delegateFrom, delegateTo, emailList); | ||||||
| @ -381,22 +413,24 @@ public class HomeController : Controller { | |||||||
|     public bool ProcessOoO() { |     public bool ProcessOoO() { | ||||||
|  |  | ||||||
|         try { |         try { | ||||||
|             UserAccountDMO userDMO = new UserAccountDMO(); |             UserAccountDMO userDMO = new(); | ||||||
|             userDMO.ProcessOoO(); |             userDMO.ProcessOoO(); | ||||||
|             return true; |             return true; | ||||||
|         } catch { |         } catch { | ||||||
|             return false; |             return false; | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     public bool ExpireOoO() { |     public bool ExpireOoO() { | ||||||
|         try { |         try { | ||||||
|             UserAccountDMO userDMO = new UserAccountDMO(); |             UserAccountDMO userDMO = new(); | ||||||
|             userDMO.ExpireOoO(); |             userDMO.ExpireOoO(); | ||||||
|             return true; |             return true; | ||||||
|         } catch { |         } catch { | ||||||
|             return false; |             return false; | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     public bool ApprovalsReminderNotifications() { |     public bool ApprovalsReminderNotifications() { | ||||||
|         try { |         try { | ||||||
|             // Get list of approvals |             // Get list of approvals | ||||||
| @ -417,12 +451,13 @@ public class HomeController : Controller { | |||||||
|             return false; |             return false; | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     public void NotifyApprover(string toEmail, string title, int issueId, string docType) { |     public void NotifyApprover(string toEmail, string title, int issueId, string docType) { | ||||||
|         try { |         try { | ||||||
|             HomeHelper.NotifyApprover(_AppSettings, toEmail, title, issueId, docType); |             HomeHelper.NotifyApprover(_AppSettings, toEmail, title, issueId, docType); | ||||||
|  |  | ||||||
|             try { |             try { | ||||||
|                 EventLogDMO.Add(new WinEventLog() { IssueID = issueId, UserID = @User.Identity.Name, DocumentType = docType, OperationType = "Email", Comments = "Approval reminders" }); |                 EventLogDMO.Add(new WinEventLog() { IssueID = issueId, UserID = GetUserIdentityName(), DocumentType = docType, OperationType = "Email", Comments = "Approval reminders" }); | ||||||
|             } catch { } |             } catch { } | ||||||
|  |  | ||||||
|         } catch (Exception e) { |         } catch (Exception e) { | ||||||
| @ -432,9 +467,38 @@ public class HomeController : Controller { | |||||||
|             } catch { |             } catch { | ||||||
|                 detailedException = e.Message; |                 detailedException = e.Message; | ||||||
|             } |             } | ||||||
|             EventLogDMO.Add(new WinEventLog() { IssueID = issueId, UserID = @User.Identity.Name, DocumentType = docType, OperationType = "Email", Comments = "Approval reminders" }); |             EventLogDMO.Add(new WinEventLog() { IssueID = issueId, UserID = GetUserIdentityName(), DocumentType = docType, OperationType = "Email", Comments = "Approval reminders" }); | ||||||
|             throw e; |             throw; | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  | #if !NET8 | ||||||
|  |  | ||||||
|  |     private System.Web.HttpSessionStateBase GetSession() => | ||||||
|  |         Session; | ||||||
|  |  | ||||||
|  |     private JsonResult GetJsonResult(object? data) => | ||||||
|  |         Json(data, JsonRequestBehavior.AllowGet); | ||||||
|  |  | ||||||
|  |     private bool IsAjaxRequest() => | ||||||
|  |         Request.IsAjaxRequest(); | ||||||
|  |  | ||||||
|  | #endif | ||||||
|  |  | ||||||
|  | #if NET8 | ||||||
|  |  | ||||||
|  |     private Microsoft.AspNetCore.Http.ISession GetSession() => | ||||||
|  |         HttpContext.Session; | ||||||
|  |  | ||||||
|  |     private JsonResult GetJsonResult(object? data) => | ||||||
|  |         Json(data); | ||||||
|  |  | ||||||
|  |     private bool IsAjaxRequest() => | ||||||
|  |         Request.Headers.TryGetValue("X-Requested-With", out Microsoft.Extensions.Primitives.StringValues strings) && strings[0] == "XMLHttpRequest"; | ||||||
|  |  | ||||||
|  | #endif | ||||||
|  |  | ||||||
|  |     private string GetUserIdentityName() => | ||||||
|  |         @User.Identity.Name; | ||||||
|  |  | ||||||
| } | } | ||||||
| @ -1,39 +1,57 @@ | |||||||
| using System; | using System; | ||||||
| using System.Collections; |  | ||||||
| using System.Collections.Generic; | using System.Collections.Generic; | ||||||
| using System.Configuration; |  | ||||||
| using System.Linq; | using System.Linq; | ||||||
| using System.Reflection; | using System.Reflection; | ||||||
| using System.Runtime.Serialization; | #if !NET8 | ||||||
| using System.Web; | using System.Web; | ||||||
| using System.Web.Mvc; | using System.Web.Mvc; | ||||||
|  | #endif | ||||||
|  |  | ||||||
|  | #if NET8 | ||||||
|  | using Microsoft.AspNetCore.Mvc; | ||||||
|  | using Microsoft.AspNetCore.Mvc.Rendering; | ||||||
|  | using Microsoft.AspNetCore.Authorization; | ||||||
|  | #endif | ||||||
|  |  | ||||||
| using Fab2ApprovalSystem.DMO; | using Fab2ApprovalSystem.DMO; | ||||||
| using Fab2ApprovalSystem.Misc; | using Fab2ApprovalSystem.Misc; | ||||||
| using Fab2ApprovalSystem.Models; | using Fab2ApprovalSystem.Models; | ||||||
| using Fab2ApprovalSystem.ViewModels; | using Fab2ApprovalSystem.ViewModels; | ||||||
|  |  | ||||||
|  | #if !NET8 | ||||||
| using Kendo.Mvc.Extensions; | using Kendo.Mvc.Extensions; | ||||||
| using Kendo.Mvc.UI; | using Kendo.Mvc.UI; | ||||||
|  | #endif | ||||||
|  |  | ||||||
|  | #if !NET8 | ||||||
|  | using System.Collections; | ||||||
|  | using System.Configuration; | ||||||
|  | using System.Runtime.Serialization; | ||||||
|  | #endif | ||||||
|  |  | ||||||
| namespace Fab2ApprovalSystem.Controllers; | namespace Fab2ApprovalSystem.Controllers; | ||||||
|  |  | ||||||
| [Authorize] | [Authorize] | ||||||
|  | #if !NET8 | ||||||
| [OutputCache(NoStore = true, Duration = 0, VaryByParam = "*")] | [OutputCache(NoStore = true, Duration = 0, VaryByParam = "*")] | ||||||
| [SessionExpireFilter] | [SessionExpireFilter] | ||||||
|  | #endif | ||||||
|  | #if NET8 | ||||||
|  | [Route("[controller]")] | ||||||
|  | #endif | ||||||
| public class LotDispositionController : Controller { | public class LotDispositionController : Controller { | ||||||
|  |  | ||||||
|     LotDispositionDMO ldDMO = new LotDispositionDMO(); |     private readonly LotDispositionDMO ldDMO = new(); | ||||||
|     WorkflowDMO wfDMO = new WorkflowDMO(); |     private readonly WorkflowDMO wfDMO = new(); | ||||||
|     private readonly AppSettings _AppSettings = GlobalVars.AppSettings; |     private readonly AppSettings? _AppSettings = GlobalVars.AppSettings; | ||||||
|  |  | ||||||
|     // GET: /LotDisposition/Create |     // GET: /LotDisposition/Create | ||||||
|     public ActionResult Create() { |     public ActionResult Create() { | ||||||
|         LotDisposition lotDispo = new LotDisposition(); |         LotDisposition lotDispo = new(); | ||||||
|         try { |         try { | ||||||
|             // insert a records to get the issueID |             // insert a records to get the issueID | ||||||
|  |  | ||||||
|             lotDispo.OriginatorID = (int)Session[GlobalVars.SESSION_USERID]; |             lotDispo.OriginatorID = GlobalVars.GetUserId(GetSession()); | ||||||
|             ldDMO.InsertLotDisposition(lotDispo); |             ldDMO.InsertLotDisposition(lotDispo); | ||||||
|             return RedirectToAction("Edit", new { issueID = lotDispo.IssueID.ToString() }); |             return RedirectToAction("Edit", new { issueID = lotDispo.IssueID.ToString() }); | ||||||
|         } catch (Exception e) { |         } catch (Exception e) { | ||||||
| @ -44,16 +62,16 @@ public class LotDispositionController : Controller { | |||||||
|                 detailedException = e.Message; |                 detailedException = e.Message; | ||||||
|             } |             } | ||||||
|             string exceptionString = e.Message.ToString().Trim().Length > 500 ? e.Message.ToString().Substring(0, 250) : e.Message.ToString(); |             string exceptionString = e.Message.ToString().Trim().Length > 500 ? e.Message.ToString().Substring(0, 250) : e.Message.ToString(); | ||||||
|             Functions.WriteEvent(_AppSettings, @User.Identity.Name + "\r\nCreat Lot Disposition\r\n" + detailedException, System.Diagnostics.EventLogEntryType.Error); |             Functions.WriteEvent(_AppSettings, GetUserIdentityName() + "\r\nCreat Lot Disposition\r\n" + detailedException, System.Diagnostics.EventLogEntryType.Error); | ||||||
|             EventLogDMO.Add(new WinEventLog() { IssueID = lotDispo.IssueID, UserID = @User.Identity.Name, DocumentType = "Lot Disposition", OperationType = "Error", Comments = exceptionString }); |             EventLogDMO.Add(new WinEventLog() { IssueID = lotDispo.IssueID, UserID = GetUserIdentityName(), DocumentType = "Lot Disposition", OperationType = "Error", Comments = exceptionString }); | ||||||
|             return View("Error"); |             return View("Error"); | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     public JsonResult AddLot(Lot lot) { |     public JsonResult AddLot(Lot lot) { | ||||||
|         Lot l = lot; |         Lot l = lot; | ||||||
|         MRB_DMO mrbDMO = new MRB_DMO(_AppSettings); |         MRB_DMO mrbDMO = new(_AppSettings); | ||||||
|         IssueWithExistingLotsViewModel issueWEL = new IssueWithExistingLotsViewModel(); |         IssueWithExistingLotsViewModel issueWEL = new(); | ||||||
|         try { |         try { | ||||||
|  |  | ||||||
|             lot.LotStatusOption.LotStatusOptionID = l.LotStatusOptionID; |             lot.LotStatusOption.LotStatusOptionID = l.LotStatusOptionID; | ||||||
| @ -67,22 +85,22 @@ public class LotDispositionController : Controller { | |||||||
|                 detailedException = e.Message; |                 detailedException = e.Message; | ||||||
|             } |             } | ||||||
|             string exceptionString = e.Message.ToString().Trim().Length > 500 ? "IssueID=" + lot.IssueID.ToString() + "  " + e.Message.ToString().Substring(0, 250) : e.Message.ToString(); |             string exceptionString = e.Message.ToString().Trim().Length > 500 ? "IssueID=" + lot.IssueID.ToString() + "  " + e.Message.ToString().Substring(0, 250) : e.Message.ToString(); | ||||||
|             Functions.WriteEvent(_AppSettings, @User.Identity.Name + "\r\n Add Lot Disposition\r\n" + detailedException, System.Diagnostics.EventLogEntryType.Error); |             Functions.WriteEvent(_AppSettings, GetUserIdentityName() + "\r\n Add Lot Disposition\r\n" + detailedException, System.Diagnostics.EventLogEntryType.Error); | ||||||
|             EventLogDMO.Add(new WinEventLog() { IssueID = l.IssueID, UserID = @User.Identity.Name, DocumentType = "Lot Disposition", OperationType = "Error", Comments = exceptionString }); |             EventLogDMO.Add(new WinEventLog() { IssueID = l.IssueID, UserID = GetUserIdentityName(), DocumentType = "Lot Disposition", OperationType = "Error", Comments = exceptionString }); | ||||||
|             throw new Exception(e.Message); |             throw new Exception(e.Message); | ||||||
|         } |         } | ||||||
|         return Json(l, JsonRequestBehavior.AllowGet); |         return GetJsonResult(l); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     public JsonResult AddLots(string lotNumbers, int issueID) { |     public JsonResult AddLots(string lotNumbers, int issueID) { | ||||||
|         MRB_DMO mrbDMO = new MRB_DMO(_AppSettings); |         MRB_DMO mrbDMO = new(_AppSettings); | ||||||
|         bool existingLotUpdated; |         bool existingLotUpdated; | ||||||
|         IssueWithExistingLotsViewModel issueWEL = new IssueWithExistingLotsViewModel(); |         IssueWithExistingLotsViewModel issueWEL = new(); | ||||||
|         try { |         try { | ||||||
|             if (lotNumbers.Length > 0) { |             if (lotNumbers.Length > 0) { | ||||||
|                 string[] tempLots = lotNumbers.Split(new char[] { '~' }); |                 string[] tempLots = lotNumbers.Split(new char[] { '~' }); | ||||||
|                 foreach (string lotNumber in tempLots) { |                 foreach (string lotNumber in tempLots) { | ||||||
|                     Lot l = new Lot(); |                     Lot l = new(); | ||||||
|                     l.LotNumber = lotNumber; |                     l.LotNumber = lotNumber; | ||||||
|                     l.IssueID = issueID; |                     l.IssueID = issueID; | ||||||
|                     l.LotStatusOption.LotStatusOptionID = (int)GlobalVars.LotStatusOption.NotAvailable; |                     l.LotStatusOption.LotStatusOptionID = (int)GlobalVars.LotStatusOption.NotAvailable; | ||||||
| @ -104,20 +122,19 @@ public class LotDispositionController : Controller { | |||||||
|                 detailedException = e.Message; |                 detailedException = e.Message; | ||||||
|             } |             } | ||||||
|             string exceptionString = e.Message.ToString().Trim().Length > 500 ? "IssueID=" + issueID.ToString() + "  " + e.Message.ToString().Substring(0, 250) : e.Message.ToString(); |             string exceptionString = e.Message.ToString().Trim().Length > 500 ? "IssueID=" + issueID.ToString() + "  " + e.Message.ToString().Substring(0, 250) : e.Message.ToString(); | ||||||
|             Functions.WriteEvent(_AppSettings, @User.Identity.Name + "\r\n AddLots Disposition\r\n" + detailedException, System.Diagnostics.EventLogEntryType.Error); |             Functions.WriteEvent(_AppSettings, GetUserIdentityName() + "\r\n AddLots Disposition\r\n" + detailedException, System.Diagnostics.EventLogEntryType.Error); | ||||||
|             EventLogDMO.Add(new WinEventLog() { UserID = @User.Identity.Name, DocumentType = "Lot Disposition", OperationType = "Error", Comments = exceptionString }); |             EventLogDMO.Add(new WinEventLog() { UserID = GetUserIdentityName(), DocumentType = "Lot Disposition", OperationType = "Error", Comments = exceptionString }); | ||||||
|             throw new Exception(e.Message); |             throw new Exception(e.Message); | ||||||
|         } |         } | ||||||
|  |         return GetJsonResult(issueWEL); | ||||||
|         return Json(issueWEL, JsonRequestBehavior.AllowGet); |  | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     // GET: /LotDisposition/Edit/5 |     // GET: /LotDisposition/Edit/5 | ||||||
|     public ActionResult Edit(int issueID) { |     public ActionResult Edit(int issueID) { | ||||||
|         int isITARCompliant = 1; |         int isITARCompliant = 1; | ||||||
|         try { |         try { | ||||||
|             LotDisposition lotDispo = new LotDisposition(); |             LotDisposition lotDispo = new(); | ||||||
|             lotDispo = ldDMO.GetLotDispositionItemForRead(issueID, out isITARCompliant, (int)Session[GlobalVars.SESSION_USERID]); |             lotDispo = ldDMO.GetLotDispositionItemForRead(issueID, out isITARCompliant, GlobalVars.GetUserId(GetSession())); | ||||||
|  |  | ||||||
|             if (isITARCompliant == 0) // not ITAR Compliant |             if (isITARCompliant == 0) // not ITAR Compliant | ||||||
|             { |             { | ||||||
| @ -128,20 +145,20 @@ public class LotDispositionController : Controller { | |||||||
|                 } |                 } | ||||||
|                 if (lotDispo.CurrentStep == 1) { |                 if (lotDispo.CurrentStep == 1) { | ||||||
|                     List<ApproversListViewModel> userList = MiscDMO.GetPendingApproversListByDocument(issueID, lotDispo.CurrentStep, (int)GlobalVars.DocumentType.LotDisposition); |                     List<ApproversListViewModel> userList = MiscDMO.GetPendingApproversListByDocument(issueID, lotDispo.CurrentStep, (int)GlobalVars.DocumentType.LotDisposition); | ||||||
|                     ApproversListViewModel approver = userList.Find(delegate (ApproversListViewModel al) { return al.UserID == (int)Session[GlobalVars.SESSION_USERID]; }); |                     ApproversListViewModel approver = userList.Find(delegate (ApproversListViewModel al) { return al.UserID == GlobalVars.GetUserId(GetSession()); }); | ||||||
|                     if (approver == null) |                     if (approver == null) | ||||||
|                         ViewBag.IsApprover = "false"; |                         ViewBag.IsApprover = "false"; | ||||||
|                     else |                     else | ||||||
|                         ViewBag.IsApprover = "true"; |                         ViewBag.IsApprover = "true"; | ||||||
|  |  | ||||||
|                     if (approver == null && (!(bool)Session[GlobalVars.IS_ADMIN]) && (int)Session[GlobalVars.SESSION_USERID] != lotDispo.OriginatorID) { |                     if (approver == null && (!GlobalVars.IsAdmin(GetSession())) && GlobalVars.GetUserId(GetSession()) != lotDispo.OriginatorID) { | ||||||
|                         return RedirectToAction("ReadOnly", new { issueID = issueID }); |                         return RedirectToAction("ReadOnly", new { issueID = issueID }); | ||||||
|                     } else { |                     } else { | ||||||
|                         if ((ViewBag.IsApprover == "true" || (bool)Session[GlobalVars.IS_ADMIN]) |                         if ((ViewBag.IsApprover == "true" || GlobalVars.IsAdmin(GetSession())) | ||||||
|                             || (int)Session[GlobalVars.SESSION_USERID] == lotDispo.OriginatorID) { |                             || GlobalVars.GetUserId(GetSession()) == lotDispo.OriginatorID) { | ||||||
|                             lotDispo = ldDMO.GetLotDispositionItem(issueID, out isITARCompliant, (int)Session[GlobalVars.SESSION_USERID]); |                             lotDispo = ldDMO.GetLotDispositionItem(issueID, out isITARCompliant, GlobalVars.GetUserId(GetSession())); | ||||||
|  |  | ||||||
|                             if (lotDispo.RecordLockIndicator && lotDispo.RecordLockedBy == (int)Session[GlobalVars.SESSION_USERID]) { |                             if (lotDispo.RecordLockIndicator && lotDispo.RecordLockedBy == GlobalVars.GetUserId(GetSession())) { | ||||||
|                                 PopulateLotStatusOptions(); |                                 PopulateLotStatusOptions(); | ||||||
|                                 ViewBag.OriginatorList = ldDMO.GetUserList(); |                                 ViewBag.OriginatorList = ldDMO.GetUserList(); | ||||||
|                                 ViewBag.deps = ldDMO.GetDepartments(); |                                 ViewBag.deps = ldDMO.GetDepartments(); | ||||||
| @ -159,7 +176,7 @@ public class LotDispositionController : Controller { | |||||||
|                 } else if (lotDispo.CurrentStep > 1) { |                 } else if (lotDispo.CurrentStep > 1) { | ||||||
|                     List<ApproversListViewModel> userList = MiscDMO.GetPendingApproversListByDocument(issueID, lotDispo.CurrentStep, (int)GlobalVars.DocumentType.LotDisposition); |                     List<ApproversListViewModel> userList = MiscDMO.GetPendingApproversListByDocument(issueID, lotDispo.CurrentStep, (int)GlobalVars.DocumentType.LotDisposition); | ||||||
|  |  | ||||||
|                     ApproversListViewModel approver = userList.Find(delegate (ApproversListViewModel al) { return al.UserID == (int)Session[GlobalVars.SESSION_USERID]; }); |                     ApproversListViewModel approver = userList.Find(delegate (ApproversListViewModel al) { return al.UserID == GlobalVars.GetUserId(GetSession()); }); | ||||||
|                     if (approver == null) { |                     if (approver == null) { | ||||||
|                         ViewBag.IsApprover = "false"; |                         ViewBag.IsApprover = "false"; | ||||||
|  |  | ||||||
| @ -168,12 +185,12 @@ public class LotDispositionController : Controller { | |||||||
|  |  | ||||||
|                     } |                     } | ||||||
|  |  | ||||||
|                     if (approver == null && (!(bool)Session[GlobalVars.IS_ADMIN]) && (int)Session[GlobalVars.SESSION_USERID] != lotDispo.OriginatorID) { |                     if (approver == null && (!GlobalVars.IsAdmin(GetSession())) && GlobalVars.GetUserId(GetSession()) != lotDispo.OriginatorID) { | ||||||
|                         return RedirectToAction("ReadOnly", new { issueID = issueID }); |                         return RedirectToAction("ReadOnly", new { issueID = issueID }); | ||||||
|                     } else { |                     } else { | ||||||
|  |  | ||||||
|                         if ((ViewBag.IsApprover == "true" || (bool)Session[GlobalVars.IS_ADMIN]) |                         if ((ViewBag.IsApprover == "true" || GlobalVars.IsAdmin(GetSession())) | ||||||
|                            || (int)Session[GlobalVars.SESSION_USERID] == lotDispo.OriginatorID) { |                            || GlobalVars.GetUserId(GetSession()) == lotDispo.OriginatorID) { | ||||||
|                             return RedirectToAction("EditStep", new { issueID = issueID }); |                             return RedirectToAction("EditStep", new { issueID = issueID }); | ||||||
|  |  | ||||||
|                         } else { |                         } else { | ||||||
| @ -185,10 +202,10 @@ public class LotDispositionController : Controller { | |||||||
|                 } else { |                 } else { | ||||||
|                     // TODO |                     // TODO | ||||||
|                     // Check the recordlock indicator |                     // Check the recordlock indicator | ||||||
|                     if ((lotDispo.RecordLockIndicator && lotDispo.RecordLockedBy != (int)Session[GlobalVars.SESSION_USERID]) || (ViewBag.IsApprover == "false")) { |                     if ((lotDispo.RecordLockIndicator && lotDispo.RecordLockedBy != GlobalVars.GetUserId(GetSession())) || (ViewBag.IsApprover == "false")) { | ||||||
|                         return RedirectToAction("ReadOnly", new { issueID = issueID }); |                         return RedirectToAction("ReadOnly", new { issueID = issueID }); | ||||||
|                     } else { |                     } else { | ||||||
|                         lotDispo = ldDMO.GetLotDispositionItem(issueID, out isITARCompliant, (int)Session[GlobalVars.SESSION_USERID]); |                         lotDispo = ldDMO.GetLotDispositionItem(issueID, out isITARCompliant, GlobalVars.GetUserId(GetSession())); | ||||||
|                         PopulateLotStatusOptions(); |                         PopulateLotStatusOptions(); | ||||||
|                         ViewBag.OriginatorList = ldDMO.GetUserList(); |                         ViewBag.OriginatorList = ldDMO.GetUserList(); | ||||||
|                         ViewBag.deps = ldDMO.GetDepartments(); |                         ViewBag.deps = ldDMO.GetDepartments(); | ||||||
| @ -207,8 +224,8 @@ public class LotDispositionController : Controller { | |||||||
|                 detailedException = e.Message; |                 detailedException = e.Message; | ||||||
|             } |             } | ||||||
|             string exceptionString = e.Message.ToString().Trim().Length > 500 ? e.Message.ToString().Substring(0, 250) : e.Message.ToString(); |             string exceptionString = e.Message.ToString().Trim().Length > 500 ? e.Message.ToString().Substring(0, 250) : e.Message.ToString(); | ||||||
|             Functions.WriteEvent(_AppSettings, @User.Identity.Name + "\r\nEdit Lot Disposition\r\n" + detailedException, System.Diagnostics.EventLogEntryType.Error); |             Functions.WriteEvent(_AppSettings, GetUserIdentityName() + "\r\nEdit Lot Disposition\r\n" + detailedException, System.Diagnostics.EventLogEntryType.Error); | ||||||
|             EventLogDMO.Add(new WinEventLog() { IssueID = issueID, UserID = @User.Identity.Name, DocumentType = "Lot Disposition", OperationType = "Error", Comments = exceptionString }); |             EventLogDMO.Add(new WinEventLog() { IssueID = issueID, UserID = GetUserIdentityName(), DocumentType = "Lot Disposition", OperationType = "Error", Comments = exceptionString }); | ||||||
|             return View("Error"); |             return View("Error"); | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
| @ -227,8 +244,8 @@ public class LotDispositionController : Controller { | |||||||
|                 detailedException = e.Message; |                 detailedException = e.Message; | ||||||
|             } |             } | ||||||
|             string exceptionString = e.Message.ToString().Trim().Length > 500 ? "IssueID=" + lotDispo.IssueID.ToString() + "  " + e.Message.ToString().Substring(0, 250) : e.Message.ToString(); |             string exceptionString = e.Message.ToString().Trim().Length > 500 ? "IssueID=" + lotDispo.IssueID.ToString() + "  " + e.Message.ToString().Substring(0, 250) : e.Message.ToString(); | ||||||
|             Functions.WriteEvent(_AppSettings, @User.Identity.Name + "\r\n UpdatEdit Disposition\r\n" + detailedException, System.Diagnostics.EventLogEntryType.Error); |             Functions.WriteEvent(_AppSettings, GetUserIdentityName() + "\r\n UpdatEdit Disposition\r\n" + detailedException, System.Diagnostics.EventLogEntryType.Error); | ||||||
|             EventLogDMO.Add(new WinEventLog() { IssueID = lotDispo.IssueID, UserID = @User.Identity.Name, DocumentType = "Lot Disposition", OperationType = "Error", Comments = exceptionString }); |             EventLogDMO.Add(new WinEventLog() { IssueID = lotDispo.IssueID, UserID = GetUserIdentityName(), DocumentType = "Lot Disposition", OperationType = "Error", Comments = exceptionString }); | ||||||
|             throw new Exception(e.Message); |             throw new Exception(e.Message); | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
| @ -236,8 +253,8 @@ public class LotDispositionController : Controller { | |||||||
|     public ActionResult ReadOnly(int issueID) { |     public ActionResult ReadOnly(int issueID) { | ||||||
|         int isITARCompliant = 1; |         int isITARCompliant = 1; | ||||||
|         try { |         try { | ||||||
|             LotDisposition lotDispo = new LotDisposition(); |             LotDisposition lotDispo = new(); | ||||||
|             lotDispo = ldDMO.GetLotDispositionItemForRead(issueID, out isITARCompliant, (int)Session[GlobalVars.SESSION_USERID]); |             lotDispo = ldDMO.GetLotDispositionItemForRead(issueID, out isITARCompliant, GlobalVars.GetUserId(GetSession())); | ||||||
|  |  | ||||||
|             PopulateLotStatusOptions(); |             PopulateLotStatusOptions(); | ||||||
|             ViewBag.OriginatorList = ldDMO.GetUserList(); |             ViewBag.OriginatorList = ldDMO.GetUserList(); | ||||||
| @ -254,8 +271,8 @@ public class LotDispositionController : Controller { | |||||||
|                 detailedException = e.Message; |                 detailedException = e.Message; | ||||||
|             } |             } | ||||||
|             string exceptionString = e.Message.ToString().Trim().Length > 500 ? "IssueID=" + issueID.ToString() + "  " + e.Message.ToString().Substring(0, 250) : e.Message.ToString(); |             string exceptionString = e.Message.ToString().Trim().Length > 500 ? "IssueID=" + issueID.ToString() + "  " + e.Message.ToString().Substring(0, 250) : e.Message.ToString(); | ||||||
|             Functions.WriteEvent(_AppSettings, @User.Identity.Name + "\r\n ReadOnly Disposition\r\n" + detailedException, System.Diagnostics.EventLogEntryType.Error); |             Functions.WriteEvent(_AppSettings, GetUserIdentityName() + "\r\n ReadOnly Disposition\r\n" + detailedException, System.Diagnostics.EventLogEntryType.Error); | ||||||
|             EventLogDMO.Add(new WinEventLog() { IssueID = issueID, UserID = @User.Identity.Name, DocumentType = "Lot Disposition", OperationType = "Error", Comments = exceptionString }); |             EventLogDMO.Add(new WinEventLog() { IssueID = issueID, UserID = GetUserIdentityName(), DocumentType = "Lot Disposition", OperationType = "Error", Comments = exceptionString }); | ||||||
|             throw new Exception(e.Message); |             throw new Exception(e.Message); | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
| @ -264,10 +281,10 @@ public class LotDispositionController : Controller { | |||||||
|         int isITARCompliant = 1; |         int isITARCompliant = 1; | ||||||
|         try { |         try { | ||||||
|  |  | ||||||
|             LotDisposition lotDispo = new LotDisposition(); |             LotDisposition lotDispo = new(); | ||||||
|             lotDispo = ldDMO.GetLotDispositionItemForRead(issueID, out isITARCompliant, (int)Session[GlobalVars.SESSION_USERID]); |             lotDispo = ldDMO.GetLotDispositionItemForRead(issueID, out isITARCompliant, GlobalVars.GetUserId(GetSession())); | ||||||
|             List<ApproversListViewModel> userList = MiscDMO.GetPendingApproversListByDocument(issueID, lotDispo.CurrentStep, (int)GlobalVars.DocumentType.LotDisposition); |             List<ApproversListViewModel> userList = MiscDMO.GetPendingApproversListByDocument(issueID, lotDispo.CurrentStep, (int)GlobalVars.DocumentType.LotDisposition); | ||||||
|             ApproversListViewModel appUser = userList.Find(delegate (ApproversListViewModel al) { return al.UserID == (int)Session[GlobalVars.SESSION_USERID]; }); |             ApproversListViewModel appUser = userList.Find(delegate (ApproversListViewModel al) { return al.UserID == GlobalVars.GetUserId(GetSession()); }); | ||||||
|             if (appUser == null) |             if (appUser == null) | ||||||
|                 ViewBag.IsApprover = "false"; |                 ViewBag.IsApprover = "false"; | ||||||
|             else |             else | ||||||
| @ -275,10 +292,10 @@ public class LotDispositionController : Controller { | |||||||
|  |  | ||||||
|             // Check the recordlock indicator |             // Check the recordlock indicator | ||||||
|  |  | ||||||
|             if ((ViewBag.IsApprover == "true" || (bool)Session[GlobalVars.IS_ADMIN])) { |             if ((ViewBag.IsApprover == "true" || GlobalVars.IsAdmin(GetSession()))) { | ||||||
|                 lotDispo = ldDMO.GetLotDispositionItem(issueID, out isITARCompliant, (int)Session[GlobalVars.SESSION_USERID]); |                 lotDispo = ldDMO.GetLotDispositionItem(issueID, out isITARCompliant, GlobalVars.GetUserId(GetSession())); | ||||||
|  |  | ||||||
|                 if (lotDispo.RecordLockIndicator && lotDispo.RecordLockedBy == (int)Session[GlobalVars.SESSION_USERID]) { |                 if (lotDispo.RecordLockIndicator && lotDispo.RecordLockedBy == GlobalVars.GetUserId(GetSession())) { | ||||||
|                     PopulateLotStatusOptions(); |                     PopulateLotStatusOptions(); | ||||||
|                     ViewBag.OriginatorList = ldDMO.GetUserList(); |                     ViewBag.OriginatorList = ldDMO.GetUserList(); | ||||||
|                     ViewBag.deps = ldDMO.GetDepartments(); |                     ViewBag.deps = ldDMO.GetDepartments(); | ||||||
| @ -301,8 +318,8 @@ public class LotDispositionController : Controller { | |||||||
|                 detailedException = e.Message; |                 detailedException = e.Message; | ||||||
|             } |             } | ||||||
|             string exceptionString = e.Message.ToString().Trim().Length > 500 ? "IssueID=" + issueID.ToString() + "  " + e.Message.ToString().Substring(0, 250) : e.Message.ToString(); |             string exceptionString = e.Message.ToString().Trim().Length > 500 ? "IssueID=" + issueID.ToString() + "  " + e.Message.ToString().Substring(0, 250) : e.Message.ToString(); | ||||||
|             Functions.WriteEvent(_AppSettings, @User.Identity.Name + "\r\n EditStep Disposition\r\n" + detailedException, System.Diagnostics.EventLogEntryType.Error); |             Functions.WriteEvent(_AppSettings, GetUserIdentityName() + "\r\n EditStep Disposition\r\n" + detailedException, System.Diagnostics.EventLogEntryType.Error); | ||||||
|             EventLogDMO.Add(new WinEventLog() { IssueID = issueID, UserID = @User.Identity.Name, DocumentType = "Lot Disposition", OperationType = "Error", Comments = exceptionString }); |             EventLogDMO.Add(new WinEventLog() { IssueID = issueID, UserID = GetUserIdentityName(), DocumentType = "Lot Disposition", OperationType = "Error", Comments = exceptionString }); | ||||||
|             throw new Exception(e.Message); |             throw new Exception(e.Message); | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
| @ -315,30 +332,32 @@ public class LotDispositionController : Controller { | |||||||
|     public JsonResult GetResponsibilityIssue(int responsibilityID) { |     public JsonResult GetResponsibilityIssue(int responsibilityID) { | ||||||
|         List<ResponsibilityIssue> respIssue = ldDMO.GetResponsibilityIssueList(responsibilityID); |         List<ResponsibilityIssue> respIssue = ldDMO.GetResponsibilityIssueList(responsibilityID); | ||||||
|  |  | ||||||
|         var data = respIssue.Select(s => new SelectListItem { Value = s.ResponsibilityIssueID.ToString(), Text = s.Issue }); |         var data = respIssue.Select(s => new SelectListItem() { Value = s.ResponsibilityIssueID.ToString(), Text = s.Issue }); | ||||||
|         return Json(data, JsonRequestBehavior.AllowGet); |         return GetJsonResult(data); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  | #if !NET8 | ||||||
|  |  | ||||||
|     public JsonResult GetDepartments([DataSourceRequest] DataSourceRequest request) { |     public JsonResult GetDepartments([DataSourceRequest] DataSourceRequest request) { | ||||||
|         var departments = ldDMO.GetDepartments(); |         var departments = ldDMO.GetDepartments(); | ||||||
|         return Json(departments, JsonRequestBehavior.AllowGet); |         return GetJsonResult(departments); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  | #endif | ||||||
|  |  | ||||||
|     public void PopulateLotStatusOptions() { |     public void PopulateLotStatusOptions() { | ||||||
|         var lotStatusOptions = ldDMO.GetLotStatusOptions(); |         var lotStatusOptions = ldDMO.GetLotStatusOptions(); | ||||||
|         ViewData["LotStatusOptions"] = lotStatusOptions; |         ViewData["LotStatusOptions"] = lotStatusOptions; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  | #if !NET8 | ||||||
|  |  | ||||||
|     public ActionResult EditingCustom_Read([DataSourceRequest] DataSourceRequest request, int issueID) { |     public ActionResult EditingCustom_Read([DataSourceRequest] DataSourceRequest request, int issueID) { | ||||||
|         return Json(ldDMO.GetLotDispositionLots(issueID).ToDataSourceResult(request)); |         return Json(ldDMO.GetLotDispositionLots(issueID).ToDataSourceResult(request)); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     /// <summary> |  | ||||||
|     /// Updates the lot tables |  | ||||||
|     /// </summary> |  | ||||||
|     [AcceptVerbs(HttpVerbs.Post)] |     [AcceptVerbs(HttpVerbs.Post)] | ||||||
|     public ActionResult EditingCustom_Update([DataSourceRequest] DataSourceRequest request, Lot lot) { |     public ActionResult EditingCustom_Update([DataSourceRequest] DataSourceRequest request, Lot lot) { | ||||||
|  |  | ||||||
|         if (lot != null && ModelState.IsValid) { |         if (lot != null && ModelState.IsValid) { | ||||||
|             ldDMO.UpdateLotDispoLot(lot); |             ldDMO.UpdateLotDispoLot(lot); | ||||||
|         } |         } | ||||||
| @ -347,10 +366,6 @@ public class LotDispositionController : Controller { | |||||||
|         return Json(new[] { lot }.ToDataSourceResult(request, ModelState)); |         return Json(new[] { lot }.ToDataSourceResult(request, ModelState)); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     /// <summary> |  | ||||||
|     /// Deletes record from the lot table |  | ||||||
|     /// </summary> |  | ||||||
|  |  | ||||||
|     [AcceptVerbs(HttpVerbs.Post)] |     [AcceptVerbs(HttpVerbs.Post)] | ||||||
|     public ActionResult EditingCustom_Destroy([DataSourceRequest] DataSourceRequest request, Lot lot) { |     public ActionResult EditingCustom_Destroy([DataSourceRequest] DataSourceRequest request, Lot lot) { | ||||||
|         try { |         try { | ||||||
| @ -366,8 +381,6 @@ public class LotDispositionController : Controller { | |||||||
|         return Json(new[] { lot }.ToDataSourceResult(request, ModelState)); |         return Json(new[] { lot }.ToDataSourceResult(request, ModelState)); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     // REGION ATTACHMENT |  | ||||||
|  |  | ||||||
|     public ActionResult Attachment_Read([DataSourceRequest] DataSourceRequest request, int issueID) { |     public ActionResult Attachment_Read([DataSourceRequest] DataSourceRequest request, int issueID) { | ||||||
|         return Json(ldDMO.GetLotDispoAttachments(issueID).ToDataSourceResult(request)); |         return Json(ldDMO.GetLotDispoAttachments(issueID).ToDataSourceResult(request)); | ||||||
|     } |     } | ||||||
| @ -385,6 +398,8 @@ public class LotDispositionController : Controller { | |||||||
|         return Json(new[] { attachment }.ToDataSourceResult(request, ModelState)); |         return Json(new[] { attachment }.ToDataSourceResult(request, ModelState)); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  | #endif | ||||||
|  |  | ||||||
|     [HttpPost] |     [HttpPost] | ||||||
|     public void DeleteAttachment(int attachmentID, string fileName) { |     public void DeleteAttachment(int attachmentID, string fileName) { | ||||||
|         try { |         try { | ||||||
| @ -392,7 +407,7 @@ public class LotDispositionController : Controller { | |||||||
|                 ldDMO.DeleteLotDispoAttachment(attachmentID); |                 ldDMO.DeleteLotDispoAttachment(attachmentID); | ||||||
|                 var physicalPath = System.IO.Path.Combine(_AppSettings.AttachmentFolder + "LotDisposition", fileName); |                 var physicalPath = System.IO.Path.Combine(_AppSettings.AttachmentFolder + "LotDisposition", fileName); | ||||||
|  |  | ||||||
|                 System.IO.FileInfo f = new System.IO.FileInfo(physicalPath); |                 System.IO.FileInfo f = new(physicalPath); | ||||||
|  |  | ||||||
|                 if (f.Exists) |                 if (f.Exists) | ||||||
|                     f.Delete(); |                     f.Delete(); | ||||||
| @ -406,21 +421,23 @@ public class LotDispositionController : Controller { | |||||||
|                 detailedException = e.Message; |                 detailedException = e.Message; | ||||||
|             } |             } | ||||||
|             string exceptionString = e.Message.ToString().Trim().Length > 500 ? "AttachmentID=" + attachmentID.ToString() + "  " + e.Message.ToString().Substring(0, 250) : e.Message.ToString(); |             string exceptionString = e.Message.ToString().Trim().Length > 500 ? "AttachmentID=" + attachmentID.ToString() + "  " + e.Message.ToString().Substring(0, 250) : e.Message.ToString(); | ||||||
|             Functions.WriteEvent(_AppSettings, @User.Identity.Name + "\r\n AttachmentID Disposition\r\n" + detailedException, System.Diagnostics.EventLogEntryType.Error); |             Functions.WriteEvent(_AppSettings, GetUserIdentityName() + "\r\n AttachmentID Disposition\r\n" + detailedException, System.Diagnostics.EventLogEntryType.Error); | ||||||
|             EventLogDMO.Add(new WinEventLog() { IssueID = 999, UserID = @User.Identity.Name, DocumentType = "Lot Disposition", OperationType = "Error", Comments = "AttachmentID Disposition " + exceptionString }); |             EventLogDMO.Add(new WinEventLog() { IssueID = 999, UserID = GetUserIdentityName(), DocumentType = "Lot Disposition", OperationType = "Error", Comments = "AttachmentID Disposition " + exceptionString }); | ||||||
|             throw new Exception(e.Message); |             throw new Exception(e.Message); | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     public JsonResult GetLotDispoAttachments(int issueID) { |     public JsonResult GetLotDispoAttachments(int issueID) { | ||||||
|         var model = ldDMO.GetLotDispoAttachments(issueID); |         var model = ldDMO.GetLotDispoAttachments(issueID); | ||||||
|         return Json(model, JsonRequestBehavior.AllowGet); |         return GetJsonResult(model); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  | #if !NET8 | ||||||
|  |  | ||||||
|     public ActionResult AttachSave(IEnumerable<HttpPostedFileBase> files, int issueID) { |     public ActionResult AttachSave(IEnumerable<HttpPostedFileBase> files, int issueID) { | ||||||
|         // The Name of the Upload component is "files" |         // The Name of the Upload component is "files" | ||||||
|         if (files != null) { |         if (files != null) { | ||||||
|             int userId = (int)Session[GlobalVars.SESSION_USERID]; |             int userId = GlobalVars.GetUserId(GetSession()); | ||||||
|             foreach (var file in files) { |             foreach (var file in files) { | ||||||
|                 LotDispositionHelper.AttachSave(_AppSettings, ldDMO, issueID, userId, file.FileName, file.InputStream); |                 LotDispositionHelper.AttachSave(_AppSettings, ldDMO, issueID, userId, file.FileName, file.InputStream); | ||||||
|             } |             } | ||||||
| @ -429,10 +446,11 @@ public class LotDispositionController : Controller { | |||||||
|         return Content(""); |         return Content(""); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     public JsonResult SearchLots(string searchText, string searchBy) { | #endif | ||||||
|         List<String> lotlist = MiscDMO.SearchLots(searchText, searchBy).Select(x => x.LotNumber).ToList<String>(); |  | ||||||
|  |  | ||||||
|         return Json(lotlist, JsonRequestBehavior.AllowGet); |     public JsonResult SearchLots(string searchText, string searchBy) { | ||||||
|  |         List<string> lotlist = MiscDMO.SearchLots(searchText, searchBy).Select(x => x.LotNumber).ToList(); | ||||||
|  |         return GetJsonResult(lotlist); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     public void DeleteAllLots(int issueID) { |     public void DeleteAllLots(int issueID) { | ||||||
| @ -440,10 +458,12 @@ public class LotDispositionController : Controller { | |||||||
|         ldDMO.DeleteAllLotDispoLot(issueID); |         ldDMO.DeleteAllLotDispoLot(issueID); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  | #if !NET8 | ||||||
|     [OutputCache(NoStore = true, Duration = 0, VaryByParam = "*")] |     [OutputCache(NoStore = true, Duration = 0, VaryByParam = "*")] | ||||||
|  | #endif | ||||||
|     public ActionResult LotStatusDetail(int issueID, string lotNumber, bool readonlyView, string lotLocation = "") { |     public ActionResult LotStatusDetail(int issueID, string lotNumber, bool readonlyView, string lotLocation = "") { | ||||||
|         ViewBag.LotLocation = lotLocation; |         ViewBag.LotLocation = lotLocation; | ||||||
|         var model = new ScrapLot(); |         ScrapLot model = new(); | ||||||
|         var data = ldDMO.GetLotStausDetail(issueID, lotNumber); |         var data = ldDMO.GetLotStausDetail(issueID, lotNumber); | ||||||
|         if (data != null) |         if (data != null) | ||||||
|             model = data; |             model = data; | ||||||
| @ -470,7 +490,8 @@ public class LotDispositionController : Controller { | |||||||
|         try { |         try { | ||||||
|             foreach (PropertyInfo pi in sl.GetType().GetProperties()) { |             foreach (PropertyInfo pi in sl.GetType().GetProperties()) { | ||||||
|                 if (pi.Name.ToLower().StartsWith("lot") && pi.Name.ToLower().EndsWith("state")) { |                 if (pi.Name.ToLower().StartsWith("lot") && pi.Name.ToLower().EndsWith("state")) { | ||||||
|                     byte currentValue = (byte)pi.GetValue(sl, null); |                     object? check = pi.GetValue(sl, null); | ||||||
|  |                     byte currentValue = check is null ? (byte)0 : (byte)check; | ||||||
|                     if (currentValue == (int)GlobalVars.LotStatusOption.Release || currentValue == (int)GlobalVars.LotStatusOption.CloseToQDB) { |                     if (currentValue == (int)GlobalVars.LotStatusOption.Release || currentValue == (int)GlobalVars.LotStatusOption.CloseToQDB) { | ||||||
|                         releaseCount++; |                         releaseCount++; | ||||||
|                         // required to update the lot status option |                         // required to update the lot status option | ||||||
| @ -498,8 +519,8 @@ public class LotDispositionController : Controller { | |||||||
|                 detailedException = e.Message; |                 detailedException = e.Message; | ||||||
|             } |             } | ||||||
|             string exceptionString = e.Message.ToString().Trim().Length > 500 ? "Issue=" + sl.IssueID.ToString() + " LotNo:" + sl.LotNo.ToString() + "  " + e.Message.ToString().Substring(0, 250) : e.Message.ToString(); |             string exceptionString = e.Message.ToString().Trim().Length > 500 ? "Issue=" + sl.IssueID.ToString() + " LotNo:" + sl.LotNo.ToString() + "  " + e.Message.ToString().Substring(0, 250) : e.Message.ToString(); | ||||||
|             Functions.WriteEvent(_AppSettings, @User.Identity.Name + "\r\n Scrap Disposition\r\n" + detailedException, System.Diagnostics.EventLogEntryType.Error); |             Functions.WriteEvent(_AppSettings, GetUserIdentityName() + "\r\n Scrap Disposition\r\n" + detailedException, System.Diagnostics.EventLogEntryType.Error); | ||||||
|             EventLogDMO.Add(new WinEventLog() { IssueID = sl.IssueID, UserID = @User.Identity.Name, DocumentType = "Lot Disposition", OperationType = "Error", Comments = "UpdateLotScrapReleaseStatus - " + exceptionString }); |             EventLogDMO.Add(new WinEventLog() { IssueID = sl.IssueID, UserID = GetUserIdentityName(), DocumentType = "Lot Disposition", OperationType = "Error", Comments = "UpdateLotScrapReleaseStatus - " + exceptionString }); | ||||||
|             throw new Exception(e.Message); |             throw new Exception(e.Message); | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
| @ -508,7 +529,7 @@ public class LotDispositionController : Controller { | |||||||
|     /// Update the all the lots to "RELEASE" Status for a given Lot disposition document |     /// Update the all the lots to "RELEASE" Status for a given Lot disposition document | ||||||
|     /// </summary> |     /// </summary> | ||||||
|     public void ReleaseAll(int issueID) { |     public void ReleaseAll(int issueID) { | ||||||
|         ScrapLot sl = new ScrapLot(); |         ScrapLot sl = new(); | ||||||
|         try { |         try { | ||||||
|             sl.IssueID = issueID; |             sl.IssueID = issueID; | ||||||
|             foreach (PropertyInfo pi in sl.GetType().GetProperties()) { |             foreach (PropertyInfo pi in sl.GetType().GetProperties()) { | ||||||
| @ -526,8 +547,8 @@ public class LotDispositionController : Controller { | |||||||
|                 detailedException = e.Message; |                 detailedException = e.Message; | ||||||
|             } |             } | ||||||
|             string exceptionString = e.Message.ToString().Trim().Length > 500 ? "Issue=" + sl.IssueID.ToString() + e.Message.ToString().Substring(0, 250) : e.Message.ToString(); |             string exceptionString = e.Message.ToString().Trim().Length > 500 ? "Issue=" + sl.IssueID.ToString() + e.Message.ToString().Substring(0, 250) : e.Message.ToString(); | ||||||
|             Functions.WriteEvent(_AppSettings, @User.Identity.Name + "\r\n Release All Disposition\r\n" + detailedException, System.Diagnostics.EventLogEntryType.Error); |             Functions.WriteEvent(_AppSettings, GetUserIdentityName() + "\r\n Release All Disposition\r\n" + detailedException, System.Diagnostics.EventLogEntryType.Error); | ||||||
|             EventLogDMO.Add(new WinEventLog() { IssueID = sl.IssueID, UserID = @User.Identity.Name, DocumentType = "Lot Disposition", OperationType = "Error", Comments = "ReleaseAll - " + exceptionString }); |             EventLogDMO.Add(new WinEventLog() { IssueID = sl.IssueID, UserID = GetUserIdentityName(), DocumentType = "Lot Disposition", OperationType = "Error", Comments = "ReleaseAll - " + exceptionString }); | ||||||
|             throw new Exception(e.Message); |             throw new Exception(e.Message); | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
| @ -536,7 +557,7 @@ public class LotDispositionController : Controller { | |||||||
|     /// Update the all the lots to "SCRAP" Status for a given Lot disposition document |     /// Update the all the lots to "SCRAP" Status for a given Lot disposition document | ||||||
|     /// </summary> |     /// </summary> | ||||||
|     public void ScrapAll(int issueID) { |     public void ScrapAll(int issueID) { | ||||||
|         ScrapLot sl = new ScrapLot(); |         ScrapLot sl = new(); | ||||||
|         try { |         try { | ||||||
|             sl.IssueID = issueID; |             sl.IssueID = issueID; | ||||||
|             foreach (PropertyInfo pi in sl.GetType().GetProperties()) { |             foreach (PropertyInfo pi in sl.GetType().GetProperties()) { | ||||||
| @ -554,20 +575,20 @@ public class LotDispositionController : Controller { | |||||||
|                 detailedException = e.Message; |                 detailedException = e.Message; | ||||||
|             } |             } | ||||||
|             string exceptionString = e.Message.ToString().Trim().Length > 500 ? "Issue=" + sl.IssueID.ToString() + e.Message.ToString().Substring(0, 250) : e.Message.ToString(); |             string exceptionString = e.Message.ToString().Trim().Length > 500 ? "Issue=" + sl.IssueID.ToString() + e.Message.ToString().Substring(0, 250) : e.Message.ToString(); | ||||||
|             Functions.WriteEvent(_AppSettings, @User.Identity.Name + "\r\n Scrap All Disposition\r\n" + detailedException, System.Diagnostics.EventLogEntryType.Error); |             Functions.WriteEvent(_AppSettings, GetUserIdentityName() + "\r\n Scrap All Disposition\r\n" + detailedException, System.Diagnostics.EventLogEntryType.Error); | ||||||
|             EventLogDMO.Add(new WinEventLog() { IssueID = sl.IssueID, UserID = @User.Identity.Name, DocumentType = "Lot Disposition", OperationType = "Error", Comments = "ScrapAll - " + exceptionString }); |             EventLogDMO.Add(new WinEventLog() { IssueID = sl.IssueID, UserID = GetUserIdentityName(), DocumentType = "Lot Disposition", OperationType = "Error", Comments = "ScrapAll - " + exceptionString }); | ||||||
|             throw new Exception(e.Message); |             throw new Exception(e.Message); | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     public JsonResult GetLotDispositionLotSummary(int issueID) { |     public JsonResult GetLotDispositionLotSummary(int issueID) { | ||||||
|         return Json(ldDMO.GetLotDispositionLotSummary(issueID), JsonRequestBehavior.AllowGet); |         return GetJsonResult(ldDMO.GetLotDispositionLotSummary(issueID)); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     ///  |     ///  | ||||||
|     public ActionResult SubmitDocument(int issueID, bool peRequired, bool mrbRequired) { |     public ActionResult SubmitDocument(int issueID, bool peRequired, bool mrbRequired) { | ||||||
|         try { |         try { | ||||||
|             int appoverCount = ldDMO.SubmitDocument(issueID, peRequired, mrbRequired, (int)Session[GlobalVars.SESSION_USERID]); |             int appoverCount = ldDMO.SubmitDocument(issueID, peRequired, mrbRequired, GlobalVars.GetUserId(GetSession())); | ||||||
|             if (appoverCount > 0) |             if (appoverCount > 0) | ||||||
|                 NotifyApprovers(issueID, (byte)GlobalVars.WorkFLowStepNumber.Step1); |                 NotifyApprovers(issueID, (byte)GlobalVars.WorkFLowStepNumber.Step1); | ||||||
|             else { |             else { | ||||||
| @ -576,10 +597,11 @@ public class LotDispositionController : Controller { | |||||||
|  |  | ||||||
|             } |             } | ||||||
|  |  | ||||||
|             if (Request.IsAjaxRequest()) { |             if (IsAjaxRequest()) { | ||||||
|                 return Content("Redirect"); |                 return Content("Redirect"); | ||||||
|             } else |             } else { | ||||||
|                 return Content("Invalid"); |                 return Content("Invalid"); | ||||||
|  |             } | ||||||
|         } catch (Exception e) { |         } catch (Exception e) { | ||||||
|             string detailedException = ""; |             string detailedException = ""; | ||||||
|             try { |             try { | ||||||
| @ -588,11 +610,11 @@ public class LotDispositionController : Controller { | |||||||
|                 detailedException = e.Message; |                 detailedException = e.Message; | ||||||
|             } |             } | ||||||
|             string exceptionString = e.Message.ToString().Trim().Length > 500 ? "Issue=" + issueID.ToString() + e.Message.ToString().Substring(0, 250) : e.Message.ToString(); |             string exceptionString = e.Message.ToString().Trim().Length > 500 ? "Issue=" + issueID.ToString() + e.Message.ToString().Substring(0, 250) : e.Message.ToString(); | ||||||
|             Functions.WriteEvent(_AppSettings, @User.Identity.Name + "\r\n SubmitDocument\r\n" + detailedException, System.Diagnostics.EventLogEntryType.Error); |             Functions.WriteEvent(_AppSettings, GetUserIdentityName() + "\r\n SubmitDocument\r\n" + detailedException, System.Diagnostics.EventLogEntryType.Error); | ||||||
|             EventLogDMO.Add(new WinEventLog() { IssueID = issueID, UserID = @User.Identity.Name, DocumentType = "Lot Disposition", OperationType = "Error", Comments = "SubmitDocument - " + exceptionString }); |             EventLogDMO.Add(new WinEventLog() { IssueID = issueID, UserID = GetUserIdentityName(), DocumentType = "Lot Disposition", OperationType = "Error", Comments = "SubmitDocument - " + exceptionString }); | ||||||
|  |  | ||||||
|             Response.StatusCode = (int)System.Net.HttpStatusCode.InternalServerError; |             Response.StatusCode = (int)System.Net.HttpStatusCode.InternalServerError; | ||||||
|             return Json(new { result = "Error", issueID = issueID, detail = e.Message }, JsonRequestBehavior.AllowGet); |             return GetJsonResult(new { result = "Error", issueID = issueID, detail = e.Message }); | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  |  | ||||||
| @ -600,13 +622,13 @@ public class LotDispositionController : Controller { | |||||||
|         int isITARCompliant = 1; |         int isITARCompliant = 1; | ||||||
|         try { |         try { | ||||||
|             bool lastStep = false; |             bool lastStep = false; | ||||||
|             LotDisposition ltDispo = ldDMO.GetLotDispositionItemForRead(issueID, out isITARCompliant, (int)Session[GlobalVars.SESSION_USERID]); |             LotDisposition ltDispo = ldDMO.GetLotDispositionItemForRead(issueID, out isITARCompliant, GlobalVars.GetUserId(GetSession())); | ||||||
|  |  | ||||||
|             bool lastApprover = wfDMO.Approve(_AppSettings, issueID, currentStep, comments, out lastStep, (int)Session[GlobalVars.SESSION_USERID], (int)GlobalVars.DocumentType.LotDisposition, ltDispo.WorkFlowNumber); |             bool lastApprover = wfDMO.Approve(_AppSettings, issueID, currentStep, comments, out lastStep, GlobalVars.GetUserId(GetSession()), (int)GlobalVars.DocumentType.LotDisposition, ltDispo.WorkFlowNumber); | ||||||
|  |  | ||||||
|             while (lastApprover && !lastStep) { |             while (lastApprover && !lastStep) { | ||||||
|                 currentStep++; |                 currentStep++; | ||||||
|                 lastApprover = wfDMO.Approve(_AppSettings, issueID, currentStep, comments, out lastStep, (int)Session[GlobalVars.SESSION_USERID], (int)GlobalVars.DocumentType.LotDisposition, ltDispo.WorkFlowNumber); |                 lastApprover = wfDMO.Approve(_AppSettings, issueID, currentStep, comments, out lastStep, GlobalVars.GetUserId(GetSession()), (int)GlobalVars.DocumentType.LotDisposition, ltDispo.WorkFlowNumber); | ||||||
|                 NotifyApprovers(issueID, currentStep); |                 NotifyApprovers(issueID, currentStep); | ||||||
|             } |             } | ||||||
|         } catch (Exception e) { |         } catch (Exception e) { | ||||||
| @ -617,16 +639,16 @@ public class LotDispositionController : Controller { | |||||||
|                 detailedException = e.Message; |                 detailedException = e.Message; | ||||||
|             } |             } | ||||||
|             string exceptionString = e.Message.ToString().Trim().Length > 500 ? "Issue=" + issueID.ToString() + " Step:" + currentStep + " " + e.Message.ToString().Substring(0, 250) : e.Message.ToString(); |             string exceptionString = e.Message.ToString().Trim().Length > 500 ? "Issue=" + issueID.ToString() + " Step:" + currentStep + " " + e.Message.ToString().Substring(0, 250) : e.Message.ToString(); | ||||||
|             Functions.WriteEvent(_AppSettings, @User.Identity.Name + "\r\n " + "Approve\r\n" + issueID.ToString() + "\r\n" + detailedException, System.Diagnostics.EventLogEntryType.Error); |             Functions.WriteEvent(_AppSettings, GetUserIdentityName() + "\r\n " + "Approve\r\n" + issueID.ToString() + "\r\n" + detailedException, System.Diagnostics.EventLogEntryType.Error); | ||||||
|             EventLogDMO.Add(new WinEventLog() { IssueID = issueID, UserID = @User.Identity.Name, DocumentType = "Lot Disposition", OperationType = "Error", Comments = "Approve - " + exceptionString }); |             EventLogDMO.Add(new WinEventLog() { IssueID = issueID, UserID = GetUserIdentityName(), DocumentType = "Lot Disposition", OperationType = "Error", Comments = "Approve - " + exceptionString }); | ||||||
|             throw new Exception(e.Message); |             throw new Exception(e.Message); | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     public void Reject(int issueID, byte currentStep, string comments) { |     public void Reject(int issueID, byte currentStep, string comments) { | ||||||
|         try { |         try { | ||||||
|             if (Session[GlobalVars.SESSION_USERID] != null) { |             if (GlobalVars.IsUserIdValueNotNull(GetSession())) { | ||||||
|                 wfDMO.Reject(issueID, currentStep, comments, (int)Session[GlobalVars.SESSION_USERID], (int)GlobalVars.DocumentType.LotDisposition); |                 wfDMO.Reject(issueID, currentStep, comments, GlobalVars.GetUserId(GetSession()), (int)GlobalVars.DocumentType.LotDisposition); | ||||||
|                 NotifyRejectionToOrginator(issueID); |                 NotifyRejectionToOrginator(issueID); | ||||||
|             } else { |             } else { | ||||||
|  |  | ||||||
| @ -640,29 +662,30 @@ public class LotDispositionController : Controller { | |||||||
|                 detailedException = e.Message; |                 detailedException = e.Message; | ||||||
|             } |             } | ||||||
|             string exceptionString = e.Message.ToString().Trim().Length > 500 ? "Issue=" + issueID.ToString() + " Step:" + currentStep + " " + e.Message.ToString().Substring(0, 250) : e.Message.ToString(); |             string exceptionString = e.Message.ToString().Trim().Length > 500 ? "Issue=" + issueID.ToString() + " Step:" + currentStep + " " + e.Message.ToString().Substring(0, 250) : e.Message.ToString(); | ||||||
|             Functions.WriteEvent(_AppSettings, @User.Identity.Name + "\r\n Reject\r\n" + detailedException, System.Diagnostics.EventLogEntryType.Error); |             Functions.WriteEvent(_AppSettings, GetUserIdentityName() + "\r\n Reject\r\n" + detailedException, System.Diagnostics.EventLogEntryType.Error); | ||||||
|             EventLogDMO.Add(new WinEventLog() { IssueID = issueID, UserID = @User.Identity.Name, DocumentType = "Lot Disposition", OperationType = "Error", Comments = "Reject - " + exceptionString }); |             EventLogDMO.Add(new WinEventLog() { IssueID = issueID, UserID = GetUserIdentityName(), DocumentType = "Lot Disposition", OperationType = "Error", Comments = "Reject - " + exceptionString }); | ||||||
|             throw new Exception(e.Message); |             throw new Exception(e.Message); | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     /// <summary> | #if !NET8 | ||||||
|     /// Get a list of Approvers and the status |  | ||||||
|     /// </summary> |  | ||||||
|     public ActionResult GetApproversList([DataSourceRequest] DataSourceRequest request, int issueID, byte step) { |     public ActionResult GetApproversList([DataSourceRequest] DataSourceRequest request, int issueID, byte step) { | ||||||
|         return Json(MiscDMO.GetApproversListByDocument(issueID, step, (int)GlobalVars.DocumentType.LotDisposition).ToDataSourceResult(request)); |         return Json(MiscDMO.GetApproversListByDocument(issueID, step, (int)GlobalVars.DocumentType.LotDisposition).ToDataSourceResult(request)); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  | #endif | ||||||
|  |  | ||||||
|     public JsonResult GetAllUsersList() { |     public JsonResult GetAllUsersList() { | ||||||
|         UserAccountDMO userDMO = new UserAccountDMO(); |         UserAccountDMO userDMO = new(); | ||||||
|         IEnumerable<LoginModel> userlist = userDMO.GetAllUsers(); |         IEnumerable<LoginModel> userlist = userDMO.GetAllUsers(); | ||||||
|         return Json(userlist, JsonRequestBehavior.AllowGet); |         return GetJsonResult(userlist); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     public void ReAssignApproval(int issueID, int userIDs, byte step) { |     public void ReAssignApproval(int issueID, int userIDs, byte step) { | ||||||
|         var email = ""; |         var email = ""; | ||||||
|         try { |         try { | ||||||
|             email = wfDMO.ReAssignApproval(issueID, (int)Session[GlobalVars.SESSION_USERID], userIDs, step, (int)GlobalVars.DocumentType.LotDisposition); |             email = wfDMO.ReAssignApproval(issueID, GlobalVars.GetUserId(GetSession()), userIDs, step, (int)GlobalVars.DocumentType.LotDisposition); | ||||||
|         } catch (Exception e) { |         } catch (Exception e) { | ||||||
|             string detailedException = ""; |             string detailedException = ""; | ||||||
|             try { |             try { | ||||||
| @ -671,13 +694,13 @@ public class LotDispositionController : Controller { | |||||||
|                 detailedException = e.Message; |                 detailedException = e.Message; | ||||||
|             } |             } | ||||||
|             string exceptionString = e.Message.ToString().Trim().Length > 500 ? "Issue=" + issueID.ToString() + " Step:" + step + " " + e.Message.ToString().Substring(0, 250) : e.Message.ToString(); |             string exceptionString = e.Message.ToString().Trim().Length > 500 ? "Issue=" + issueID.ToString() + " Step:" + step + " " + e.Message.ToString().Substring(0, 250) : e.Message.ToString(); | ||||||
|             Functions.WriteEvent(_AppSettings, @User.Identity.Name + "\r\n ReAssignApproval\r\n" + detailedException, System.Diagnostics.EventLogEntryType.Error); |             Functions.WriteEvent(_AppSettings, GetUserIdentityName() + "\r\n ReAssignApproval\r\n" + detailedException, System.Diagnostics.EventLogEntryType.Error); | ||||||
|             EventLogDMO.Add(new WinEventLog() { IssueID = issueID, UserID = @User.Identity.Name, DocumentType = "Lot Disposition", OperationType = "Error", Comments = "ReAssignApproval - " + exceptionString }); |             EventLogDMO.Add(new WinEventLog() { IssueID = issueID, UserID = GetUserIdentityName(), DocumentType = "Lot Disposition", OperationType = "Error", Comments = "ReAssignApproval - " + exceptionString }); | ||||||
|             throw new Exception(e.Message); |             throw new Exception(e.Message); | ||||||
|         } |         } | ||||||
|         LotDispositionHelper.ReAssignApproval(_AppSettings, issueID, email); |         LotDispositionHelper.ReAssignApproval(_AppSettings, issueID, email); | ||||||
|         try { |         try { | ||||||
|             EventLogDMO.Add(new WinEventLog() { IssueID = issueID, UserID = @User.Identity.Name, DocumentType = "Lot Disposition", OperationType = "Email", Comments = "ReAssign Approver: " + email }); |             EventLogDMO.Add(new WinEventLog() { IssueID = issueID, UserID = GetUserIdentityName(), DocumentType = "Lot Disposition", OperationType = "Email", Comments = "ReAssign Approver: " + email }); | ||||||
|         } catch { } |         } catch { } | ||||||
|     } |     } | ||||||
|  |  | ||||||
| @ -693,22 +716,22 @@ public class LotDispositionController : Controller { | |||||||
|                 detailedException = e.Message; |                 detailedException = e.Message; | ||||||
|             } |             } | ||||||
|             string exceptionString = e.Message.ToString().Trim().Length > 500 ? "Issue=" + issueID.ToString() + " Step:" + step + " " + e.Message.ToString().Substring(0, 250) : e.Message.ToString(); |             string exceptionString = e.Message.ToString().Trim().Length > 500 ? "Issue=" + issueID.ToString() + " Step:" + step + " " + e.Message.ToString().Substring(0, 250) : e.Message.ToString(); | ||||||
|             Functions.WriteEvent(_AppSettings, @User.Identity.Name + "\r\n ReAssignApproval\r\n" + detailedException, System.Diagnostics.EventLogEntryType.Error); |             Functions.WriteEvent(_AppSettings, GetUserIdentityName() + "\r\n ReAssignApproval\r\n" + detailedException, System.Diagnostics.EventLogEntryType.Error); | ||||||
|             EventLogDMO.Add(new WinEventLog() { IssueID = issueID, UserID = @User.Identity.Name, DocumentType = "Lot Disposition", OperationType = "Error", Comments = "ReAssignApproval - " + exceptionString }); |             EventLogDMO.Add(new WinEventLog() { IssueID = issueID, UserID = GetUserIdentityName(), DocumentType = "Lot Disposition", OperationType = "Error", Comments = "ReAssignApproval - " + exceptionString }); | ||||||
|             throw new Exception(e.Message); |             throw new Exception(e.Message); | ||||||
|         } |         } | ||||||
|         LotDispositionHelper.ReAssignApproverByAdmin(_AppSettings, issueID, email); |         LotDispositionHelper.ReAssignApproverByAdmin(_AppSettings, issueID, email); | ||||||
|         try { |         try { | ||||||
|             EventLogDMO.Add(new WinEventLog() { IssueID = issueID, UserID = @User.Identity.Name, DocumentType = "Lot Disposition", OperationType = "Email", Comments = "ReAssign Approver: " + email }); |             EventLogDMO.Add(new WinEventLog() { IssueID = issueID, UserID = GetUserIdentityName(), DocumentType = "Lot Disposition", OperationType = "Email", Comments = "ReAssign Approver: " + email }); | ||||||
|         } catch { } |         } catch { } | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     #region Additional Approvers |     #region Additional Approvers | ||||||
|  |  | ||||||
|     public JsonResult GetUserListForAdditionalAppprrovers() { |     public JsonResult GetUserListForAdditionalAppprrovers() { | ||||||
|         UserAccountDMO userDMO = new UserAccountDMO(); |         UserAccountDMO userDMO = new(); | ||||||
|         IEnumerable<LoginModel> userlist = userDMO.GetAllUsers(); |         IEnumerable<LoginModel> userlist = userDMO.GetAllUsers(); | ||||||
|         return Json(userlist, JsonRequestBehavior.AllowGet); |         return GetJsonResult(userlist); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     public void AddAdditionalApproval(int issueID, byte step, string userIDs) { |     public void AddAdditionalApproval(int issueID, byte step, string userIDs) { | ||||||
| @ -724,13 +747,13 @@ public class LotDispositionController : Controller { | |||||||
|                 detailedException = e.Message; |                 detailedException = e.Message; | ||||||
|             } |             } | ||||||
|             string exceptionString = e.Message.ToString().Trim().Length > 500 ? "Issue=" + issueID.ToString() + " Step:" + step + " " + " Userid:" + userIDs + " " + e.Message.ToString().Substring(0, 250) : e.Message.ToString(); |             string exceptionString = e.Message.ToString().Trim().Length > 500 ? "Issue=" + issueID.ToString() + " Step:" + step + " " + " Userid:" + userIDs + " " + e.Message.ToString().Substring(0, 250) : e.Message.ToString(); | ||||||
|             Functions.WriteEvent(_AppSettings, @User.Identity.Name + "\r\n AddAdditionalApproval\r\n" + detailedException, System.Diagnostics.EventLogEntryType.Error); |             Functions.WriteEvent(_AppSettings, GetUserIdentityName() + "\r\n AddAdditionalApproval\r\n" + detailedException, System.Diagnostics.EventLogEntryType.Error); | ||||||
|             EventLogDMO.Add(new WinEventLog() { IssueID = issueID, UserID = @User.Identity.Name, DocumentType = "Lot Disposition", OperationType = "Error", Comments = "AddAdditionalApproval - " + exceptionString }); |             EventLogDMO.Add(new WinEventLog() { IssueID = issueID, UserID = GetUserIdentityName(), DocumentType = "Lot Disposition", OperationType = "Error", Comments = "AddAdditionalApproval - " + exceptionString }); | ||||||
|             throw new Exception(e.Message); |             throw new Exception(e.Message); | ||||||
|         } |         } | ||||||
|         emailSentList = LotDispositionHelper.AddAdditionalApproval(_AppSettings, issueID, emailSentList, emailArray); |         emailSentList = LotDispositionHelper.AddAdditionalApproval(_AppSettings, issueID, emailSentList, emailArray); | ||||||
|         try { |         try { | ||||||
|             EventLogDMO.Add(new WinEventLog() { IssueID = issueID, UserID = @User.Identity.Name, DocumentType = "Lot Disposition", OperationType = "Email", Comments = "Additonal Approver: " + emailSentList }); |             EventLogDMO.Add(new WinEventLog() { IssueID = issueID, UserID = GetUserIdentityName(), DocumentType = "Lot Disposition", OperationType = "Email", Comments = "Additonal Approver: " + emailSentList }); | ||||||
|         } catch { } |         } catch { } | ||||||
|     } |     } | ||||||
|  |  | ||||||
| @ -741,7 +764,7 @@ public class LotDispositionController : Controller { | |||||||
|             List<string> emailIst = MiscDMO.GetApproverEmailListByDocument(@issueID, currentStep, (int)GlobalVars.DocumentType.LotDisposition).Distinct().ToList(); |             List<string> emailIst = MiscDMO.GetApproverEmailListByDocument(@issueID, currentStep, (int)GlobalVars.DocumentType.LotDisposition).Distinct().ToList(); | ||||||
|             string emailSentList = LotDispositionHelper.NotifyApprovers(_AppSettings, issueID, emailIst); |             string emailSentList = LotDispositionHelper.NotifyApprovers(_AppSettings, issueID, emailIst); | ||||||
|             try { |             try { | ||||||
|                 EventLogDMO.Add(new WinEventLog() { IssueID = issueID, UserID = @User.Identity.Name, DocumentType = "Lot Disposition", OperationType = "Email", Comments = "Approvers for Step " + currentStep.ToString() + ":" + emailSentList }); |                 EventLogDMO.Add(new WinEventLog() { IssueID = issueID, UserID = GetUserIdentityName(), DocumentType = "Lot Disposition", OperationType = "Email", Comments = "Approvers for Step " + currentStep.ToString() + ":" + emailSentList }); | ||||||
|             } catch { } |             } catch { } | ||||||
|         } catch (Exception e) { |         } catch (Exception e) { | ||||||
|             string detailedException = ""; |             string detailedException = ""; | ||||||
| @ -751,19 +774,19 @@ public class LotDispositionController : Controller { | |||||||
|                 detailedException = e.Message; |                 detailedException = e.Message; | ||||||
|             } |             } | ||||||
|             string exceptionString = e.Message.ToString().Trim().Length > 500 ? "Issue=" + issueID.ToString() + " Step:" + currentStep + " " + e.Message.ToString().Substring(0, 250) : e.Message.ToString(); |             string exceptionString = e.Message.ToString().Trim().Length > 500 ? "Issue=" + issueID.ToString() + " Step:" + currentStep + " " + e.Message.ToString().Substring(0, 250) : e.Message.ToString(); | ||||||
|             Functions.WriteEvent(_AppSettings, @User.Identity.Name + "\r\n Lot Dispo - NotifyApprovers\r\n" + detailedException, System.Diagnostics.EventLogEntryType.Error); |             Functions.WriteEvent(_AppSettings, GetUserIdentityName() + "\r\n Lot Dispo - NotifyApprovers\r\n" + detailedException, System.Diagnostics.EventLogEntryType.Error); | ||||||
|             EventLogDMO.Add(new WinEventLog() { IssueID = issueID, UserID = @User.Identity.Name, DocumentType = "Lot Disposition", OperationType = "Error", Comments = "AddAdditionalApproval - " + exceptionString }); |             EventLogDMO.Add(new WinEventLog() { IssueID = issueID, UserID = GetUserIdentityName(), DocumentType = "Lot Disposition", OperationType = "Error", Comments = "AddAdditionalApproval - " + exceptionString }); | ||||||
|             throw e; |             throw; | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     public void NotifyRejectionToOrginator(int issueID) { |     public void NotifyRejectionToOrginator(int issueID) { | ||||||
|  |  | ||||||
|         string username = Session[GlobalVars.SESSION_USERNAME].ToString(); |         string username = GlobalVars.GetUserName(GetSession()); | ||||||
|         List<string> emailIst = ldDMO.GetRejectionOrginatorEmailList(@issueID).Distinct().ToList(); |         List<string> emailIst = ldDMO.GetRejectionOrginatorEmailList(@issueID).Distinct().ToList(); | ||||||
|         string userEmail = LotDispositionHelper.NotifyRejectionToOrginator(_AppSettings, issueID, username, emailIst); |         string userEmail = LotDispositionHelper.NotifyRejectionToOrginator(_AppSettings, issueID, username, emailIst); | ||||||
|         try { |         try { | ||||||
|             EventLogDMO.Add(new WinEventLog() { IssueID = issueID, UserID = @User.Identity.Name, DocumentType = "Lot Disposition", OperationType = "Email", Comments = "Rejection: " + userEmail }); |             EventLogDMO.Add(new WinEventLog() { IssueID = issueID, UserID = GetUserIdentityName(), DocumentType = "Lot Disposition", OperationType = "Email", Comments = "Rejection: " + userEmail }); | ||||||
|         } catch { } |         } catch { } | ||||||
|     } |     } | ||||||
|  |  | ||||||
| @ -778,19 +801,23 @@ public class LotDispositionController : Controller { | |||||||
|                 detailedException = e.Message; |                 detailedException = e.Message; | ||||||
|             } |             } | ||||||
|             string exceptionString = e.Message.ToString().Trim(); |             string exceptionString = e.Message.ToString().Trim(); | ||||||
|             Functions.WriteEvent(_AppSettings, @User.Identity.Name + "\r\n UpdateReasonForDisposition\r\n" + detailedException, System.Diagnostics.EventLogEntryType.Error); |             Functions.WriteEvent(_AppSettings, GetUserIdentityName() + "\r\n UpdateReasonForDisposition\r\n" + detailedException, System.Diagnostics.EventLogEntryType.Error); | ||||||
|             EventLogDMO.Add(new WinEventLog() { IssueID = issueID, UserID = @User.Identity.Name, DocumentType = "Lot Disposition", OperationType = "Error", Comments = "UpdateReasonForDisposition - " + exceptionString }); |             EventLogDMO.Add(new WinEventLog() { IssueID = issueID, UserID = GetUserIdentityName(), DocumentType = "Lot Disposition", OperationType = "Error", Comments = "UpdateReasonForDisposition - " + exceptionString }); | ||||||
|             throw new Exception(e.Message); |             throw new Exception(e.Message); | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  | #if !NET8 | ||||||
|  |  | ||||||
|     public ActionResult GetComments([DataSourceRequest] DataSourceRequest request, int issueID) { |     public ActionResult GetComments([DataSourceRequest] DataSourceRequest request, int issueID) { | ||||||
|         return Json(ldDMO.GetComments(issueID).ToDataSourceResult(request)); |         return Json(ldDMO.GetComments(issueID).ToDataSourceResult(request)); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  | #endif | ||||||
|  |  | ||||||
|     public void InsertComments(int issueID, string Comments) { |     public void InsertComments(int issueID, string Comments) { | ||||||
|         try { |         try { | ||||||
|             ldDMO.InsertComments(issueID, Comments, (int)Session[GlobalVars.SESSION_USERID]); |             ldDMO.InsertComments(issueID, Comments, GlobalVars.GetUserId(GetSession())); | ||||||
|         } catch (Exception e) { |         } catch (Exception e) { | ||||||
|             string detailedException = ""; |             string detailedException = ""; | ||||||
|             try { |             try { | ||||||
| @ -799,17 +826,19 @@ public class LotDispositionController : Controller { | |||||||
|                 detailedException = e.Message; |                 detailedException = e.Message; | ||||||
|             } |             } | ||||||
|             string exceptionString = e.Message.ToString().Trim(); |             string exceptionString = e.Message.ToString().Trim(); | ||||||
|             Functions.WriteEvent(_AppSettings, @User.Identity.Name + "\r\n UpdateCopmments\r\n" + detailedException, System.Diagnostics.EventLogEntryType.Error); |             Functions.WriteEvent(_AppSettings, GetUserIdentityName() + "\r\n UpdateCopmments\r\n" + detailedException, System.Diagnostics.EventLogEntryType.Error); | ||||||
|             EventLogDMO.Add(new WinEventLog() { IssueID = issueID, UserID = @User.Identity.Name, DocumentType = "Lot Disposition", OperationType = "Error", Comments = "UpdateCopmments - " + exceptionString }); |             EventLogDMO.Add(new WinEventLog() { IssueID = issueID, UserID = GetUserIdentityName(), DocumentType = "Lot Disposition", OperationType = "Error", Comments = "UpdateCopmments - " + exceptionString }); | ||||||
|             throw new Exception(e.Message); |             throw new Exception(e.Message); | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  | #if !NET8 | ||||||
|  |  | ||||||
|     public ActionResult ExcelLotOpen(IEnumerable<HttpPostedFileBase> Lotfile, int issueID) { |     public ActionResult ExcelLotOpen(IEnumerable<HttpPostedFileBase> Lotfile, int issueID) { | ||||||
|         MRB_DMO mrbDMO = new MRB_DMO(_AppSettings); |         MRB_DMO mrbDMO = new MRB_DMO(_AppSettings); | ||||||
|         var physicalPath = ""; |         var physicalPath = ""; | ||||||
|         try { |         try { | ||||||
|             string userIdentityName = @User.Identity.Name; |             string userIdentityName = GetUserIdentityName(); | ||||||
|             foreach (var file in Lotfile) { |             foreach (var file in Lotfile) { | ||||||
|                 physicalPath = LotDispositionHelper.ExcelLotOpen(ldDMO, issueID, userIdentityName, _AppSettings.LotTempPipeLine, file.FileName, file.InputStream); |                 physicalPath = LotDispositionHelper.ExcelLotOpen(ldDMO, issueID, userIdentityName, _AppSettings.LotTempPipeLine, file.FileName, file.InputStream); | ||||||
|             } |             } | ||||||
| @ -824,12 +853,14 @@ public class LotDispositionController : Controller { | |||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  | #endif | ||||||
|  |  | ||||||
|     public void ReleaseLockOnDocument(int issueID) { |     public void ReleaseLockOnDocument(int issueID) { | ||||||
|         try { |         try { | ||||||
|             ldDMO.ReleaseLockOnDocument((int)Session[GlobalVars.SESSION_USERID], issueID); |             ldDMO.ReleaseLockOnDocument(GlobalVars.GetUserId(GetSession()), issueID); | ||||||
|         } catch (Exception e) { |         } catch (Exception e) { | ||||||
|             try { |             try { | ||||||
|                 Functions.WriteEvent(_AppSettings, @User.Identity.Name + "\r\n ReleaseLockOnDocument LD\r\n" + issueID.ToString() + "\r\n" + e.Message, System.Diagnostics.EventLogEntryType.Error); |                 Functions.WriteEvent(_AppSettings, GetUserIdentityName() + "\r\n ReleaseLockOnDocument LD\r\n" + issueID.ToString() + "\r\n" + e.Message, System.Diagnostics.EventLogEntryType.Error); | ||||||
|             } catch { } |             } catch { } | ||||||
|             ldDMO.ReleaseLockOnDocument(-1, issueID); |             ldDMO.ReleaseLockOnDocument(-1, issueID); | ||||||
|         } |         } | ||||||
| @ -857,4 +888,34 @@ public class LotDispositionController : Controller { | |||||||
|  |  | ||||||
|         return File(sDocument, System.Net.Mime.MediaTypeNames.Application.Octet, fileName); |         return File(sDocument, System.Net.Mime.MediaTypeNames.Application.Octet, fileName); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  | #if !NET8 | ||||||
|  |  | ||||||
|  |     private System.Web.HttpSessionStateBase GetSession() => | ||||||
|  |         Session; | ||||||
|  |  | ||||||
|  |     private JsonResult GetJsonResult(object? data) => | ||||||
|  |         Json(data, JsonRequestBehavior.AllowGet); | ||||||
|  |  | ||||||
|  |     private bool IsAjaxRequest() => | ||||||
|  |         Request.IsAjaxRequest(); | ||||||
|  |  | ||||||
|  | #endif | ||||||
|  |  | ||||||
|  | #if NET8 | ||||||
|  |  | ||||||
|  |     private Microsoft.AspNetCore.Http.ISession GetSession() => | ||||||
|  |         HttpContext.Session; | ||||||
|  |  | ||||||
|  |     private JsonResult GetJsonResult(object? data) => | ||||||
|  |         Json(data); | ||||||
|  |  | ||||||
|  |     private bool IsAjaxRequest() => | ||||||
|  |         Request.Headers.TryGetValue("X-Requested-With", out Microsoft.Extensions.Primitives.StringValues strings) && strings[0] == "XMLHttpRequest"; | ||||||
|  |  | ||||||
|  | #endif | ||||||
|  |  | ||||||
|  |     private string GetUserIdentityName() => | ||||||
|  |         @User.Identity.Name; | ||||||
|  |  | ||||||
| } | } | ||||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							| @ -1,33 +1,50 @@ | |||||||
| using System; | using System; | ||||||
| using System.Collections.Generic; | using System.Collections.Generic; | ||||||
| using System.Configuration; |  | ||||||
| using System.Diagnostics; | using System.Diagnostics; | ||||||
| using System.Dynamic; |  | ||||||
| using System.Linq; | using System.Linq; | ||||||
| using System.Text; | using System.Text; | ||||||
| using System.Threading; | #if !NET8 | ||||||
| using System.Web; | using System.Web; | ||||||
| using System.Web.Mvc; | using System.Web.Mvc; | ||||||
| using System.Web.Script.Serialization; | using System.Web.Script.Serialization; | ||||||
|  | #endif | ||||||
|  |  | ||||||
|  | #if NET8 | ||||||
|  | using Microsoft.AspNetCore.Mvc; | ||||||
|  | using Microsoft.AspNetCore.Authorization; | ||||||
|  | #endif | ||||||
|  |  | ||||||
| using Fab2ApprovalSystem.DMO; | using Fab2ApprovalSystem.DMO; | ||||||
| using Fab2ApprovalSystem.Misc; | using Fab2ApprovalSystem.Misc; | ||||||
| using Fab2ApprovalSystem.Models; | using Fab2ApprovalSystem.Models; | ||||||
| using Fab2ApprovalSystem.ViewModels; | using Fab2ApprovalSystem.ViewModels; | ||||||
|  |  | ||||||
|  | #if !NET8 | ||||||
|  | using System.Dynamic; | ||||||
|  | using System.Threading; | ||||||
|  | using System.Configuration; | ||||||
|  | #endif | ||||||
|  |  | ||||||
|  | #if !NET8 | ||||||
| using Kendo.Mvc.Extensions; | using Kendo.Mvc.Extensions; | ||||||
| using Kendo.Mvc.UI; | using Kendo.Mvc.UI; | ||||||
|  | #endif | ||||||
|  |  | ||||||
| namespace Fab2ApprovalSystem.Controllers; | namespace Fab2ApprovalSystem.Controllers; | ||||||
|  |  | ||||||
| [Authorize] | [Authorize] | ||||||
|  | #if !NET8 | ||||||
| [OutputCache(NoStore = true, Duration = 0, VaryByParam = "*")] | [OutputCache(NoStore = true, Duration = 0, VaryByParam = "*")] | ||||||
| [SessionExpireFilter] | [SessionExpireFilter] | ||||||
|  | #endif | ||||||
|  | #if NET8 | ||||||
|  | [Route("[controller]")] | ||||||
|  | #endif | ||||||
| public class MRBController : Controller { | public class MRBController : Controller { | ||||||
|  |  | ||||||
|     MRB_DMO mrbDMO = new MRB_DMO(GlobalVars.AppSettings); |     private readonly MRB_DMO mrbDMO = new(GlobalVars.AppSettings); | ||||||
|     WorkflowDMO wfDMO = new WorkflowDMO(); |     private readonly WorkflowDMO wfDMO = new(); | ||||||
|     CredentialsStorage credentialsStorage = new CredentialsStorage(); |     private readonly CredentialsStorage credentialsStorage = new(); | ||||||
|     private readonly AppSettings _AppSettings = GlobalVars.AppSettings; |     private readonly AppSettings _AppSettings = GlobalVars.AppSettings; | ||||||
|  |  | ||||||
|     // GET: /MRB/ |     // GET: /MRB/ | ||||||
| @ -42,25 +59,27 @@ public class MRBController : Controller { | |||||||
|  |  | ||||||
|     // GET: /MRB/Create |     // GET: /MRB/Create | ||||||
|     public ActionResult Create() { |     public ActionResult Create() { | ||||||
|         MRB mrb = new MRB(); |         MRB mrb = new(); | ||||||
|         MRB_DMO mrbDMO = new MRB_DMO(_AppSettings); |         MRB_DMO mrbDMO = new(_AppSettings); | ||||||
|         mrb.OriginatorID = (int)Session[GlobalVars.SESSION_USERID]; |         mrb.OriginatorID = GlobalVars.GetUserId(GetSession()); | ||||||
|         mrbDMO.InsertMRB(mrb); |         mrbDMO.InsertMRB(mrb); | ||||||
|  |  | ||||||
|         // Automatically Submit the Document as soon as an MRB is created |         // Automatically Submit the Document as soon as an MRB is created | ||||||
|         try { |         try { | ||||||
|             PopulateCloseToQDB(); |             PopulateCloseToQDB(); | ||||||
|             mrbDMO.SubmitDocument(mrb.MRBNumber, (int)Session[GlobalVars.SESSION_USERID]); |             mrbDMO.SubmitDocument(mrb.MRBNumber, GlobalVars.GetUserId(GetSession())); | ||||||
|         } catch (Exception e) { |         } catch (Exception e) { | ||||||
|             string exceptionString = e.Message.ToString().Trim().Length > 500 ? "Issue=" + mrb.MRBNumber.ToString() + e.Message.ToString().Substring(0, 250) : e.Message.ToString(); |             string exceptionString = e.Message.ToString().Trim().Length > 500 ? "Issue=" + mrb.MRBNumber.ToString() + e.Message.ToString().Substring(0, 250) : e.Message.ToString(); | ||||||
|             Functions.WriteEvent(_AppSettings, @User.Identity.Name + "\r\n SubmitDocument - MRB\r\n" + e.Message.ToString(), System.Diagnostics.EventLogEntryType.Error); |             Functions.WriteEvent(_AppSettings, GetUserIdentityName() + "\r\n SubmitDocument - MRB\r\n" + e.Message.ToString(), EventLogEntryType.Error); | ||||||
|             EventLogDMO.Add(new WinEventLog() { IssueID = mrb.MRBNumber, UserID = @User.Identity.Name, DocumentType = "MRB", OperationType = "Error", Comments = "SubmitDocument - " + exceptionString }); |             EventLogDMO.Add(new WinEventLog() { IssueID = mrb.MRBNumber, UserID = GetUserIdentityName(), DocumentType = "MRB", OperationType = "Error", Comments = "SubmitDocument - " + exceptionString }); | ||||||
|             throw new Exception(e.Message); |             throw new Exception(e.Message); | ||||||
|         } |         } | ||||||
|  |  | ||||||
|         return RedirectToAction("Edit", new { IssueID = mrb.MRBNumber }); |         return RedirectToAction("Edit", new { IssueID = mrb.MRBNumber }); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  | #if !NET8 | ||||||
|  |  | ||||||
|     // POST: /MRB/Create |     // POST: /MRB/Create | ||||||
|     [HttpPost] |     [HttpPost] | ||||||
|     public ActionResult Create(FormCollection collection) { |     public ActionResult Create(FormCollection collection) { | ||||||
| @ -73,11 +92,13 @@ public class MRBController : Controller { | |||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  | #endif | ||||||
|  |  | ||||||
|     // GET: /MRB/Edit/5 |     // GET: /MRB/Edit/5 | ||||||
|     public ActionResult Edit(int issueID) { |     public ActionResult Edit(int issueID) { | ||||||
|         string jwt = Session["JWT"].ToString(); |         string jwt = GlobalVars.GetJWT(GetSession()); | ||||||
|         string encodedJwt = System.Net.WebUtility.UrlEncode(jwt); |         string encodedJwt = System.Net.WebUtility.UrlEncode(jwt); | ||||||
|         string refreshToken = Session["RefreshToken"].ToString(); |         string refreshToken = GlobalVars.GetRefreshToken(GetSession()); | ||||||
|         string encodedRefreshToken = System.Net.WebUtility.UrlEncode(refreshToken); |         string encodedRefreshToken = System.Net.WebUtility.UrlEncode(refreshToken); | ||||||
|         string mrbUrl = $"{GlobalVars.AppSettings.WasmClientUrl}/redirect?jwt={encodedJwt}&refreshToken={encodedRefreshToken}&redirectPath=mrb/{issueID}"; |         string mrbUrl = $"{GlobalVars.AppSettings.WasmClientUrl}/redirect?jwt={encodedJwt}&refreshToken={encodedRefreshToken}&redirectPath=mrb/{issueID}"; | ||||||
|  |  | ||||||
| @ -91,16 +112,16 @@ public class MRBController : Controller { | |||||||
|             mrbDMO.UpdateMRB(mrb); |             mrbDMO.UpdateMRB(mrb); | ||||||
|         } catch (Exception e) { |         } catch (Exception e) { | ||||||
|             string exceptionString = e.Message.ToString().Trim().Length > 500 ? "IssueID=" + mrb.MRBNumber.ToString() + "  " + e.Message.ToString().Substring(0, 250) : e.Message.ToString(); |             string exceptionString = e.Message.ToString().Trim().Length > 500 ? "IssueID=" + mrb.MRBNumber.ToString() + "  " + e.Message.ToString().Substring(0, 250) : e.Message.ToString(); | ||||||
|             Functions.WriteEvent(_AppSettings, @User.Identity.Name + "\r\n UpdateEdit MRB\r\n" + e.Message.ToString(), System.Diagnostics.EventLogEntryType.Error); |             Functions.WriteEvent(_AppSettings, GetUserIdentityName() + "\r\n UpdateEdit MRB\r\n" + e.Message.ToString(), EventLogEntryType.Error); | ||||||
|             EventLogDMO.Add(new WinEventLog() { IssueID = mrb.MRBNumber, UserID = @User.Identity.Name, DocumentType = "MRB", OperationType = "Error", Comments = exceptionString }); |             EventLogDMO.Add(new WinEventLog() { IssueID = mrb.MRBNumber, UserID = GetUserIdentityName(), DocumentType = "MRB", OperationType = "Error", Comments = exceptionString }); | ||||||
|             throw new Exception(e.Message); |             throw new Exception(e.Message); | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     public ActionResult ReadOnly(int issueID) { |     public ActionResult ReadOnly(int issueID) { | ||||||
|         string jwt = Session["JWT"].ToString(); |         string jwt = GlobalVars.GetJWT(GetSession()); | ||||||
|         string encodedJwt = System.Net.WebUtility.UrlEncode(jwt); |         string encodedJwt = System.Net.WebUtility.UrlEncode(jwt); | ||||||
|         string refreshToken = Session["RefreshToken"].ToString(); |         string refreshToken = GlobalVars.GetRefreshToken(GetSession()); | ||||||
|         string encodedRefreshToken = System.Net.WebUtility.UrlEncode(refreshToken); |         string encodedRefreshToken = System.Net.WebUtility.UrlEncode(refreshToken); | ||||||
|         string mrbUrl = $"{GlobalVars.AppSettings.WasmClientUrl}/redirect?jwt={encodedJwt}&refreshToken={encodedRefreshToken}&redirectPath=mrb/{issueID}"; |         string mrbUrl = $"{GlobalVars.AppSettings.WasmClientUrl}/redirect?jwt={encodedJwt}&refreshToken={encodedRefreshToken}&redirectPath=mrb/{issueID}"; | ||||||
|  |  | ||||||
| @ -112,6 +133,8 @@ public class MRBController : Controller { | |||||||
|         return View(); |         return View(); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  | #if !NET8 | ||||||
|  |  | ||||||
|     // POST: /MRB/Delete/5 |     // POST: /MRB/Delete/5 | ||||||
|     [HttpPost] |     [HttpPost] | ||||||
|     public ActionResult Delete(int id, FormCollection collection) { |     public ActionResult Delete(int id, FormCollection collection) { | ||||||
| @ -124,23 +147,31 @@ public class MRBController : Controller { | |||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  | #endif | ||||||
|  |  | ||||||
|     public JsonResult SearchLots(string searchText, string searchBy) { |     public JsonResult SearchLots(string searchText, string searchBy) { | ||||||
|         List<String> lotlist = MiscDMO.SearchLots(searchText, searchBy).Select(x => x.LotNumber).ToList<String>(); |         List<string> lotlist = MiscDMO.SearchLots(searchText, searchBy).Select(x => x.LotNumber).ToList(); | ||||||
|         return Json(lotlist, JsonRequestBehavior.AllowGet); |         return GetJsonResult(lotlist); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  | #if !NET8 | ||||||
|  |  | ||||||
|     public ActionResult GetMRBLots([DataSourceRequest] DataSourceRequest request, int mrbNumber) { |     public ActionResult GetMRBLots([DataSourceRequest] DataSourceRequest request, int mrbNumber) { | ||||||
|         return Json(mrbDMO.GetMRBLots(mrbNumber).ToDataSourceResult(request)); |         return Json(mrbDMO.GetMRBLots(mrbNumber).ToDataSourceResult(request)); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  | #endif | ||||||
|  |  | ||||||
|     [HttpGet] |     [HttpGet] | ||||||
|     public ActionResult GetTools() { |     public ActionResult GetTools() { | ||||||
|         return Json(mrbDMO.GetTools(), JsonRequestBehavior.AllowGet); |         return GetJsonResult(mrbDMO.GetTools()); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     /// <summary> |     /// <summary> | ||||||
|     /// Updates the lot tables |     /// Updates the lot tables | ||||||
|     /// </summary> |     /// </summary> | ||||||
|  | #if !NET8 | ||||||
|  |  | ||||||
|     [AcceptVerbs(HttpVerbs.Post)] |     [AcceptVerbs(HttpVerbs.Post)] | ||||||
|     public ActionResult UpdateMRBLot([DataSourceRequest] DataSourceRequest request, Lot lot) { |     public ActionResult UpdateMRBLot([DataSourceRequest] DataSourceRequest request, Lot lot) { | ||||||
|         if (lot != null && ModelState.IsValid) { |         if (lot != null && ModelState.IsValid) { | ||||||
| @ -168,6 +199,8 @@ public class MRBController : Controller { | |||||||
|         return Json(new[] { lot }.ToDataSourceResult(request, ModelState)); |         return Json(new[] { lot }.ToDataSourceResult(request, ModelState)); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  | #endif | ||||||
|  |  | ||||||
|     public void DeleteAllMRBLots(int issueID) { |     public void DeleteAllMRBLots(int issueID) { | ||||||
|         // trap the error on then client side |         // trap the error on then client side | ||||||
|         mrbDMO.DeleteAllMRBLot(issueID); |         mrbDMO.DeleteAllMRBLot(issueID); | ||||||
| @ -183,24 +216,24 @@ public class MRBController : Controller { | |||||||
|             mrbDMO.InsertLot(lot, false, out existingRowUpdated); |             mrbDMO.InsertLot(lot, false, out existingRowUpdated); | ||||||
|         } catch (Exception e) { |         } catch (Exception e) { | ||||||
|             string exceptionString = e.Message.ToString().Trim().Length > 500 ? "IssueID=" + lot.IssueID.ToString() + "  " + e.Message.ToString().Substring(0, 250) : e.Message.ToString(); |             string exceptionString = e.Message.ToString().Trim().Length > 500 ? "IssueID=" + lot.IssueID.ToString() + "  " + e.Message.ToString().Substring(0, 250) : e.Message.ToString(); | ||||||
|             Functions.WriteEvent(_AppSettings, @User.Identity.Name + "\r\n Add Lot Disposition\r\n" + e.Message.ToString(), System.Diagnostics.EventLogEntryType.Error); |             Functions.WriteEvent(_AppSettings, GetUserIdentityName() + "\r\n Add Lot Disposition\r\n" + e.Message.ToString(), EventLogEntryType.Error); | ||||||
|             EventLogDMO.Add(new WinEventLog() { IssueID = l.IssueID, UserID = @User.Identity.Name, DocumentType = "MRB", OperationType = "Error", Comments = exceptionString }); |             EventLogDMO.Add(new WinEventLog() { IssueID = l.IssueID, UserID = GetUserIdentityName(), DocumentType = "MRB", OperationType = "Error", Comments = exceptionString }); | ||||||
|             throw new Exception(e.Message); |             throw new Exception(e.Message); | ||||||
|         } |         } | ||||||
|         return Json(l, JsonRequestBehavior.AllowGet); |         return GetJsonResult(l); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     public ActionResult AddLots(string lotNumbers, int mrbNumber) { |     public ActionResult AddLots(string lotNumbers, int mrbNumber) { | ||||||
|         // This is for adding lot(s) via search |         // This is for adding lot(s) via search | ||||||
|  |  | ||||||
|         try { |         try { | ||||||
|             var warnings = new StringBuilder(); |             StringBuilder warnings = new(); | ||||||
|  |  | ||||||
|             if (lotNumbers.Length > 0) { |             if (lotNumbers.Length > 0) { | ||||||
|                 string[] tempLots = lotNumbers.Split(new char[] { '~' }); |                 string[] tempLots = lotNumbers.Split(new char[] { '~' }); | ||||||
|                 foreach (string lotNumber in tempLots) { |                 foreach (string lotNumber in tempLots) { | ||||||
|                     bool existingRowUpdated; |                     bool existingRowUpdated; | ||||||
|                     Lot l = new Lot(); |                     Lot l = new(); | ||||||
|                     l.LotNumber = lotNumber; |                     l.LotNumber = lotNumber; | ||||||
|                     l.MRBNumber = mrbNumber; |                     l.MRBNumber = mrbNumber; | ||||||
|                     mrbDMO.InsertLot(l, true, out existingRowUpdated); |                     mrbDMO.InsertLot(l, true, out existingRowUpdated); | ||||||
| @ -210,8 +243,8 @@ public class MRBController : Controller { | |||||||
|             return Content(warnings.ToString()); |             return Content(warnings.ToString()); | ||||||
|         } catch (Exception e) { |         } catch (Exception e) { | ||||||
|             string exceptionString = e.Message.ToString().Trim().Length > 500 ? "MRBNumber=" + mrbNumber.ToString() + "  " + e.Message.ToString().Substring(0, 250) : e.Message.ToString(); |             string exceptionString = e.Message.ToString().Trim().Length > 500 ? "MRBNumber=" + mrbNumber.ToString() + "  " + e.Message.ToString().Substring(0, 250) : e.Message.ToString(); | ||||||
|             Functions.WriteEvent(_AppSettings, @User.Identity.Name + "\r\n AddLots MRB\r\n" + e.Message.ToString(), System.Diagnostics.EventLogEntryType.Error); |             Functions.WriteEvent(_AppSettings, GetUserIdentityName() + "\r\n AddLots MRB\r\n" + e.Message.ToString(), EventLogEntryType.Error); | ||||||
|             EventLogDMO.Add(new WinEventLog() { UserID = @User.Identity.Name, OperationType = "Error", DocumentType = "MRB", Comments = exceptionString }); |             EventLogDMO.Add(new WinEventLog() { UserID = GetUserIdentityName(), OperationType = "Error", DocumentType = "MRB", Comments = exceptionString }); | ||||||
|  |  | ||||||
|             Response.StatusCode = (int)System.Net.HttpStatusCode.InternalServerError; |             Response.StatusCode = (int)System.Net.HttpStatusCode.InternalServerError; | ||||||
|             return Content(e.Message); |             return Content(e.Message); | ||||||
| @ -220,10 +253,14 @@ public class MRBController : Controller { | |||||||
|  |  | ||||||
|     #region ATTACHMENT |     #region ATTACHMENT | ||||||
|  |  | ||||||
|  | #if !NET8 | ||||||
|  |  | ||||||
|     public ActionResult Attachment_Read([DataSourceRequest] DataSourceRequest request, int mrbNumber) { |     public ActionResult Attachment_Read([DataSourceRequest] DataSourceRequest request, int mrbNumber) { | ||||||
|         return Json(mrbDMO.GetMRBAttachments(mrbNumber).ToDataSourceResult(request)); |         return Json(mrbDMO.GetMRBAttachments(mrbNumber).ToDataSourceResult(request)); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  | #endif | ||||||
|  |  | ||||||
|     [HttpPost] |     [HttpPost] | ||||||
|     public void DeleteAttachment(int attachmentID) { |     public void DeleteAttachment(int attachmentID) { | ||||||
|         try { |         try { | ||||||
| @ -233,16 +270,16 @@ public class MRBController : Controller { | |||||||
|                 if (attachment == null) |                 if (attachment == null) | ||||||
|                     return; |                     return; | ||||||
|  |  | ||||||
|                 String fileName = attachment.Path; |                 string fileName = attachment.Path; | ||||||
|                 if (String.IsNullOrEmpty(fileName)) |                 if (string.IsNullOrEmpty(fileName)) | ||||||
|                     fileName = attachment.FileName; |                     fileName = attachment.FileName; | ||||||
|  |  | ||||||
|                 mrbDMO.DeleteMRBAttachment(attachmentID); |                 mrbDMO.DeleteMRBAttachment(attachmentID); | ||||||
|  |  | ||||||
|                 if (!String.IsNullOrWhiteSpace(fileName)) { |                 if (!string.IsNullOrWhiteSpace(fileName)) { | ||||||
|                     var physicalPath = System.IO.Path.Combine(_AppSettings.AttachmentFolder + "MRB", fileName); |                     var physicalPath = System.IO.Path.Combine(_AppSettings.AttachmentFolder + "MRB", fileName); | ||||||
|  |  | ||||||
|                     System.IO.FileInfo f = new System.IO.FileInfo(physicalPath); |                     System.IO.FileInfo f = new(physicalPath); | ||||||
|  |  | ||||||
|                     if (f.Exists) |                     if (f.Exists) | ||||||
|                         f.Delete(); |                         f.Delete(); | ||||||
| @ -250,18 +287,20 @@ public class MRBController : Controller { | |||||||
|             } |             } | ||||||
|         } catch (Exception e) { |         } catch (Exception e) { | ||||||
|             string exceptionString = e.Message.ToString().Trim().Length > 500 ? "AttachmentID=" + attachmentID.ToString() + "  " + e.Message.ToString().Substring(0, 250) : e.Message.ToString(); |             string exceptionString = e.Message.ToString().Trim().Length > 500 ? "AttachmentID=" + attachmentID.ToString() + "  " + e.Message.ToString().Substring(0, 250) : e.Message.ToString(); | ||||||
|             Functions.WriteEvent(_AppSettings, @User.Identity.Name + "\r\n AttachmentID MRB\r\n" + e.Message.ToString(), System.Diagnostics.EventLogEntryType.Error); |             Functions.WriteEvent(_AppSettings, GetUserIdentityName() + "\r\n AttachmentID MRB\r\n" + e.Message.ToString(), EventLogEntryType.Error); | ||||||
|             EventLogDMO.Add(new WinEventLog() { IssueID = 999, UserID = @User.Identity.Name, DocumentType = "MRB", OperationType = "Error", Comments = "AttachmentID Disposition " + exceptionString }); |             EventLogDMO.Add(new WinEventLog() { IssueID = 999, UserID = GetUserIdentityName(), DocumentType = "MRB", OperationType = "Error", Comments = "AttachmentID Disposition " + exceptionString }); | ||||||
|             throw new Exception(e.Message); |             throw new Exception(e.Message); | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  | #if !NET8 | ||||||
|  |  | ||||||
|     public ActionResult AttachSave(IEnumerable<HttpPostedFileBase> files, int mrbNumber) { |     public ActionResult AttachSave(IEnumerable<HttpPostedFileBase> files, int mrbNumber) { | ||||||
|         var errorList = new List<String>(); |         var errorList = new List<String>(); | ||||||
|  |  | ||||||
|         // The Name of the Upload component is "files" |         // The Name of the Upload component is "files" | ||||||
|         if (files != null) { |         if (files != null) { | ||||||
|             int userId = (int)Session[GlobalVars.SESSION_USERID]; |             int userId = GlobalVars.GetUserId(GetSession()); | ||||||
|             foreach (var file in files) { |             foreach (var file in files) { | ||||||
|                 MRBHelper.AttachSave(_AppSettings, mrbDMO, mrbNumber, userId, file.FileName, file.InputStream); |                 MRBHelper.AttachSave(_AppSettings, mrbDMO, mrbNumber, userId, file.FileName, file.InputStream); | ||||||
|             } |             } | ||||||
| @ -269,13 +308,17 @@ public class MRBController : Controller { | |||||||
|         return Json(new { errors = errorList }); |         return Json(new { errors = errorList }); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  | #endif | ||||||
|  |  | ||||||
|     #endregion |     #endregion | ||||||
|  |  | ||||||
|  | #if !NET8 | ||||||
|  |  | ||||||
|     public ActionResult ExcelLotOpen(IEnumerable<HttpPostedFileBase> Lotfile, int mrbNumber) { |     public ActionResult ExcelLotOpen(IEnumerable<HttpPostedFileBase> Lotfile, int mrbNumber) { | ||||||
|         var warnings = new StringBuilder(); |         var warnings = new StringBuilder(); | ||||||
|         var physicalPath = ""; |         var physicalPath = ""; | ||||||
|         try { |         try { | ||||||
|             string userIdentityName = @User.Identity.Name; |             string userIdentityName = GetUserIdentityName(); | ||||||
|             var dispos = mrbDMO.GetDispositions(mrbNumber); |             var dispos = mrbDMO.GetDispositions(mrbNumber); | ||||||
|             foreach (var file in Lotfile) { |             foreach (var file in Lotfile) { | ||||||
|                 physicalPath = MRBHelper.ExcelLotOpen(mrbDMO, mrbNumber, warnings, dispos, userIdentityName, _AppSettings.LotTempPipeLine, file.FileName, file.InputStream); |                 physicalPath = MRBHelper.ExcelLotOpen(mrbDMO, mrbNumber, warnings, dispos, userIdentityName, _AppSettings.LotTempPipeLine, file.FileName, file.InputStream); | ||||||
| @ -290,8 +333,8 @@ public class MRBController : Controller { | |||||||
|                 detailedException = e.Message; |                 detailedException = e.Message; | ||||||
|             } |             } | ||||||
|             string exceptionString = e.Message.ToString().Trim().Length > 500 ? "IssueID=" + mrbNumber.ToString() + "  " + e.Message.ToString().Substring(0, 250) : e.Message.ToString(); |             string exceptionString = e.Message.ToString().Trim().Length > 500 ? "IssueID=" + mrbNumber.ToString() + "  " + e.Message.ToString().Substring(0, 250) : e.Message.ToString(); | ||||||
|             Functions.WriteEvent(_AppSettings, @User.Identity.Name + "\r\n MRB Excel\r\n" + detailedException, System.Diagnostics.EventLogEntryType.Error); |             Functions.WriteEvent(_AppSettings, GetUserIdentityName() + "\r\n MRB Excel\r\n" + detailedException, EventLogEntryType.Error); | ||||||
|             EventLogDMO.Add(new WinEventLog() { IssueID = mrbNumber, UserID = @User.Identity.Name, DocumentType = "Lot Disposition", OperationType = "Error", Comments = exceptionString }); |             EventLogDMO.Add(new WinEventLog() { IssueID = mrbNumber, UserID = GetUserIdentityName(), DocumentType = "Lot Disposition", OperationType = "Error", Comments = exceptionString }); | ||||||
|  |  | ||||||
|             System.IO.FileInfo f = new System.IO.FileInfo(physicalPath); |             System.IO.FileInfo f = new System.IO.FileInfo(physicalPath); | ||||||
|             if (f.Exists) |             if (f.Exists) | ||||||
| @ -307,7 +350,7 @@ public class MRBController : Controller { | |||||||
|         try { |         try { | ||||||
|             string message; |             string message; | ||||||
|             string c = Server.MapPath("/FTPBatch/"); |             string c = Server.MapPath("/FTPBatch/"); | ||||||
|             string userIdentityName = @User.Identity.Name; |             string userIdentityName = GetUserIdentityName(); | ||||||
|             string b = Server.MapPath("/FTPBatch/" + _AppSettings.FTPSPNBatchFileName); |             string b = Server.MapPath("/FTPBatch/" + _AppSettings.FTPSPNBatchFileName); | ||||||
|             string a = Server.MapPath("/FTPBatch/" + _AppSettings.FTPSPNBatchFileName_Test); |             string a = Server.MapPath("/FTPBatch/" + _AppSettings.FTPSPNBatchFileName_Test); | ||||||
|             foreach (var file in AddQDBFlag) { |             foreach (var file in AddQDBFlag) { | ||||||
| @ -332,7 +375,7 @@ public class MRBController : Controller { | |||||||
|         try { |         try { | ||||||
|             string message; |             string message; | ||||||
|             string c = Server.MapPath("/FTPBatch/"); |             string c = Server.MapPath("/FTPBatch/"); | ||||||
|             string userIdentityName = @User.Identity.Name; |             string userIdentityName = GetUserIdentityName(); | ||||||
|             string b = Server.MapPath("/FTPBatch/" + _AppSettings.FTPSPNBatchFileName); |             string b = Server.MapPath("/FTPBatch/" + _AppSettings.FTPSPNBatchFileName); | ||||||
|             string a = Server.MapPath("/FTPBatch/" + _AppSettings.FTPSPNBatchFileName_Test); |             string a = Server.MapPath("/FTPBatch/" + _AppSettings.FTPSPNBatchFileName_Test); | ||||||
|             foreach (var file in RemoveQDBFlag) { |             foreach (var file in RemoveQDBFlag) { | ||||||
| @ -352,11 +395,19 @@ public class MRBController : Controller { | |||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  | #if !NET8 | ||||||
|  |  | ||||||
|     public ActionResult GetContainmentActions([DataSourceRequest] DataSourceRequest request, int mrbNumber) { |     public ActionResult GetContainmentActions([DataSourceRequest] DataSourceRequest request, int mrbNumber) { | ||||||
|         return Json(mrbDMO.GetContainmentActions(mrbNumber).ToDataSourceResult(request)); |         return Json(mrbDMO.GetContainmentActions(mrbNumber).ToDataSourceResult(request)); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  | #endif | ||||||
|  |  | ||||||
|  | #endif | ||||||
|  |  | ||||||
|  | #if !NET8 | ||||||
|     [AcceptVerbs(HttpVerbs.Post)] |     [AcceptVerbs(HttpVerbs.Post)] | ||||||
|  | #endif | ||||||
|     public ActionResult UpdateContainmentAction(ContainmentActionObj model) { |     public ActionResult UpdateContainmentAction(ContainmentActionObj model) { | ||||||
|         if (model != null && ModelState.IsValid) { |         if (model != null && ModelState.IsValid) { | ||||||
|             mrbDMO.UpdateContainmentAction(model); |             mrbDMO.UpdateContainmentAction(model); | ||||||
| @ -365,7 +416,9 @@ public class MRBController : Controller { | |||||||
|         return Content(""); |         return Content(""); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  | #if !NET8 | ||||||
|     [AcceptVerbs(HttpVerbs.Post)] |     [AcceptVerbs(HttpVerbs.Post)] | ||||||
|  | #endif | ||||||
|     public ActionResult InsertContainmentAction(ContainmentActionObj model) { |     public ActionResult InsertContainmentAction(ContainmentActionObj model) { | ||||||
|         if (model != null && ModelState.IsValid) { |         if (model != null && ModelState.IsValid) { | ||||||
|             mrbDMO.InsertContainmentAction(model); |             mrbDMO.InsertContainmentAction(model); | ||||||
| @ -374,6 +427,8 @@ public class MRBController : Controller { | |||||||
|         return Content(""); |         return Content(""); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  | #if !NET8 | ||||||
|  |  | ||||||
|     [AcceptVerbs(HttpVerbs.Post)] |     [AcceptVerbs(HttpVerbs.Post)] | ||||||
|     public ActionResult DeleteContainmentAction([DataSourceRequest] DataSourceRequest request, ContainmentActionObj model) { |     public ActionResult DeleteContainmentAction([DataSourceRequest] DataSourceRequest request, ContainmentActionObj model) { | ||||||
|         if (model != null && ModelState.IsValid) { |         if (model != null && ModelState.IsValid) { | ||||||
| @ -383,19 +438,25 @@ public class MRBController : Controller { | |||||||
|         return Json(new[] { model }.ToDataSourceResult(request, ModelState)); |         return Json(new[] { model }.ToDataSourceResult(request, ModelState)); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  | #endif | ||||||
|  |  | ||||||
|     #region |     #region | ||||||
|  |  | ||||||
|  | #if !NET8 | ||||||
|     public ActionResult GetDispostions([DataSourceRequest] DataSourceRequest request, int mrbNumber) { |     public ActionResult GetDispostions([DataSourceRequest] DataSourceRequest request, int mrbNumber) { | ||||||
|         return Json(mrbDMO.GetDispositions(mrbNumber).ToDataSourceResult(request)); |         return Json(mrbDMO.GetDispositions(mrbNumber).ToDataSourceResult(request)); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  | #endif | ||||||
|  |  | ||||||
|  | #if !NET8 | ||||||
|  |  | ||||||
|     [AcceptVerbs(HttpVerbs.Post)] |     [AcceptVerbs(HttpVerbs.Post)] | ||||||
|     public ActionResult UpdateDisposition(Disposition model) { |     public ActionResult UpdateDisposition(Disposition model) { | ||||||
|         if (model != null && ModelState.IsValid) { |         if (model != null && ModelState.IsValid) { | ||||||
|             mrbDMO.UpdateDisposition(model); |             mrbDMO.UpdateDisposition(model); | ||||||
|         } |         } | ||||||
|  |         return GetJsonResult(model); | ||||||
|         return Json(model, JsonRequestBehavior.AllowGet); |  | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     [AcceptVerbs(HttpVerbs.Post)] |     [AcceptVerbs(HttpVerbs.Post)] | ||||||
| @ -411,13 +472,15 @@ public class MRBController : Controller { | |||||||
|             mrbDMO.DeleteDisposition(model); |             mrbDMO.DeleteDisposition(model); | ||||||
|         } |         } | ||||||
|  |  | ||||||
|         return Json(model, JsonRequestBehavior.AllowGet); |         return GetJsonResult(model); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  | #endif | ||||||
|  |  | ||||||
|     #endregion |     #endregion | ||||||
|  |  | ||||||
|     public void PopulateCloseToQDB() { |     public void PopulateCloseToQDB() { | ||||||
|         List<CloseToQDBOptionViewModel> options = new List<CloseToQDBOptionViewModel>(); |         List<CloseToQDBOptionViewModel> options = new(); | ||||||
|         options.Add(new CloseToQDBOptionViewModel { CloseToQDBOptionID = 0, CloseToQDBOption = "No" }); |         options.Add(new CloseToQDBOptionViewModel { CloseToQDBOptionID = 0, CloseToQDBOption = "No" }); | ||||||
|         options.Add(new CloseToQDBOptionViewModel { CloseToQDBOptionID = 1, CloseToQDBOption = "Yes" }); |         options.Add(new CloseToQDBOptionViewModel { CloseToQDBOptionID = 1, CloseToQDBOption = "Yes" }); | ||||||
|         ViewData["CloseToQDBOptions"] = options; |         ViewData["CloseToQDBOptions"] = options; | ||||||
| @ -428,28 +491,28 @@ public class MRBController : Controller { | |||||||
|         List<string> emailIst = MiscDMO.GetApproverEmailListByDocument(mrbNumber, currentStep, (int)GlobalVars.DocumentType.MRB).Distinct().ToList(); |         List<string> emailIst = MiscDMO.GetApproverEmailListByDocument(mrbNumber, currentStep, (int)GlobalVars.DocumentType.MRB).Distinct().ToList(); | ||||||
|         string emailSentList = MRBHelper.NotifyApprovers(_AppSettings, mrbNumber, emailIst); |         string emailSentList = MRBHelper.NotifyApprovers(_AppSettings, mrbNumber, emailIst); | ||||||
|         try { |         try { | ||||||
|             EventLogDMO.Add(new WinEventLog() { IssueID = mrbNumber, UserID = @User.Identity.Name, DocumentType = "MRB", OperationType = "Email", Comments = "Approvers for Step " + currentStep.ToString() + ":" + emailSentList }); |             EventLogDMO.Add(new WinEventLog() { IssueID = mrbNumber, UserID = GetUserIdentityName(), DocumentType = "MRB", OperationType = "Email", Comments = "Approvers for Step " + currentStep.ToString() + ":" + emailSentList }); | ||||||
|         } catch { } |         } catch { } | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     public void Approve(int issueID, byte currentStep, string comments) { |     public void Approve(int issueID, byte currentStep, string comments) { | ||||||
|         int isITARCompliant = 1; |         int isITARCompliant = 1; | ||||||
|         MRB mrb = new MRB(); |         MRB mrb = new(); | ||||||
|         mrb = mrbDMO.GetMRBItem(issueID, out isITARCompliant, (int)Session[GlobalVars.SESSION_USERID]); |         mrb = mrbDMO.GetMRBItem(issueID, out isITARCompliant, GlobalVars.GetUserId(GetSession())); | ||||||
|         try { |         try { | ||||||
|             bool lastStep = false; |             bool lastStep = false; | ||||||
|  |  | ||||||
|             bool lastApprover = wfDMO.Approve(_AppSettings, issueID, currentStep, comments, out lastStep, (int)Session[GlobalVars.SESSION_USERID], (int)GlobalVars.DocumentType.MRB, mrb.WorkFlowNumber); |             bool lastApprover = wfDMO.Approve(_AppSettings, issueID, currentStep, comments, out lastStep, GlobalVars.GetUserId(GetSession()), (int)GlobalVars.DocumentType.MRB, mrb.WorkFlowNumber); | ||||||
|  |  | ||||||
|             while (lastApprover && !lastStep) { |             while (lastApprover && !lastStep) { | ||||||
|                 currentStep++; |                 currentStep++; | ||||||
|                 lastApprover = wfDMO.Approve(_AppSettings, issueID, currentStep, comments, out lastStep, (int)Session[GlobalVars.SESSION_USERID], (int)GlobalVars.DocumentType.MRB, mrb.WorkFlowNumber); |                 lastApprover = wfDMO.Approve(_AppSettings, issueID, currentStep, comments, out lastStep, GlobalVars.GetUserId(GetSession()), (int)GlobalVars.DocumentType.MRB, mrb.WorkFlowNumber); | ||||||
|                 NotifyApprovers(issueID, currentStep); |                 NotifyApprovers(issueID, currentStep); | ||||||
|             } |             } | ||||||
|         } catch (Exception e) { |         } catch (Exception e) { | ||||||
|             string exceptionString = e.Message.ToString().Trim().Length > 500 ? "Issue=" + issueID.ToString() + " Step:" + currentStep + " " + e.Message.ToString().Substring(0, 250) : e.Message.ToString(); |             string exceptionString = e.Message.ToString().Trim().Length > 500 ? "Issue=" + issueID.ToString() + " Step:" + currentStep + " " + e.Message.ToString().Substring(0, 250) : e.Message.ToString(); | ||||||
|             Functions.WriteEvent(_AppSettings, @User.Identity.Name + "\r\n Approve\r\n" + e.Message.ToString(), System.Diagnostics.EventLogEntryType.Error); |             Functions.WriteEvent(_AppSettings, GetUserIdentityName() + "\r\n Approve\r\n" + e.Message.ToString(), EventLogEntryType.Error); | ||||||
|             EventLogDMO.Add(new WinEventLog() { IssueID = issueID, UserID = @User.Identity.Name, DocumentType = "Lot Disposition", OperationType = "Error", Comments = "Approve - " + exceptionString }); |             EventLogDMO.Add(new WinEventLog() { IssueID = issueID, UserID = GetUserIdentityName(), DocumentType = "Lot Disposition", OperationType = "Error", Comments = "Approve - " + exceptionString }); | ||||||
|             throw new Exception(e.Message); |             throw new Exception(e.Message); | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
| @ -467,9 +530,11 @@ public class MRBController : Controller { | |||||||
|         int waferCount = 0; |         int waferCount = 0; | ||||||
|         int dieCount = 0; |         int dieCount = 0; | ||||||
|         mrbDMO.GetLotWaferDieCount(mrbNumber, out lotCount, out waferCount, out dieCount); |         mrbDMO.GetLotWaferDieCount(mrbNumber, out lotCount, out waferCount, out dieCount); | ||||||
|         return Json(lotCount.ToString() + "~" + waferCount.ToString() + "~" + dieCount, JsonRequestBehavior.AllowGet); |         return GetJsonResult(lotCount.ToString() + "~" + waferCount.ToString() + "~" + dieCount); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  | #if !NET8 | ||||||
|  |  | ||||||
|     public ActionResult SendMRBHoldFlagToSPN(int mrbNumber) { |     public ActionResult SendMRBHoldFlagToSPN(int mrbNumber) { | ||||||
|         MRB mrbInfo; |         MRB mrbInfo; | ||||||
|         try { |         try { | ||||||
| @ -480,7 +545,7 @@ public class MRBController : Controller { | |||||||
|         } |         } | ||||||
|  |  | ||||||
|         if (!mrbInfo.ToolCSV.ToUpper().Equals("NA")) { |         if (!mrbInfo.ToolCSV.ToUpper().Equals("NA")) { | ||||||
|             Lot l = new Lot(); |             Lot l = new(); | ||||||
|  |  | ||||||
|             var mrbLotInfo = mrbDMO.GetLotsToFindNewChildLots(mrbNumber); |             var mrbLotInfo = mrbDMO.GetLotsToFindNewChildLots(mrbNumber); | ||||||
|             foreach (Lot lot in mrbLotInfo) { |             foreach (Lot lot in mrbLotInfo) { | ||||||
| @ -493,10 +558,10 @@ public class MRBController : Controller { | |||||||
|  |  | ||||||
|         // SEND DATA to SPN |         // SEND DATA to SPN | ||||||
|  |  | ||||||
|         StringBuilder output = new StringBuilder(); |         StringBuilder output = new(); | ||||||
|         try { |         try { | ||||||
|             string c = Server.MapPath("/FTPBatch/"); |             string c = Server.MapPath("/FTPBatch/"); | ||||||
|             string userIdentityName = @User.Identity.Name; |             string userIdentityName = GetUserIdentityName(); | ||||||
|             string b = Server.MapPath("/FTPBatch/" + _AppSettings.FTPSPNBatchFileName); |             string b = Server.MapPath("/FTPBatch/" + _AppSettings.FTPSPNBatchFileName); | ||||||
|             string a = Server.MapPath("/FTPBatch/" + _AppSettings.FTPSPNBatchFileName_Test); |             string a = Server.MapPath("/FTPBatch/" + _AppSettings.FTPSPNBatchFileName_Test); | ||||||
|             IEnumerable<string> data = mrbDMO.GetMRBHoldLots(mrbNumber); |             IEnumerable<string> data = mrbDMO.GetMRBHoldLots(mrbNumber); | ||||||
| @ -526,33 +591,33 @@ public class MRBController : Controller { | |||||||
|                         } |                         } | ||||||
|                     } catch (Exception e) { |                     } catch (Exception e) { | ||||||
|                         string exceptionString = e.Message.ToString().Trim().Length > 500 ? "MRB =" + mrbNumber.ToString() + " FTPToSPN(): SendMRBHoldFlagToSPN(mrbNumber) - FTP Upload Error " + e.Message.ToString().Substring(0, 250) : e.Message.ToString(); |                         string exceptionString = e.Message.ToString().Trim().Length > 500 ? "MRB =" + mrbNumber.ToString() + " FTPToSPN(): SendMRBHoldFlagToSPN(mrbNumber) - FTP Upload Error " + e.Message.ToString().Substring(0, 250) : e.Message.ToString(); | ||||||
|                         EventLogDMO.Add(new WinEventLog() { IssueID = -1, UserID = @User.Identity.Name, DocumentType = "MRB", OperationType = "Error", Comments = exceptionString }); |                         EventLogDMO.Add(new WinEventLog() { IssueID = -1, UserID = GetUserIdentityName(), DocumentType = "MRB", OperationType = "Error", Comments = exceptionString }); | ||||||
|                         return Json(new { Error = true, Message = e.Message }, JsonRequestBehavior.AllowGet); |                         return GetJsonResult(new { Error = true, Message = e.Message }); | ||||||
|                     } |                     } | ||||||
|  |  | ||||||
|                 } |                 } | ||||||
|             } catch (Exception e) { |             } catch (Exception e) { | ||||||
|                 string exceptionString = e.Message.ToString().Trim().Length > 500 ? "MRB =" + mrbNumber.ToString() + " SendMRBHoldFlagToSPN(mrbNumber) " + e.Message.ToString().Substring(0, 250) : e.Message.ToString(); |                 string exceptionString = e.Message.ToString().Trim().Length > 500 ? "MRB =" + mrbNumber.ToString() + " SendMRBHoldFlagToSPN(mrbNumber) " + e.Message.ToString().Substring(0, 250) : e.Message.ToString(); | ||||||
|                 Functions.WriteEvent(_AppSettings, @User.Identity.Name + "\r\n Approve\r\n" + e.Message.ToString(), System.Diagnostics.EventLogEntryType.Error); |                 Functions.WriteEvent(_AppSettings, GetUserIdentityName() + "\r\n Approve\r\n" + e.Message.ToString(), EventLogEntryType.Error); | ||||||
|                 EventLogDMO.Add(new WinEventLog() { IssueID = -1, UserID = @User.Identity.Name, DocumentType = "MRB", OperationType = "Error", Comments = exceptionString }); |                 EventLogDMO.Add(new WinEventLog() { IssueID = -1, UserID = GetUserIdentityName(), DocumentType = "MRB", OperationType = "Error", Comments = exceptionString }); | ||||||
|                 return Json(new { Error = true, Message = e.Message }, JsonRequestBehavior.AllowGet); |                 return GetJsonResult(new { Error = true, Message = e.Message }); | ||||||
|                 ; |                 ; | ||||||
|             } |             } | ||||||
|  |  | ||||||
|             return Json(new { Error = false, Message = "Success" }, JsonRequestBehavior.AllowGet); |             return GetJsonResult(new { Error = false, Message = "Success" }); | ||||||
|         } catch (Exception e) { |         } catch (Exception e) { | ||||||
|             string exceptionString = e.Message.ToString().Trim().Length > 500 ? "GUID =" + mrbNumber.ToString() + " SendMRBHoldFlagToSPN(mrbNumber) " + e.Message.ToString().Substring(0, 250) : e.Message.ToString(); |             string exceptionString = e.Message.ToString().Trim().Length > 500 ? "GUID =" + mrbNumber.ToString() + " SendMRBHoldFlagToSPN(mrbNumber) " + e.Message.ToString().Substring(0, 250) : e.Message.ToString(); | ||||||
|             Functions.WriteEvent(_AppSettings, @User.Identity.Name + "\r\n Approve\r\n" + e.Message.ToString(), System.Diagnostics.EventLogEntryType.Error); |             Functions.WriteEvent(_AppSettings, GetUserIdentityName() + "\r\n Approve\r\n" + e.Message.ToString(), EventLogEntryType.Error); | ||||||
|             EventLogDMO.Add(new WinEventLog() { IssueID = -1, UserID = @User.Identity.Name, DocumentType = "MRB", OperationType = "Error", Comments = exceptionString }); |             EventLogDMO.Add(new WinEventLog() { IssueID = -1, UserID = GetUserIdentityName(), DocumentType = "MRB", OperationType = "Error", Comments = exceptionString }); | ||||||
|             return Json(new { Error = true, Message = e.Message }, JsonRequestBehavior.AllowGet); |             return GetJsonResult(new { Error = true, Message = e.Message }); | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     public bool BatchFTP_Old(string sourceFile, string destFile) { |     public bool BatchFTP_Old(string sourceFile, string destFile) { | ||||||
|         System.IO.FileInfo sourcefile = new System.IO.FileInfo(sourceFile); |         System.IO.FileInfo sourcefile = new(sourceFile); | ||||||
|         try { |         try { | ||||||
|  |  | ||||||
|             ProcessStartInfo psiFab1 = new ProcessStartInfo(); |             ProcessStartInfo psiFab1 = new(); | ||||||
|             if (GlobalVars.DBConnection.ToUpper() == "TEST" || GlobalVars.DBConnection.ToUpper() == "QUALITY") { |             if (GlobalVars.DBConnection.ToUpper() == "TEST" || GlobalVars.DBConnection.ToUpper() == "QUALITY") { | ||||||
|                 psiFab1.FileName = Server.MapPath("/FTPBatch/" + _AppSettings.FTPSPNBatchFileName_Test); |                 psiFab1.FileName = Server.MapPath("/FTPBatch/" + _AppSettings.FTPSPNBatchFileName_Test); | ||||||
|             } else { |             } else { | ||||||
| @ -561,24 +626,26 @@ public class MRBController : Controller { | |||||||
|  |  | ||||||
|             psiFab1.Arguments = sourcefile.FullName + " " + destFile; |             psiFab1.Arguments = sourcefile.FullName + " " + destFile; | ||||||
|  |  | ||||||
|             Process procFab1 = new Process(); |             Process procFab1 = new(); | ||||||
|             procFab1.StartInfo = psiFab1; |             procFab1.StartInfo = psiFab1; | ||||||
|             procFab1.Start(); |             procFab1.Start(); | ||||||
|             return true; |             return true; | ||||||
|         } catch (Exception e) { |         } catch (Exception e) { | ||||||
|             Functions.WriteEvent(_AppSettings, @User.Identity.Name + "\r\n Approve\r\n" + e.Message.ToString(), System.Diagnostics.EventLogEntryType.Error); |             Functions.WriteEvent(_AppSettings, GetUserIdentityName() + "\r\n Approve\r\n" + e.Message.ToString(), EventLogEntryType.Error); | ||||||
|             return false; |             return false; | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  | #endif | ||||||
|  |  | ||||||
|     public FileResult DownloadFile(string attachmentID) { |     public FileResult DownloadFile(string attachmentID) { | ||||||
|         var attachment = mrbDMO.GetMRBAttachment(Convert.ToInt32(attachmentID)); |         var attachment = mrbDMO.GetMRBAttachment(Convert.ToInt32(attachmentID)); | ||||||
|  |  | ||||||
|         if (attachment == null) |         if (attachment == null) | ||||||
|             throw new Exception("Invalid attachment ID"); |             throw new Exception("Invalid attachment ID"); | ||||||
|  |  | ||||||
|         String fileName = attachment.Path; |         string fileName = attachment.Path; | ||||||
|         if (String.IsNullOrEmpty(fileName)) |         if (string.IsNullOrEmpty(fileName)) | ||||||
|             fileName = attachment.FileName; |             fileName = attachment.FileName; | ||||||
|  |  | ||||||
|         var sDocument = System.IO.Path.Combine(_AppSettings.AttachmentFolder + "MRB", fileName); |         var sDocument = System.IO.Path.Combine(_AppSettings.AttachmentFolder + "MRB", fileName); | ||||||
| @ -597,7 +664,7 @@ public class MRBController : Controller { | |||||||
|     } |     } | ||||||
|  |  | ||||||
|     public FileResult ExportMRBHoldFlagReport(int mrbNumber) { |     public FileResult ExportMRBHoldFlagReport(int mrbNumber) { | ||||||
|         var sb = new StringBuilder(); |         StringBuilder sb = new(); | ||||||
|         sb.AppendLine("LotNo,PartNo ,CurrentLocation,CurrentOperation,StartQty,CurrentQty,LotStatus,OperStatus,Successful,Comment,PriorMRB_DispoType,PriorMRBHoldLocation,PriorMRBHoldOperation,CurrentMRB_DispoType,CurrentMRBHoldLocation,CurrentMRBHoldOperation,TransactionDatetime"); |         sb.AppendLine("LotNo,PartNo ,CurrentLocation,CurrentOperation,StartQty,CurrentQty,LotStatus,OperStatus,Successful,Comment,PriorMRB_DispoType,PriorMRBHoldLocation,PriorMRBHoldOperation,CurrentMRB_DispoType,CurrentMRBHoldLocation,CurrentMRBHoldOperation,TransactionDatetime"); | ||||||
|         foreach (var report in mrbDMO.GetMRBHoldFlagReport(mrbNumber)) { |         foreach (var report in mrbDMO.GetMRBHoldFlagReport(mrbNumber)) { | ||||||
|             sb.AppendLine(MRB_DMO.FormCSV( |             sb.AppendLine(MRB_DMO.FormCSV( | ||||||
| @ -626,7 +693,7 @@ public class MRBController : Controller { | |||||||
|     } |     } | ||||||
|  |  | ||||||
|     public FileResult PreviewMRBHoldFlagTobeSentToSPN(int mrbNumber) { |     public FileResult PreviewMRBHoldFlagTobeSentToSPN(int mrbNumber) { | ||||||
|         var sb = new StringBuilder(); |         StringBuilder sb = new(); | ||||||
|         sb.AppendLine("LotNumber,MRBNumber,DispoType,MRB Flag,Modified,Sent To SPN,Last Sent to SPN"); |         sb.AppendLine("LotNumber,MRBNumber,DispoType,MRB Flag,Modified,Sent To SPN,Last Sent to SPN"); | ||||||
|         foreach (var lot in mrbDMO.GetMRHoldFlagSentHistory(mrbNumber)) { |         foreach (var lot in mrbDMO.GetMRHoldFlagSentHistory(mrbNumber)) { | ||||||
|             sb.AppendLine(MRB_DMO.FormCSV( |             sb.AppendLine(MRB_DMO.FormCSV( | ||||||
| @ -644,7 +711,7 @@ public class MRBController : Controller { | |||||||
|     } |     } | ||||||
|  |  | ||||||
|     public FileResult ExportLots(int mrbNumber) { |     public FileResult ExportLots(int mrbNumber) { | ||||||
|         var sb = new StringBuilder(); |         StringBuilder sb = new(); | ||||||
|         sb.AppendLine("LotNumber,DieLotNumber,WipPartNo,DispoType,WaferCount,DiePartNo,DieCount,SourceLot,TotalCost,ProductFamily,Gen,HexSize,Channel,Voltage,Location,Status,QualityCode"); |         sb.AppendLine("LotNumber,DieLotNumber,WipPartNo,DispoType,WaferCount,DiePartNo,DieCount,SourceLot,TotalCost,ProductFamily,Gen,HexSize,Channel,Voltage,Location,Status,QualityCode"); | ||||||
|         foreach (var lot in mrbDMO.GetMRBLots(mrbNumber)) { |         foreach (var lot in mrbDMO.GetMRBLots(mrbNumber)) { | ||||||
|             sb.AppendLine(MRB_DMO.FormCSV( |             sb.AppendLine(MRB_DMO.FormCSV( | ||||||
| @ -671,4 +738,33 @@ public class MRBController : Controller { | |||||||
|         return File(b, "application/octet-stream", "mrb_lots_" + mrbNumber.ToString() + ".csv"); |         return File(b, "application/octet-stream", "mrb_lots_" + mrbNumber.ToString() + ".csv"); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  | #if !NET8 | ||||||
|  |  | ||||||
|  |     private System.Web.HttpSessionStateBase GetSession() => | ||||||
|  |         Session; | ||||||
|  |  | ||||||
|  |     private JsonResult GetJsonResult(object? data) => | ||||||
|  |         Json(data, JsonRequestBehavior.AllowGet); | ||||||
|  |  | ||||||
|  |     private bool IsAjaxRequest() => | ||||||
|  |         Request.IsAjaxRequest(); | ||||||
|  |  | ||||||
|  | #endif | ||||||
|  |  | ||||||
|  | #if NET8 | ||||||
|  |  | ||||||
|  |     private Microsoft.AspNetCore.Http.ISession GetSession() => | ||||||
|  |         HttpContext.Session; | ||||||
|  |  | ||||||
|  |     private JsonResult GetJsonResult(object? data) => | ||||||
|  |         Json(data); | ||||||
|  |  | ||||||
|  |     private bool IsAjaxRequest() => | ||||||
|  |         Request.Headers.TryGetValue("X-Requested-With", out Microsoft.Extensions.Primitives.StringValues strings) && strings[0] == "XMLHttpRequest"; | ||||||
|  |  | ||||||
|  | #endif | ||||||
|  |  | ||||||
|  |     private string GetUserIdentityName() => | ||||||
|  |         @User.Identity.Name; | ||||||
|  |  | ||||||
| } | } | ||||||
| @ -1,31 +1,75 @@ | |||||||
| using System; | #if !NET8 | ||||||
| using System.Collections.Generic; |  | ||||||
| using System.Linq; |  | ||||||
| using System.Web; | using System.Web; | ||||||
| using System.Web.Mvc; | using System.Web.Mvc; | ||||||
|  | #endif | ||||||
|  |  | ||||||
|  | #if NET8 | ||||||
|  | using Microsoft.AspNetCore.Mvc; | ||||||
|  | using Microsoft.AspNetCore.Authorization; | ||||||
|  | #endif | ||||||
|  |  | ||||||
| using Fab2ApprovalSystem.DMO; | using Fab2ApprovalSystem.DMO; | ||||||
| using Fab2ApprovalSystem.Misc; | using Fab2ApprovalSystem.Misc; | ||||||
|  |  | ||||||
|  | #if !NET8 | ||||||
|  | using System; | ||||||
|  | using System.Collections.Generic; | ||||||
|  | using System.Linq; | ||||||
| using Fab2ApprovalSystem.Models; | using Fab2ApprovalSystem.Models; | ||||||
|  | #endif | ||||||
|  |  | ||||||
| namespace Fab2ApprovalSystem.Controllers; | namespace Fab2ApprovalSystem.Controllers; | ||||||
|  |  | ||||||
| [Authorize] | [Authorize] | ||||||
|  | #if !NET8 | ||||||
| [SessionExpireFilter] | [SessionExpireFilter] | ||||||
|  | #endif | ||||||
|  | #if NET8 | ||||||
|  | [Route("[controller]")] | ||||||
|  | #endif | ||||||
| public class ManagerController : Controller { | public class ManagerController : Controller { | ||||||
|  |  | ||||||
|     UserAccountDMO userDMO = new UserAccountDMO(); |     private readonly UserAccountDMO userDMO = new(); | ||||||
|     AdminDMO adminDMO = new AdminDMO(); |     private readonly AdminDMO adminDMO = new(); | ||||||
|     TrainingDMO trainingDMO = new TrainingDMO(); |     private readonly TrainingDMO trainingDMO = new(); | ||||||
|     LotDispositionDMO ldDMO = new LotDispositionDMO(); |     private readonly LotDispositionDMO ldDMO = new(); | ||||||
|     private readonly AppSettings _AppSettings = GlobalVars.AppSettings; |  | ||||||
|  |  | ||||||
|     public ActionResult Index() { |     public ActionResult Index() { | ||||||
|         if ((bool)Session[GlobalVars.IS_MANAGER]) { |         if (GlobalVars.IsManager(GetSession())) { | ||||||
|             var model = userDMO.GetAllUsers(); |             var model = userDMO.GetAllUsers(); | ||||||
|             ViewBag.AllActiveUsers = userDMO.GetAllActiveUsers(); |             ViewBag.AllActiveUsers = userDMO.GetAllActiveUsers(); | ||||||
|             return View(model); |             return View(model); | ||||||
|         } else |         } else | ||||||
|             return Content("Not Autthorized"); |             return Content("Not Autthorized"); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  | #if !NET8 | ||||||
|  |  | ||||||
|  |     private System.Web.HttpSessionStateBase GetSession() => | ||||||
|  |         Session; | ||||||
|  |  | ||||||
|  |     private JsonResult GetJsonResult(object? data) => | ||||||
|  |         Json(data, JsonRequestBehavior.AllowGet); | ||||||
|  |  | ||||||
|  |     private bool IsAjaxRequest() => | ||||||
|  |         Request.IsAjaxRequest(); | ||||||
|  |  | ||||||
|  | #endif | ||||||
|  |  | ||||||
|  | #if NET8 | ||||||
|  |  | ||||||
|  |     private Microsoft.AspNetCore.Http.ISession GetSession() => | ||||||
|  |         HttpContext.Session; | ||||||
|  |  | ||||||
|  |     private JsonResult GetJsonResult(object? data) => | ||||||
|  |         Json(data); | ||||||
|  |  | ||||||
|  |     private bool IsAjaxRequest() => | ||||||
|  |         Request.Headers.TryGetValue("X-Requested-With", out Microsoft.Extensions.Primitives.StringValues strings) && strings[0] == "XMLHttpRequest"; | ||||||
|  |  | ||||||
|  | #endif | ||||||
|  |  | ||||||
|  |     private string GetUserIdentityName() => | ||||||
|  |         @User.Identity.Name; | ||||||
|  |  | ||||||
| } | } | ||||||
| @ -1,20 +1,62 @@ | |||||||
| using System; | #if !NET8 | ||||||
|  | using System; | ||||||
| using System.Web.Mvc; | using System.Web.Mvc; | ||||||
|  | #endif | ||||||
|  |  | ||||||
|  | #if NET8 | ||||||
|  | using Microsoft.AspNetCore.Mvc; | ||||||
|  | using Microsoft.AspNetCore.Authorization; | ||||||
|  | #endif | ||||||
|  |  | ||||||
| using Fab2ApprovalSystem.Misc; | using Fab2ApprovalSystem.Misc; | ||||||
|  |  | ||||||
| namespace Fab2ApprovalSystem.Controllers; | namespace Fab2ApprovalSystem.Controllers; | ||||||
|  |  | ||||||
| [Authorize] | [Authorize] | ||||||
|  | #if !NET8 | ||||||
| [SessionExpireFilter] | [SessionExpireFilter] | ||||||
|  | #endif | ||||||
|  | #if NET8 | ||||||
|  | [Route("[controller]")] | ||||||
|  | #endif | ||||||
| public class PCRBController : Controller { | public class PCRBController : Controller { | ||||||
|     public ActionResult Edit(int issueID) { |     public ActionResult Edit(int issueID) { | ||||||
|         string jwt = Session["JWT"].ToString(); |         string jwt = GlobalVars.GetJWT(GetSession()); | ||||||
|         string encodedJwt = System.Net.WebUtility.UrlEncode(jwt); |         string encodedJwt = System.Net.WebUtility.UrlEncode(jwt); | ||||||
|         string refreshToken = Session["RefreshToken"].ToString(); |         string refreshToken = GlobalVars.GetRefreshToken(GetSession()); | ||||||
|         string encodedRefreshToken = System.Net.WebUtility.UrlEncode(refreshToken); |         string encodedRefreshToken = System.Net.WebUtility.UrlEncode(refreshToken); | ||||||
|         string mrbUrl = $"{GlobalVars.AppSettings.WasmClientUrl}/redirect?jwt={encodedJwt}&refreshToken={encodedRefreshToken}&redirectPath=/pcrb/{issueID}"; |         string mrbUrl = $"{GlobalVars.AppSettings.WasmClientUrl}/redirect?jwt={encodedJwt}&refreshToken={encodedRefreshToken}&redirectPath=/pcrb/{issueID}"; | ||||||
|  |  | ||||||
|         return Redirect(mrbUrl); |         return Redirect(mrbUrl); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  | #if !NET8 | ||||||
|  |  | ||||||
|  |     private System.Web.HttpSessionStateBase GetSession() => | ||||||
|  |         Session; | ||||||
|  |  | ||||||
|  |     private JsonResult GetJsonResult(object? data) => | ||||||
|  |         Json(data, JsonRequestBehavior.AllowGet); | ||||||
|  |  | ||||||
|  |     private bool IsAjaxRequest() => | ||||||
|  |         Request.IsAjaxRequest(); | ||||||
|  |  | ||||||
|  | #endif | ||||||
|  |  | ||||||
|  | #if NET8 | ||||||
|  |  | ||||||
|  |     private Microsoft.AspNetCore.Http.ISession GetSession() => | ||||||
|  |         HttpContext.Session; | ||||||
|  |  | ||||||
|  |     private JsonResult GetJsonResult(object? data) => | ||||||
|  |         Json(data); | ||||||
|  |  | ||||||
|  |     private bool IsAjaxRequest() => | ||||||
|  |         Request.Headers.TryGetValue("X-Requested-With", out Microsoft.Extensions.Primitives.StringValues strings) && strings[0] == "XMLHttpRequest"; | ||||||
|  |  | ||||||
|  | #endif | ||||||
|  |  | ||||||
|  |     private string GetUserIdentityName() => | ||||||
|  |         @User.Identity.Name; | ||||||
|  |  | ||||||
| } | } | ||||||
| @ -1,29 +1,42 @@ | |||||||
| using System; | using System; | ||||||
| using System.Collections.Generic; | using System.Collections.Generic; | ||||||
| using System.Linq; | using System.Linq; | ||||||
|  | #if !NET8 | ||||||
| using System.Web; | using System.Web; | ||||||
| using System.Web.Mvc; | using System.Web.Mvc; | ||||||
|  | #endif | ||||||
|  |  | ||||||
|  | #if NET8 | ||||||
|  | using Microsoft.AspNetCore.Mvc; | ||||||
|  | using Microsoft.AspNetCore.Authorization; | ||||||
|  | #endif | ||||||
|  |  | ||||||
| using Fab2ApprovalSystem.DMO; | using Fab2ApprovalSystem.DMO; | ||||||
| using Fab2ApprovalSystem.Misc; | using Fab2ApprovalSystem.Misc; | ||||||
| using Fab2ApprovalSystem.Models; | using Fab2ApprovalSystem.Models; | ||||||
|  |  | ||||||
|  | #if !NET8 | ||||||
| using Kendo.Mvc.Extensions; | using Kendo.Mvc.Extensions; | ||||||
| using Kendo.Mvc.UI; | using Kendo.Mvc.UI; | ||||||
|  | #endif | ||||||
|  |  | ||||||
| namespace Fab2ApprovalSystem.Controllers; | namespace Fab2ApprovalSystem.Controllers; | ||||||
|  |  | ||||||
| [Authorize] | [Authorize] | ||||||
|  | #if !NET8 | ||||||
| [OutputCache(NoStore = true, Duration = 0, VaryByParam = "*")] | [OutputCache(NoStore = true, Duration = 0, VaryByParam = "*")] | ||||||
| [SessionExpireFilter] | [SessionExpireFilter] | ||||||
|  | #endif | ||||||
|  | #if NET8 | ||||||
|  | [Route("[controller]")] | ||||||
|  | #endif | ||||||
| public class PartsRequestController : Controller { | public class PartsRequestController : Controller { | ||||||
|  |  | ||||||
|  |     private const int WorkflowNumber = 1; | ||||||
|     const int WorkflowNumber = 1; |     private readonly PartsRequestDMO prDMO = new(); | ||||||
|     PartsRequestDMO prDMO = new PartsRequestDMO(); |     private readonly UserAccountDMO userDMO = new(); | ||||||
|     UserAccountDMO userDMO = new UserAccountDMO(); |     private readonly WorkflowDMO wfDMO = new(); | ||||||
|     WorkflowDMO wfDMO = new WorkflowDMO(); |     private readonly AppSettings? _AppSettings = GlobalVars.AppSettings; | ||||||
|     private readonly AppSettings _AppSettings = GlobalVars.AppSettings; |  | ||||||
|  |  | ||||||
|     public PartsRequestController() { |     public PartsRequestController() { | ||||||
|         ViewBag.ShowReAssignApprovers = false; |         ViewBag.ShowReAssignApprovers = false; | ||||||
| @ -42,13 +55,13 @@ public class PartsRequestController : Controller { | |||||||
|     } |     } | ||||||
|  |  | ||||||
|     protected void HandleException(int issueID, Exception ex, string additionalKeys = "") { |     protected void HandleException(int issueID, Exception ex, string additionalKeys = "") { | ||||||
|         var st = new System.Diagnostics.StackTrace(); |         System.Diagnostics.StackTrace st = new(); | ||||||
|         var sf = st.GetFrame(1); |         System.Diagnostics.StackFrame? sf = st.GetFrame(1); | ||||||
|  |  | ||||||
|         String controller = sf.GetMethod().DeclaringType.Name.Replace("Controller", ""); |         string controller = sf.GetMethod().DeclaringType.Name.Replace("Controller", ""); | ||||||
|         String method = sf.GetMethod().Name; |         string method = sf.GetMethod().Name; | ||||||
|  |  | ||||||
|         string detailedException = String.Format( |         string detailedException = string.Format( | ||||||
|             "Exception for issue # {0}\r\n" + |             "Exception for issue # {0}\r\n" + | ||||||
|             "Controller: {1}, Method: {2}, User: {3}, Keys: {4}\r\n" + |             "Controller: {1}, Method: {2}, User: {3}, Keys: {4}\r\n" + | ||||||
|             "=====\r\n", |             "=====\r\n", | ||||||
| @ -69,20 +82,19 @@ public class PartsRequestController : Controller { | |||||||
|  |  | ||||||
|         EventLogDMO.Add(new WinEventLog() { |         EventLogDMO.Add(new WinEventLog() { | ||||||
|             IssueID = issueID, |             IssueID = issueID, | ||||||
|             UserID = @User.Identity.Name, |             UserID = GetUserIdentityName(), | ||||||
|             DocumentType = controller, |             DocumentType = controller, | ||||||
|             OperationType = "Error", |             OperationType = "Error", | ||||||
|             Comments = detailedException |             Comments = detailedException | ||||||
|         }); |         }); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     // GET: PartsRequest |  | ||||||
|     public ActionResult Index() { |     public ActionResult Index() { | ||||||
|         return View(); |         return View(); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     public ActionResult Edit(int issueID) { |     public ActionResult Edit(int issueID) { | ||||||
|         var pr = new PartsRequest(); |         PartsRequest pr = new(); | ||||||
|         try { |         try { | ||||||
|             pr = prDMO.Get(issueID); |             pr = prDMO.Get(issueID); | ||||||
|  |  | ||||||
| @ -95,8 +107,8 @@ public class PartsRequestController : Controller { | |||||||
|             } else if (pr.CurrentStep >= 1) { |             } else if (pr.CurrentStep >= 1) { | ||||||
|                 return RedirectToAction("EditApproval", new { issueID = issueID }); |                 return RedirectToAction("EditApproval", new { issueID = issueID }); | ||||||
|             } else { |             } else { | ||||||
|                 if (pr.OriginatorID != (int)Session[GlobalVars.SESSION_USERID]) { |                 if (pr.OriginatorID != GlobalVars.GetUserId(GetSession())) { | ||||||
|                     if (Convert.ToBoolean(Session[GlobalVars.IS_ADMIN]) == false) { |                     if (!GlobalVars.IsAdmin(GetSession())) { | ||||||
|                         return RedirectToAction("ReadOnly", new { issueID = issueID }); |                         return RedirectToAction("ReadOnly", new { issueID = issueID }); | ||||||
|                     } |                     } | ||||||
|                 } |                 } | ||||||
| @ -110,6 +122,8 @@ public class PartsRequestController : Controller { | |||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  | #if !NET8 | ||||||
|  |  | ||||||
|     [HttpPost] |     [HttpPost] | ||||||
|     public ActionResult Edit(PartsRequest pr) { |     public ActionResult Edit(PartsRequest pr) { | ||||||
|         try { |         try { | ||||||
| @ -133,10 +147,12 @@ public class PartsRequestController : Controller { | |||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  | #endif | ||||||
|  |  | ||||||
|     public ActionResult EditApproval(int issueID) { |     public ActionResult EditApproval(int issueID) { | ||||||
|         var pr = new PartsRequest(); |         PartsRequest pr = new(); | ||||||
|         try { |         try { | ||||||
|             int myUserID = (int)Session[GlobalVars.SESSION_USERID]; |             int myUserID = GlobalVars.GetUserId(GetSession()); | ||||||
|  |  | ||||||
|             pr = prDMO.Get(issueID); |             pr = prDMO.Get(issueID); | ||||||
|  |  | ||||||
| @ -156,15 +172,15 @@ public class PartsRequestController : Controller { | |||||||
|  |  | ||||||
|             if (ViewBag.IsApprover == false) { |             if (ViewBag.IsApprover == false) { | ||||||
|                 if (pr.OriginatorID != myUserID) { |                 if (pr.OriginatorID != myUserID) { | ||||||
|                     if (Convert.ToBoolean(Session[GlobalVars.IS_ADMIN]) == false) { |                     if (!GlobalVars.IsAdmin(GetSession())) { | ||||||
|                         return RedirectToAction("ReadOnly", new { issueID = issueID }); |                         return RedirectToAction("ReadOnly", new { issueID = issueID }); | ||||||
|                     } |                     } | ||||||
|                 } |                 } | ||||||
|             } |             } | ||||||
|  |  | ||||||
|             ViewBag.IsAdmin = Convert.ToBoolean(Session[GlobalVars.IS_ADMIN]); |             ViewBag.IsAdmin = GlobalVars.IsAdmin(GetSession()); | ||||||
|             ViewBag.IsOriginator = (pr.OriginatorID == myUserID); |             ViewBag.IsOriginator = (pr.OriginatorID == myUserID); | ||||||
|             ViewBag.AllowReject = (wfStep != null ? (wfStep.AllowReject.HasValue && wfStep.AllowReject.Value) : false); |             ViewBag.AllowReject = (wfStep != null && (wfStep.AllowReject.HasValue && wfStep.AllowReject.Value)); | ||||||
|             ViewBag.ShowReAssignApprovers = ViewBag.IsAdmin || ViewBag.IsOriginator; |             ViewBag.ShowReAssignApprovers = ViewBag.IsAdmin || ViewBag.IsOriginator; | ||||||
|             ViewBag.ShowAddApprovers = ViewBag.IsAdmin || ViewBag.IsApprover || ViewBag.IsOriginator; |             ViewBag.ShowAddApprovers = ViewBag.IsAdmin || ViewBag.IsApprover || ViewBag.IsOriginator; | ||||||
|             ViewBag.UserList = userDMO.GetAllUsers(); |             ViewBag.UserList = userDMO.GetAllUsers(); | ||||||
| @ -176,9 +192,9 @@ public class PartsRequestController : Controller { | |||||||
|     } |     } | ||||||
|  |  | ||||||
|     public ActionResult ReadOnly(int issueID) { |     public ActionResult ReadOnly(int issueID) { | ||||||
|         var pr = new PartsRequest(); |         PartsRequest pr = new(); | ||||||
|         try { |         try { | ||||||
|             int myUserID = (int)Session[GlobalVars.SESSION_USERID]; |             int myUserID = GlobalVars.GetUserId(GetSession()); | ||||||
|  |  | ||||||
|             pr = prDMO.Get(issueID); |             pr = prDMO.Get(issueID); | ||||||
|  |  | ||||||
| @ -191,7 +207,7 @@ public class PartsRequestController : Controller { | |||||||
|                 return View("Error"); |                 return View("Error"); | ||||||
|             } |             } | ||||||
|  |  | ||||||
|             ViewBag.IsAdmin = Convert.ToBoolean(Session[GlobalVars.IS_ADMIN]); |             ViewBag.IsAdmin = GlobalVars.IsAdmin(GetSession()); | ||||||
|             ViewBag.IsOriginator = (pr.OriginatorID == myUserID); |             ViewBag.IsOriginator = (pr.OriginatorID == myUserID); | ||||||
|             ViewBag.UserList = userDMO.GetAllUsers(); |             ViewBag.UserList = userDMO.GetAllUsers(); | ||||||
|             return View(pr); |             return View(pr); | ||||||
| @ -202,11 +218,11 @@ public class PartsRequestController : Controller { | |||||||
|     } |     } | ||||||
|  |  | ||||||
|     public ActionResult Create() { |     public ActionResult Create() { | ||||||
|         var pr = new PartsRequest(); |         PartsRequest pr = new(); | ||||||
|         try { |         try { | ||||||
|             pr.OriginatorID = (int)Session[GlobalVars.SESSION_USERID]; |             pr.OriginatorID = GlobalVars.GetUserId(GetSession()); | ||||||
|  |  | ||||||
|             if (!CanCreatePartsRequest(pr.OriginatorID) && Convert.ToBoolean(Session[GlobalVars.CAN_CREATE_PARTS_REQUEST]) == false) |             if (!CanCreatePartsRequest(pr.OriginatorID) && !GlobalVars.GetCanCreatePartsRequest(GetSession())) | ||||||
|                 throw new Exception("User does not have permission to create Parts Request"); |                 throw new Exception("User does not have permission to create Parts Request"); | ||||||
|  |  | ||||||
|             prDMO.Insert(pr); |             prDMO.Insert(pr); | ||||||
| @ -218,8 +234,8 @@ public class PartsRequestController : Controller { | |||||||
|     } |     } | ||||||
|  |  | ||||||
|     public static bool CanCreatePartsRequest(int userID) { |     public static bool CanCreatePartsRequest(int userID) { | ||||||
|         var adminDMO = new AdminDMO(); |         AdminDMO adminDMO = new(); | ||||||
|         var role = adminDMO.GetSubRoles().Where(r => string.Equals(r.RoleName, "Parts Request", StringComparison.OrdinalIgnoreCase)).FirstOrDefault(); |         Role? role = adminDMO.GetSubRoles().FirstOrDefault(r => string.Equals(r.RoleName, "Parts Request", StringComparison.OrdinalIgnoreCase)); | ||||||
|         if (role != null) { |         if (role != null) { | ||||||
|             var subrole = role.SubRoles.FirstOrDefault(sr => string.Equals(sr.SubRoleCategoryItem, "Originator", StringComparison.OrdinalIgnoreCase)); |             var subrole = role.SubRoles.FirstOrDefault(sr => string.Equals(sr.SubRoleCategoryItem, "Originator", StringComparison.OrdinalIgnoreCase)); | ||||||
|             if (subrole != null) { |             if (subrole != null) { | ||||||
| @ -232,9 +248,11 @@ public class PartsRequestController : Controller { | |||||||
|         return false; |         return false; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  | #if !NET8 | ||||||
|  |  | ||||||
|     public ActionResult Attachment_Read([DataSourceRequest] DataSourceRequest request, int prNumber) { |     public ActionResult Attachment_Read([DataSourceRequest] DataSourceRequest request, int prNumber) { | ||||||
|         try { |         try { | ||||||
|             return Json(prDMO.GetAttachments(prNumber).ToDataSourceResult(request), JsonRequestBehavior.AllowGet); |             return GetJsonResult(prDMO.GetAttachments(prNumber).ToDataSourceResult(request)); | ||||||
|         } catch (Exception ex) { |         } catch (Exception ex) { | ||||||
|             return HandleAPIException(prNumber, ex); |             return HandleAPIException(prNumber, ex); | ||||||
|         } |         } | ||||||
| @ -244,7 +262,7 @@ public class PartsRequestController : Controller { | |||||||
|     public ActionResult AttachSave(IEnumerable<HttpPostedFileBase> files, int prNumber) { |     public ActionResult AttachSave(IEnumerable<HttpPostedFileBase> files, int prNumber) { | ||||||
|         // The Name of the Upload component is "files" |         // The Name of the Upload component is "files" | ||||||
|         if (files != null) { |         if (files != null) { | ||||||
|             int userId = (int)Session[GlobalVars.SESSION_USERID]; |             int userId = GlobalVars.GetUserId(GetSession()); | ||||||
|             foreach (var file in files) { |             foreach (var file in files) { | ||||||
|                 PartsRequestHelper.AttachSave(_AppSettings, prDMO, prNumber, userId, file.FileName, file.InputStream); |                 PartsRequestHelper.AttachSave(_AppSettings, prDMO, prNumber, userId, file.FileName, file.InputStream); | ||||||
|             } |             } | ||||||
| @ -253,6 +271,8 @@ public class PartsRequestController : Controller { | |||||||
|         return Content(""); |         return Content(""); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  | #endif | ||||||
|  |  | ||||||
|     public FileResult DownloadFile(string attachmentID, string prNumber) { |     public FileResult DownloadFile(string attachmentID, string prNumber) { | ||||||
|         string fileName = prDMO.GetFileName(attachmentID); |         string fileName = prDMO.GetFileName(attachmentID); | ||||||
|  |  | ||||||
| @ -289,17 +309,19 @@ public class PartsRequestController : Controller { | |||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  | #if !NET8 | ||||||
|  |  | ||||||
|     [HttpPost] |     [HttpPost] | ||||||
|     public ActionResult Submit(int prNumber) { |     public ActionResult Submit(int prNumber) { | ||||||
|         try { |         try { | ||||||
|             int myUserID = (int)Session[GlobalVars.SESSION_USERID]; |             int myUserID = GlobalVars.GetUserId(GetSession()); | ||||||
|  |  | ||||||
|             var pr = prDMO.Get(prNumber); |             var pr = prDMO.Get(prNumber); | ||||||
|  |  | ||||||
|             if (pr == null) |             if (pr == null) | ||||||
|                 return new HttpStatusCodeResult(System.Net.HttpStatusCode.BadRequest, "Document does not exist"); |                 return new HttpStatusCodeResult(System.Net.HttpStatusCode.BadRequest, "Document does not exist"); | ||||||
|  |  | ||||||
|             if (String.IsNullOrWhiteSpace(pr.Title)) |             if (string.IsNullOrWhiteSpace(pr.Title)) | ||||||
|                 return HandleValidationError("Title is required"); |                 return HandleValidationError("Title is required"); | ||||||
|             if (pr.RequestorID <= 0) |             if (pr.RequestorID <= 0) | ||||||
|                 return HandleValidationError("Requestor is required"); |                 return HandleValidationError("Requestor is required"); | ||||||
| @ -313,9 +335,9 @@ public class PartsRequestController : Controller { | |||||||
|             if (approvers.Count(a => a.Step.HasValue && a.Step.Value == 1 && a.UserID == myUserID) > 0) { |             if (approvers.Count(a => a.Step.HasValue && a.Step.Value == 1 && a.UserID == myUserID) > 0) { | ||||||
|                 // Auto-Approve if the user is an approver for workflow step 1 |                 // Auto-Approve if the user is an approver for workflow step 1 | ||||||
|                 var c = Approve(prNumber, 1, "Auto-Approve"); |                 var c = Approve(prNumber, 1, "Auto-Approve"); | ||||||
|                 if (c != null && c is ContentResult) { |                 if (c != null && c is ContentResult contentResult) { | ||||||
|                     var result = ((ContentResult)c).Content; |                     var result = contentResult.Content; | ||||||
|                     if (!String.Equals(result, "OK")) |                     if (!string.Equals(result, "OK")) | ||||||
|                         throw new Exception(result); |                         throw new Exception(result); | ||||||
|                 } |                 } | ||||||
|                 if (c != null && c is JsonResult) |                 if (c != null && c is JsonResult) | ||||||
| @ -325,7 +347,7 @@ public class PartsRequestController : Controller { | |||||||
|                 NotifyApprovers(prNumber, 1); |                 NotifyApprovers(prNumber, 1); | ||||||
|             } |             } | ||||||
|  |  | ||||||
|             if (Request.IsAjaxRequest()) { |             if (IsAjaxRequest()) { | ||||||
|                 return Content("Redirect"); |                 return Content("Redirect"); | ||||||
|             } else { |             } else { | ||||||
|                 return Content("Invalid"); |                 return Content("Invalid"); | ||||||
| @ -348,16 +370,18 @@ public class PartsRequestController : Controller { | |||||||
|         try { |         try { | ||||||
|             UserAccountDMO userDMO = new UserAccountDMO(); |             UserAccountDMO userDMO = new UserAccountDMO(); | ||||||
|             IEnumerable<LoginModel> userlist = userDMO.GetAllUsers(); |             IEnumerable<LoginModel> userlist = userDMO.GetAllUsers(); | ||||||
|             return Json(userlist, JsonRequestBehavior.AllowGet); |             return GetJsonResult(userlist); | ||||||
|         } catch (Exception e) { |         } catch (Exception e) { | ||||||
|             return HandleAPIException(0, e); |             return HandleAPIException(0, e); | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  | #endif | ||||||
|  |  | ||||||
|     [HttpPost] |     [HttpPost] | ||||||
|     public ActionResult ReAssignApproval(int issueID, int fromUserID, int userIDs, byte step) { |     public ActionResult ReAssignApproval(int issueID, int fromUserID, int userIDs, byte step) { | ||||||
|         try { |         try { | ||||||
|             String email = wfDMO.ReAssignApproval( |             string email = wfDMO.ReAssignApproval( | ||||||
|                 issueID, fromUserID, userIDs, step, (int)GlobalVars.DocumentType.PartsRequest); |                 issueID, fromUserID, userIDs, step, (int)GlobalVars.DocumentType.PartsRequest); | ||||||
|  |  | ||||||
|             NotifyReAssignment(issueID, email); |             NotifyReAssignment(issueID, email); | ||||||
| @ -368,12 +392,14 @@ public class PartsRequestController : Controller { | |||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  | #if !NET8 | ||||||
|  |  | ||||||
|     [HttpPost] |     [HttpPost] | ||||||
|     public ActionResult Approve(int prNumber, byte currentStep, string comments) { |     public ActionResult Approve(int prNumber, byte currentStep, string comments) { | ||||||
|         try { |         try { | ||||||
|             bool lastStep = false; |             bool lastStep = false; | ||||||
|             bool lastApproverInCurrentStep = false; |             bool lastApproverInCurrentStep = false; | ||||||
|             int myUserID = (int)Session[GlobalVars.SESSION_USERID]; |             int myUserID = GlobalVars.GetUserId(GetSession()); | ||||||
|  |  | ||||||
|             var pr = prDMO.Get(prNumber); |             var pr = prDMO.Get(prNumber); | ||||||
|  |  | ||||||
| @ -387,7 +413,7 @@ public class PartsRequestController : Controller { | |||||||
|                     currentStep, |                     currentStep, | ||||||
|                     comments, |                     comments, | ||||||
|                     out lastStep, |                     out lastStep, | ||||||
|                     (int)Session[GlobalVars.SESSION_USERID], |                     GlobalVars.GetUserId(GetSession()), | ||||||
|                     (int)GlobalVars.DocumentType.PartsRequest, |                     (int)GlobalVars.DocumentType.PartsRequest, | ||||||
|                     WorkflowNumber); |                     WorkflowNumber); | ||||||
|  |  | ||||||
| @ -417,22 +443,24 @@ public class PartsRequestController : Controller { | |||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  | #endif | ||||||
|  |  | ||||||
|     protected void NotifyReAssignment(int prNumber, string email) { |     protected void NotifyReAssignment(int prNumber, string email) { | ||||||
|         var pr = prDMO.Get(prNumber); |         var pr = prDMO.Get(prNumber); | ||||||
|  |  | ||||||
|         if (pr == null) |         if (pr == null) | ||||||
|             return; |             return; | ||||||
|  |  | ||||||
|         string username = Session[GlobalVars.SESSION_USERNAME].ToString(); |         string username = GlobalVars.GetUserName(GetSession()); | ||||||
|         PartsRequestHelper.SendEmailNotification(_AppSettings, username, |         PartsRequestHelper.SendEmailNotification(_AppSettings, username, | ||||||
|             subject: String.Format("Parts Request Re-Assignment notice for # {0} - {1}", pr.PRNumber, pr.Title), |             subject: string.Format("Parts Request Re-Assignment notice for # {0} - {1}", pr.PRNumber, pr.Title), | ||||||
|             prNumber: prNumber, |             prNumber: prNumber, | ||||||
|             toEmail: email, |             toEmail: email, | ||||||
|             emailTemplate: "PRReAssigned.txt"); |             emailTemplate: "PRReAssigned.txt"); | ||||||
|  |  | ||||||
|         EventLogDMO.Add(new WinEventLog() { |         EventLogDMO.Add(new WinEventLog() { | ||||||
|             IssueID = prNumber, |             IssueID = prNumber, | ||||||
|             UserID = @User.Identity.Name, |             UserID = GetUserIdentityName(), | ||||||
|             DocumentType = "PR", |             DocumentType = "PR", | ||||||
|             OperationType = "Email", |             OperationType = "Email", | ||||||
|             Comments = "ReAssigned Approver: " + email |             Comments = "ReAssigned Approver: " + email | ||||||
| @ -446,17 +474,17 @@ public class PartsRequestController : Controller { | |||||||
|             return; |             return; | ||||||
|  |  | ||||||
|         var u = userDMO.GetUserByID(pr.RequestorID); |         var u = userDMO.GetUserByID(pr.RequestorID); | ||||||
|         if ((u != null) && (!String.IsNullOrWhiteSpace(u.Email))) { |         if ((u != null) && (!string.IsNullOrWhiteSpace(u.Email))) { | ||||||
|             string username = Session[GlobalVars.SESSION_USERNAME].ToString(); |             string username = GlobalVars.GetUserName(GetSession()); | ||||||
|             PartsRequestHelper.SendEmailNotification(_AppSettings, username, |             PartsRequestHelper.SendEmailNotification(_AppSettings, username, | ||||||
|                   subject: String.Format("Parts Request Completion notice for # {0} - {1}", pr.PRNumber, pr.Title), |                   subject: string.Format("Parts Request Completion notice for # {0} - {1}", pr.PRNumber, pr.Title), | ||||||
|                   prNumber: prNumber, |                   prNumber: prNumber, | ||||||
|                   toEmail: u.Email, |                   toEmail: u.Email, | ||||||
|                   emailTemplate: "PRCompleted.txt"); |                   emailTemplate: "PRCompleted.txt"); | ||||||
|  |  | ||||||
|             EventLogDMO.Add(new WinEventLog() { |             EventLogDMO.Add(new WinEventLog() { | ||||||
|                 IssueID = prNumber, |                 IssueID = prNumber, | ||||||
|                 UserID = @User.Identity.Name, |                 UserID = GetUserIdentityName(), | ||||||
|                 DocumentType = "PR", |                 DocumentType = "PR", | ||||||
|                 OperationType = "Email", |                 OperationType = "Email", | ||||||
|                 Comments = "Completed: " + u.Email |                 Comments = "Completed: " + u.Email | ||||||
| @ -471,17 +499,17 @@ public class PartsRequestController : Controller { | |||||||
|             return; |             return; | ||||||
|  |  | ||||||
|         var u = userDMO.GetUserByID(pr.OriginatorID); |         var u = userDMO.GetUserByID(pr.OriginatorID); | ||||||
|         if ((u != null) && (!String.IsNullOrWhiteSpace(u.Email))) { |         if ((u != null) && (!string.IsNullOrWhiteSpace(u.Email))) { | ||||||
|             string username = Session[GlobalVars.SESSION_USERNAME].ToString(); |             string username = GlobalVars.GetUserName(GetSession()); | ||||||
|             PartsRequestHelper.SendEmailNotification(_AppSettings, username, |             PartsRequestHelper.SendEmailNotification(_AppSettings, username, | ||||||
|                   subject: String.Format("Parts Request Rejection notice for # {0} - {1}", pr.PRNumber, pr.Title), |                   subject: string.Format("Parts Request Rejection notice for # {0} - {1}", pr.PRNumber, pr.Title), | ||||||
|                   prNumber: prNumber, |                   prNumber: prNumber, | ||||||
|                   toEmail: u.Email, |                   toEmail: u.Email, | ||||||
|                   emailTemplate: "PRReject.txt"); |                   emailTemplate: "PRReject.txt"); | ||||||
|  |  | ||||||
|             EventLogDMO.Add(new WinEventLog() { |             EventLogDMO.Add(new WinEventLog() { | ||||||
|                 IssueID = prNumber, |                 IssueID = prNumber, | ||||||
|                 UserID = @User.Identity.Name, |                 UserID = GetUserIdentityName(), | ||||||
|                 DocumentType = "PR", |                 DocumentType = "PR", | ||||||
|                 OperationType = "Email", |                 OperationType = "Email", | ||||||
|                 Comments = "Rejected: " + u.Email |                 Comments = "Rejected: " + u.Email | ||||||
| @ -503,9 +531,9 @@ public class PartsRequestController : Controller { | |||||||
|  |  | ||||||
|             foreach (string email in emailList) { |             foreach (string email in emailList) { | ||||||
|                 try { |                 try { | ||||||
|                     string username = Session[GlobalVars.SESSION_USERNAME].ToString(); |                     string username = GlobalVars.GetUserName(GetSession()); | ||||||
|                     PartsRequestHelper.SendEmailNotification(_AppSettings, username, |                     PartsRequestHelper.SendEmailNotification(_AppSettings, username, | ||||||
|                                     subject: String.Format("Parts Request Assignment notice for # {0} - {1}", pr.PRNumber, pr.Title), |                                     subject: string.Format("Parts Request Assignment notice for # {0} - {1}", pr.PRNumber, pr.Title), | ||||||
|                                     prNumber: prNumber, |                                     prNumber: prNumber, | ||||||
|                                     toEmail: email, |                                     toEmail: email, | ||||||
|                                     emailTemplate: "PRAssigned.txt"); |                                     emailTemplate: "PRAssigned.txt"); | ||||||
| @ -519,7 +547,7 @@ public class PartsRequestController : Controller { | |||||||
|             try { |             try { | ||||||
|                 EventLogDMO.Add(new WinEventLog() { |                 EventLogDMO.Add(new WinEventLog() { | ||||||
|                     IssueID = prNumber, |                     IssueID = prNumber, | ||||||
|                     UserID = @User.Identity.Name, |                     UserID = GetUserIdentityName(), | ||||||
|                     DocumentType = "PR", |                     DocumentType = "PR", | ||||||
|                     OperationType = "Email", |                     OperationType = "Email", | ||||||
|                     Comments = "Approvers for Step " + step.ToString() + ":" + emailSentList |                     Comments = "Approvers for Step " + step.ToString() + ":" + emailSentList | ||||||
| @ -533,8 +561,8 @@ public class PartsRequestController : Controller { | |||||||
|     [HttpPost] |     [HttpPost] | ||||||
|     public ActionResult Reject(int prNumber, byte currentStep, string comments) { |     public ActionResult Reject(int prNumber, byte currentStep, string comments) { | ||||||
|         try { |         try { | ||||||
|             if (Session[GlobalVars.SESSION_USERID] != null) { |             if (GlobalVars.IsUserIdValueNotNull(GetSession())) { | ||||||
|                 wfDMO.Reject(prNumber, currentStep, comments, (int)Session[GlobalVars.SESSION_USERID], (int)GlobalVars.DocumentType.PartsRequest); |                 wfDMO.Reject(prNumber, currentStep, comments, GlobalVars.GetUserId(GetSession()), (int)GlobalVars.DocumentType.PartsRequest); | ||||||
|                 NotifyRejection(prNumber); |                 NotifyRejection(prNumber); | ||||||
|             } else { |             } else { | ||||||
|                 Response.Redirect("~/Account/Login"); |                 Response.Redirect("~/Account/Login"); | ||||||
| @ -546,26 +574,30 @@ public class PartsRequestController : Controller { | |||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  | #if !NET8 | ||||||
|  |  | ||||||
|     public ActionResult ApprovalLogHistory_Read([DataSourceRequest] DataSourceRequest request, int prNumber) { |     public ActionResult ApprovalLogHistory_Read([DataSourceRequest] DataSourceRequest request, int prNumber) { | ||||||
|         return Json(prDMO.GetApprovalLogHistory(prNumber).ToDataSourceResult(request), JsonRequestBehavior.AllowGet); |         return GetJsonResult(prDMO.GetApprovalLogHistory(prNumber).ToDataSourceResult(request)); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  | #endif | ||||||
|  |  | ||||||
|     protected void NotifyAssignment(int prNumber, string email) { |     protected void NotifyAssignment(int prNumber, string email) { | ||||||
|         var pr = prDMO.Get(prNumber); |         var pr = prDMO.Get(prNumber); | ||||||
|  |  | ||||||
|         if (pr == null) |         if (pr == null) | ||||||
|             return; |             return; | ||||||
|  |  | ||||||
|         string username = Session[GlobalVars.SESSION_USERNAME].ToString(); |         string username = GlobalVars.GetUserName(GetSession()); | ||||||
|         PartsRequestHelper.SendEmailNotification(_AppSettings, username, |         PartsRequestHelper.SendEmailNotification(_AppSettings, username, | ||||||
|             subject: String.Format("Parts Request Assignment notice for # {0} - {1}", pr.PRNumber, pr.Title), |             subject: string.Format("Parts Request Assignment notice for # {0} - {1}", pr.PRNumber, pr.Title), | ||||||
|             prNumber: prNumber, |             prNumber: prNumber, | ||||||
|             toEmail: email, |             toEmail: email, | ||||||
|             emailTemplate: "PRAssigned.txt"); |             emailTemplate: "PRAssigned.txt"); | ||||||
|  |  | ||||||
|         EventLogDMO.Add(new WinEventLog() { |         EventLogDMO.Add(new WinEventLog() { | ||||||
|             IssueID = prNumber, |             IssueID = prNumber, | ||||||
|             UserID = @User.Identity.Name, |             UserID = GetUserIdentityName(), | ||||||
|             DocumentType = "PR", |             DocumentType = "PR", | ||||||
|             OperationType = "Email", |             OperationType = "Email", | ||||||
|             Comments = "Assigned Approver: " + email |             Comments = "Assigned Approver: " + email | ||||||
| @ -594,7 +626,7 @@ public class PartsRequestController : Controller { | |||||||
|         try { |         try { | ||||||
|             EventLogDMO.Add(new WinEventLog() { |             EventLogDMO.Add(new WinEventLog() { | ||||||
|                 IssueID = issueID, |                 IssueID = issueID, | ||||||
|                 UserID = @User.Identity.Name, |                 UserID = GetUserIdentityName(), | ||||||
|                 DocumentType = "PR", |                 DocumentType = "PR", | ||||||
|                 OperationType = "Email", |                 OperationType = "Email", | ||||||
|                 Comments = "Additional Approver: " + emailSentList |                 Comments = "Additional Approver: " + emailSentList | ||||||
| @ -602,4 +634,33 @@ public class PartsRequestController : Controller { | |||||||
|         } catch { } |         } catch { } | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  | #if !NET8 | ||||||
|  |  | ||||||
|  |     private System.Web.HttpSessionStateBase GetSession() => | ||||||
|  |         Session; | ||||||
|  |  | ||||||
|  |     private JsonResult GetJsonResult(object? data) => | ||||||
|  |         Json(data, JsonRequestBehavior.AllowGet); | ||||||
|  |  | ||||||
|  |     private bool IsAjaxRequest() => | ||||||
|  |         Request.IsAjaxRequest(); | ||||||
|  |  | ||||||
|  | #endif | ||||||
|  |  | ||||||
|  | #if NET8 | ||||||
|  |  | ||||||
|  |     private Microsoft.AspNetCore.Http.ISession GetSession() => | ||||||
|  |         HttpContext.Session; | ||||||
|  |  | ||||||
|  |     private JsonResult GetJsonResult(object? data) => | ||||||
|  |         Json(data); | ||||||
|  |  | ||||||
|  |     private bool IsAjaxRequest() => | ||||||
|  |         Request.Headers.TryGetValue("X-Requested-With", out Microsoft.Extensions.Primitives.StringValues strings) && strings[0] == "XMLHttpRequest"; | ||||||
|  |  | ||||||
|  | #endif | ||||||
|  |  | ||||||
|  |     private string GetUserIdentityName() => | ||||||
|  |         @User.Identity.Name; | ||||||
|  |  | ||||||
| } | } | ||||||
| @ -1,43 +1,60 @@ | |||||||
| using System; | using System; | ||||||
| using System.Collections.Generic; |  | ||||||
| using System.Linq; | using System.Linq; | ||||||
|  | #if !NET8 | ||||||
| using System.Web; | using System.Web; | ||||||
| using System.Web.Mvc; | using System.Web.Mvc; | ||||||
|  | #endif | ||||||
|  |  | ||||||
|  | #if NET8 | ||||||
|  | using Microsoft.AspNetCore.Mvc; | ||||||
|  | using Microsoft.AspNetCore.Authorization; | ||||||
|  | #endif | ||||||
|  |  | ||||||
| using Fab2ApprovalSystem.DMO; | using Fab2ApprovalSystem.DMO; | ||||||
| using Fab2ApprovalSystem.Misc; | using Fab2ApprovalSystem.Misc; | ||||||
| using Fab2ApprovalSystem.Models; | using Fab2ApprovalSystem.Models; | ||||||
|  |  | ||||||
|  | #if !NET8 | ||||||
|  | using System.Collections.Generic; | ||||||
| using Fab2ApprovalSystem.ViewModels; | using Fab2ApprovalSystem.ViewModels; | ||||||
|  | #endif | ||||||
|  |  | ||||||
| namespace Fab2ApprovalSystem.Controllers; | namespace Fab2ApprovalSystem.Controllers; | ||||||
|  |  | ||||||
| [Authorize] | [Authorize] | ||||||
|  | #if !NET8 | ||||||
| [SessionExpireFilter] | [SessionExpireFilter] | ||||||
|  | #endif | ||||||
|  | #if NET8 | ||||||
|  | [Route("[controller]")] | ||||||
|  | #endif | ||||||
| public class ReportsController : Controller { | public class ReportsController : Controller { | ||||||
|  |  | ||||||
|     public const String specialNullString = "~NULL~"; |     public const string specialNullString = "~NULL~"; | ||||||
|     private readonly AppSettings _AppSettings = GlobalVars.AppSettings; |     private readonly AppSettings? _AppSettings = GlobalVars.AppSettings; | ||||||
|  |  | ||||||
|     // GET: Export |     // GET: Export | ||||||
|     public ActionResult Index() { |     public ActionResult Index() { | ||||||
|         UserAccountDMO userDMO = new UserAccountDMO(); |         UserAccountDMO userDMO = new(); | ||||||
|         ViewBag.HasITARAccess = userDMO.GetITARAccess((int)Session[GlobalVars.SESSION_USERID]); |         ViewBag.HasITARAccess = userDMO.GetITARAccess(GlobalVars.GetUserId(GetSession())); | ||||||
|  |  | ||||||
|         return View(); |         return View(); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     public ActionResult Report(String id, String docType = "") { | #if !NET8 | ||||||
|         if (String.IsNullOrEmpty(id)) |  | ||||||
|  |     public ActionResult Report(string id, string docType = "") { | ||||||
|  |         if (string.IsNullOrEmpty(id)) | ||||||
|             return RedirectToAction("Index"); |             return RedirectToAction("Index"); | ||||||
|  |  | ||||||
|         UserAccountDMO userDMO = new UserAccountDMO(); |         UserAccountDMO userDMO = new(); | ||||||
|         if (!userDMO.GetITARAccess((int)Session[GlobalVars.SESSION_USERID])) |         if (!userDMO.GetITARAccess(GlobalVars.GetUserId(GetSession()))) | ||||||
|             return View("UnAuthorizedAccess"); |             return View("UnAuthorizedAccess"); | ||||||
|  |  | ||||||
|         var m = new ReportViewModel<System.Web.Mvc.SelectListItem>(); |         ReportViewModel<SelectListItem> m = new(); | ||||||
|         var reports = GetReportList(docType); |         var reports = GetReportList(docType); | ||||||
|         foreach (var report in reports) { |         foreach (var report in reports) { | ||||||
|             if (String.Equals(report.ReportID, id, StringComparison.OrdinalIgnoreCase)) { |             if (string.Equals(report.ReportID, id, StringComparison.OrdinalIgnoreCase)) { | ||||||
|                 m.ReportID = report.ReportID; |                 m.ReportID = report.ReportID; | ||||||
|                 m.ReportName = report.Name; |                 m.ReportName = report.Name; | ||||||
|                 m.Description = report.Description; |                 m.Description = report.Description; | ||||||
| @ -46,8 +63,8 @@ public class ReportsController : Controller { | |||||||
|                 var c = SetupSSRSHelperClient(); |                 var c = SetupSSRSHelperClient(); | ||||||
|  |  | ||||||
|                 m.Parameters = c.GetReportParameters(report.FullPath).Select(parm => { |                 m.Parameters = c.GetReportParameters(report.FullPath).Select(parm => { | ||||||
|                     var r = new ReportParameterViewModel<System.Web.Mvc.SelectListItem>(); |                     ReportParameterViewModel<SelectListItem> r = new(); | ||||||
|                     r.Visible = (parm.PromptUser.HasValue == false || parm.PromptUser == true) && !String.IsNullOrEmpty(parm.Prompt); |                     r.Visible = (parm.PromptUser.HasValue == false || parm.PromptUser == true) && !string.IsNullOrEmpty(parm.Prompt); | ||||||
|                     r.Prompt = parm.Prompt; |                     r.Prompt = parm.Prompt; | ||||||
|                     r.Name = parm.Name; |                     r.Name = parm.Name; | ||||||
|                     r.HtmlID = "parm_" + parm.Name; |                     r.HtmlID = "parm_" + parm.Name; | ||||||
| @ -87,7 +104,7 @@ public class ReportsController : Controller { | |||||||
|  |  | ||||||
|     public SSRSHelper.SSRSClient SetupSSRSHelperClient() { |     public SSRSHelper.SSRSClient SetupSSRSHelperClient() { | ||||||
|         var useCfgForBindings = false; |         var useCfgForBindings = false; | ||||||
|         if (String.Equals(_AppSettings.SSRSBindingsByConfiguration, "true", StringComparison.OrdinalIgnoreCase)) |         if (string.Equals(_AppSettings.SSRSBindingsByConfiguration, "true", StringComparison.OrdinalIgnoreCase)) | ||||||
|             useCfgForBindings = true; |             useCfgForBindings = true; | ||||||
|  |  | ||||||
|         var c = new SSRSHelper.SSRSClient( |         var c = new SSRSHelper.SSRSClient( | ||||||
| @ -112,27 +129,26 @@ public class ReportsController : Controller { | |||||||
|         return c.ListReports(folderName); |         return c.ListReports(folderName); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     public ActionResult GetReports(String docType) { |     public ActionResult GetReports(string docType) { | ||||||
|         var reports = GetReportList(docType); |         var reports = GetReportList(docType); | ||||||
|  |  | ||||||
|         return Json(new { |         return GetJsonResult(new { | ||||||
|             Data = |             Data = | ||||||
|                 reports.Select(r => new ReportViewModel<System.Web.Mvc.SelectListItem>() { |                 reports.Select(r => new ReportViewModel<SelectListItem>() { | ||||||
|                     ReportName = r.Name ?? "", |                     ReportName = r.Name ?? "", | ||||||
|                     Description = r.Description ?? "", |                     Description = r.Description ?? "", | ||||||
|                     ReportID = r.ReportID ?? "", |                     ReportID = r.ReportID ?? "", | ||||||
|                     DocType = docType |                     DocType = docType | ||||||
|                 }) |                 }) | ||||||
|         }, |         }); | ||||||
|             JsonRequestBehavior.AllowGet); |  | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     [HttpPost] |     [HttpPost] | ||||||
|     public ActionResult ExportReport(String DocType, String ReportID) { |     public ActionResult ExportReport(string DocType, string ReportID) { | ||||||
|         var c = SetupSSRSHelperClient(); |         var c = SetupSSRSHelperClient(); | ||||||
|         var reports = GetReportList(DocType); |         var reports = GetReportList(DocType); | ||||||
|  |  | ||||||
|         var report = reports.Where(r => String.Equals(r.ReportID, ReportID, StringComparison.OrdinalIgnoreCase)).FirstOrDefault(); |         var report = reports.Where(r => string.Equals(r.ReportID, ReportID, StringComparison.OrdinalIgnoreCase)).FirstOrDefault(); | ||||||
|         if (report == null) |         if (report == null) | ||||||
|             return Content("Invalid report ID"); |             return Content("Invalid report ID"); | ||||||
|  |  | ||||||
| @ -140,16 +156,16 @@ public class ReportsController : Controller { | |||||||
|  |  | ||||||
|         var parms = new SSRSHelper.ReportParameterCollection(); |         var parms = new SSRSHelper.ReportParameterCollection(); | ||||||
|         parms.Add("DocType", DocType); |         parms.Add("DocType", DocType); | ||||||
|         parms.Add("UserID", Convert.ToString(Session[GlobalVars.SESSION_USERID])); |         parms.Add("UserID", GlobalVars.GetUserIdValue(GetSession())); | ||||||
|         parms.Add("BaseURL", GlobalVars.hostURL); |         parms.Add("BaseURL", GlobalVars.hostURL); | ||||||
|  |  | ||||||
|         foreach (var rp in reportParms) { |         foreach (var rp in reportParms) { | ||||||
|             if (rp.MultiValue.HasValue && rp.MultiValue.Value) { |             if (rp.MultiValue.HasValue && rp.MultiValue.Value) { | ||||||
|                 foreach (String v in Request.Params.GetValues("parm_" + rp.Name)) { |                 foreach (string v in Request.Params.GetValues("parm_" + rp.Name)) { | ||||||
|                     parms.Add(rp.Name, v); |                     parms.Add(rp.Name, v); | ||||||
|                 } |                 } | ||||||
|             } else { |             } else { | ||||||
|                 String value = null; |                 string value = null; | ||||||
|  |  | ||||||
|                 if (Request.Params.AllKeys.Contains("parm_" + rp.Name)) |                 if (Request.Params.AllKeys.Contains("parm_" + rp.Name)) | ||||||
|                     value = Request.Params.GetValues("parm_" + rp.Name).FirstOrDefault(); |                     value = Request.Params.GetValues("parm_" + rp.Name).FirstOrDefault(); | ||||||
| @ -173,7 +189,7 @@ public class ReportsController : Controller { | |||||||
|             } |             } | ||||||
|         } |         } | ||||||
|  |  | ||||||
|         var b = c.ExportReport(report.FullPath, @User.Identity.Name, parms, "EXCELOPENXML"); |         var b = c.ExportReport(report.FullPath, GetUserIdentityName(), parms, "EXCELOPENXML"); | ||||||
|         try { |         try { | ||||||
|             var b2 = c.FreezeExcelHeaders(b); |             var b2 = c.FreezeExcelHeaders(b); | ||||||
|             return File(b2, "application/octet-stream", MakeFilename(report.Name) + ".xlsx"); |             return File(b2, "application/octet-stream", MakeFilename(report.Name) + ".xlsx"); | ||||||
| @ -182,8 +198,10 @@ public class ReportsController : Controller { | |||||||
|         return File(b, "application/octet-stream", MakeFilename(report.Name) + ".xlsx"); |         return File(b, "application/octet-stream", MakeFilename(report.Name) + ".xlsx"); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     protected String MakeFilename(String reportName) { | #endif | ||||||
|         String r = ""; |  | ||||||
|  |     protected string MakeFilename(string reportName) { | ||||||
|  |         string r = ""; | ||||||
|         char[] invalidChars = System.IO.Path.GetInvalidFileNameChars(); |         char[] invalidChars = System.IO.Path.GetInvalidFileNameChars(); | ||||||
|         foreach (char c in reportName) { |         foreach (char c in reportName) { | ||||||
|             if (invalidChars.Contains(c)) |             if (invalidChars.Contains(c)) | ||||||
| @ -194,4 +212,33 @@ public class ReportsController : Controller { | |||||||
|         return r; |         return r; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  | #if !NET8 | ||||||
|  |  | ||||||
|  |     private System.Web.HttpSessionStateBase GetSession() => | ||||||
|  |         Session; | ||||||
|  |  | ||||||
|  |     private JsonResult GetJsonResult(object? data) => | ||||||
|  |         Json(data, JsonRequestBehavior.AllowGet); | ||||||
|  |  | ||||||
|  |     private bool IsAjaxRequest() => | ||||||
|  |         Request.IsAjaxRequest(); | ||||||
|  |  | ||||||
|  | #endif | ||||||
|  |  | ||||||
|  | #if NET8 | ||||||
|  |  | ||||||
|  |     private Microsoft.AspNetCore.Http.ISession GetSession() => | ||||||
|  |         HttpContext.Session; | ||||||
|  |  | ||||||
|  |     private JsonResult GetJsonResult(object? data) => | ||||||
|  |         Json(data); | ||||||
|  |  | ||||||
|  |     private bool IsAjaxRequest() => | ||||||
|  |         Request.Headers.TryGetValue("X-Requested-With", out Microsoft.Extensions.Primitives.StringValues strings) && strings[0] == "XMLHttpRequest"; | ||||||
|  |  | ||||||
|  | #endif | ||||||
|  |  | ||||||
|  |     private string GetUserIdentityName() => | ||||||
|  |         @User.Identity.Name; | ||||||
|  |  | ||||||
| } | } | ||||||
| @ -1,8 +1,14 @@ | |||||||
| using System; | using System; | ||||||
| using System.Collections.Generic; | using System.Collections.Generic; | ||||||
| using System.Configuration; |  | ||||||
| using System.Linq; | using System.Linq; | ||||||
|  | #if !NET8 | ||||||
| using System.Web.Mvc; | using System.Web.Mvc; | ||||||
|  | #endif | ||||||
|  |  | ||||||
|  | #if NET8 | ||||||
|  | using Microsoft.AspNetCore.Mvc; | ||||||
|  | using Microsoft.AspNetCore.Authorization; | ||||||
|  | #endif | ||||||
|  |  | ||||||
| using Fab2ApprovalSystem.DMO; | using Fab2ApprovalSystem.DMO; | ||||||
| using Fab2ApprovalSystem.Misc; | using Fab2ApprovalSystem.Misc; | ||||||
| @ -10,19 +16,26 @@ using Fab2ApprovalSystem.Models; | |||||||
| using Fab2ApprovalSystem.Utilities; | using Fab2ApprovalSystem.Utilities; | ||||||
| using Fab2ApprovalSystem.ViewModels; | using Fab2ApprovalSystem.ViewModels; | ||||||
|  |  | ||||||
|  | #if !NET8 | ||||||
| using Kendo.Mvc.Extensions; | using Kendo.Mvc.Extensions; | ||||||
|  | #endif | ||||||
|  |  | ||||||
| namespace Fab2ApprovalSystem.Controllers; | namespace Fab2ApprovalSystem.Controllers; | ||||||
|  |  | ||||||
| [Authorize] | [Authorize] | ||||||
|  | #if !NET8 | ||||||
| [SessionExpireFilter] | [SessionExpireFilter] | ||||||
|  | #endif | ||||||
|  | #if NET8 | ||||||
|  | [Route("[controller]")] | ||||||
|  | #endif | ||||||
| public class TrainingController : Controller { | public class TrainingController : Controller { | ||||||
|  |  | ||||||
|     UserAccountDMO userDMO = new UserAccountDMO(); |     private readonly UserAccountDMO userDMO = new(); | ||||||
|     AdminDMO adminDMO = new AdminDMO(); |     private readonly AdminDMO adminDMO = new(); | ||||||
|     TrainingDMO trainingDMO = new TrainingDMO(); |     private readonly TrainingDMO trainingDMO = new(); | ||||||
|     ECN_DMO ecnDMO = new ECN_DMO(); |     private readonly ECN_DMO ecnDMO = new(); | ||||||
|     private readonly AppSettings _AppSettings = GlobalVars.AppSettings; |     private readonly AppSettings? _AppSettings = GlobalVars.AppSettings; | ||||||
|  |  | ||||||
|     // GET: Training |     // GET: Training | ||||||
|     public ActionResult Index() { |     public ActionResult Index() { | ||||||
| @ -30,19 +43,19 @@ public class TrainingController : Controller { | |||||||
|     } |     } | ||||||
|  |  | ||||||
|     public int Create(int ecnId) { |     public int Create(int ecnId) { | ||||||
|         ECN_DMO ecnDMO = new ECN_DMO(); |         ECN_DMO ecnDMO = new(); | ||||||
|  |  | ||||||
|         // Delete old training if exists |         // Delete old training if exists | ||||||
|         int oldTrainingId = trainingDMO.GetTrainingId(ecnId); |         int oldTrainingId = trainingDMO.GetTrainingId(ecnId); | ||||||
|         if (oldTrainingId != null && oldTrainingId != 0) { |         if (oldTrainingId != 0) { | ||||||
|             trainingDMO.DeleteTraining(oldTrainingId); |             trainingDMO.DeleteTraining(oldTrainingId); | ||||||
|         } |         } | ||||||
|  |  | ||||||
|         int trainingId = trainingDMO.Create(ecnId); |         int trainingId = trainingDMO.Create(ecnId); | ||||||
|         List<int> TrainingGroups = new List<int>(); |         List<int> TrainingGroups = new(); | ||||||
|         TrainingGroups = trainingDMO.GetECNAssignedTrainingGroups(ecnId); |         TrainingGroups = trainingDMO.GetECNAssignedTrainingGroups(ecnId); | ||||||
|         string ECNTitle = ecnDMO.GetECN(ecnId).Title; |         string ECNTitle = ecnDMO.GetECN(ecnId).Title; | ||||||
|         List<int> Trainees = new List<int>(); |         List<int> Trainees = new(); | ||||||
|         foreach (int group in TrainingGroups) { |         foreach (int group in TrainingGroups) { | ||||||
|             Trainees.AddRange(trainingDMO.GetTrainees(group)); |             Trainees.AddRange(trainingDMO.GetTrainees(group)); | ||||||
|         } |         } | ||||||
| @ -55,8 +68,9 @@ public class TrainingController : Controller { | |||||||
|  |  | ||||||
|         return trainingId; |         return trainingId; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     public ActionResult AddUserToTrainingAdHoc(int trainingId, int traineeId, int ecnId) { |     public ActionResult AddUserToTrainingAdHoc(int trainingId, int traineeId, int ecnId) { | ||||||
|         if ((bool)Session[GlobalVars.IS_ADMIN]) { |         if (GlobalVars.IsAdmin(GetSession())) { | ||||||
|             // Get ECN |             // Get ECN | ||||||
|             ECN ecn = ecnDMO.GetECN(ecnId); |             ECN ecn = ecnDMO.GetECN(ecnId); | ||||||
|  |  | ||||||
| @ -105,7 +119,7 @@ public class TrainingController : Controller { | |||||||
|     } |     } | ||||||
|  |  | ||||||
|     public ActionResult AddGroupToTrainingAdHoc(int trainingId, int groupId, int ecnId) { |     public ActionResult AddGroupToTrainingAdHoc(int trainingId, int groupId, int ecnId) { | ||||||
|         if ((bool)Session[GlobalVars.IS_ADMIN]) { |         if (GlobalVars.IsAdmin(GetSession())) { | ||||||
|             ECN ecn = ecnDMO.GetECN(ecnId); |             ECN ecn = ecnDMO.GetECN(ecnId); | ||||||
|             Training training = trainingDMO.GetTraining(trainingId); |             Training training = trainingDMO.GetTraining(trainingId); | ||||||
|             TrainingGroup group = trainingDMO.GetTrainingGroupByID(groupId); |             TrainingGroup group = trainingDMO.GetTrainingGroupByID(groupId); | ||||||
| @ -163,14 +177,14 @@ public class TrainingController : Controller { | |||||||
|  |  | ||||||
|     public ActionResult DeleteTrainingByECN(int ECNNumber) { |     public ActionResult DeleteTrainingByECN(int ECNNumber) { | ||||||
|         int trainingId = trainingDMO.GetTrainingId(ECNNumber); |         int trainingId = trainingDMO.GetTrainingId(ECNNumber); | ||||||
|         if (trainingId != null && trainingId != 0) { |         if (trainingId != 0) { | ||||||
|             trainingDMO.DeleteTraining(trainingId); |             trainingDMO.DeleteTraining(trainingId); | ||||||
|         } |         } | ||||||
|         return RedirectToAction("ViewTrainings"); |         return RedirectToAction("ViewTrainings"); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     public ActionResult DeleteTrainingByID(int trainingId) { |     public ActionResult DeleteTrainingByID(int trainingId) { | ||||||
|         if (trainingId != null && trainingId != 0) { |         if (trainingId != 0) { | ||||||
|             trainingDMO.DeleteTraining(trainingId); |             trainingDMO.DeleteTraining(trainingId); | ||||||
|         } |         } | ||||||
|         return RedirectToAction("ViewTrainings"); |         return RedirectToAction("ViewTrainings"); | ||||||
| @ -254,7 +268,7 @@ public class TrainingController : Controller { | |||||||
|         // Group Filter |         // Group Filter | ||||||
|         if (filterType == 1 && filterValue != "") { |         if (filterType == 1 && filterValue != "") { | ||||||
|             ViewBag.GroupFilter = filterValue; |             ViewBag.GroupFilter = filterValue; | ||||||
|             List<Training> filteredTraining = new List<Training>(); |             List<Training> filteredTraining = new(); | ||||||
|             foreach (Training item in trainingList) { |             foreach (Training item in trainingList) { | ||||||
|                 List<int> assignedTrainingGroups = trainingDMO.GetECNAssignedTrainingGroups(item.ECN); |                 List<int> assignedTrainingGroups = trainingDMO.GetECNAssignedTrainingGroups(item.ECN); | ||||||
|                 foreach (int id in assignedTrainingGroups) { |                 foreach (int id in assignedTrainingGroups) { | ||||||
| @ -268,7 +282,7 @@ public class TrainingController : Controller { | |||||||
|         } |         } | ||||||
|         // Status Filter |         // Status Filter | ||||||
|         if (filterType == 2 && filterValue != "") { |         if (filterType == 2 && filterValue != "") { | ||||||
|             List<Training> filteredTraining = new List<Training>(); |             List<Training> filteredTraining = new(); | ||||||
|             switch (filterValue) { |             switch (filterValue) { | ||||||
|                 case "1": |                 case "1": | ||||||
|                     // Completed |                     // Completed | ||||||
| @ -307,7 +321,7 @@ public class TrainingController : Controller { | |||||||
|         float assignmentCount = (from a in trainingAssignments where a.Deleted != true select a).Count(); |         float assignmentCount = (from a in trainingAssignments where a.Deleted != true select a).Count(); | ||||||
|         float totalCompleted = 0; |         float totalCompleted = 0; | ||||||
|         foreach (TrainingAssignment assignment in trainingAssignments) { |         foreach (TrainingAssignment assignment in trainingAssignments) { | ||||||
|             if (assignment.status == true && assignment.Deleted != true) { |             if (assignment.status && assignment.Deleted != true) { | ||||||
|                 totalCompleted++; |                 totalCompleted++; | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
| @ -316,7 +330,7 @@ public class TrainingController : Controller { | |||||||
|  |  | ||||||
|         if (groupFilter != "" && groupFilter != null) { |         if (groupFilter != "" && groupFilter != null) { | ||||||
|             ViewBag.GroupFilter = groupFilter; |             ViewBag.GroupFilter = groupFilter; | ||||||
|             List<TrainingAssignment> groupFilteredTraining = new List<TrainingAssignment>(); |             List<TrainingAssignment> groupFilteredTraining = new(); | ||||||
|             List<int> groupMemberIds = trainingDMO.GetTrainees(Convert.ToInt32(groupFilter)); |             List<int> groupMemberIds = trainingDMO.GetTrainees(Convert.ToInt32(groupFilter)); | ||||||
|             foreach (TrainingAssignment assignment in trainingAssignments) { |             foreach (TrainingAssignment assignment in trainingAssignments) { | ||||||
|                 if (trainingDMO.isUserTrainingMember(Convert.ToInt32(groupFilter), assignment.UserID)) { |                 if (trainingDMO.isUserTrainingMember(Convert.ToInt32(groupFilter), assignment.UserID)) { | ||||||
| @ -326,15 +340,15 @@ public class TrainingController : Controller { | |||||||
|             trainingAssignments = groupFilteredTraining; |             trainingAssignments = groupFilteredTraining; | ||||||
|         } |         } | ||||||
|         if (statusFilter != "" && statusFilter != null) { |         if (statusFilter != "" && statusFilter != null) { | ||||||
|             List<TrainingAssignment> filteredTraining = new List<TrainingAssignment>(); |             List<TrainingAssignment> filteredTraining = new(); | ||||||
|             switch (statusFilter) { |             switch (statusFilter) { | ||||||
|                 case "1": |                 case "1": | ||||||
|                     // Completed |                     // Completed | ||||||
|                     filteredTraining = (from a in trainingAssignments where a.status == true && a.Deleted != true select a).ToList(); |                     filteredTraining = (from a in trainingAssignments where a.status && a.Deleted != true select a).ToList(); | ||||||
|                     break; |                     break; | ||||||
|                 case "2": |                 case "2": | ||||||
|                     // In Progress |                     // In Progress | ||||||
|                     filteredTraining = (from a in trainingAssignments where a.status != true && a.Deleted != true select a).ToList(); |                     filteredTraining = (from a in trainingAssignments where !a.status && a.Deleted != true select a).ToList(); | ||||||
|                     break; |                     break; | ||||||
|                 case "3": |                 case "3": | ||||||
|                     // Cancelled |                     // Cancelled | ||||||
| @ -369,9 +383,9 @@ public class TrainingController : Controller { | |||||||
|     /// Method to return all the training assignments for a specified user |     /// Method to return all the training assignments for a specified user | ||||||
|     /// </summary> |     /// </summary> | ||||||
|     public ActionResult ViewMyTrainingAssignments() { |     public ActionResult ViewMyTrainingAssignments() { | ||||||
|         int userID = (int)Session[GlobalVars.SESSION_USERID]; |         int userID = GlobalVars.GetUserId(GetSession()); | ||||||
|         List<TrainingAssignment> assignments = trainingDMO.GetTrainingAssignmentsByUserID(userID); |         List<TrainingAssignment> assignments = trainingDMO.GetTrainingAssignmentsByUserID(userID); | ||||||
|         List<ECNTrainingAssignments> ViewData = new List<ECNTrainingAssignments>(); |         List<ECNTrainingAssignments> ViewData = new(); | ||||||
|         foreach (TrainingAssignment assignment in assignments) { |         foreach (TrainingAssignment assignment in assignments) { | ||||||
|             Training training = trainingDMO.GetTraining(assignment.TrainingID); |             Training training = trainingDMO.GetTraining(assignment.TrainingID); | ||||||
|             if (training != null && !assignment.status) { |             if (training != null && !assignment.status) { | ||||||
| @ -407,7 +421,7 @@ public class TrainingController : Controller { | |||||||
|         // Group Filter |         // Group Filter | ||||||
|         if (filterType == 1 && filterValue != "") { |         if (filterType == 1 && filterValue != "") { | ||||||
|             ViewBag.GroupFilter = filterValue; |             ViewBag.GroupFilter = filterValue; | ||||||
|             List<Training> filteredTraining = new List<Training>(); |             List<Training> filteredTraining = new(); | ||||||
|             foreach (Training item in AllTrainings) { |             foreach (Training item in AllTrainings) { | ||||||
|                 List<int> assignedTrainingGroups = trainingDMO.GetECNAssignedTrainingGroups(item.ECN); |                 List<int> assignedTrainingGroups = trainingDMO.GetECNAssignedTrainingGroups(item.ECN); | ||||||
|                 foreach (int id in assignedTrainingGroups) { |                 foreach (int id in assignedTrainingGroups) { | ||||||
| @ -454,8 +468,8 @@ public class TrainingController : Controller { | |||||||
|     } |     } | ||||||
|  |  | ||||||
|     public ActionResult ManuallyExecuteECNTraining(int ecnId, int[] trainingGroupsIn) { |     public ActionResult ManuallyExecuteECNTraining(int ecnId, int[] trainingGroupsIn) { | ||||||
|         if ((bool)Session[GlobalVars.IS_ADMIN]) { |         if (GlobalVars.IsAdmin(GetSession())) { | ||||||
|             List<int> newTrainingGroupIds = new List<int>(trainingGroupsIn); |             List<int> newTrainingGroupIds = new(trainingGroupsIn); | ||||||
|             ECN ecn = ecnDMO.GetECN(ecnId); |             ECN ecn = ecnDMO.GetECN(ecnId); | ||||||
|             if (ecn != null) { |             if (ecn != null) { | ||||||
|                 if (ecn.CloseDate != null) { |                 if (ecn.CloseDate != null) { | ||||||
| @ -493,7 +507,7 @@ public class TrainingController : Controller { | |||||||
|         if (ecn != null) { |         if (ecn != null) { | ||||||
|             if (ecn.CloseDate != null) { |             if (ecn.CloseDate != null) { | ||||||
|                 List<int> trainingGroupIds = trainingDMO.GetECNAssignedTrainingGroups(ecnId); |                 List<int> trainingGroupIds = trainingDMO.GetECNAssignedTrainingGroups(ecnId); | ||||||
|                 List<TrainingGroup> assignedGroups = new List<TrainingGroup>(); |                 List<TrainingGroup> assignedGroups = new(); | ||||||
|                 foreach (int trainingGroupId in trainingGroupIds) { |                 foreach (int trainingGroupId in trainingGroupIds) { | ||||||
|                     TrainingGroup trainingGroup = trainingDMO.GetTrainingGroupByID(trainingGroupId); |                     TrainingGroup trainingGroup = trainingDMO.GetTrainingGroupByID(trainingGroupId); | ||||||
|                     assignedGroups.Add(trainingGroup); |                     assignedGroups.Add(trainingGroup); | ||||||
| @ -517,7 +531,7 @@ public class TrainingController : Controller { | |||||||
|             emailBody += "<style>table,th,td{border: 1px solid black;}</style>"; |             emailBody += "<style>table,th,td{border: 1px solid black;}</style>"; | ||||||
|             // Get all users set up to receive the training report email. |             // Get all users set up to receive the training report email. | ||||||
|             List<TrainingReportUser> trainingReportUsers = adminDMO.GetTrainingReportUsers(); |             List<TrainingReportUser> trainingReportUsers = adminDMO.GetTrainingReportUsers(); | ||||||
|             List<string> emailList = new List<string>(); |             List<string> emailList = new(); | ||||||
|             foreach (TrainingReportUser user in trainingReportUsers) { |             foreach (TrainingReportUser user in trainingReportUsers) { | ||||||
|                 string userEmail = userDMO.GetUserByID(user.UserId).Email; |                 string userEmail = userDMO.GetUserByID(user.UserId).Email; | ||||||
|                 emailList.Add(userEmail); |                 emailList.Add(userEmail); | ||||||
| @ -564,4 +578,34 @@ public class TrainingController : Controller { | |||||||
|         } |         } | ||||||
|         return isSuccess; |         return isSuccess; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  | #if !NET8 | ||||||
|  |  | ||||||
|  |     private System.Web.HttpSessionStateBase GetSession() => | ||||||
|  |         Session; | ||||||
|  |  | ||||||
|  |     private JsonResult GetJsonResult(object? data) => | ||||||
|  |         Json(data, JsonRequestBehavior.AllowGet); | ||||||
|  |  | ||||||
|  |     private bool IsAjaxRequest() => | ||||||
|  |         Request.IsAjaxRequest(); | ||||||
|  |  | ||||||
|  | #endif | ||||||
|  |  | ||||||
|  | #if NET8 | ||||||
|  |  | ||||||
|  |     private Microsoft.AspNetCore.Http.ISession GetSession() => | ||||||
|  |         HttpContext.Session; | ||||||
|  |  | ||||||
|  |     private JsonResult GetJsonResult(object? data) => | ||||||
|  |         Json(data); | ||||||
|  |  | ||||||
|  |     private bool IsAjaxRequest() => | ||||||
|  |         Request.Headers.TryGetValue("X-Requested-With", out Microsoft.Extensions.Primitives.StringValues strings) && strings[0] == "XMLHttpRequest"; | ||||||
|  |  | ||||||
|  | #endif | ||||||
|  |  | ||||||
|  |     private string GetUserIdentityName() => | ||||||
|  |         @User.Identity.Name; | ||||||
|  |  | ||||||
| } | } | ||||||
| @ -1,34 +1,56 @@ | |||||||
| using System; |  | ||||||
| using System.Collections.Generic; | using System.Collections.Generic; | ||||||
| using System.Linq; | #if !NET8 | ||||||
| using System.Net; |  | ||||||
| using System.Net.Http; |  | ||||||
| using System.Web.Http; | using System.Web.Http; | ||||||
|  | #endif | ||||||
|  |  | ||||||
|  | #if NET8 | ||||||
|  | using Microsoft.AspNetCore.Mvc; | ||||||
|  | #endif | ||||||
|  |  | ||||||
| using Fab2ApprovalSystem.Misc; | using Fab2ApprovalSystem.Misc; | ||||||
| using Fab2ApprovalSystem.Models; | using Fab2ApprovalSystem.Models; | ||||||
|  |  | ||||||
|  | #if !NET8 | ||||||
|  | using System; | ||||||
|  | using System.Linq; | ||||||
|  | using System.Net; | ||||||
|  | using System.Net.Http; | ||||||
|  | #endif | ||||||
|  |  | ||||||
| namespace Fab2ApprovalSystem.Controllers; | namespace Fab2ApprovalSystem.Controllers; | ||||||
|  |  | ||||||
|  | #if !NET8 | ||||||
| public class WebAPIController : ApiController { | public class WebAPIController : ApiController { | ||||||
|     public TrainingController trainingFunctions = new TrainingController(); | #endif | ||||||
|     public CorrectiveActionController carFunctions = new CorrectiveActionController(); |  | ||||||
|     public AccountController accountFunctions = new AccountController(); | #if NET8 | ||||||
|     public HomeController homeFunctions = new HomeController(); | [ApiController] | ||||||
|     private readonly AppSettings _AppSettings = GlobalVars.AppSettings; | [Route("[controller]")] | ||||||
|  | public class WebAPIController : Controller { | ||||||
|  | #endif | ||||||
|  |  | ||||||
|  |     public TrainingController trainingFunctions = new(); | ||||||
|  |     public CorrectiveActionController carFunctions = new(); | ||||||
|  |     public AccountController accountFunctions = new(); | ||||||
|  |     public HomeController homeFunctions = new(); | ||||||
|  |     private readonly AppSettings? _AppSettings = GlobalVars.AppSettings; | ||||||
|  |  | ||||||
|     public string Get() { |     public string Get() { | ||||||
|         return "Welcome To Web API"; |         return "Welcome To Web API"; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     public List<string> Get(int Id) { |     public List<string> Get(int Id) { | ||||||
|         return new List<string> { |         return new List<string> { | ||||||
|                 "Data1", |                 "Data1", | ||||||
|                 "Data2" |                 "Data2" | ||||||
|             }; |             }; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     public void Post() { |     public void Post() { | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  | #if !NET8 | ||||||
|  |  | ||||||
|     public HttpResponseMessage Post(HttpRequestMessage request, string action) { |     public HttpResponseMessage Post(HttpRequestMessage request, string action) { | ||||||
|         switch (action) { |         switch (action) { | ||||||
|             case "TrainingReport": |             case "TrainingReport": | ||||||
| @ -65,4 +87,7 @@ public class WebAPIController : ApiController { | |||||||
|                 return request.CreateResponse(HttpStatusCode.InternalServerError, "Action Not Found"); |                 return request.CreateResponse(HttpStatusCode.InternalServerError, "Action Not Found"); | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  | #endif | ||||||
|  |  | ||||||
| } | } | ||||||
| @ -1,17 +1,30 @@ | |||||||
| using System; | #if !NET8 | ||||||
| using System.Collections.Generic; |  | ||||||
| using System.Linq; |  | ||||||
| using System.Web; | using System.Web; | ||||||
| using System.Web.Mvc; | using System.Web.Mvc; | ||||||
|  | #endif | ||||||
|  |  | ||||||
|  | #if NET8 | ||||||
|  | using Microsoft.AspNetCore.Mvc; | ||||||
|  | #endif | ||||||
|  |  | ||||||
|  | #if !NET8 | ||||||
|  | using System; | ||||||
|  | using System.Collections.Generic; | ||||||
|  | using System.Linq; | ||||||
| using Fab2ApprovalSystem.DMO; | using Fab2ApprovalSystem.DMO; | ||||||
| using Fab2ApprovalSystem.Models; | using Fab2ApprovalSystem.Models; | ||||||
|  | #endif | ||||||
|  |  | ||||||
|  | #if !NET8 | ||||||
| using Kendo.Mvc.Extensions; | using Kendo.Mvc.Extensions; | ||||||
| using Kendo.Mvc.UI; | using Kendo.Mvc.UI; | ||||||
|  | #endif | ||||||
|  |  | ||||||
| namespace Fab2ApprovalSystem.Controllers; | namespace Fab2ApprovalSystem.Controllers; | ||||||
|  |  | ||||||
|  | #if NET8 | ||||||
|  | [Route("[controller]")] | ||||||
|  | #endif | ||||||
| public class WorkflowController : Controller { | public class WorkflowController : Controller { | ||||||
|  |  | ||||||
|     // GET: /Workflow/Details/5 |     // GET: /Workflow/Details/5 | ||||||
| @ -24,6 +37,8 @@ public class WorkflowController : Controller { | |||||||
|         return View(); |         return View(); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  | #if !NET8 | ||||||
|  |  | ||||||
|     // POST: /Workflow/Create |     // POST: /Workflow/Create | ||||||
|     [HttpPost] |     [HttpPost] | ||||||
|     public ActionResult Create(FormCollection collection) { |     public ActionResult Create(FormCollection collection) { | ||||||
| @ -36,11 +51,15 @@ public class WorkflowController : Controller { | |||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  | #endif | ||||||
|  |  | ||||||
|     // GET: /Workflow/Edit/5 |     // GET: /Workflow/Edit/5 | ||||||
|     public ActionResult Edit(int id) { |     public ActionResult Edit(int id) { | ||||||
|         return View(); |         return View(); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  | #if !NET8 | ||||||
|  |  | ||||||
|     // POST: /Workflow/Edit/5 |     // POST: /Workflow/Edit/5 | ||||||
|     [HttpPost] |     [HttpPost] | ||||||
|     public ActionResult Edit(int id, FormCollection collection) { |     public ActionResult Edit(int id, FormCollection collection) { | ||||||
| @ -53,11 +72,15 @@ public class WorkflowController : Controller { | |||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  | #endif | ||||||
|  |  | ||||||
|     // GET: /Workflow/Delete/5 |     // GET: /Workflow/Delete/5 | ||||||
|     public ActionResult Delete(int id) { |     public ActionResult Delete(int id) { | ||||||
|         return View(); |         return View(); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  | #if !NET8 | ||||||
|  |  | ||||||
|     // POST: /Workflow/Delete/5 |     // POST: /Workflow/Delete/5 | ||||||
|     [HttpPost] |     [HttpPost] | ||||||
|     public ActionResult Delete(int id, FormCollection collection) { |     public ActionResult Delete(int id, FormCollection collection) { | ||||||
| @ -70,4 +93,35 @@ public class WorkflowController : Controller { | |||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  | #endif | ||||||
|  |  | ||||||
|  | #if !NET8 | ||||||
|  |  | ||||||
|  |     private System.Web.HttpSessionStateBase GetSession() => | ||||||
|  |         Session; | ||||||
|  |  | ||||||
|  |     private JsonResult GetJsonResult(object? data) => | ||||||
|  |         Json(data, JsonRequestBehavior.AllowGet); | ||||||
|  |  | ||||||
|  |     private bool IsAjaxRequest() => | ||||||
|  |         Request.IsAjaxRequest(); | ||||||
|  |  | ||||||
|  | #endif | ||||||
|  |  | ||||||
|  | #if NET8 | ||||||
|  |  | ||||||
|  |     private Microsoft.AspNetCore.Http.ISession GetSession() => | ||||||
|  |         HttpContext.Session; | ||||||
|  |  | ||||||
|  |     private JsonResult GetJsonResult(object? data) => | ||||||
|  |         Json(data); | ||||||
|  |  | ||||||
|  |     private bool IsAjaxRequest() => | ||||||
|  |         Request.Headers.TryGetValue("X-Requested-With", out Microsoft.Extensions.Primitives.StringValues strings) && strings[0] == "XMLHttpRequest"; | ||||||
|  |  | ||||||
|  | #endif | ||||||
|  |  | ||||||
|  |     private string GetUserIdentityName() => | ||||||
|  |         @User.Identity.Name; | ||||||
|  |  | ||||||
| } | } | ||||||
| @ -130,13 +130,19 @@ public class AdminDMO { | |||||||
|     } |     } | ||||||
|  |  | ||||||
| #if !NET8 | #if !NET8 | ||||||
|  |  | ||||||
|     public List<TrainingReportUser> GetTrainingReportUsers() { |     public List<TrainingReportUser> GetTrainingReportUsers() { | ||||||
|         List<TrainingReportUser> CurrentReportUsers = (from a in FabApprovalDB.TrainingReportUsers select a).ToList(); |         List<TrainingReportUser> CurrentReportUsers = (from a in FabApprovalDB.TrainingReportUsers select a).ToList(); | ||||||
|         return CurrentReportUsers; |         return CurrentReportUsers; | ||||||
|     } |     } | ||||||
| #else |  | ||||||
|  | #endif | ||||||
|  |  | ||||||
|  | #if NET8 | ||||||
|  |  | ||||||
|     public List<TrainingReportUser> GetTrainingReportUsers() => |     public List<TrainingReportUser> GetTrainingReportUsers() => | ||||||
|         throw new NotImplementedException(); |         throw new NotImplementedException(); | ||||||
|  |  | ||||||
| #endif | #endif | ||||||
|  |  | ||||||
| #if !NET8 | #if !NET8 | ||||||
| @ -179,14 +185,20 @@ public class AdminDMO { | |||||||
|         return; |         return; | ||||||
|     } |     } | ||||||
|  |  | ||||||
| #if !NET8 |  | ||||||
|     public List<TrainingGroup> GetTrainingGroups() { |     public List<TrainingGroup> GetTrainingGroups() { | ||||||
|  | #if !NET8 | ||||||
|         var TrainingGroups = from a in FabApprovalDB.TrainingGroups select a; |         var TrainingGroups = from a in FabApprovalDB.TrainingGroups select a; | ||||||
|         List<TrainingGroup> GroupsToReturn = TrainingGroups.ToList(); |         List<TrainingGroup> GroupsToReturn = TrainingGroups.ToList(); | ||||||
|  |  | ||||||
|         return GroupsToReturn; |         return GroupsToReturn; | ||||||
|  | #endif | ||||||
|  | #if NET8 | ||||||
|  |     throw new NotImplementedException(); | ||||||
|  | #endif | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  | #if !NET8 | ||||||
|  |  | ||||||
|     public void AddNewTrainingGroup(string groupName) { |     public void AddNewTrainingGroup(string groupName) { | ||||||
|         TrainingGroup existing = null; |         TrainingGroup existing = null; | ||||||
|         // Check to see that the group name doesn't exist. |         // Check to see that the group name doesn't exist. | ||||||
|  | |||||||
| @ -46,7 +46,9 @@ public class TrainingDMO { | |||||||
|         IEnumerable<Training> allTrainings = (from a in db.Trainings select a).ToList(); |         IEnumerable<Training> allTrainings = (from a in db.Trainings select a).ToList(); | ||||||
|  |  | ||||||
|         return allTrainings; |         return allTrainings; | ||||||
| #else | #endif | ||||||
|  |  | ||||||
|  | #if NET8 | ||||||
|         throw new NotImplementedException(); |         throw new NotImplementedException(); | ||||||
| #endif | #endif | ||||||
|     } |     } | ||||||
| @ -57,7 +59,9 @@ public class TrainingDMO { | |||||||
|         Training trainingRecord = new Training(); |         Training trainingRecord = new Training(); | ||||||
|         trainingRecord = (from a in db.Trainings where a.TrainingID == trainingId select a).FirstOrDefault(); |         trainingRecord = (from a in db.Trainings where a.TrainingID == trainingId select a).FirstOrDefault(); | ||||||
|         return trainingRecord; |         return trainingRecord; | ||||||
| #else | #endif | ||||||
|  |  | ||||||
|  | #if NET8 | ||||||
|         throw new NotImplementedException(); |         throw new NotImplementedException(); | ||||||
| #endif | #endif | ||||||
|     } |     } | ||||||
| @ -67,7 +71,9 @@ public class TrainingDMO { | |||||||
|         FabApprovalTrainingEntities db = new FabApprovalTrainingEntities(); |         FabApprovalTrainingEntities db = new FabApprovalTrainingEntities(); | ||||||
|         TrainingAssignment assignmentRecord = (from a in db.TrainingAssignments where a.ID == assignmentId select a).FirstOrDefault(); |         TrainingAssignment assignmentRecord = (from a in db.TrainingAssignments where a.ID == assignmentId select a).FirstOrDefault(); | ||||||
|         return assignmentRecord; |         return assignmentRecord; | ||||||
| #else | #endif | ||||||
|  |  | ||||||
|  | #if NET8 | ||||||
|         throw new NotImplementedException(); |         throw new NotImplementedException(); | ||||||
| #endif | #endif | ||||||
|     } |     } | ||||||
| @ -79,7 +85,9 @@ public class TrainingDMO { | |||||||
|         int trainingId = (from a in db.Trainings where a.ECN == ECNId select a.TrainingID).FirstOrDefault(); |         int trainingId = (from a in db.Trainings where a.ECN == ECNId select a.TrainingID).FirstOrDefault(); | ||||||
|  |  | ||||||
|         return trainingId; |         return trainingId; | ||||||
| #else | #endif | ||||||
|  |  | ||||||
|  | #if NET8 | ||||||
|         throw new NotImplementedException(); |         throw new NotImplementedException(); | ||||||
| #endif | #endif | ||||||
|     } |     } | ||||||
| @ -90,7 +98,9 @@ public class TrainingDMO { | |||||||
|         var users = (from a in db.TrainingGroupMembers where a.TrainingGroupID == groupId select a.UserID).ToList(); |         var users = (from a in db.TrainingGroupMembers where a.TrainingGroupID == groupId select a.UserID).ToList(); | ||||||
|  |  | ||||||
|         return users; |         return users; | ||||||
| #else | #endif | ||||||
|  |  | ||||||
|  | #if NET8 | ||||||
|         throw new NotImplementedException(); |         throw new NotImplementedException(); | ||||||
| #endif | #endif | ||||||
|     } |     } | ||||||
| @ -105,7 +115,9 @@ public class TrainingDMO { | |||||||
|         } else { |         } else { | ||||||
|             return true; |             return true; | ||||||
|         } |         } | ||||||
| #else | #endif | ||||||
|  |  | ||||||
|  | #if NET8 | ||||||
|         throw new NotImplementedException(); |         throw new NotImplementedException(); | ||||||
| #endif | #endif | ||||||
|     } |     } | ||||||
| @ -114,8 +126,11 @@ public class TrainingDMO { | |||||||
| #if !NET8 | #if !NET8 | ||||||
|         FabApprovalTrainingEntities db = new FabApprovalTrainingEntities(); |         FabApprovalTrainingEntities db = new FabApprovalTrainingEntities(); | ||||||
|         return (from a in db.TrainingGroups select a).ToList(); |         return (from a in db.TrainingGroups select a).ToList(); | ||||||
| #else | #endif | ||||||
|         throw new NotImplementedException(); |  | ||||||
|  | #if NET8 | ||||||
|  |         System.Text.StringBuilder query = new("SELECT TrainingGroupID, TrainingGroupName FROM TrainingGroups ORDER BY TrainingGroupID"); | ||||||
|  |         return db.Query<TrainingGroup>(query.ToString()).ToList(); | ||||||
| #endif | #endif | ||||||
|     } |     } | ||||||
|  |  | ||||||
| @ -124,7 +139,9 @@ public class TrainingDMO { | |||||||
|         FabApprovalTrainingEntities db = new FabApprovalTrainingEntities(); |         FabApprovalTrainingEntities db = new FabApprovalTrainingEntities(); | ||||||
|         TrainingGroup groups = (from a in db.TrainingGroups where a.TrainingGroupID == groupId select a).FirstOrDefault(); |         TrainingGroup groups = (from a in db.TrainingGroups where a.TrainingGroupID == groupId select a).FirstOrDefault(); | ||||||
|         return groups; |         return groups; | ||||||
| #else | #endif | ||||||
|  |  | ||||||
|  | #if NET8 | ||||||
|         throw new NotImplementedException(); |         throw new NotImplementedException(); | ||||||
| #endif | #endif | ||||||
|     } |     } | ||||||
| @ -134,7 +151,9 @@ public class TrainingDMO { | |||||||
|         List<int> trainingGroups = (from a in FabApprovalDB.ECNTrainingBies where a.ECNNumber == ECNNumber select a.AcknowledgementTrainingByID).ToList(); |         List<int> trainingGroups = (from a in FabApprovalDB.ECNTrainingBies where a.ECNNumber == ECNNumber select a.AcknowledgementTrainingByID).ToList(); | ||||||
|  |  | ||||||
|         return trainingGroups; |         return trainingGroups; | ||||||
| #else | #endif | ||||||
|  |  | ||||||
|  | #if NET8 | ||||||
|         throw new NotImplementedException(); |         throw new NotImplementedException(); | ||||||
| #endif | #endif | ||||||
|     } |     } | ||||||
| @ -149,7 +168,9 @@ public class TrainingDMO { | |||||||
|  |  | ||||||
|         this.db.Execute("ECNInsertTrainingBy", parameters, commandType: CommandType.StoredProcedure); |         this.db.Execute("ECNInsertTrainingBy", parameters, commandType: CommandType.StoredProcedure); | ||||||
|  |  | ||||||
| #else | #endif | ||||||
|  |  | ||||||
|  | #if NET8 | ||||||
|         throw new NotImplementedException(); |         throw new NotImplementedException(); | ||||||
| #endif | #endif | ||||||
|     } |     } | ||||||
| @ -162,7 +183,9 @@ public class TrainingDMO { | |||||||
|  |  | ||||||
|         this.db.Execute("ECNSetTrainingFlag", parameters, commandType: CommandType.StoredProcedure); |         this.db.Execute("ECNSetTrainingFlag", parameters, commandType: CommandType.StoredProcedure); | ||||||
|  |  | ||||||
| #else | #endif | ||||||
|  |  | ||||||
|  | #if NET8 | ||||||
|         throw new NotImplementedException(); |         throw new NotImplementedException(); | ||||||
| #endif | #endif | ||||||
|     } |     } | ||||||
| @ -177,7 +200,9 @@ public class TrainingDMO { | |||||||
|         TrainingData = from a in db.TrainingAssignments where a.TrainingID == TrainingID select a; |         TrainingData = from a in db.TrainingAssignments where a.TrainingID == TrainingID select a; | ||||||
|  |  | ||||||
|         return TrainingData.ToList(); |         return TrainingData.ToList(); | ||||||
| #else | #endif | ||||||
|  |  | ||||||
|  | #if NET8 | ||||||
|         throw new NotImplementedException(); |         throw new NotImplementedException(); | ||||||
| #endif | #endif | ||||||
|     } |     } | ||||||
| @ -192,7 +217,9 @@ public class TrainingDMO { | |||||||
|         TrainingData = from a in db.TrainingAssignments where a.TrainingID == TrainingID select a; |         TrainingData = from a in db.TrainingAssignments where a.TrainingID == TrainingID select a; | ||||||
|  |  | ||||||
|         return TrainingData.ToList(); |         return TrainingData.ToList(); | ||||||
| #else | #endif | ||||||
|  |  | ||||||
|  | #if NET8 | ||||||
|         throw new NotImplementedException(); |         throw new NotImplementedException(); | ||||||
| #endif | #endif | ||||||
|     } |     } | ||||||
| @ -203,7 +230,9 @@ public class TrainingDMO { | |||||||
|         var TrainingData = from a in db.TrainingAssignments where a.TrainingID == TrainingID && a.UserID == userID select a; |         var TrainingData = from a in db.TrainingAssignments where a.TrainingID == TrainingID && a.UserID == userID select a; | ||||||
|  |  | ||||||
|         return TrainingData.ToList(); |         return TrainingData.ToList(); | ||||||
| #else | #endif | ||||||
|  |  | ||||||
|  | #if NET8 | ||||||
|         throw new NotImplementedException(); |         throw new NotImplementedException(); | ||||||
| #endif | #endif | ||||||
|     } |     } | ||||||
| @ -214,7 +243,9 @@ public class TrainingDMO { | |||||||
|         var docs = (from a in db.TrainingDocAcks where a.TrainingAssignmentID == trainingAssignmentId && a.Deleted != true select a).ToList(); |         var docs = (from a in db.TrainingDocAcks where a.TrainingAssignmentID == trainingAssignmentId && a.Deleted != true select a).ToList(); | ||||||
|  |  | ||||||
|         return docs; |         return docs; | ||||||
| #else | #endif | ||||||
|  |  | ||||||
|  | #if NET8 | ||||||
|         throw new NotImplementedException(); |         throw new NotImplementedException(); | ||||||
| #endif | #endif | ||||||
|     } |     } | ||||||
| @ -240,7 +271,9 @@ public class TrainingDMO { | |||||||
|                 Console.WriteLine(e); |                 Console.WriteLine(e); | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
| #else | #endif | ||||||
|  |  | ||||||
|  | #if NET8 | ||||||
|         throw new NotImplementedException(); |         throw new NotImplementedException(); | ||||||
| #endif | #endif | ||||||
|     } |     } | ||||||
| @ -251,7 +284,9 @@ public class TrainingDMO { | |||||||
|         int trainingID = (from a in db.TrainingAssignments where a.ID == trainingAssignmentID select a.TrainingID).SingleOrDefault(); |         int trainingID = (from a in db.TrainingAssignments where a.ID == trainingAssignmentID select a.TrainingID).SingleOrDefault(); | ||||||
|  |  | ||||||
|         return trainingID; |         return trainingID; | ||||||
| #else | #endif | ||||||
|  |  | ||||||
|  | #if NET8 | ||||||
|         throw new NotImplementedException(); |         throw new NotImplementedException(); | ||||||
| #endif | #endif | ||||||
|     } |     } | ||||||
| @ -272,7 +307,9 @@ public class TrainingDMO { | |||||||
|                 Console.WriteLine(e); |                 Console.WriteLine(e); | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
| #else | #endif | ||||||
|  |  | ||||||
|  | #if NET8 | ||||||
|         throw new NotImplementedException(); |         throw new NotImplementedException(); | ||||||
| #endif | #endif | ||||||
|     } |     } | ||||||
| @ -293,7 +330,9 @@ public class TrainingDMO { | |||||||
|                 Console.WriteLine(e); |                 Console.WriteLine(e); | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
| #else | #endif | ||||||
|  |  | ||||||
|  | #if NET8 | ||||||
|         throw new NotImplementedException(); |         throw new NotImplementedException(); | ||||||
| #endif | #endif | ||||||
|     } |     } | ||||||
| @ -311,7 +350,9 @@ public class TrainingDMO { | |||||||
|             } |             } | ||||||
|         } |         } | ||||||
|         return isFinished; |         return isFinished; | ||||||
| #else | #endif | ||||||
|  |  | ||||||
|  | #if NET8 | ||||||
|         throw new NotImplementedException(); |         throw new NotImplementedException(); | ||||||
| #endif | #endif | ||||||
|     } |     } | ||||||
| @ -331,7 +372,9 @@ public class TrainingDMO { | |||||||
|         } |         } | ||||||
|  |  | ||||||
|         return isFinished; |         return isFinished; | ||||||
| #else | #endif | ||||||
|  |  | ||||||
|  | #if NET8 | ||||||
|         throw new NotImplementedException(); |         throw new NotImplementedException(); | ||||||
| #endif | #endif | ||||||
|     } |     } | ||||||
| @ -348,7 +391,9 @@ public class TrainingDMO { | |||||||
|         } |         } | ||||||
|  |  | ||||||
|         return userHasAssignment; |         return userHasAssignment; | ||||||
| #else | #endif | ||||||
|  |  | ||||||
|  | #if NET8 | ||||||
|         throw new NotImplementedException(); |         throw new NotImplementedException(); | ||||||
| #endif | #endif | ||||||
|     } |     } | ||||||
| @ -359,7 +404,9 @@ public class TrainingDMO { | |||||||
|         var trainings = from a in db.Trainings select a; |         var trainings = from a in db.Trainings select a; | ||||||
|  |  | ||||||
|         return trainings.ToList(); |         return trainings.ToList(); | ||||||
| #else | #endif | ||||||
|  |  | ||||||
|  | #if NET8 | ||||||
|         throw new NotImplementedException(); |         throw new NotImplementedException(); | ||||||
| #endif | #endif | ||||||
|     } |     } | ||||||
| @ -370,7 +417,9 @@ public class TrainingDMO { | |||||||
|         var trainingAssignments = from a in db.TrainingAssignments where a.UserID == userID && a.Deleted != true select a; |         var trainingAssignments = from a in db.TrainingAssignments where a.UserID == userID && a.Deleted != true select a; | ||||||
|  |  | ||||||
|         return trainingAssignments.ToList(); |         return trainingAssignments.ToList(); | ||||||
| #else | #endif | ||||||
|  |  | ||||||
|  | #if NET8 | ||||||
|         throw new NotImplementedException(); |         throw new NotImplementedException(); | ||||||
| #endif | #endif | ||||||
|     } |     } | ||||||
| @ -390,7 +439,9 @@ public class TrainingDMO { | |||||||
|             string exception = e.ToString(); |             string exception = e.ToString(); | ||||||
|             Console.WriteLine(e); |             Console.WriteLine(e); | ||||||
|         } |         } | ||||||
| #else | #endif | ||||||
|  |  | ||||||
|  | #if NET8 | ||||||
|         throw new NotImplementedException(); |         throw new NotImplementedException(); | ||||||
| #endif | #endif | ||||||
|     } |     } | ||||||
| @ -410,7 +461,9 @@ public class TrainingDMO { | |||||||
|             string exception = e.ToString(); |             string exception = e.ToString(); | ||||||
|             Console.WriteLine(e); |             Console.WriteLine(e); | ||||||
|         } |         } | ||||||
| #else | #endif | ||||||
|  |  | ||||||
|  | #if NET8 | ||||||
|         throw new NotImplementedException(); |         throw new NotImplementedException(); | ||||||
| #endif | #endif | ||||||
|     } |     } | ||||||
| @ -431,7 +484,9 @@ public class TrainingDMO { | |||||||
|             DeleteTrainingAssignment(trainingAssignment.ID); |             DeleteTrainingAssignment(trainingAssignment.ID); | ||||||
|             DeleteTrainingDocAck(trainingAssignment.ID); |             DeleteTrainingDocAck(trainingAssignment.ID); | ||||||
|         } |         } | ||||||
| #else | #endif | ||||||
|  |  | ||||||
|  | #if NET8 | ||||||
|         throw new NotImplementedException(); |         throw new NotImplementedException(); | ||||||
| #endif       | #endif       | ||||||
|     } |     } | ||||||
| @ -451,7 +506,9 @@ public class TrainingDMO { | |||||||
|             } |             } | ||||||
|             DeleteTrainingAssignment(item.ID); |             DeleteTrainingAssignment(item.ID); | ||||||
|         } |         } | ||||||
| #else | #endif | ||||||
|  |  | ||||||
|  | #if NET8 | ||||||
|         throw new NotImplementedException(); |         throw new NotImplementedException(); | ||||||
| #endif | #endif | ||||||
|     } |     } | ||||||
| @ -478,7 +535,9 @@ public class TrainingDMO { | |||||||
|         } else { |         } else { | ||||||
|             return false; |             return false; | ||||||
|         } |         } | ||||||
| #else | #endif | ||||||
|  |  | ||||||
|  | #if NET8 | ||||||
|         throw new NotImplementedException(); |         throw new NotImplementedException(); | ||||||
| #endif | #endif | ||||||
|     } |     } | ||||||
| @ -488,7 +547,9 @@ public class TrainingDMO { | |||||||
|         FabApprovalTrainingEntities db = new FabApprovalTrainingEntities(); |         FabApprovalTrainingEntities db = new FabApprovalTrainingEntities(); | ||||||
|         List<Training> openTrainings = (from a in db.Trainings where a.Status != true && a.Deleted != true select a).ToList(); |         List<Training> openTrainings = (from a in db.Trainings where a.Status != true && a.Deleted != true select a).ToList(); | ||||||
|         return openTrainings; |         return openTrainings; | ||||||
| #else | #endif | ||||||
|  |  | ||||||
|  | #if NET8 | ||||||
|         throw new NotImplementedException(); |         throw new NotImplementedException(); | ||||||
| #endif | #endif | ||||||
|     } |     } | ||||||
| @ -498,7 +559,9 @@ public class TrainingDMO { | |||||||
|         FabApprovalTrainingEntities db = new FabApprovalTrainingEntities(); |         FabApprovalTrainingEntities db = new FabApprovalTrainingEntities(); | ||||||
|         List<TrainingAssignment> openAssignments = (from a in FabApprovalDB.TrainingAssignments where a.TrainingID == trainingID && a.status != true && a.Deleted != true select a).ToList(); |         List<TrainingAssignment> openAssignments = (from a in FabApprovalDB.TrainingAssignments where a.TrainingID == trainingID && a.status != true && a.Deleted != true select a).ToList(); | ||||||
|         return openAssignments; |         return openAssignments; | ||||||
| #else | #endif | ||||||
|  |  | ||||||
|  | #if NET8 | ||||||
|         throw new NotImplementedException(); |         throw new NotImplementedException(); | ||||||
| #endif | #endif | ||||||
|     } |     } | ||||||
|  | |||||||
| @ -321,6 +321,7 @@ | |||||||
|     <Compile Include="Models\PartsRequestModels.cs" /> |     <Compile Include="Models\PartsRequestModels.cs" /> | ||||||
|     <Compile Include="Models\ProductViewModel.cs" /> |     <Compile Include="Models\ProductViewModel.cs" /> | ||||||
|     <Compile Include="Models\TestModels.cs" /> |     <Compile Include="Models\TestModels.cs" /> | ||||||
|  |     <Compile Include="Models\User.cs" /> | ||||||
|     <Compile Include="Models\UserSubRoles.cs" /> |     <Compile Include="Models\UserSubRoles.cs" /> | ||||||
|     <Compile Include="Models\WinEventLogModel.cs" /> |     <Compile Include="Models\WinEventLogModel.cs" /> | ||||||
|     <Compile Include="Models\WorkFlowModels.cs" /> |     <Compile Include="Models\WorkFlowModels.cs" /> | ||||||
|  | |||||||
| @ -5,7 +5,9 @@ using System.Linq; | |||||||
| using System.Web; | using System.Web; | ||||||
| using System.Web.Hosting; | using System.Web.Hosting; | ||||||
| using System.Web.Http; | using System.Web.Http; | ||||||
|  | #if !NET8 | ||||||
| using System.Web.Mvc; | using System.Web.Mvc; | ||||||
|  | #endif | ||||||
| using System.Web.Optimization; | using System.Web.Optimization; | ||||||
| using System.Web.Routing; | using System.Web.Routing; | ||||||
| using System.Web.Security; | using System.Web.Security; | ||||||
| @ -63,7 +65,7 @@ public class MvcApplication : System.Web.HttpApplication { | |||||||
|     protected void Application_EndRequest() { |     protected void Application_EndRequest() { | ||||||
|         var context = new HttpContextWrapper(Context); |         var context = new HttpContextWrapper(Context); | ||||||
|  |  | ||||||
|         // Do a direct 401 unauthorized | #if !NET8 | ||||||
|         if (Context.Response.StatusCode == 301 && context.Request.IsAjaxRequest()) { |         if (Context.Response.StatusCode == 301 && context.Request.IsAjaxRequest()) { | ||||||
|             Context.Response.Clear(); |             Context.Response.Clear(); | ||||||
|             Context.Response.StatusCode = 401; |             Context.Response.StatusCode = 401; | ||||||
| @ -72,18 +74,27 @@ public class MvcApplication : System.Web.HttpApplication { | |||||||
|             context.Response.Clear(); |             context.Response.Clear(); | ||||||
|             context.Response.StatusCode = 401; |             context.Response.StatusCode = 401; | ||||||
|         } |         } | ||||||
|  | #endif | ||||||
|  | #if NET8 | ||||||
|  |         if (Context.Response.StatusCode == 301 && context.Request.Headers.TryGetValue("X-Requested-With", out Microsoft.Extensions.Primitives.StringValues strings) && strings[0] == "XMLHttpRequest") { | ||||||
|  |             Context.Response.Clear(); | ||||||
|  |             Context.Response.StatusCode = 401; | ||||||
|  |         } else if (FormsAuthentication.IsEnabled && context.Response.StatusCode == 302 | ||||||
|  |               && context.Request.Headers.TryGetValue("X-Requested-With", out Microsoft.Extensions.Primitives.StringValues strings) && strings[0] == "XMLHttpRequest") { | ||||||
|  |             context.Response.Clear(); | ||||||
|  |             context.Response.StatusCode = 401; | ||||||
|  |         } | ||||||
|  | #endif | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     protected void Session_Start(object sender, EventArgs e) { |     protected void Session_Start(object sender, EventArgs e) { | ||||||
|         Session[GlobalVars.ECN_VIEW_OPTION] = "Pending Approvals"; |         GlobalVars.SetECNViewOption(Session, "Pending Approvals"); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     protected void Session_End(object sender, EventArgs e) { |     protected void Session_End(object sender, EventArgs e) { | ||||||
|         // FormsAuthentication.SignOut(); |         // FormsAuthentication.SignOut(); | ||||||
|         try { |         try { | ||||||
|             Session[GlobalVars.SESSION_USERNAME] = ""; |             GlobalVars.EndSession(Session); | ||||||
|             Session[GlobalVars.SESSION_USERID] = ""; |  | ||||||
|             Session[GlobalVars.IS_ADMIN] = null; |  | ||||||
|         } catch (Exception ex) { |         } catch (Exception ex) { | ||||||
|             Functions.WriteEvent(null, @User.Identity.Name + "\r\n Session Closed - \r\n" + ex.Message.ToString(), System.Diagnostics.EventLogEntryType.Error); |             Functions.WriteEvent(null, @User.Identity.Name + "\r\n Session Closed - \r\n" + ex.Message.ToString(), System.Diagnostics.EventLogEntryType.Error); | ||||||
|         } |         } | ||||||
|  | |||||||
| @ -2,7 +2,9 @@ | |||||||
|  |  | ||||||
| using ExcelDataReader; | using ExcelDataReader; | ||||||
|  |  | ||||||
| #else  | #endif | ||||||
|  |  | ||||||
|  | #if !NET8 | ||||||
|  |  | ||||||
| using Excel; | using Excel; | ||||||
|  |  | ||||||
| @ -94,7 +96,9 @@ public class ExcelData { | |||||||
|     public IEnumerable<DataRow> getData(bool firstRowIsColumnNames = true) => |     public IEnumerable<DataRow> getData(bool firstRowIsColumnNames = true) => | ||||||
|         throw new NotImplementedException(); |         throw new NotImplementedException(); | ||||||
|  |  | ||||||
| #else | #endif | ||||||
|  |  | ||||||
|  | #if !NET8 | ||||||
|  |  | ||||||
|     public IEnumerable<DataRow> getData(bool firstRowIsColumnNames = true) { |     public IEnumerable<DataRow> getData(bool firstRowIsColumnNames = true) { | ||||||
|         IExcelDataReader reader = getExcelReader(); |         IExcelDataReader reader = getExcelReader(); | ||||||
|  | |||||||
| @ -6,10 +6,15 @@ namespace Fab2ApprovalSystem.Misc; | |||||||
| public class GlobalVars { | public class GlobalVars { | ||||||
|  |  | ||||||
|     public int USER_ID; |     public int USER_ID; | ||||||
| #else |  | ||||||
|  | #endif | ||||||
|  |  | ||||||
|  | #if NET8 | ||||||
|  |  | ||||||
| public static class GlobalVars { | public static class GlobalVars { | ||||||
|  |  | ||||||
|     public static int USER_ID = 0; |     public static int USER_ID = 0; | ||||||
|  |  | ||||||
| #endif | #endif | ||||||
|     public const string SESSION_USERNAME = "UserName"; |     public const string SESSION_USERNAME = "UserName"; | ||||||
|     public const string ApplicationName = "LotDisposition"; |     public const string ApplicationName = "LotDisposition"; | ||||||
| @ -98,4 +103,268 @@ public static class GlobalVars { | |||||||
|         Main, D1, D2, D3, D4, D5, D6, D7, D8, CF |         Main, D1, D2, D3, D4, D5, D6, D7, D8, CF | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  | #if !NET8 | ||||||
|  |  | ||||||
|  |     public static void EndSession(System.Web.SessionState.HttpSessionState session) { | ||||||
|  |         session[SESSION_USERNAME] = ""; | ||||||
|  |         session[SESSION_USERID] = ""; | ||||||
|  |         session[IS_ADMIN] = null; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     public static bool IsAdminValueNull(System.Web.SessionState.HttpSessionState session) => | ||||||
|  |         session[IS_ADMIN] == null; | ||||||
|  |  | ||||||
|  |     public static bool IsUserIdValueNotNull(System.Web.SessionState.HttpSessionState session) => | ||||||
|  |         session[SESSION_USERID] != null; | ||||||
|  |  | ||||||
|  |     public static bool IsAdminValueNotNull(System.Web.SessionState.HttpSessionState session) => | ||||||
|  |         session[IS_ADMIN] != null; | ||||||
|  |  | ||||||
|  |     public static bool IsUserNameNull(System.Web.SessionState.HttpSessionState session) => | ||||||
|  |         session[SESSION_USERNAME] == null; | ||||||
|  |  | ||||||
|  |     public static bool IsAdmin(System.Web.SessionState.HttpSessionState session) => | ||||||
|  |         bool.Parse(session[IS_ADMIN].ToString()); | ||||||
|  |  | ||||||
|  |     public static bool IsManager(System.Web.SessionState.HttpSessionState session) => | ||||||
|  |         bool.Parse(session[IS_MANAGER].ToString()); | ||||||
|  |  | ||||||
|  |     public static bool IsOOO(System.Web.SessionState.HttpSessionState session) => | ||||||
|  |         bool.Parse(session[OOO].ToString()); | ||||||
|  |  | ||||||
|  |     public static bool GetCreateNewRevision(System.Web.SessionState.HttpSessionState session) => | ||||||
|  |         bool.Parse(session["CreateNewRevision"].ToString()); | ||||||
|  |  | ||||||
|  |     public static bool GetCreateLotTravNewRevision(System.Web.SessionState.HttpSessionState session) => | ||||||
|  |         bool.Parse(session["CreateLotTravNewRevision"].ToString()); | ||||||
|  |  | ||||||
|  |     public static int GetUserId(System.Web.SessionState.HttpSessionState session) => | ||||||
|  |         int.Parse(GetUserIdValue(session)); | ||||||
|  |  | ||||||
|  |     public static string GetUserIdValue(System.Web.SessionState.HttpSessionState session) => | ||||||
|  |         session[SESSION_USERID].ToString(); | ||||||
|  |  | ||||||
|  |     public static string GetJWT(System.Web.SessionState.HttpSessionState session) => | ||||||
|  |         session["JWT"].ToString(); | ||||||
|  |  | ||||||
|  |     public static string GetRefreshToken(System.Web.SessionState.HttpSessionState session) => | ||||||
|  |         session["RefreshToken"].ToString(); | ||||||
|  |  | ||||||
|  |     public static string GetAllDocumentsFilterData(System.Web.SessionState.HttpSessionState session) => | ||||||
|  |         session["AllDocumentsFilterData"].ToString(); | ||||||
|  |  | ||||||
|  |     public static string GetSWRFilterData(System.Web.SessionState.HttpSessionState session) => | ||||||
|  |         session["SWRFilterData"].ToString(); | ||||||
|  |  | ||||||
|  |     public static string GetPCRBFilterData(System.Web.SessionState.HttpSessionState session) => | ||||||
|  |         session["PCRBFilterData"].ToString(); | ||||||
|  |  | ||||||
|  |     public static string GetUserName(System.Web.SessionState.HttpSessionState session) => | ||||||
|  |         session[SESSION_USERNAME].ToString(); | ||||||
|  |  | ||||||
|  |     public static bool GetCanCreatePartsRequest(System.Web.SessionState.HttpSessionState session) => | ||||||
|  |         bool.Parse(session[CAN_CREATE_PARTS_REQUEST].ToString()); | ||||||
|  |  | ||||||
|  |     public static void SetECNViewOption(System.Web.SessionState.HttpSessionState session, string value) => | ||||||
|  |         session[ECN_VIEW_OPTION] = value; | ||||||
|  |  | ||||||
|  |     public static void SetCreateNewRevision(System.Web.SessionState.HttpSessionState session, bool value) => | ||||||
|  |         session["CreateNewRevision"] = value; | ||||||
|  |  | ||||||
|  |     public static void SetSWRFilterData(System.Web.SessionState.HttpSessionState session, string value) => | ||||||
|  |         session["SWRFilterData"] = value; | ||||||
|  |  | ||||||
|  |     public static void SetPCRBFilterData(System.Web.SessionState.HttpSessionState session, string value) => | ||||||
|  |         session["PCRBFilterData"] = value; | ||||||
|  |  | ||||||
|  |     public static void SetAllDocumentsFilterData(System.Web.SessionState.HttpSessionState session, string value) => | ||||||
|  |         session["AllDocumentsFilterData"] = value; | ||||||
|  |  | ||||||
|  |     public static void SetCreateLotTravNewRevision(System.Web.SessionState.HttpSessionState session, bool value) => | ||||||
|  |         session["CreateLotTravNewRevision"] = value; | ||||||
|  |  | ||||||
|  |     public static void SetOOO(System.Web.SessionState.HttpSessionState session, bool value) => | ||||||
|  |         session[OOO] = value; | ||||||
|  |  | ||||||
|  |     public static bool IsAdminValueNull(System.Web.HttpSessionStateBase session) => | ||||||
|  |         session[IS_ADMIN] == null; | ||||||
|  |  | ||||||
|  |     public static bool IsUserIdValueNotNull(System.Web.HttpSessionStateBase session) => | ||||||
|  |         session[SESSION_USERID] != null; | ||||||
|  |  | ||||||
|  |     public static bool IsAdminValueNotNull(System.Web.HttpSessionStateBase session) => | ||||||
|  |         session[IS_ADMIN] != null; | ||||||
|  |  | ||||||
|  |     public static bool IsUserNameNull(System.Web.HttpSessionStateBase session) => | ||||||
|  |         session[SESSION_USERNAME] == null; | ||||||
|  |  | ||||||
|  |     public static bool IsAdmin(System.Web.HttpSessionStateBase session) => | ||||||
|  |         bool.Parse(session[IS_ADMIN].ToString()); | ||||||
|  |  | ||||||
|  |     public static bool IsManager(System.Web.HttpSessionStateBase session) => | ||||||
|  |         bool.Parse(session[IS_MANAGER].ToString()); | ||||||
|  |  | ||||||
|  |     public static bool IsOOO(System.Web.HttpSessionStateBase session) => | ||||||
|  |         bool.Parse(session[OOO].ToString()); | ||||||
|  |  | ||||||
|  |     public static bool GetCreateNewRevision(System.Web.HttpSessionStateBase session) => | ||||||
|  |         bool.Parse(session["CreateNewRevision"].ToString()); | ||||||
|  |  | ||||||
|  |     public static bool GetCreateLotTravNewRevision(System.Web.HttpSessionStateBase session) => | ||||||
|  |         bool.Parse(session["CreateLotTravNewRevision"].ToString()); | ||||||
|  |  | ||||||
|  |     public static int GetUserId(System.Web.HttpSessionStateBase session) => | ||||||
|  |         int.Parse(GetUserIdValue(session)); | ||||||
|  |  | ||||||
|  |     public static string GetUserIdValue(System.Web.HttpSessionStateBase session) => | ||||||
|  |         session[SESSION_USERID].ToString(); | ||||||
|  |  | ||||||
|  |     public static string GetJWT(System.Web.HttpSessionStateBase session) => | ||||||
|  |         session["JWT"].ToString(); | ||||||
|  |  | ||||||
|  |     public static string GetRefreshToken(System.Web.HttpSessionStateBase session) => | ||||||
|  |         session["RefreshToken"].ToString(); | ||||||
|  |  | ||||||
|  |     public static string GetAllDocumentsFilterData(System.Web.HttpSessionStateBase session) => | ||||||
|  |         session["AllDocumentsFilterData"].ToString(); | ||||||
|  |  | ||||||
|  |     public static string GetSWRFilterData(System.Web.HttpSessionStateBase session) => | ||||||
|  |         session["SWRFilterData"].ToString(); | ||||||
|  |  | ||||||
|  |     public static string GetPCRBFilterData(System.Web.HttpSessionStateBase session) => | ||||||
|  |         session["PCRBFilterData"].ToString(); | ||||||
|  |  | ||||||
|  |     public static string GetUserName(System.Web.HttpSessionStateBase session) => | ||||||
|  |         session[SESSION_USERNAME].ToString(); | ||||||
|  |  | ||||||
|  |     public static bool GetCanCreatePartsRequest(System.Web.HttpSessionStateBase session) => | ||||||
|  |         bool.Parse(session[CAN_CREATE_PARTS_REQUEST].ToString()); | ||||||
|  |  | ||||||
|  |     public static void SetECNViewOption(System.Web.HttpSessionStateBase session, string value) => | ||||||
|  |         session[ECN_VIEW_OPTION] = value; | ||||||
|  |  | ||||||
|  |     public static void SetCreateNewRevision(System.Web.HttpSessionStateBase session, bool value) => | ||||||
|  |         session["CreateNewRevision"] = value; | ||||||
|  |  | ||||||
|  |     public static void SetSWRFilterData(System.Web.HttpSessionStateBase session, string value) => | ||||||
|  |         session["SWRFilterData"] = value; | ||||||
|  |  | ||||||
|  |     public static void SetPCRBFilterData(System.Web.HttpSessionStateBase session, string value) => | ||||||
|  |         session["PCRBFilterData"] = value; | ||||||
|  |  | ||||||
|  |     public static void SetAllDocumentsFilterData(System.Web.HttpSessionStateBase session, string value) => | ||||||
|  |         session["AllDocumentsFilterData"] = value; | ||||||
|  |  | ||||||
|  |     public static void SetCreateLotTravNewRevision(System.Web.HttpSessionStateBase session, bool value) => | ||||||
|  |         session["CreateLotTravNewRevision"] = value; | ||||||
|  |  | ||||||
|  |     public static void SetOOO(System.Web.HttpSessionStateBase session, bool value) => | ||||||
|  |         session[OOO] = value; | ||||||
|  |  | ||||||
|  |     public static void SetSessionParameters(System.Web.HttpSessionStateBase session, LoginResult loginResult, LoginModel user) { | ||||||
|  |         session["JWT"] = loginResult.AuthTokens.JwtToken; | ||||||
|  |         session["RefreshToken"] = loginResult.AuthTokens.RefreshToken; | ||||||
|  |  | ||||||
|  |         session[SESSION_USERID] = user.UserID; | ||||||
|  |         session[SESSION_USERNAME] = user.FullName; | ||||||
|  |         session[IS_ADMIN] = user.IsAdmin; | ||||||
|  |         session[IS_MANAGER] = user.IsManager; | ||||||
|  |         session[OOO] = user.OOO; | ||||||
|  |         bool check = user.IsAdmin || Fab2ApprovalSystem.Controllers.PartsRequestController.CanCreatePartsRequest(user.UserID); | ||||||
|  |         session[CAN_CREATE_PARTS_REQUEST] = check; | ||||||
|  |     } | ||||||
|  | #endif | ||||||
|  |  | ||||||
|  | #if NET8 | ||||||
|  |  | ||||||
|  |     public static bool IsAdminValueNull(Microsoft.AspNetCore.Http.ISession session) => | ||||||
|  |         Microsoft.AspNetCore.Http.SessionExtensions.Get(session, IS_ADMIN) == null; | ||||||
|  |  | ||||||
|  |     public static bool IsUserIdValueNotNull(Microsoft.AspNetCore.Http.ISession session) => | ||||||
|  |         Microsoft.AspNetCore.Http.SessionExtensions.Get(session, SESSION_USERID) != null; | ||||||
|  |  | ||||||
|  |     public static bool IsAdminValueNotNull(Microsoft.AspNetCore.Http.ISession session) => | ||||||
|  |         Microsoft.AspNetCore.Http.SessionExtensions.Get(session, IS_ADMIN) != null; | ||||||
|  |  | ||||||
|  |     public static bool IsUserNameNull(Microsoft.AspNetCore.Http.ISession session) => | ||||||
|  |         Microsoft.AspNetCore.Http.SessionExtensions.Get(session, SESSION_USERNAME) == null; | ||||||
|  |  | ||||||
|  |     public static bool IsAdmin(Microsoft.AspNetCore.Http.ISession session) => | ||||||
|  |         bool.Parse(Microsoft.AspNetCore.Http.SessionExtensions.GetString(session, IS_ADMIN)); | ||||||
|  |  | ||||||
|  |     public static bool IsManager(Microsoft.AspNetCore.Http.ISession session) => | ||||||
|  |         bool.Parse(Microsoft.AspNetCore.Http.SessionExtensions.GetString(session, IS_MANAGER)); | ||||||
|  |  | ||||||
|  |     public static bool IsOOO(Microsoft.AspNetCore.Http.ISession session) => | ||||||
|  |         bool.Parse(Microsoft.AspNetCore.Http.SessionExtensions.GetString(session, OOO)); | ||||||
|  |  | ||||||
|  |     public static bool GetCreateNewRevision(Microsoft.AspNetCore.Http.ISession session) => | ||||||
|  |         bool.Parse(Microsoft.AspNetCore.Http.SessionExtensions.GetString(session, "CreateNewRevision")); | ||||||
|  |  | ||||||
|  |     public static bool GetCreateLotTravNewRevision(Microsoft.AspNetCore.Http.ISession session) => | ||||||
|  |         bool.Parse(Microsoft.AspNetCore.Http.SessionExtensions.GetString(session, "CreateLotTravNewRevision")); | ||||||
|  |  | ||||||
|  |     public static int GetUserId(Microsoft.AspNetCore.Http.ISession session) => | ||||||
|  |         int.Parse(GetUserIdValue(session)); | ||||||
|  |  | ||||||
|  |     public static string GetUserIdValue(Microsoft.AspNetCore.Http.ISession session) => | ||||||
|  |         Microsoft.AspNetCore.Http.SessionExtensions.GetString(session, SESSION_USERID); | ||||||
|  |  | ||||||
|  |     public static string GetJWT(Microsoft.AspNetCore.Http.ISession session) => | ||||||
|  |         Microsoft.AspNetCore.Http.SessionExtensions.GetString(session, "JWT"); | ||||||
|  |  | ||||||
|  |     public static string GetRefreshToken(Microsoft.AspNetCore.Http.ISession session) => | ||||||
|  |         Microsoft.AspNetCore.Http.SessionExtensions.GetString(session, "RefreshToken"); | ||||||
|  |  | ||||||
|  |     public static string GetAllDocumentsFilterData(Microsoft.AspNetCore.Http.ISession session) => | ||||||
|  |         Microsoft.AspNetCore.Http.SessionExtensions.GetString(session, "AllDocumentsFilterData"); | ||||||
|  |  | ||||||
|  |     public static string GetSWRFilterData(Microsoft.AspNetCore.Http.ISession session) => | ||||||
|  |         Microsoft.AspNetCore.Http.SessionExtensions.GetString(session, "SWRFilterData"); | ||||||
|  |  | ||||||
|  |     public static string GetPCRBFilterData(Microsoft.AspNetCore.Http.ISession session) => | ||||||
|  |         Microsoft.AspNetCore.Http.SessionExtensions.GetString(session, "PCRBFilterData"); | ||||||
|  |  | ||||||
|  |     public static string GetUserName(Microsoft.AspNetCore.Http.ISession session) => | ||||||
|  |         Microsoft.AspNetCore.Http.SessionExtensions.GetString(session, SESSION_USERNAME); | ||||||
|  |  | ||||||
|  |     public static bool GetCanCreatePartsRequest(Microsoft.AspNetCore.Http.ISession session) => | ||||||
|  |         bool.Parse(Microsoft.AspNetCore.Http.SessionExtensions.GetString(session, CAN_CREATE_PARTS_REQUEST)); | ||||||
|  |  | ||||||
|  |     public static void SetECNViewOption(Microsoft.AspNetCore.Http.ISession session, string value) => | ||||||
|  |         Microsoft.AspNetCore.Http.SessionExtensions.SetString(session, ECN_VIEW_OPTION, value); | ||||||
|  |  | ||||||
|  |     public static void SetSWRFilterData(Microsoft.AspNetCore.Http.ISession session, string value) => | ||||||
|  |         Microsoft.AspNetCore.Http.SessionExtensions.SetString(session, "SWRFilterData", value); | ||||||
|  |  | ||||||
|  |     public static void SetPCRBFilterData(Microsoft.AspNetCore.Http.ISession session, string value) => | ||||||
|  |         Microsoft.AspNetCore.Http.SessionExtensions.SetString(session, "PCRBFilterData", value); | ||||||
|  |  | ||||||
|  |     public static void SetAllDocumentsFilterData(Microsoft.AspNetCore.Http.ISession session, string value) => | ||||||
|  |         Microsoft.AspNetCore.Http.SessionExtensions.SetString(session, "AllDocumentsFilterData", value); | ||||||
|  |  | ||||||
|  |     public static void SetCreateNewRevision(Microsoft.AspNetCore.Http.ISession session, bool value) => | ||||||
|  |         Microsoft.AspNetCore.Http.SessionExtensions.SetString(session, "CreateNewRevision", value.ToString()); | ||||||
|  |  | ||||||
|  |     public static void SetCreateLotTravNewRevision(Microsoft.AspNetCore.Http.ISession session, bool value) => | ||||||
|  |         Microsoft.AspNetCore.Http.SessionExtensions.SetString(session, "CreateLotTravNewRevision", value.ToString()); | ||||||
|  |  | ||||||
|  |     public static void SetOOO(Microsoft.AspNetCore.Http.ISession session, bool value) => | ||||||
|  |         Microsoft.AspNetCore.Http.SessionExtensions.SetString(session, OOO, value.ToString()); | ||||||
|  |  | ||||||
|  |     public static void SetSessionParameters(Microsoft.AspNetCore.Http.ISession session, LoginResult loginResult, LoginModel user) { | ||||||
|  |         Microsoft.AspNetCore.Http.SessionExtensions.SetString(session, "JWT", loginResult.AuthTokens.JwtToken); | ||||||
|  |         Microsoft.AspNetCore.Http.SessionExtensions.SetString(session, "RefreshToken", loginResult.AuthTokens.RefreshToken); | ||||||
|  |  | ||||||
|  |         Microsoft.AspNetCore.Http.SessionExtensions.SetInt32(session, SESSION_USERID, user.UserID); | ||||||
|  |         Microsoft.AspNetCore.Http.SessionExtensions.SetString(session, SESSION_USERNAME, user.FullName); | ||||||
|  |         Microsoft.AspNetCore.Http.SessionExtensions.SetString(session, IS_ADMIN, user.IsAdmin.ToString()); | ||||||
|  |         Microsoft.AspNetCore.Http.SessionExtensions.SetString(session, IS_MANAGER, user.IsManager.ToString()); | ||||||
|  |         Microsoft.AspNetCore.Http.SessionExtensions.SetString(session, OOO, user.OOO.ToString()); | ||||||
|  |         // bool check = user.IsAdmin || Fab2ApprovalSystem.Controllers.PartsRequestController.CanCreatePartsRequest(user.UserID); | ||||||
|  |         // Microsoft.AspNetCore.Http.SessionExtensions.SetString(session, CAN_CREATE_PARTS_REQUEST, check.ToString()); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  | #endif | ||||||
|  |  | ||||||
| } | } | ||||||
| @ -4,7 +4,9 @@ using System; | |||||||
| using System.Collections.Generic; | using System.Collections.Generic; | ||||||
| using System.Linq; | using System.Linq; | ||||||
| using System.Web; | using System.Web; | ||||||
|  | #if !NET8 | ||||||
| using System.Web.Mvc; | using System.Web.Mvc; | ||||||
|  | #endif | ||||||
|  |  | ||||||
| namespace Fab2ApprovalSystem.Misc { | namespace Fab2ApprovalSystem.Misc { | ||||||
|  |  | ||||||
| @ -16,7 +18,7 @@ namespace Fab2ApprovalSystem.Misc { | |||||||
|  |  | ||||||
|             // check if session is supported |             // check if session is supported | ||||||
|  |  | ||||||
|             if (session[GlobalVars.SESSION_USERNAME] == null) { |             if (GlobalVars.IsUserNameNull(session)) { | ||||||
|                 // check if a new session id was generated |                 // check if a new session id was generated | ||||||
|  |  | ||||||
|                 // this will force MVC to use the standard login redirect, enabling ReturnURL functionality |                 // this will force MVC to use the standard login redirect, enabling ReturnURL functionality | ||||||
|  | |||||||
| @ -26,6 +26,9 @@ public class AppSettings { | |||||||
|                        string ifxContainer, |                        string ifxContainer, | ||||||
|                        string ifxDomain, |                        string ifxDomain, | ||||||
|                        bool isInfineonDomain, |                        bool isInfineonDomain, | ||||||
|  |                        string? jwtAudience, | ||||||
|  |                        string? jwtIssuer, | ||||||
|  |                        string? jwtKey, | ||||||
|                        string lotTempPipeLine, |                        string lotTempPipeLine, | ||||||
|                        string mesaTemplateFiles, |                        string mesaTemplateFiles, | ||||||
|                        string nDriveURL, |                        string nDriveURL, | ||||||
| @ -68,6 +71,9 @@ public class AppSettings { | |||||||
|         IFXContainer = ifxContainer; |         IFXContainer = ifxContainer; | ||||||
|         IFXDomain = ifxDomain; |         IFXDomain = ifxDomain; | ||||||
|         IsInfineonDomain = isInfineonDomain; |         IsInfineonDomain = isInfineonDomain; | ||||||
|  |         JwtAudience = jwtAudience; | ||||||
|  |         JwtIssuer = jwtIssuer; | ||||||
|  |         JwtKey = jwtKey; | ||||||
|         LotTempPipeLine = lotTempPipeLine; |         LotTempPipeLine = lotTempPipeLine; | ||||||
|         MesaTemplateFiles = mesaTemplateFiles; |         MesaTemplateFiles = mesaTemplateFiles; | ||||||
|         NDriveURL = nDriveURL; |         NDriveURL = nDriveURL; | ||||||
| @ -112,6 +118,9 @@ public class AppSettings { | |||||||
|     public string IFXContainer { get; } |     public string IFXContainer { get; } | ||||||
|     public string IFXDomain { get; } |     public string IFXDomain { get; } | ||||||
|     public bool IsInfineonDomain { get; } |     public bool IsInfineonDomain { get; } | ||||||
|  |     public string? JwtAudience { get; } | ||||||
|  |     public string? JwtIssuer { get; } | ||||||
|  |     public string? JwtKey { get; } | ||||||
|     public string LotTempPipeLine { get; } |     public string LotTempPipeLine { get; } | ||||||
|     public string MesaTemplateFiles { get; } |     public string MesaTemplateFiles { get; } | ||||||
|     public string NAContainer { get; } |     public string NAContainer { get; } | ||||||
| @ -223,6 +232,9 @@ public class AppSettings { | |||||||
|             string? workingDirectoryName = ConfigurationManager.AppSettings["WorkingDirectoryName"]?.ToString(); |             string? workingDirectoryName = ConfigurationManager.AppSettings["WorkingDirectoryName"]?.ToString(); | ||||||
|             string wasmClientUrl = Environment.GetEnvironmentVariable("FabApprovalWasmClientUrl") ?? |             string wasmClientUrl = Environment.GetEnvironmentVariable("FabApprovalWasmClientUrl") ?? | ||||||
|                 "https://localhost:7255"; |                 "https://localhost:7255"; | ||||||
|  |             string? jwtAudience = ConfigurationManager.AppSettings["JwtAudience"]?.ToString(); | ||||||
|  |             string? jwtIssuer = ConfigurationManager.AppSettings["JwtIssuer"]?.ToString(); | ||||||
|  |             string? jwtKey = ConfigurationManager.AppSettings["JwtKey"]?.ToString(); | ||||||
|             result = new(adminNotificationRecepient: adminNotificationRecepient, |             result = new(adminNotificationRecepient: adminNotificationRecepient, | ||||||
|                          apiBaseUrl: apiBaseUrl, |                          apiBaseUrl: apiBaseUrl, | ||||||
|                          attachmentFolder: attachmentFolder, |                          attachmentFolder: attachmentFolder, | ||||||
| @ -242,6 +254,9 @@ public class AppSettings { | |||||||
|                          ifxContainer: ifxContainer, |                          ifxContainer: ifxContainer, | ||||||
|                          ifxDomain: ifxDomain, |                          ifxDomain: ifxDomain, | ||||||
|                          isInfineonDomain: Misc.GlobalVars.IS_INFINEON_DOMAIN, |                          isInfineonDomain: Misc.GlobalVars.IS_INFINEON_DOMAIN, | ||||||
|  |                          jwtAudience: jwtAudience, | ||||||
|  |                          jwtIssuer: jwtIssuer, | ||||||
|  |                          jwtKey: jwtKey, | ||||||
|                          lotTempPipeLine: lotTempPipeLine, |                          lotTempPipeLine: lotTempPipeLine, | ||||||
|                          mesaTemplateFiles: Misc.GlobalVars.MesaTemplateFiles, |                          mesaTemplateFiles: Misc.GlobalVars.MesaTemplateFiles, | ||||||
|                          naContainer: naContainer, |                          naContainer: naContainer, | ||||||
|  | |||||||
							
								
								
									
										37
									
								
								Fab2ApprovalSystem/Models/HttpException.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										37
									
								
								Fab2ApprovalSystem/Models/HttpException.cs
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,37 @@ | |||||||
|  | #if NET8 | ||||||
|  |  | ||||||
|  | using System; | ||||||
|  |  | ||||||
|  | namespace Fab2ApprovalSystem.Models; | ||||||
|  |  | ||||||
|  | public class HttpException : Exception { | ||||||
|  |     private readonly int httpStatusCode; | ||||||
|  |  | ||||||
|  |     public HttpException(int httpStatusCode) { | ||||||
|  |         this.httpStatusCode = httpStatusCode; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     public HttpException(System.Net.HttpStatusCode httpStatusCode) { | ||||||
|  |         this.httpStatusCode = (int)httpStatusCode; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     public HttpException(int httpStatusCode, string message) : base(message) { | ||||||
|  |         this.httpStatusCode = httpStatusCode; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     public HttpException(System.Net.HttpStatusCode httpStatusCode, string message) : base(message) { | ||||||
|  |         this.httpStatusCode = (int)httpStatusCode; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     public HttpException(int httpStatusCode, string message, Exception inner) : base(message, inner) { | ||||||
|  |         this.httpStatusCode = httpStatusCode; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     public HttpException(System.Net.HttpStatusCode httpStatusCode, string message, Exception inner) : base(message, inner) { | ||||||
|  |         this.httpStatusCode = (int)httpStatusCode; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     public int StatusCode { get { return httpStatusCode; } } | ||||||
|  | } | ||||||
|  |  | ||||||
|  | #endif | ||||||
| @ -3,6 +3,7 @@ | |||||||
| public class LoginResult { | public class LoginResult { | ||||||
|  |  | ||||||
|     public bool IsAuthenticated { get; set; } |     public bool IsAuthenticated { get; set; } | ||||||
|  |     public User User { get; set; } | ||||||
|     public AuthTokens AuthTokens { get; set; } |     public AuthTokens AuthTokens { get; set; } | ||||||
|  |  | ||||||
| } | } | ||||||
							
								
								
									
										30
									
								
								Fab2ApprovalSystem/Models/User.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										30
									
								
								Fab2ApprovalSystem/Models/User.cs
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,30 @@ | |||||||
|  | using System; | ||||||
|  |  | ||||||
|  | namespace Fab2ApprovalSystem.Models; | ||||||
|  |  | ||||||
|  | public class User { | ||||||
|  |     public int UserID { get; set; } | ||||||
|  |     public string LoginID { get; set; } | ||||||
|  |     public string FirstName { get; set; } | ||||||
|  |     public string LastName { get; set; } | ||||||
|  |     public string Email { get; set; } | ||||||
|  |     public bool IsAdmin { get; set; } = false; | ||||||
|  |     public bool IsManager { get; set; } = false; | ||||||
|  |     public bool IsActive { get; set; } = false; | ||||||
|  |     public bool OOO { get; set; } = false; | ||||||
|  |     public DateTime OOOStartDate { get; set; } | ||||||
|  |     public DateTime OOOExpirationDate { get; set; } | ||||||
|  |     public int DelegatedTo { get; set; } | ||||||
|  |  | ||||||
|  |     public string GetFullName() => | ||||||
|  |         $"{FirstName} {LastName}"; | ||||||
|  |  | ||||||
|  |     public override bool Equals(object? obj) { | ||||||
|  |         User? u = obj as User; | ||||||
|  |  | ||||||
|  |         return u is not null && u.UserID == UserID; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     public override int GetHashCode() => | ||||||
|  |         UserID.GetHashCode(); | ||||||
|  | } | ||||||
| @ -1,22 +1,25 @@ | |||||||
| #if !NET8 | #if !NET8 | ||||||
|  |  | ||||||
| // -------------------------------------------------------------------------------------------------------------------- |  | ||||||
| // <copyright file="BinaryContentResult.cs" company="SemanticArchitecture"> |  | ||||||
| //   http://www.SemanticArchitecture.net pkalkie@gmail.com |  | ||||||
| // </copyright> |  | ||||||
| // <summary> |  | ||||||
| //   An ActionResult used to send binary data to the browser. |  | ||||||
| // </summary> |  | ||||||
| // -------------------------------------------------------------------------------------------------------------------- |  | ||||||
|  |  | ||||||
| namespace Fab2ApprovalSystem.PdfGenerator { |  | ||||||
|     using System.IO; |  | ||||||
| using System.Web; | using System.Web; | ||||||
| using System.Web.Mvc; | using System.Web.Mvc; | ||||||
|  | using System.Web.Security; | ||||||
|  | #endif | ||||||
|  |  | ||||||
|  | #if NET8 | ||||||
|  | using Microsoft.AspNetCore.Mvc; | ||||||
|  | #endif | ||||||
|  |  | ||||||
|  | #if !NET8 | ||||||
|  | using System; | ||||||
|  | using System.Collections.Generic; | ||||||
|  | using System.Net; | ||||||
|  | using System.Net.Http; | ||||||
|  | using System.Security.Claims; | ||||||
|  | using System.Threading.Tasks; | ||||||
|  | using System.IO; | ||||||
|  | #endif | ||||||
|  |  | ||||||
|  | namespace Fab2ApprovalSystem.PdfGenerator; | ||||||
|  |  | ||||||
|     /// <summary> |  | ||||||
|     /// An ActionResult used to send binary data to the browser. |  | ||||||
|     /// </summary> |  | ||||||
| public class BinaryContentResult : ActionResult { | public class BinaryContentResult : ActionResult { | ||||||
|     private readonly string contentType; |     private readonly string contentType; | ||||||
|     private readonly byte[] contentBytes; |     private readonly byte[] contentBytes; | ||||||
| @ -26,18 +29,19 @@ namespace Fab2ApprovalSystem.PdfGenerator { | |||||||
|         this.contentType = contentType; |         this.contentType = contentType; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  | #if !NET8 | ||||||
|     public override void ExecuteResult(ControllerContext context) { |     public override void ExecuteResult(ControllerContext context) { | ||||||
|         var response = context.HttpContext.Response; |         var response = context.HttpContext.Response; | ||||||
|         response.Clear(); |         response.Clear(); | ||||||
|         response.Cache.SetCacheability(HttpCacheability.Public); |         response.Cache.SetCacheability(HttpCacheability.Public); | ||||||
|             response.ContentType = this.contentType; |         response.ContentType = contentType; | ||||||
|  |  | ||||||
|             using (var stream = new MemoryStream(this.contentBytes)) { |         using (var stream = new MemoryStream(contentBytes)) { | ||||||
|             stream.WriteTo(response.OutputStream); |             stream.WriteTo(response.OutputStream); | ||||||
|             stream.Flush(); |             stream.Flush(); | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
|     } |  | ||||||
| } |  | ||||||
|  |  | ||||||
| #endif | #endif | ||||||
|  |  | ||||||
|  | } | ||||||
| @ -1,23 +1,45 @@ | |||||||
|  | #if !NET8 | ||||||
|  | using System.Web; | ||||||
|  | using System.Web.Mvc; | ||||||
|  | using System.Web.Security; | ||||||
|  | #endif | ||||||
|  |  | ||||||
| #if !NET8 | #if !NET8 | ||||||
| namespace Fab2ApprovalSystem.PdfGenerator { |  | ||||||
| using iTextSharp.text; | using iTextSharp.text; | ||||||
| using iTextSharp.text.pdf; | using iTextSharp.text.pdf; | ||||||
|  | #endif | ||||||
|  |  | ||||||
|  | #if !NET8 | ||||||
| using System; | using System; | ||||||
|  | using System.Collections.Generic; | ||||||
|  | using System.Net; | ||||||
|  | using System.Net.Http; | ||||||
|  | using System.Security.Claims; | ||||||
|  | using System.Threading.Tasks; | ||||||
|  | #endif | ||||||
|  |  | ||||||
|  | namespace Fab2ApprovalSystem.PdfGenerator; | ||||||
|  |  | ||||||
|  | #if !NET8 | ||||||
|  |  | ||||||
|     /// <summary> |  | ||||||
|     /// This class represents the standard header and footer for a PDF print. |  | ||||||
|     /// application. |  | ||||||
|     /// </summary> |  | ||||||
| public class PrintHeaderFooter : PdfPageEventHelper { | public class PrintHeaderFooter : PdfPageEventHelper { | ||||||
|  |  | ||||||
|     private PdfContentByte pdfContent; |     private PdfContentByte pdfContent; | ||||||
|     private PdfTemplate pageNumberTemplate; |     private PdfTemplate pageNumberTemplate; | ||||||
|     private BaseFont baseFont; |     private BaseFont baseFont; | ||||||
|     private DateTime printTime; |     private DateTime printTime; | ||||||
|  | #endif | ||||||
|  |  | ||||||
|  | #if NET8 | ||||||
|  |  | ||||||
|  | public class PrintHeaderFooter { | ||||||
|  |  | ||||||
|  | #endif | ||||||
|  |  | ||||||
|     public string Title { get; set; } |     public string Title { get; set; } | ||||||
|  |  | ||||||
|  | #if !NET8 | ||||||
|  |  | ||||||
|     public override void OnOpenDocument(PdfWriter writer, Document document) { |     public override void OnOpenDocument(PdfWriter writer, Document document) { | ||||||
|         printTime = DateTime.Now; |         printTime = DateTime.Now; | ||||||
|         baseFont = BaseFont.CreateFont(BaseFont.HELVETICA, BaseFont.CP1252, BaseFont.NOT_EMBEDDED); |         baseFont = BaseFont.CreateFont(BaseFont.HELVETICA, BaseFont.CP1252, BaseFont.NOT_EMBEDDED); | ||||||
| @ -74,6 +96,7 @@ namespace Fab2ApprovalSystem.PdfGenerator { | |||||||
|         pageNumberTemplate.ShowText(string.Empty + (writer.PageNumber - 1)); |         pageNumberTemplate.ShowText(string.Empty + (writer.PageNumber - 1)); | ||||||
|         pageNumberTemplate.EndText(); |         pageNumberTemplate.EndText(); | ||||||
|     } |     } | ||||||
|     } |  | ||||||
| } |  | ||||||
| #endif | #endif | ||||||
|  |  | ||||||
|  | } | ||||||
| @ -1,6 +1,8 @@ | |||||||
|  | #if !NET8 | ||||||
| using iTextSharp.text; | using iTextSharp.text; | ||||||
| using iTextSharp.text.html.simpleparser; | using iTextSharp.text.html.simpleparser; | ||||||
| using iTextSharp.text.pdf; | using iTextSharp.text.pdf; | ||||||
|  | #endif | ||||||
|  |  | ||||||
| using System.IO; | using System.IO; | ||||||
|  |  | ||||||
| @ -31,6 +33,7 @@ public class StandardPdfRenderer { | |||||||
|  |  | ||||||
|     public static MemoryStream GetPortableDocumentFormat(string pageTitle, string htmlText) { |     public static MemoryStream GetPortableDocumentFormat(string pageTitle, string htmlText) { | ||||||
|         MemoryStream result = new(); |         MemoryStream result = new(); | ||||||
|  | #if !NET8 | ||||||
|         using (Document pdfDocument = new Document(PageSize.A4, HorizontalMargin, HorizontalMargin, VerticalMargin, VerticalMargin)) { |         using (Document pdfDocument = new Document(PageSize.A4, HorizontalMargin, HorizontalMargin, VerticalMargin, VerticalMargin)) { | ||||||
|             using (PdfWriter pdfWriter = PdfWriter.GetInstance(pdfDocument, result)) { |             using (PdfWriter pdfWriter = PdfWriter.GetInstance(pdfDocument, result)) { | ||||||
|                 pdfWriter.CloseStream = false; |                 pdfWriter.CloseStream = false; | ||||||
| @ -43,6 +46,7 @@ public class StandardPdfRenderer { | |||||||
|                 } |                 } | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
|  | #endif | ||||||
|         return result; |         return result; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  | |||||||
| @ -20,6 +20,7 @@ using System.Configuration; | |||||||
| namespace Fab2ApprovalSystem.Utilities; | namespace Fab2ApprovalSystem.Utilities; | ||||||
|  |  | ||||||
| #if !NET8 | #if !NET8 | ||||||
|  |  | ||||||
| public class FileUtilities<T> : Controller // <T> => System.Web.Mvc.FileContentResult | public class FileUtilities<T> : Controller // <T> => System.Web.Mvc.FileContentResult | ||||||
| { | { | ||||||
|  |  | ||||||
| @ -28,14 +29,22 @@ public class FileUtilities<T> : Controller // <T> => System.Web.Mvc.FileContentR | |||||||
|         var result = File(fileBytes, System.Net.Mime.MediaTypeNames.Application.Octet, pathToFile); |         var result = File(fileBytes, System.Net.Mime.MediaTypeNames.Application.Octet, pathToFile); | ||||||
|         return (T)Convert.ChangeType(result, typeof(T)); |         return (T)Convert.ChangeType(result, typeof(T)); | ||||||
|     } |     } | ||||||
| #else |  | ||||||
|  | #endif | ||||||
|  |  | ||||||
|  | #if NET8 | ||||||
|  |  | ||||||
| public class FileUtilities<T> { | public class FileUtilities<T> { | ||||||
|  |  | ||||||
| #endif | #endif | ||||||
|  |  | ||||||
|     public byte[] GetFile(string s) { |     public byte[] GetFile(string s) { | ||||||
|  |  | ||||||
| #if !NET8 | #if !NET8 | ||||||
|         FileStream fs = System.IO.File.OpenRead(s); |         FileStream fs = System.IO.File.OpenRead(s); | ||||||
| #else | #endif | ||||||
|  |  | ||||||
|  | #if NET8 | ||||||
|         FileStream fs = File.OpenRead(s); |         FileStream fs = File.OpenRead(s); | ||||||
| #endif | #endif | ||||||
|         byte[] data = new byte[fs.Length]; |         byte[] data = new byte[fs.Length]; | ||||||
|  | |||||||
| @ -34,7 +34,7 @@ | |||||||
|             </div> |             </div> | ||||||
|             <div class="navbar-collapse collapse"> |             <div class="navbar-collapse collapse"> | ||||||
|                 <ul class="nav navbar-nav">             |                 <ul class="nav navbar-nav">             | ||||||
|                     @if ((bool)@Session[GlobalVars.IS_ADMIN]) |                     @if (@GlobalVars.IsAdmin(Session)) | ||||||
|                     {  |                     {  | ||||||
|                         <li>@Html.ActionLink("Admin", "Index", "Admin")</li> |                         <li>@Html.ActionLink("Admin", "Index", "Admin")</li> | ||||||
|                     } |                     } | ||||||
|  | |||||||
| @ -144,7 +144,7 @@ | |||||||
|                             </div> |                             </div> | ||||||
|                             <div class="col-sm-9"> |                             <div class="col-sm-9"> | ||||||
|                                 @Html.TextBoxFor(model => model.OwnerName, new { id = "txtOwner", @class = "k-textbox", Readonly = "Readonly", style = "background-color:lightblue" }) |                                 @Html.TextBoxFor(model => model.OwnerName, new { id = "txtOwner", @class = "k-textbox", Readonly = "Readonly", style = "background-color:lightblue" }) | ||||||
|                                 @if (Session[GlobalVars.IS_ADMIN] != null) |                                 @if (GlobalVars.IsAdminValueNotNull(Session)) | ||||||
|                                 { |                                 { | ||||||
|                                     <a href="javascript:undefined" id="lnkReassignOwner" class="linkbutton edit" title="Re-assign Owner"></a> |                                     <a href="javascript:undefined" id="lnkReassignOwner" class="linkbutton edit" title="Re-assign Owner"></a> | ||||||
|                                 } |                                 } | ||||||
| @ -200,7 +200,7 @@ | |||||||
|                                 <label class="control-label pull-right">Export Control:</label> |                                 <label class="control-label pull-right">Export Control:</label> | ||||||
|                             </div> |                             </div> | ||||||
|                             <div class="col-sm-9"> |                             <div class="col-sm-9"> | ||||||
|                                 @if (ViewBag.IsOriginator == "true" || ((bool)Session[GlobalVars.IS_ADMIN])) |                                 @if (ViewBag.IsOriginator == "true" || (GlobalVars.IsAdmin(Session))) | ||||||
|                                 { |                                 { | ||||||
|                                     @(Html.Kendo().DropDownList() |                                     @(Html.Kendo().DropDownList() | ||||||
|                                                                     .Name("IsITAR") |                                                                     .Name("IsITAR") | ||||||
|  | |||||||
| @ -329,7 +329,7 @@ | |||||||
|                     columns.Bound(a => a.Gating).Width("50px"); |                     columns.Bound(a => a.Gating).Width("50px"); | ||||||
|                     columns.Bound(a => a.DueDate).Width("50px").Format("{0:MM/dd/yy}").Width("150px"); |                     columns.Bound(a => a.DueDate).Width("50px").Format("{0:MM/dd/yy}").Width("150px"); | ||||||
|  |  | ||||||
|                     if (Session[GlobalVars.IS_ADMIN] != null) |                     if (GlobalVars.IsAdminValueNotNull(Session)) | ||||||
|                             columns.Command(c => c.Custom("Edit").Click("EditMeetingActionItem")).Width("70px"); |                             columns.Command(c => c.Custom("Edit").Click("EditMeetingActionItem")).Width("70px"); | ||||||
|  |  | ||||||
|                     //columns.Command(c => c.Destroy()).Width("40px"); |                     //columns.Command(c => c.Destroy()).Width("40px"); | ||||||
|  | |||||||
| @ -128,7 +128,7 @@ | |||||||
|                             </div> |                             </div> | ||||||
|                             <div class="col-sm-9"> |                             <div class="col-sm-9"> | ||||||
|                                 @Html.TextBoxFor(model => model.OwnerName, new { id = "txtOwner", @class = "k-textbox", Readonly = "Readonly", style = "background-color:lightblue" }) |                                 @Html.TextBoxFor(model => model.OwnerName, new { id = "txtOwner", @class = "k-textbox", Readonly = "Readonly", style = "background-color:lightblue" }) | ||||||
|                                 @if (Session[GlobalVars.IS_ADMIN] != null) |                                 @if (GlobalVars.IsAdminValueNotNull(Session)) | ||||||
|                                 { |                                 { | ||||||
|                                     <a href="javascript:undefined" id="lnkReassignOwner" class="linkbutton edit" title="Re-assign Owner"></a> |                                     <a href="javascript:undefined" id="lnkReassignOwner" class="linkbutton edit" title="Re-assign Owner"></a> | ||||||
|                                 } |                                 } | ||||||
|  | |||||||
| @ -1465,7 +1465,7 @@ | |||||||
|                                 Additional Approvers |                                 Additional Approvers | ||||||
|                             </button> |                             </button> | ||||||
|                         } |                         } | ||||||
|                         else if ((((bool)Session[GlobalVars.IS_ADMIN] && (Request.IsAuthenticated))) && Model.ClosedDate == null) |                         else if (((GlobalVars.IsAdmin(Session) && (Request.IsAuthenticated))) && Model.ClosedDate == null) | ||||||
|                         { |                         { | ||||||
|                             <button class="k-textbox" data-toggle="modal" id="additionalApprovers"> |                             <button class="k-textbox" data-toggle="modal" id="additionalApprovers"> | ||||||
|                                 Additional Approvers |                                 Additional Approvers | ||||||
| @ -1475,7 +1475,7 @@ | |||||||
|                     </div> |                     </div> | ||||||
|                     <div class="panel-body bg-warning"> |                     <div class="panel-body bg-warning"> | ||||||
|                         <div class="col-sm-offset-0"> |                         <div class="col-sm-offset-0"> | ||||||
|                             @if ((bool)Session[GlobalVars.IS_ADMIN] && (Request.IsAuthenticated)) |                             @if (GlobalVars.IsAdmin(Session) && (Request.IsAuthenticated)) | ||||||
|                             { |                             { | ||||||
|                                 @(Html.Kendo().Grid<Fab2ApprovalSystem.ViewModels.ApproversListViewModel>() |                                 @(Html.Kendo().Grid<Fab2ApprovalSystem.ViewModels.ApproversListViewModel>() | ||||||
|                                     .Name("ApproversList") |                                     .Name("ApproversList") | ||||||
| @ -2180,7 +2180,7 @@ | |||||||
|     var currentD5D6AttachmentLinks; |     var currentD5D6AttachmentLinks; | ||||||
|     var currentD7AttachmentLinks; |     var currentD7AttachmentLinks; | ||||||
|     var currentRejectingSection = ''; |     var currentRejectingSection = ''; | ||||||
|     var currentUserId = @((int)Session[GlobalVars.SESSION_USERID]) |     var currentUserId = @(GlobalVars.GetUserId(Session)) | ||||||
|     var currentRequestor = @(Model.RequestorID); |     var currentRequestor = @(Model.RequestorID); | ||||||
|  |  | ||||||
|  |  | ||||||
|  | |||||||
| @ -44,7 +44,7 @@ | |||||||
|             <div class="panel panel-default center-block" data-spy="affix"> |             <div class="panel panel-default center-block" data-spy="affix"> | ||||||
|                 <input type="button" value="Back to CA List" class="btn btn-primary btn-xs" id="CAList" /> |                 <input type="button" value="Back to CA List" class="btn btn-primary btn-xs" id="CAList" /> | ||||||
|                 <input type="button" value="Section Approval Log" class="btn btn-primary btn-xs" id="ShowSectionApprovalLog" /> |                 <input type="button" value="Section Approval Log" class="btn btn-primary btn-xs" id="ShowSectionApprovalLog" /> | ||||||
|                 @if (Session[GlobalVars.IS_ADMIN] != null) |                 @if (GlobalVars.IsAdminValueNotNull(Session)) | ||||||
|                 { |                 { | ||||||
|                     <input type="button" value="Unlock Document" class="btn btn-primary btn-xs" id="UnlockDocumentBtn" onclick="UnlockDocument()" /> |                     <input type="button" value="Unlock Document" class="btn btn-primary btn-xs" id="UnlockDocumentBtn" onclick="UnlockDocument()" /> | ||||||
|                 } |                 } | ||||||
|  | |||||||
| @ -52,7 +52,7 @@ | |||||||
|             } |             } | ||||||
|  |  | ||||||
|             <input type="button" value="Approval Log History" class="btn btn-primary btn-xs" id="ApprovalLogHistoryData" /> |             <input type="button" value="Approval Log History" class="btn btn-primary btn-xs" id="ApprovalLogHistoryData" /> | ||||||
|             @if (Session[GlobalVars.IS_ADMIN] != null) |             @if (GlobalVars.IsAdminValueNotNull(Session)) | ||||||
|             { |             { | ||||||
|             <input type="button" value="Unlock Document" class="btn btn-primary btn-xs" id="UnlockDocumentBtn" onclick="UnlockDocument()" /> |             <input type="button" value="Unlock Document" class="btn btn-primary btn-xs" id="UnlockDocumentBtn" onclick="UnlockDocument()" /> | ||||||
|             } |             } | ||||||
| @ -137,7 +137,7 @@ | |||||||
|                         <label class="control-label col-sm-4">Originator Name:</label> |                         <label class="control-label col-sm-4">Originator Name:</label> | ||||||
|                         <div class="col-sm-8"> |                         <div class="col-sm-8"> | ||||||
|                             @Html.TextBoxFor(model => model.OriginatorName, new { id = "txtOriginatorName", @class = "k-textbox", disabled = "disabled", style = "background-color:lightblue" }) |                             @Html.TextBoxFor(model => model.OriginatorName, new { id = "txtOriginatorName", @class = "k-textbox", disabled = "disabled", style = "background-color:lightblue" }) | ||||||
|                             @if (Session[GlobalVars.IS_ADMIN] != null) |                             @if (GlobalVars.IsAdminValueNotNull(Session)) | ||||||
|                             { |                             { | ||||||
|                                 <a href="javascript:undefined" id="lnkReassignOriginator" class="linkbutton edit" title="Re-assign Originator"></a> |                                 <a href="javascript:undefined" id="lnkReassignOriginator" class="linkbutton edit" title="Re-assign Originator"></a> | ||||||
|                             } |                             } | ||||||
| @ -210,7 +210,7 @@ | |||||||
|                             @Html.TextBoxFor(model => model.Title, new { id = "txtTitle", @class = "k-textbox", style = "width:100%", disabled = "disabled" }) |                             @Html.TextBoxFor(model => model.Title, new { id = "txtTitle", @class = "k-textbox", style = "width:100%", disabled = "disabled" }) | ||||||
|                         </div> |                         </div> | ||||||
|                         <div class="col-sm-6 col-sm-offset-4" style="color: red;"> |                         <div class="col-sm-6 col-sm-offset-4" style="color: red;"> | ||||||
|                             * (DO NOT USE Rev I, O, Q, S, X, and Z) |                             * (DO NOT USE Rev I, O, S, X, and Z) | ||||||
|                         </div> |                         </div> | ||||||
|                         <div class="col-sm-6 col-sm-offset-4" style="color: red;"> |                         <div class="col-sm-6 col-sm-offset-4" style="color: red;"> | ||||||
|                             Revision Y is followed by AA-AY, AY is followed by BA-BY etc. YY is followed by AAA |                             Revision Y is followed by AA-AY, AY is followed by BA-BY etc. YY is followed by AAA | ||||||
| @ -892,9 +892,9 @@ | |||||||
|                 <div class="col-sm-offset-0"> |                 <div class="col-sm-offset-0"> | ||||||
|  |  | ||||||
|  |  | ||||||
|                     @if (Session[GlobalVars.IS_ADMIN] != null) |                     @if (GlobalVars.IsAdminValueNotNull(Session)) | ||||||
|                     { |                     { | ||||||
|                         if ((bool)Session[GlobalVars.IS_ADMIN] && (Request.IsAuthenticated)) |                         if (GlobalVars.IsAdmin(Session) && (Request.IsAuthenticated)) | ||||||
|                         { |                         { | ||||||
|                             @(Html.Kendo().Grid<Fab2ApprovalSystem.ViewModels.ApproversListViewModel>() |                             @(Html.Kendo().Grid<Fab2ApprovalSystem.ViewModels.ApproversListViewModel>() | ||||||
|                         .Name("ApproversList") |                         .Name("ApproversList") | ||||||
|  | |||||||
| @ -31,7 +31,7 @@ | |||||||
|                 <label class="control-label col-sm-4">Originator Name:</label> |                 <label class="control-label col-sm-4">Originator Name:</label> | ||||||
|                 <div class="col-sm-8"> |                 <div class="col-sm-8"> | ||||||
|                     @Html.TextBoxFor(model => model.OriginatorName, new { id = "txtOriginatorName", @class = "k-textbox", disabled = "disabled", style = "background-color:lightblue" }) |                     @Html.TextBoxFor(model => model.OriginatorName, new { id = "txtOriginatorName", @class = "k-textbox", disabled = "disabled", style = "background-color:lightblue" }) | ||||||
|                     @if (Session[GlobalVars.IS_ADMIN] != null) |                     @if (GlobalVars.IsAdminValueNotNull(Session)) | ||||||
|                     { |                     { | ||||||
|                         <a href="javascript:undefined" id="lnkReassignOriginator" class="linkbutton edit" title="Re-assign Originator"></a> |                         <a href="javascript:undefined" id="lnkReassignOriginator" class="linkbutton edit" title="Re-assign Originator"></a> | ||||||
|                     } |                     } | ||||||
|  | |||||||
| @ -90,7 +90,7 @@ | |||||||
|                         <label class="control-label col-sm-4">Originator Name:</label> |                         <label class="control-label col-sm-4">Originator Name:</label> | ||||||
|                         <div class="col-sm-8"> |                         <div class="col-sm-8"> | ||||||
|                             @Html.TextBoxFor(model => model.OriginatorName, new { id = "txtOriginatorName", @class = "k-textbox", disabled = "disabled", style = "background-color:lightblue" }) |                             @Html.TextBoxFor(model => model.OriginatorName, new { id = "txtOriginatorName", @class = "k-textbox", disabled = "disabled", style = "background-color:lightblue" }) | ||||||
|                             @if (Session[GlobalVars.IS_ADMIN] != null) |                             @if (GlobalVars.IsAdminValueNotNull(Session)) | ||||||
|                             { |                             { | ||||||
|                                 <a href="javascript:undefined" id="lnkReassignOriginator" class="linkbutton edit" title="Re-assign Originator"></a> |                                 <a href="javascript:undefined" id="lnkReassignOriginator" class="linkbutton edit" title="Re-assign Originator"></a> | ||||||
|                             } |                             } | ||||||
| @ -154,7 +154,7 @@ | |||||||
|                             @Html.TextBoxFor(model => model.Title, new { id = "txtTitle", @class = "k-textbox", style = "width:100%" }) |                             @Html.TextBoxFor(model => model.Title, new { id = "txtTitle", @class = "k-textbox", style = "width:100%" }) | ||||||
|                         </div> |                         </div> | ||||||
|                         <div class="col-sm-6 col-sm-offset-4" style="color: red;"> |                         <div class="col-sm-6 col-sm-offset-4" style="color: red;"> | ||||||
|                             * (DO NOT USE Rev I, O, Q, S, X, and Z) |                             * (DO NOT USE Rev I, O, S, X, and Z) | ||||||
|                         </div> |                         </div> | ||||||
|                         <div class="col-sm-6 col-sm-offset-4" style="color: red;"> |                         <div class="col-sm-6 col-sm-offset-4" style="color: red;"> | ||||||
|                             Revision Y is followed by AA-AY, AY is followed by BA-BY etc. YY is followed by AAA |                             Revision Y is followed by AA-AY, AY is followed by BA-BY etc. YY is followed by AAA | ||||||
| @ -785,9 +785,9 @@ | |||||||
|  |  | ||||||
|             <div class="panel-body bg-warning"> |             <div class="panel-body bg-warning"> | ||||||
|                 <div class="col-sm-offset-0"> |                 <div class="col-sm-offset-0"> | ||||||
|                     @if (Session[GlobalVars.IS_ADMIN] != null) |                     @if (GlobalVars.IsAdminValueNotNull(Session)) | ||||||
|                     { |                     { | ||||||
|                         if ((bool)Session[GlobalVars.IS_ADMIN] && (Request.IsAuthenticated)) |                         if (GlobalVars.IsAdmin(Session) && (Request.IsAuthenticated)) | ||||||
|                         { |                         { | ||||||
|                             @(Html.Kendo().Grid<Fab2ApprovalSystem.ViewModels.ApproversListViewModel>() |                             @(Html.Kendo().Grid<Fab2ApprovalSystem.ViewModels.ApproversListViewModel>() | ||||||
|                         .Name("ApproversList") |                         .Name("ApproversList") | ||||||
|  | |||||||
| @ -173,7 +173,7 @@ | |||||||
|                         <label class="control-label col-sm-4">Originator Name:</label> |                         <label class="control-label col-sm-4">Originator Name:</label> | ||||||
|                         <div class="col-sm-6 col-sm-8"> |                         <div class="col-sm-6 col-sm-8"> | ||||||
|                             @Html.TextBoxFor(model => model.OriginatorName, new { id = "txtOriginatorName", @class = "k-textbox", disabled = "disabled", style = "background-color:lightblue" }) |                             @Html.TextBoxFor(model => model.OriginatorName, new { id = "txtOriginatorName", @class = "k-textbox", disabled = "disabled", style = "background-color:lightblue" }) | ||||||
|                             @if (Session[GlobalVars.IS_ADMIN] != null) |                             @if (GlobalVars.IsAdminValueNotNull(Session)) | ||||||
|                             { |                             { | ||||||
|                                 <a href="javascript:undefined" id="lnkReassignOriginator" class="linkbutton edit" title="Re-assign Originator"></a> |                                 <a href="javascript:undefined" id="lnkReassignOriginator" class="linkbutton edit" title="Re-assign Originator"></a> | ||||||
|                             } |                             } | ||||||
| @ -260,7 +260,7 @@ | |||||||
|                             @Html.TextBoxFor(model => model.Title, new { id = "txtTitle", @class = "k-textbox", style = "width:100%", disabled = "disabled" }) |                             @Html.TextBoxFor(model => model.Title, new { id = "txtTitle", @class = "k-textbox", style = "width:100%", disabled = "disabled" }) | ||||||
|                         </div> |                         </div> | ||||||
|                         <div class="col-sm-6 col-sm-offset-4" style="color: red;"> |                         <div class="col-sm-6 col-sm-offset-4" style="color: red;"> | ||||||
|                             * (DO NOT USE Rev I, O, Q, S, X, and Z) |                             * (DO NOT USE Rev I, O, S, X, and Z) | ||||||
|                         </div> |                         </div> | ||||||
|                         <div class="col-sm-6 col-sm-offset-4" style="color: red;"> |                         <div class="col-sm-6 col-sm-offset-4" style="color: red;"> | ||||||
|                             Revision Y is followed by AA-AY, AY is followed by BA-BY etc. YY is followed by AAA |                             Revision Y is followed by AA-AY, AY is followed by BA-BY etc. YY is followed by AAA | ||||||
| @ -367,7 +367,7 @@ | |||||||
|                                 @if ( |                                 @if ( | ||||||
|                                     (ViewBag.IsOriginator == "true" && Model.IsTECN && Model.CloseDate != null && !Model.ExpirationProcessed && !Model.ExpirationInProgress && !Model.CancellationApproved && !Model.CancellationInProgress && Model.ConversionApprovalInProgress == false && (Model.ExpirationDate >= DateTime.Today || Model.ExtensionDate >= DateTime.Today)) |                                     (ViewBag.IsOriginator == "true" && Model.IsTECN && Model.CloseDate != null && !Model.ExpirationProcessed && !Model.ExpirationInProgress && !Model.CancellationApproved && !Model.CancellationInProgress && Model.ConversionApprovalInProgress == false && (Model.ExpirationDate >= DateTime.Today || Model.ExtensionDate >= DateTime.Today)) | ||||||
|                                     || |                                     || | ||||||
|                                     (Model.IsTECN && (bool)Session[GlobalVars.IS_ADMIN] && (Request.IsAuthenticated) && Model.CloseDate != null && !Model.ExpirationProcessed && !Model.ExpirationInProgress && !Model.CancellationApproved && !Model.CancellationInProgress && Model.ConversionApprovalInProgress == false && (Model.ExpirationDate >= DateTime.Today || Model.ExtensionDate >= DateTime.Today)) |                                     (Model.IsTECN && GlobalVars.IsAdmin(Session) && (Request.IsAuthenticated) && Model.CloseDate != null && !Model.ExpirationProcessed && !Model.ExpirationInProgress && !Model.CancellationApproved && !Model.CancellationInProgress && Model.ConversionApprovalInProgress == false && (Model.ExpirationDate >= DateTime.Today || Model.ExtensionDate >= DateTime.Today)) | ||||||
|                                 ) |                                 ) | ||||||
|                                 { |                                 { | ||||||
|                                     @(Html.Kendo().DatePickerFor(model => model.ExtensionDate) |                                     @(Html.Kendo().DatePickerFor(model => model.ExtensionDate) | ||||||
| @ -980,7 +980,7 @@ | |||||||
|                         Additional Approvers |                         Additional Approvers | ||||||
|                     </button> |                     </button> | ||||||
|                 } |                 } | ||||||
|                 else if ((ViewBag.IsOriginator == "true" || ((bool)Session[GlobalVars.IS_ADMIN] && (Request.IsAuthenticated))) && Model.CloseDate == null) |                 else if ((ViewBag.IsOriginator == "true" || (GlobalVars.IsAdmin(Session) && (Request.IsAuthenticated))) && Model.CloseDate == null) | ||||||
|                 { |                 { | ||||||
|                     <button class="k-textbox" data-toggle="modal" id="additionalApprovers"> |                     <button class="k-textbox" data-toggle="modal" id="additionalApprovers"> | ||||||
|                         Additional Approvers |                         Additional Approvers | ||||||
| @ -994,9 +994,9 @@ | |||||||
|  |  | ||||||
|             <div class="panel-body bg-warning"> |             <div class="panel-body bg-warning"> | ||||||
|                 <div class="col-sm-offset-0"> |                 <div class="col-sm-offset-0"> | ||||||
|                     @if (Session[GlobalVars.IS_ADMIN] != null) |                     @if (GlobalVars.IsAdminValueNotNull(Session)) | ||||||
|                     { |                     { | ||||||
|                         if ((bool)Session[GlobalVars.IS_ADMIN] && (Request.IsAuthenticated)) |                         if (GlobalVars.IsAdmin(Session) && (Request.IsAuthenticated)) | ||||||
|                         { |                         { | ||||||
|                             @(Html.Kendo().Grid<Fab2ApprovalSystem.ViewModels.ApproversListViewModel>() |                             @(Html.Kendo().Grid<Fab2ApprovalSystem.ViewModels.ApproversListViewModel>() | ||||||
|                                 .Name("ApproversList") |                                 .Name("ApproversList") | ||||||
|  | |||||||
| @ -52,7 +52,7 @@ | |||||||
|             } |             } | ||||||
|  |  | ||||||
|             <input type="button" value="Approval Log History" class="btn btn-primary btn-xs" id="ApprovalLogHistoryData" /> |             <input type="button" value="Approval Log History" class="btn btn-primary btn-xs" id="ApprovalLogHistoryData" /> | ||||||
|             @if (Session[GlobalVars.IS_ADMIN] != null) |             @if (GlobalVars.IsAdminValueNotNull(Session)) | ||||||
|             { |             { | ||||||
|                 <input type="button" value="Unlock Document" class="btn btn-primary btn-xs" id="UnlockDocumentBtn" onclick="UnlockDocument()" /> |                 <input type="button" value="Unlock Document" class="btn btn-primary btn-xs" id="UnlockDocumentBtn" onclick="UnlockDocument()" /> | ||||||
|             } |             } | ||||||
| @ -149,7 +149,7 @@ | |||||||
|                         <label class="control-label col-sm-4">Originator Name:</label> |                         <label class="control-label col-sm-4">Originator Name:</label> | ||||||
|                         <div class="col-sm-8"> |                         <div class="col-sm-8"> | ||||||
|                             @Html.TextBoxFor(model => model.OriginatorName, new { id = "txtOriginatorName", @class = "k-textbox", disabled = "disabled", style = "background-color:lightblue" }) |                             @Html.TextBoxFor(model => model.OriginatorName, new { id = "txtOriginatorName", @class = "k-textbox", disabled = "disabled", style = "background-color:lightblue" }) | ||||||
|                             @if (Session[GlobalVars.IS_ADMIN] != null) |                             @if (GlobalVars.IsAdminValueNotNull(Session)) | ||||||
|                             { |                             { | ||||||
|                                 <a href="javascript:undefined" id="lnkReassignOriginator" class="linkbutton edit" title="Re-assign Originator"></a> |                                 <a href="javascript:undefined" id="lnkReassignOriginator" class="linkbutton edit" title="Re-assign Originator"></a> | ||||||
|                             } |                             } | ||||||
| @ -895,9 +895,9 @@ | |||||||
|                 <div class="col-sm-offset-0"> |                 <div class="col-sm-offset-0"> | ||||||
|  |  | ||||||
|  |  | ||||||
|                     @if (Session[GlobalVars.IS_ADMIN] != null) |                     @if (GlobalVars.IsAdminValueNotNull(Session)) | ||||||
|                     { |                     { | ||||||
|                         if ((bool)Session[GlobalVars.IS_ADMIN] && (Request.IsAuthenticated)) |                         if (GlobalVars.IsAdmin(Session) && (Request.IsAuthenticated)) | ||||||
|                         { |                         { | ||||||
|                             @(Html.Kendo().Grid<Fab2ApprovalSystem.ViewModels.ApproversListViewModel>() |                             @(Html.Kendo().Grid<Fab2ApprovalSystem.ViewModels.ApproversListViewModel>() | ||||||
|                         .Name("ApproversList") |                         .Name("ApproversList") | ||||||
| @ -999,7 +999,7 @@ | |||||||
|                 @{ |                 @{ | ||||||
|                     if (ViewBag.TrainingID != 0) |                     if (ViewBag.TrainingID != 0) | ||||||
|                     { |                     { | ||||||
|                         Html.RenderAction("ViewTrainingPartial", "Training", new { trainingId = Convert.ToInt32(ViewBag.TrainingID), userID = Convert.ToInt32((int)Session[GlobalVars.SESSION_USERID]) }); |                         Html.RenderAction("ViewTrainingPartial", "Training", new { trainingId = Convert.ToInt32(ViewBag.TrainingID), userID = Convert.ToInt32(GlobalVars.GetUserId(Session)) }); | ||||||
|                     } |                     } | ||||||
|  |  | ||||||
|  |  | ||||||
|  | |||||||
| @ -33,7 +33,7 @@ | |||||||
|         </div> |         </div> | ||||||
|  |  | ||||||
|         <div id="alltasklistdiv" class="k-content" style="font-size: 11px;"> |         <div id="alltasklistdiv" class="k-content" style="font-size: 11px;"> | ||||||
|             @if ((bool)Session[GlobalVars.IS_ADMIN]) |             @if (GlobalVars.IsAdmin(Session)) | ||||||
|             { |             { | ||||||
|                 @(Html.Kendo().Grid<Fab2ApprovalSystem.ViewModels.IssuesViewModel>() |                 @(Html.Kendo().Grid<Fab2ApprovalSystem.ViewModels.IssuesViewModel>() | ||||||
|                         .Name("alltasklist") |                         .Name("alltasklist") | ||||||
|  | |||||||
| @ -38,7 +38,7 @@ | |||||||
|                             columns.Bound(l => l.D8DueDate).Format("{0:MM/dd/yy}"); |                             columns.Bound(l => l.D8DueDate).Format("{0:MM/dd/yy}"); | ||||||
|                             columns.Bound(l => l.NextDueDate).Format("{0:MM/dd/yy}"); |                             columns.Bound(l => l.NextDueDate).Format("{0:MM/dd/yy}"); | ||||||
|                             columns.Bound(l => l.ClosedDate).Format("{0:MM/dd/yy}"); |                             columns.Bound(l => l.ClosedDate).Format("{0:MM/dd/yy}"); | ||||||
|                             if ((bool)Session[GlobalVars.IS_ADMIN]) |                             if (GlobalVars.IsAdmin(Session)) | ||||||
|                                 columns.Template(t => { }).HeaderTemplate("").ClientTemplate(@"<a href='javascript: void(0)' class='abutton delete' onclick='deleteRowCA(this)' title='button delete'>button delete</a>"); |                                 columns.Template(t => { }).HeaderTemplate("").ClientTemplate(@"<a href='javascript: void(0)' class='abutton delete' onclick='deleteRowCA(this)' title='button delete'>button delete</a>"); | ||||||
|  |  | ||||||
|                         }) |                         }) | ||||||
|  | |||||||
| @ -33,7 +33,7 @@ | |||||||
|         </div> |         </div> | ||||||
|  |  | ||||||
|         <div id="ecnTasklistdiv" class="k-content" style="font-size: 11px;"> |         <div id="ecnTasklistdiv" class="k-content" style="font-size: 11px;"> | ||||||
|             @if ((bool)Session[GlobalVars.IS_ADMIN]) |             @if (GlobalVars.IsAdmin(Session)) | ||||||
|             { |             { | ||||||
|                 @(Html.Kendo().Grid<Fab2ApprovalSystem.ViewModels.IssuesViewModel>() |                 @(Html.Kendo().Grid<Fab2ApprovalSystem.ViewModels.IssuesViewModel>() | ||||||
|                         .Name("ecnTasklist") |                         .Name("ecnTasklist") | ||||||
|  | |||||||
| @ -26,7 +26,7 @@ | |||||||
|         <ul class="nav navbar-nav" id="myTab"> |         <ul class="nav navbar-nav" id="myTab"> | ||||||
|             <li><a href=@Url.Action("Index", "Home", new {tabName = "MyTasks"})>My Tasks</a></li> |             <li><a href=@Url.Action("Index", "Home", new {tabName = "MyTasks"})>My Tasks</a></li> | ||||||
|             <li><a href=@Url.Action("Index", "Home", new { tabName = "AllTasks" })>All Documents</a></li> |             <li><a href=@Url.Action("Index", "Home", new { tabName = "AllTasks" })>All Documents</a></li> | ||||||
|             @*<li><a href=@Url.Action("ViewMyTrainingAssignments", "Training", new { userID = (int)Session[GlobalVars.SESSION_USERID] })>My Training</a></li>*@ |             @*<li><a href=@Url.Action("ViewMyTrainingAssignments", "Training", new { userID = GlobalVars.GetUserId(Session) })>My Training</a></li>*@ | ||||||
|             @*<li><a href=@Url.Action("SpecialWorkRequestList", "Home", new { tabName = "AllTasks" })>Special Work Requests</a></li>*@ |             @*<li><a href=@Url.Action("SpecialWorkRequestList", "Home", new { tabName = "AllTasks" })>Special Work Requests</a></li>*@ | ||||||
|             @*<li><a href="file:////temirwfp001.irworld.irf.com/UserData/QA/CommonRO/Projects/AVI Tool/">AVI Tool</a></li>*@ |             @*<li><a href="file:////temirwfp001.irworld.irf.com/UserData/QA/CommonRO/Projects/AVI Tool/">AVI Tool</a></li>*@ | ||||||
|             <li class="dropdown"> |             <li class="dropdown"> | ||||||
| @ -44,7 +44,7 @@ | |||||||
|             @*<div class="form-group"> |             @*<div class="form-group"> | ||||||
|                     <input type="text" class="form-control" placeholder="Search" style="font-size: 11px"> |                     <input type="text" class="form-control" placeholder="Search" style="font-size: 11px"> | ||||||
|                 </div>*@ |                 </div>*@ | ||||||
|             @if (!(bool)Session[GlobalVars.OOO]) |             @if (!GlobalVars.IsOOO(Session)) | ||||||
|             { |             { | ||||||
|                 <button class="btn btn-default btn-primary" data-toggle="modal" id="OOO">Out Of Office</button> |                 <button class="btn btn-default btn-primary" data-toggle="modal" id="OOO">Out Of Office</button> | ||||||
|             } |             } | ||||||
| @ -170,7 +170,7 @@ | |||||||
|         </div> |         </div> | ||||||
|  |  | ||||||
|         <div id="alltasklistdiv" class="k-content" style="font-size: 11px;"> |         <div id="alltasklistdiv" class="k-content" style="font-size: 11px;"> | ||||||
|             @if ((bool)Session[GlobalVars.IS_ADMIN]) |             @if (GlobalVars.IsAdmin(Session)) | ||||||
|             { |             { | ||||||
|                 @(Html.Kendo().Grid<Fab2ApprovalSystem.ViewModels.IssuesViewModel>() |                 @(Html.Kendo().Grid<Fab2ApprovalSystem.ViewModels.IssuesViewModel>() | ||||||
|                         .Name("alltasklist") |                         .Name("alltasklist") | ||||||
| @ -427,7 +427,7 @@ | |||||||
|     var issueID=""; |     var issueID=""; | ||||||
|     var docType = ""; |     var docType = ""; | ||||||
|     var submitdate = ""; |     var submitdate = ""; | ||||||
|     var userName =  "@Session[@GlobalVars.SESSION_USERNAME].ToString()"; |     var userName =  '@GlobalVars.GetUserName(Session)'; | ||||||
|  |  | ||||||
|     $(document).ready(function () { |     $(document).ready(function () { | ||||||
|     }) |     }) | ||||||
| @ -450,7 +450,7 @@ | |||||||
|         window.location.href = url.replace('__id__', issueID); |         window.location.href = url.replace('__id__', issueID); | ||||||
|     })*@ |     })*@ | ||||||
|  |  | ||||||
|     var userid = @Session[@GlobalVars.SESSION_USERID].ToString() |     var userid = @GlobalVars.GetUserId(Session); | ||||||
|  |  | ||||||
|  |  | ||||||
|     $("#IncludeAllDocuments").on("click", function () { |     $("#IncludeAllDocuments").on("click", function () { | ||||||
|  | |||||||
| @ -34,7 +34,7 @@ | |||||||
|         </div> |         </div> | ||||||
|  |  | ||||||
|         <div id="LotDispoTasklistdiv" class="k-content" style="font-size: 11px;"> |         <div id="LotDispoTasklistdiv" class="k-content" style="font-size: 11px;"> | ||||||
|             @if ((bool)Session[GlobalVars.IS_ADMIN]) |             @if (GlobalVars.IsAdmin(Session)) | ||||||
|             { |             { | ||||||
|                 @(Html.Kendo().Grid<Fab2ApprovalSystem.ViewModels.IssuesViewModel>() |                 @(Html.Kendo().Grid<Fab2ApprovalSystem.ViewModels.IssuesViewModel>() | ||||||
|                         .Name("LotDispoTasklist") |                         .Name("LotDispoTasklist") | ||||||
|  | |||||||
| @ -32,7 +32,7 @@ | |||||||
|                                 <table class="pull-right"> |                                 <table class="pull-right"> | ||||||
|                                     <tr> |                                     <tr> | ||||||
|                                         <td class="pull-right"> |                                         <td class="pull-right"> | ||||||
|                                             @if ((bool)Session[GlobalVars.IS_ADMIN]) |                                             @if (GlobalVars.IsAdmin(Session)) | ||||||
|                                             { |                                             { | ||||||
|                                                 @(Html.Kendo().Upload() |                                                 @(Html.Kendo().Upload() | ||||||
|                                                         .Name("AddQDBFlag") |                                                         .Name("AddQDBFlag") | ||||||
| @ -45,7 +45,7 @@ | |||||||
|                                             } |                                             } | ||||||
|                                         </td> |                                         </td> | ||||||
|                                         <td class="pull-right"> |                                         <td class="pull-right"> | ||||||
|                                             @if ((bool)Session[GlobalVars.IS_ADMIN]) |                                             @if (GlobalVars.IsAdmin(Session)) | ||||||
|                                             { |                                             { | ||||||
|                                                 @(Html.Kendo().Upload() |                                                 @(Html.Kendo().Upload() | ||||||
|                                                         .Name("RemoveQDBFlag") |                                                         .Name("RemoveQDBFlag") | ||||||
| @ -72,7 +72,7 @@ | |||||||
|             </div> |             </div> | ||||||
|  |  | ||||||
|                                                 <div id="mrbTasklistdiv" class="k-content" style="font-size: 11px;"> |                                                 <div id="mrbTasklistdiv" class="k-content" style="font-size: 11px;"> | ||||||
|                                                     @if ((bool)Session[GlobalVars.IS_ADMIN]) |                                                     @if (GlobalVars.IsAdmin(Session)) | ||||||
|             { |             { | ||||||
|                                                         @(Html.Kendo().Grid<Fab2ApprovalSystem.ViewModels.IssuesViewModel>() |                                                         @(Html.Kendo().Grid<Fab2ApprovalSystem.ViewModels.IssuesViewModel>() | ||||||
|                         .Name("mrbTasklist") |                         .Name("mrbTasklist") | ||||||
|  | |||||||
| @ -175,7 +175,7 @@ | |||||||
|  |  | ||||||
|         </div> |         </div> | ||||||
|  |  | ||||||
|         @if (Convert.ToBoolean(Session[GlobalVars.CAN_CREATE_PARTS_REQUEST]) && !Convert.ToBoolean(Session[GlobalVars.IS_ADMIN])) |         @if (GlobalVars.GetCanCreatePartsRequest(Session) && !GlobalVars.IsAdmin(Session)) | ||||||
|         { |         { | ||||||
|             <br /><br /> |             <br /><br /> | ||||||
|             <div class="panel-heading" style="background-color:beige"> |             <div class="panel-heading" style="background-color:beige"> | ||||||
|  | |||||||
| @ -55,11 +55,11 @@ | |||||||
|             <div class="navbar-collapse collapse"> |             <div class="navbar-collapse collapse"> | ||||||
|                 <ul class="nav navbar-nav"> |                 <ul class="nav navbar-nav"> | ||||||
|                     @*<li>@Html.ActionLink("Reports", "Index", "Reports")</li>*@ |                     @*<li>@Html.ActionLink("Reports", "Index", "Reports")</li>*@ | ||||||
|                     @if ((bool)@Session[GlobalVars.IS_ADMIN]) |                     @if (@GlobalVars.IsAdmin(Session)) | ||||||
|                     { |                     { | ||||||
|                         <li>@Html.ActionLink("Admin", "Index", "Admin")</li> |                         <li>@Html.ActionLink("Admin", "Index", "Admin")</li> | ||||||
|                     } |                     } | ||||||
|                     @if ((bool)@Session[GlobalVars.IS_MANAGER]) |                     @if (GlobalVars.IsManager(Session)) | ||||||
|                     { |                     { | ||||||
|                         <li>@Html.ActionLink("Manager", "Index", "Manager")</li> |                         <li>@Html.ActionLink("Manager", "Index", "Manager")</li> | ||||||
|                     } |                     } | ||||||
| @ -83,10 +83,10 @@ | |||||||
|                         @*<li><a href=@Url.Action("Create", "LotDisposition")>Lot Dispostion</a></li>*@ |                         @*<li><a href=@Url.Action("Create", "LotDisposition")>Lot Dispostion</a></li>*@ | ||||||
|                         @*<li><a href=@Url.Action("Create", "MRB")>Create MRB</a></li>*@ |                         @*<li><a href=@Url.Action("Create", "MRB")>Create MRB</a></li>*@ | ||||||
|                         <li><a href=@Url.Action("Create", "ECN")>Create ECN/TECN</a></li> |                         <li><a href=@Url.Action("Create", "ECN")>Create ECN/TECN</a></li> | ||||||
|                         @if (!string.IsNullOrWhiteSpace(Session["JWT"].ToString())) { |                         @if (!string.IsNullOrWhiteSpace(GlobalVars.GetJWT(Session))) { | ||||||
|                             string jwt = Session["JWT"].ToString(); |                             string jwt = GlobalVars.GetJWT(Session); | ||||||
|                             string encodedJwt = System.Net.WebUtility.UrlEncode(jwt); |                             string encodedJwt = System.Net.WebUtility.UrlEncode(jwt); | ||||||
|                             string refreshToken = Session["RefreshToken"].ToString(); |                             string refreshToken = GlobalVars.GetRefreshToken(Session); | ||||||
|                             string encodedRefreshToken = System.Net.WebUtility.UrlEncode(refreshToken); |                             string encodedRefreshToken = System.Net.WebUtility.UrlEncode(refreshToken); | ||||||
|                             string wasmClientUrl = Environment.GetEnvironmentVariable("FabApprovalWasmClientUrl") ?? |                             string wasmClientUrl = Environment.GetEnvironmentVariable("FabApprovalWasmClientUrl") ?? | ||||||
|                                 "https://localhost:7255"; |                                 "https://localhost:7255"; | ||||||
| @ -106,7 +106,7 @@ | |||||||
|                         @*<li><a href=@Url.Action("Create", "ChangeControl")>Create PCR</a></li>*@ |                         @*<li><a href=@Url.Action("Create", "ChangeControl")>Create PCR</a></li>*@ | ||||||
|                         <li><a href=@Url.Action("Create", "Audit")>Create Audit</a></li> |                         <li><a href=@Url.Action("Create", "Audit")>Create Audit</a></li> | ||||||
|                         <li><a href=@Url.Action("Create", "CorrectiveAction")>Create Corrective Action</a></li> |                         <li><a href=@Url.Action("Create", "CorrectiveAction")>Create Corrective Action</a></li> | ||||||
|                         @*@if (Convert.ToBoolean(Session[GlobalVars.CAN_CREATE_PARTS_REQUEST])) |                         @*@if (GlobalVars.GetCanCreatePartsRequest(Session)) | ||||||
|         { |         { | ||||||
|         <li><a href=@Url.Action("Create", "PartsRequest")>Create New/Repair Spare Parts Request</a></li> |         <li><a href=@Url.Action("Create", "PartsRequest")>Create New/Repair Spare Parts Request</a></li> | ||||||
|         }*@ |         }*@ | ||||||
| @ -118,7 +118,7 @@ | |||||||
|                 @*<div class="form-group"> |                 @*<div class="form-group"> | ||||||
|                         <input type="text" class="form-control" placeholder="Search" style="font-size: 11px"> |                         <input type="text" class="form-control" placeholder="Search" style="font-size: 11px"> | ||||||
|                     </div>*@ |                     </div>*@ | ||||||
|                 @if (!(bool)Session[GlobalVars.OOO]) |                 @if (!GlobalVars.IsOOO(Session)) | ||||||
|                 { |                 { | ||||||
|                     <button class="btn btn-default btn-primary" data-toggle="modal" id="OOO">Out Of Office</button> |                     <button class="btn btn-default btn-primary" data-toggle="modal" id="OOO">Out Of Office</button> | ||||||
|                 } |                 } | ||||||
| @ -144,9 +144,9 @@ | |||||||
|             menu.Add().Text("My Training").Action("ViewMyTrainingAssignments", "Training"); |             menu.Add().Text("My Training").Action("ViewMyTrainingAssignments", "Training"); | ||||||
|             menu.Add().Text("Training Reports").Action("TrainingReports", "Training"); |             menu.Add().Text("Training Reports").Action("TrainingReports", "Training"); | ||||||
|             menu.Add().Text("All Documents").Action("AllDocuments", "Home"); |             menu.Add().Text("All Documents").Action("AllDocuments", "Home"); | ||||||
|             string jwt = Session["JWT"].ToString(); |             string jwt = GlobalVars.GetJWT(Session); | ||||||
|             string encodedJwt = System.Net.WebUtility.UrlEncode(jwt); |             string encodedJwt = System.Net.WebUtility.UrlEncode(jwt); | ||||||
|             string refreshToken = Session["RefreshToken"].ToString(); |             string refreshToken = GlobalVars.GetRefreshToken(Session); | ||||||
|             string encodedRefreshToken = System.Net.WebUtility.UrlEncode(refreshToken); |             string encodedRefreshToken = System.Net.WebUtility.UrlEncode(refreshToken); | ||||||
|             string wasmClientUrl = Environment.GetEnvironmentVariable("FabApprovalWasmClientUrl") ?? |             string wasmClientUrl = Environment.GetEnvironmentVariable("FabApprovalWasmClientUrl") ?? | ||||||
|                 "https://localhost:7255"; |                 "https://localhost:7255"; | ||||||
| @ -279,7 +279,7 @@ | |||||||
|     var issueID=""; |     var issueID=""; | ||||||
|     var docType = ""; |     var docType = ""; | ||||||
|     var submitdate = ""; |     var submitdate = ""; | ||||||
|     var userName =  "@Session[@GlobalVars.SESSION_USERNAME].ToString()"; |     var userName =  '@GlobalVars.GetUserName(Session)'; | ||||||
|  |  | ||||||
|     $(document).ready(function () { |     $(document).ready(function () { | ||||||
|     }) |     }) | ||||||
| @ -302,7 +302,7 @@ | |||||||
|         window.location.href = url.replace('__id__', issueID); |         window.location.href = url.replace('__id__', issueID); | ||||||
|     })*@ |     })*@ | ||||||
|  |  | ||||||
|     var userid = @Session[@GlobalVars.SESSION_USERID].ToString() |     var userid = @GlobalVars.GetUserId(Session); | ||||||
|  |  | ||||||
|  |  | ||||||
|     $("#IncludeAllDocuments").on("click", function () { |     $("#IncludeAllDocuments").on("click", function () { | ||||||
|  | |||||||
| @ -41,10 +41,10 @@ | |||||||
|                         @(Html.Kendo().DropDownList() |                         @(Html.Kendo().DropDownList() | ||||||
|                         .Name("OriginatorID") |                         .Name("OriginatorID") | ||||||
|                         .BindTo(new SelectList(ViewBag.OriginatorList, "OriginatorID", "OriginatorName")) |                         .BindTo(new SelectList(ViewBag.OriginatorList, "OriginatorID", "OriginatorName")) | ||||||
|                         .Value(@Session[GlobalVars.SESSION_USERID].ToString()) |                         .Value(@GlobalVars.GetUserIdValue(Session)) | ||||||
|  |  | ||||||
|                         ) |                         ) | ||||||
|                         @*@Html.TextBoxFor(model => model.OriginatorID, new { id = @GlobalVars.USER_ID, Value = @Session[GlobalVars.SESSION_USERNAME].ToString();, @class = "k-textbox" })*@ |                         @*@Html.TextBoxFor(model => model.OriginatorID, new { id = @GlobalVars.USER_ID, Value = @GlobalVars.GetUserName(Session);, @class = "k-textbox" })*@ | ||||||
|                     </div> |                     </div> | ||||||
|                 </div> |                 </div> | ||||||
|  |  | ||||||
|  | |||||||
| @ -478,9 +478,9 @@ | |||||||
|  |  | ||||||
|             <div class="panel-body bg-warning"> |             <div class="panel-body bg-warning"> | ||||||
|                 <div class="col-sm-offset-0"> |                 <div class="col-sm-offset-0"> | ||||||
|                     @if (Session[GlobalVars.IS_ADMIN] != null) |                     @if (GlobalVars.IsAdminValueNotNull(Session)) | ||||||
|                     { |                     { | ||||||
|                         if ((bool)Session[GlobalVars.IS_ADMIN] && (Request.IsAuthenticated)) |                         if (GlobalVars.IsAdmin(Session) && (Request.IsAuthenticated)) | ||||||
|                         { |                         { | ||||||
|                             @(Html.Kendo().Grid<Fab2ApprovalSystem.ViewModels.ApproversListViewModel>() |                             @(Html.Kendo().Grid<Fab2ApprovalSystem.ViewModels.ApproversListViewModel>() | ||||||
|                         .Name("ApproversList") |                         .Name("ApproversList") | ||||||
|  | |||||||
| @ -421,7 +421,7 @@ | |||||||
|  |  | ||||||
|             <div class="panel-body bg-warning"> |             <div class="panel-body bg-warning"> | ||||||
|                 <div class="col-sm-offset-0"> |                 <div class="col-sm-offset-0"> | ||||||
|                     @if ((bool)Session[GlobalVars.IS_ADMIN] && (Request.IsAuthenticated)) |                     @if (GlobalVars.IsAdmin(Session) && (Request.IsAuthenticated)) | ||||||
|                     { |                     { | ||||||
|                         @(Html.Kendo().Grid<Fab2ApprovalSystem.ViewModels.ApproversListViewModel>() |                         @(Html.Kendo().Grid<Fab2ApprovalSystem.ViewModels.ApproversListViewModel>() | ||||||
|                     .Name("ApproversList") |                     .Name("ApproversList") | ||||||
|  | |||||||
| @ -133,7 +133,7 @@ | |||||||
|                             </div> |                             </div> | ||||||
|                             <div class="col-sm-9"> |                             <div class="col-sm-9"> | ||||||
|                                 @Html.TextBoxFor(model => model.OriginatorName, new { id = "txtOriginatorName", @class = "k-textbox", Readonly = "Readonly", style = "background-color:lightblue" }) |                                 @Html.TextBoxFor(model => model.OriginatorName, new { id = "txtOriginatorName", @class = "k-textbox", Readonly = "Readonly", style = "background-color:lightblue" }) | ||||||
|                                 @if (Session[GlobalVars.IS_ADMIN] != null) |                                 @if (GlobalVars.IsAdminValueNotNull(Session)) | ||||||
|                                 { |                                 { | ||||||
|                                     <a href="javascript:undefined" id="lnkReassignOriginator" class="linkbutton edit" title="Re-assign Originator"></a> |                                     <a href="javascript:undefined" id="lnkReassignOriginator" class="linkbutton edit" title="Re-assign Originator"></a> | ||||||
|                                 } |                                 } | ||||||
| @ -901,9 +901,9 @@ | |||||||
|  |  | ||||||
|         <div class="panel-body bg-warning"> |         <div class="panel-body bg-warning"> | ||||||
|                 <div class="col-sm-offset-0"> |                 <div class="col-sm-offset-0"> | ||||||
|                     @if (Session[GlobalVars.IS_ADMIN] != null) |                     @if (GlobalVars.IsAdminValueNotNull(Session)) | ||||||
|                     { |                     { | ||||||
|                         if ((bool)Session[GlobalVars.IS_ADMIN] && (Request.IsAuthenticated)) |                         if (GlobalVars.IsAdmin(Session) && (Request.IsAuthenticated)) | ||||||
|                         { |                         { | ||||||
|                         @(Html.Kendo().Grid<Fab2ApprovalSystem.ViewModels.ApproversListViewModel>() |                         @(Html.Kendo().Grid<Fab2ApprovalSystem.ViewModels.ApproversListViewModel>() | ||||||
|                         .Name("ApproversList") |                         .Name("ApproversList") | ||||||
|  | |||||||
| @ -125,7 +125,7 @@ | |||||||
|                             </div> |                             </div> | ||||||
|                             <div class="col-sm-9"> |                             <div class="col-sm-9"> | ||||||
|                                 @Html.TextBoxFor(model => model.Originator, new { @class = "k-textbox", Readonly = "Readonly", style = "background-color:lightblue" }) |                                 @Html.TextBoxFor(model => model.Originator, new { @class = "k-textbox", Readonly = "Readonly", style = "background-color:lightblue" }) | ||||||
|                                 @if (Session[GlobalVars.IS_ADMIN] != null) |                                 @if (GlobalVars.IsAdminValueNotNull(Session)) | ||||||
|                                 { |                                 { | ||||||
|                                     <a href="javascript:undefined" id="lnkReassignOriginator" class="linkbutton edit" title="Re-assign Originator"></a> |                                     <a href="javascript:undefined" id="lnkReassignOriginator" class="linkbutton edit" title="Re-assign Originator"></a> | ||||||
|                                 } |                                 } | ||||||
|  | |||||||
| @ -166,7 +166,7 @@ | |||||||
|                         </div> |                         </div> | ||||||
|                         <div class="col-sm-9"> |                         <div class="col-sm-9"> | ||||||
|                             @Html.TextBoxFor(model => model.Originator, new { @class = "k-textbox", Readonly = "Readonly", style = "background-color:lightblue" }) |                             @Html.TextBoxFor(model => model.Originator, new { @class = "k-textbox", Readonly = "Readonly", style = "background-color:lightblue" }) | ||||||
|                             @if (Session[GlobalVars.IS_ADMIN] != null) |                             @if (GlobalVars.IsAdminValueNotNull(Session)) | ||||||
|                             { |                             { | ||||||
|                                 <a href="javascript:undefined" id="lnkReassignOriginator" class="linkbutton edit" title="Re-assign Originator"></a> |                                 <a href="javascript:undefined" id="lnkReassignOriginator" class="linkbutton edit" title="Re-assign Originator"></a> | ||||||
|                             } |                             } | ||||||
|  | |||||||
| @ -146,7 +146,7 @@ | |||||||
|                             </div> |                             </div> | ||||||
|                             <div class="col-sm-9"> |                             <div class="col-sm-9"> | ||||||
|                                 @Html.TextBoxFor(model => model.Originator, new { @class = "k-textbox", Readonly = "Readonly", style = "background-color:lightblue" }) |                                 @Html.TextBoxFor(model => model.Originator, new { @class = "k-textbox", Readonly = "Readonly", style = "background-color:lightblue" }) | ||||||
|                                 @if (Session[GlobalVars.IS_ADMIN] != null) |                                 @if (GlobalVars.IsAdminValueNotNull(Session)) | ||||||
|                                 { |                                 { | ||||||
|                                     <a href="javascript:undefined" id="lnkReassignOriginator" class="linkbutton edit" title="Re-assign Originator"></a> |                                     <a href="javascript:undefined" id="lnkReassignOriginator" class="linkbutton edit" title="Re-assign Originator"></a> | ||||||
|                                 } |                                 } | ||||||
|  | |||||||
| @ -152,7 +152,7 @@ | |||||||
|                             </div> |                             </div> | ||||||
|                             <div class="col-sm-9"> |                             <div class="col-sm-9"> | ||||||
|                                 @Html.TextBoxFor(model => model.OriginatorName, new { id = "txtOriginatorName", @class = "k-textbox", Readonly = "Readonly", style = "background-color:lightblue" }) |                                 @Html.TextBoxFor(model => model.OriginatorName, new { id = "txtOriginatorName", @class = "k-textbox", Readonly = "Readonly", style = "background-color:lightblue" }) | ||||||
|                                 @if (Session[GlobalVars.IS_ADMIN] != null) |                                 @if (GlobalVars.IsAdminValueNotNull(Session)) | ||||||
|                                 { |                                 { | ||||||
|                                     <a href="javascript:undefined" id="lnkReassignOriginator" class="linkbutton edit" title="Re-assign Originator"></a> |                                     <a href="javascript:undefined" id="lnkReassignOriginator" class="linkbutton edit" title="Re-assign Originator"></a> | ||||||
|                                 } |                                 } | ||||||
| @ -818,7 +818,7 @@ | |||||||
|  |  | ||||||
|             </div> |             </div> | ||||||
|             <div class="panel-heading"> |             <div class="panel-heading"> | ||||||
|                 @if (((bool)Session[GlobalVars.IS_ADMIN] && (Request.IsAuthenticated))) |                 @if ((GlobalVars.IsAdmin(Session) && (Request.IsAuthenticated))) | ||||||
|                 { |                 { | ||||||
|                     <button class="btn btn-warning btn-xs" data-toggle="modal" id="additionalApprovers" style="font-size:x-small"> |                     <button class="btn btn-warning btn-xs" data-toggle="modal" id="additionalApprovers" style="font-size:x-small"> | ||||||
|                         Additional Approvers |                         Additional Approvers | ||||||
| @ -839,9 +839,9 @@ | |||||||
|             <div class="panel-body bg-warning"> |             <div class="panel-body bg-warning"> | ||||||
|                 <div class="col-sm-offset-0"> |                 <div class="col-sm-offset-0"> | ||||||
|  |  | ||||||
|                     @if (Session[GlobalVars.IS_ADMIN] != null) |                     @if (GlobalVars.IsAdminValueNotNull(Session)) | ||||||
|                     { |                     { | ||||||
|                         if ((bool)Session[GlobalVars.IS_ADMIN] && (Request.IsAuthenticated)) |                         if (GlobalVars.IsAdmin(Session) && (Request.IsAuthenticated)) | ||||||
|                         { |                         { | ||||||
|                             @(Html.Kendo().Grid<Fab2ApprovalSystem.ViewModels.ApproversListViewModel>() |                             @(Html.Kendo().Grid<Fab2ApprovalSystem.ViewModels.ApproversListViewModel>() | ||||||
|                         .Name("ApproversList") |                         .Name("ApproversList") | ||||||
|  | |||||||
| @ -196,7 +196,7 @@ | |||||||
|                             </div> |                             </div> | ||||||
|                             <div class="col-sm-9"> |                             <div class="col-sm-9"> | ||||||
|                                 @Html.TextBoxFor(model => model.OriginatorName, new { id = "txtOriginatorName", @class = "k-textbox", Readonly = "Readonly", style = "background-color:lightblue" }) |                                 @Html.TextBoxFor(model => model.OriginatorName, new { id = "txtOriginatorName", @class = "k-textbox", Readonly = "Readonly", style = "background-color:lightblue" }) | ||||||
|                                 @if (Session[GlobalVars.IS_ADMIN] != null) |                                 @if (GlobalVars.IsAdminValueNotNull(Session)) | ||||||
|                                 { |                                 { | ||||||
|                                     <a href="javascript:undefined" id="lnkReassignOriginator" class="linkbutton edit" title="Re-assign Originator"></a> |                                     <a href="javascript:undefined" id="lnkReassignOriginator" class="linkbutton edit" title="Re-assign Originator"></a> | ||||||
|                                 } |                                 } | ||||||
|  | |||||||
| @ -929,9 +929,9 @@ | |||||||
|  |  | ||||||
|             <div class="panel-body bg-warning"> |             <div class="panel-body bg-warning"> | ||||||
|                 <div class="col-sm-offset-0"> |                 <div class="col-sm-offset-0"> | ||||||
|                     @if (Session[GlobalVars.IS_ADMIN] != null) |                     @if (GlobalVars.IsAdminValueNotNull(Session)) | ||||||
|                     { |                     { | ||||||
|                         if ((bool)Session[GlobalVars.IS_ADMIN] && (Request.IsAuthenticated)) |                         if (GlobalVars.IsAdmin(Session) && (Request.IsAuthenticated)) | ||||||
|                         { |                         { | ||||||
|                             @(Html.Kendo().Grid<Fab2ApprovalSystem.ViewModels.ApproversListViewModel>() |                             @(Html.Kendo().Grid<Fab2ApprovalSystem.ViewModels.ApproversListViewModel>() | ||||||
|                     .Name("ApproversList") |                     .Name("ApproversList") | ||||||
| @ -1711,7 +1711,7 @@ | |||||||
|  |  | ||||||
|         $("#UploadWRAttchmentRev").on('click', function (e) { |         $("#UploadWRAttchmentRev").on('click', function (e) { | ||||||
|             e.preventDefault(); |             e.preventDefault(); | ||||||
|             var model = "@Session["CreateNewRevision"]"; |             var model = '@GlobalVars.GetCreateNewRevision(Session)'; | ||||||
|             wrAttachmentOperation = "Add"; |             wrAttachmentOperation = "Add"; | ||||||
|             if (model == "true") { |             if (model == "true") { | ||||||
|                 $("#WinWorkReqAttRevComments").modal('show'); |                 $("#WinWorkReqAttRevComments").modal('show'); | ||||||
| @ -1787,7 +1787,7 @@ | |||||||
|             data.RevisionComments = $("#revisionWRAttachComments").val(); |             data.RevisionComments = $("#revisionWRAttachComments").val(); | ||||||
|  |  | ||||||
|  |  | ||||||
|             var model = "@Session["CreateNewRevision"]"; |             var model = '@GlobalVars.GetCreateNewRevision(Session)'; | ||||||
|             if (model == "true") { |             if (model == "true") { | ||||||
|                 var urlString = '/LotTraveler/UpdateWorkRequestAttachmentRevision'; |                 var urlString = '/LotTraveler/UpdateWorkRequestAttachmentRevision'; | ||||||
|                 $.ajax({ |                 $.ajax({ | ||||||
| @ -1851,7 +1851,7 @@ | |||||||
|  |  | ||||||
|         function on_WorkReqAttachmentsGridSuccess() { |         function on_WorkReqAttachmentsGridSuccess() { | ||||||
|  |  | ||||||
|             var model = "@Session["CreateNewRevision"]"; |             var model = '@GlobalVars.GetCreateNewRevision(Session)'; | ||||||
|  |  | ||||||
|             if (model == "true") { |             if (model == "true") { | ||||||
|                 $.ajax({ |                 $.ajax({ | ||||||
| @ -1887,7 +1887,7 @@ | |||||||
|             var dataItem = this.dataItem($(e.currentTarget).closest("tr")); |             var dataItem = this.dataItem($(e.currentTarget).closest("tr")); | ||||||
|             currentWrkReqAttachID = dataItem.ID; |             currentWrkReqAttachID = dataItem.ID; | ||||||
|  |  | ||||||
|             var model = "@Session["CreateNewRevision"]"; |             var model = '@GlobalVars.GetCreateNewRevision(Session)'; | ||||||
|  |  | ||||||
|             if (model == "true") { |             if (model == "true") { | ||||||
|                 $("#WinWorkReqAttRevComments").modal('show'); |                 $("#WinWorkReqAttRevComments").modal('show'); | ||||||
| @ -1910,7 +1910,7 @@ | |||||||
|  |  | ||||||
|             if (confirm("Do you really wish to delete the attachment record")) { |             if (confirm("Do you really wish to delete the attachment record")) { | ||||||
|  |  | ||||||
|                 var model = "@Session["CreateNewRevision"]"; |                 var model = '@GlobalVars.GetCreateNewRevision(Session)'; | ||||||
|                 if (model == "true") { |                 if (model == "true") { | ||||||
|                     $("#WinWorkReqAttRevComments").modal('show'); |                     $("#WinWorkReqAttRevComments").modal('show'); | ||||||
|                 } |                 } | ||||||
| @ -2009,7 +2009,7 @@ | |||||||
|  |  | ||||||
|             if (confirm("Do you really wish to delete the record?")) { |             if (confirm("Do you really wish to delete the record?")) { | ||||||
|  |  | ||||||
|                 var model = "@Session["CreateNewRevision"]"; |                 var model = '@GlobalVars.GetCreateNewRevision(Session)'; | ||||||
|                 if (model == "true") { |                 if (model == "true") { | ||||||
|                     $("#WinHoldStepRevisionComments").modal("show"); |                     $("#WinHoldStepRevisionComments").modal("show"); | ||||||
|                 } |                 } | ||||||
| @ -2180,7 +2180,7 @@ | |||||||
|             else { |             else { | ||||||
|                 // save |                 // save | ||||||
|                 $("#AddHoldStepForm").modal('hide'); |                 $("#AddHoldStepForm").modal('hide'); | ||||||
|                 var model = "@Session["CreateNewRevision"]"; |                 var model = '@GlobalVars.GetCreateNewRevision(Session)'; | ||||||
|                 if (model == "true") { |                 if (model == "true") { | ||||||
|                     $("#WinHoldStepRevisionComments").modal("show"); |                     $("#WinHoldStepRevisionComments").modal("show"); | ||||||
|                 } |                 } | ||||||
| @ -2451,7 +2451,7 @@ | |||||||
|  |  | ||||||
|             var dataItem = this.dataItem($(e.currentTarget).closest("tr")); |             var dataItem = this.dataItem($(e.currentTarget).closest("tr")); | ||||||
|             currentHoldStepID = dataItem.ID; |             currentHoldStepID = dataItem.ID; | ||||||
|             var model = "@Session["CreateNewRevision"]"; |             var model = '@GlobalVars.GetCreateNewRevision(Session)'; | ||||||
|  |  | ||||||
|             if (model == "true") { |             if (model == "true") { | ||||||
|                 $("#WinHoldStepAttRevComments").modal('show'); |                 $("#WinHoldStepAttRevComments").modal('show'); | ||||||
| @ -2769,7 +2769,7 @@ | |||||||
|                 return; |                 return; | ||||||
|             } |             } | ||||||
|  |  | ||||||
|             var model = '@Session["CreateNewRevision"]'; |             var model = '@GlobalVars.GetCreateNewRevision(Session)'; | ||||||
|  |  | ||||||
|             $('#submitRevisionComments').attr("disabled", false); |             $('#submitRevisionComments').attr("disabled", false); | ||||||
|  |  | ||||||
| @ -2919,7 +2919,7 @@ | |||||||
|  |  | ||||||
|             if (confirm("Do you really wish to delete?")) { |             if (confirm("Do you really wish to delete?")) { | ||||||
|  |  | ||||||
|                 var model = '@Session["CreateNewRevision"]'; |                 var model = '@GlobalVars.GetCreateNewRevision(Session)'; | ||||||
|                 if (model == "true") |                 if (model == "true") | ||||||
|                     $("#WinEPIRevisionComments").modal('show'); |                     $("#WinEPIRevisionComments").modal('show'); | ||||||
|                 else { |                 else { | ||||||
| @ -2968,7 +2968,7 @@ | |||||||
|             var Quantity = $("#txtEPiQuantity").val(); |             var Quantity = $("#txtEPiQuantity").val(); | ||||||
|  |  | ||||||
|             $("#EPIForm").modal('hide'); |             $("#EPIForm").modal('hide'); | ||||||
|             var model = '@Session["CreateNewRevision"]'; |             var model = '@GlobalVars.GetCreateNewRevision(Session)'; | ||||||
|  |  | ||||||
|             if (model == "true") |             if (model == "true") | ||||||
|                 $("#WinEPIRevisionComments").modal('show'); |                 $("#WinEPIRevisionComments").modal('show'); | ||||||
|  | |||||||
| @ -118,7 +118,7 @@ | |||||||
|  |  | ||||||
|     function SetDocType(e) { |     function SetDocType(e) { | ||||||
|          |          | ||||||
|         var model = "@Session["CreateNewRevision"]"; |         var model = '@GlobalVars.GetCreateNewRevision(Session)'; | ||||||
|        |        | ||||||
|         if (model == "true") { |         if (model == "true") { | ||||||
|             $.ajax({ |             $.ajax({ | ||||||
|  | |||||||
| @ -464,7 +464,7 @@ | |||||||
|                     </td> |                     </td> | ||||||
|                     <td width="33%"> |                     <td width="33%"> | ||||||
|                         <div class="text-center"> |                         <div class="text-center"> | ||||||
|                             @if ((bool)Session[GlobalVars.IS_ADMIN] && (Request.IsAuthenticated)) |                             @if (GlobalVars.IsAdmin(Session) && (Request.IsAuthenticated)) | ||||||
|                             { |                             { | ||||||
|                                 <a class="k-button" href="javascript: void(0)" id="addMRBFlagAndHoldToSPN" style="padding-left: 10px;"> |                                 <a class="k-button" href="javascript: void(0)" id="addMRBFlagAndHoldToSPN" style="padding-left: 10px;"> | ||||||
|                                 Add MRB Flag/Hold to SPN |                                 Add MRB Flag/Hold to SPN | ||||||
|  | |||||||
| @ -34,7 +34,7 @@ | |||||||
|             </div> |             </div> | ||||||
|             <div class="navbar-collapse collapse"> |             <div class="navbar-collapse collapse"> | ||||||
|                 <ul class="nav navbar-nav">             |                 <ul class="nav navbar-nav">             | ||||||
|                     @if ((bool)@Session[GlobalVars.IS_MANAGER]) |                     @if (@GlobalVars.IsManager(Session)) | ||||||
|                     {  |                     {  | ||||||
|                         <li>@Html.ActionLink("Manager", "Index", "Manager")</li> |                         <li>@Html.ActionLink("Manager", "Index", "Manager")</li> | ||||||
|                     } |                     } | ||||||
|  | |||||||
| @ -42,8 +42,8 @@ | |||||||
|                     @*<li>@Html.ActionLink("Home", "Index", "Home")</li> |                     @*<li>@Html.ActionLink("Home", "Index", "Home")</li> | ||||||
|                 <li>@Html.ActionLink("About", "About", "Home")</li> |                 <li>@Html.ActionLink("About", "About", "Home")</li> | ||||||
|                 <li>@Html.ActionLink("Contact", "Contact", "Home")</li>*@ |                 <li>@Html.ActionLink("Contact", "Contact", "Home")</li>*@ | ||||||
|                     @if (Session[GlobalVars.IS_ADMIN] != null) {  |                     @if (GlobalVars.IsAdminValueNotNull(Session)) {  | ||||||
|                          if ((bool)Session[GlobalVars.IS_ADMIN] && (Request.IsAuthenticated)) |                          if (GlobalVars.IsAdmin(Session) && (Request.IsAuthenticated)) | ||||||
|                         { |                         { | ||||||
|                             <li>@Html.ActionLink("Admin", "Index", "Admin")</li> |                             <li>@Html.ActionLink("Admin", "Index", "Admin")</li> | ||||||
|                         } |                         } | ||||||
|  | |||||||
| @ -74,12 +74,12 @@ else | |||||||
|     } |     } | ||||||
| </style> | </style> | ||||||
| <div id="cover-spin"></div> | <div id="cover-spin"></div> | ||||||
| @if (Session[GlobalVars.IS_ADMIN] != null) | @if (GlobalVars.IsAdminValueNotNull(Session)) | ||||||
| { | { | ||||||
|     <a href="/Training/ViewTrainings" class="btn btn-primary">Back To Trainings</a> |     <a href="/Training/ViewTrainings" class="btn btn-primary">Back To Trainings</a> | ||||||
| } | } | ||||||
| @Html.ActionLink("Go to ECN", "ReadOnly", "ECN", new { IssueID = Convert.ToInt32(ViewBag.ECNNumber) }, new { @class = "btn btn-primary" }) | @Html.ActionLink("Go to ECN", "ReadOnly", "ECN", new { IssueID = Convert.ToInt32(ViewBag.ECNNumber) }, new { @class = "btn btn-primary" }) | ||||||
| @if (Session[GlobalVars.IS_ADMIN] != null) | @if (GlobalVars.IsAdminValueNotNull(Session)) | ||||||
| { | { | ||||||
|     <button class="btn btn-primary" id="openAddUserBtn">Add User</button> |     <button class="btn btn-primary" id="openAddUserBtn">Add User</button> | ||||||
|     <button class="btn btn-primary" id="openAddGroupBtn">Add Group</button> |     <button class="btn btn-primary" id="openAddGroupBtn">Add Group</button> | ||||||
| @ -98,7 +98,7 @@ else | |||||||
|         <th> |         <th> | ||||||
|             @Html.DisplayNameFor(model => model.status) |             @Html.DisplayNameFor(model => model.status) | ||||||
|         </th> |         </th> | ||||||
|         @if (Session[GlobalVars.IS_ADMIN] != null) |         @if (GlobalVars.IsAdminValueNotNull(Session)) | ||||||
|         { |         { | ||||||
|             <th> |             <th> | ||||||
|  |  | ||||||
| @ -130,7 +130,7 @@ else | |||||||
|                 <td>Incomplete</td> |                 <td>Incomplete</td> | ||||||
|             } |             } | ||||||
|             <td> |             <td> | ||||||
|                 @if (Session[GlobalVars.IS_ADMIN] != null && item.status != true) |                 @if (GlobalVars.IsAdminValueNotNull(Session) && item.status != true) | ||||||
|                 { |                 { | ||||||
|  |  | ||||||
|                     <button class="btn btn-primary" onclick="DeleteAssignment(@item.ID)">Delete</button> |                     <button class="btn btn-primary" onclick="DeleteAssignment(@item.ID)">Delete</button> | ||||||
| @ -138,7 +138,7 @@ else | |||||||
|                 } |                 } | ||||||
|             </td> |             </td> | ||||||
|             <td> |             <td> | ||||||
|                 @if (Session[GlobalVars.IS_ADMIN] != null && item.status != true) |                 @if (GlobalVars.IsAdminValueNotNull(Session) && item.status != true) | ||||||
|                 { |                 { | ||||||
|  |  | ||||||
|                     <button id="ReminderButton" class="btn btn-primary" onclick="SendReminder(@item.UserID, @item.ID, @Convert.ToInt32(ViewBag.ECNNumber))">Remind</button> |                     <button id="ReminderButton" class="btn btn-primary" onclick="SendReminder(@item.UserID, @item.ID, @Convert.ToInt32(ViewBag.ECNNumber))">Remind</button> | ||||||
|  | |||||||
| @ -18,7 +18,7 @@ | |||||||
|     </tr> |     </tr> | ||||||
|  |  | ||||||
| @foreach (var item in Model) { | @foreach (var item in Model) { | ||||||
|     if (item.UserID.ToString() == Session[GlobalVars.SESSION_USERID].ToString() || Session[GlobalVars.IS_ADMIN] != null) |     if (item.UserID.ToString() == GlobalVars.GetUserIdValue(Session) || GlobalVars.IsAdminValueNotNull(Session)) | ||||||
|     { |     { | ||||||
|     <tr> |     <tr> | ||||||
|         <td> |         <td> | ||||||
|  | |||||||
| @ -137,7 +137,7 @@ | |||||||
|                         <td> |                         <td> | ||||||
|                             @Html.ActionLink("View", "ViewTrainingAssignments", new { trainingID = item.TrainingID }, new { @class = "btn btn-primary" }) |                             @Html.ActionLink("View", "ViewTrainingAssignments", new { trainingID = item.TrainingID }, new { @class = "btn btn-primary" }) | ||||||
|                         </td> |                         </td> | ||||||
|                         @if ((bool)Session[GlobalVars.IS_ADMIN] == true) |                         @if (GlobalVars.IsAdmin(Session)) | ||||||
|                         { |                         { | ||||||
|                             <td> |                             <td> | ||||||
|                                 @Html.ActionLink("Delete", "DeleteTrainingByID", new { trainingId = item.TrainingID }, new { @class = "btn btn-primary" }) |                                 @Html.ActionLink("Delete", "DeleteTrainingByID", new { trainingId = item.TrainingID }, new { @class = "btn btn-primary" }) | ||||||
|  | |||||||
| @ -41,6 +41,7 @@ stages: | |||||||
|  |  | ||||||
|           - script: | |           - script: | | ||||||
|               mklink /J ".vscode\.UserSecrets" "%AppData%\Microsoft\UserSecrets\f2da5035-aba9-4676-9f8d-d6689f84663d" |               mklink /J ".vscode\.UserSecrets" "%AppData%\Microsoft\UserSecrets\f2da5035-aba9-4676-9f8d-d6689f84663d" | ||||||
|  |               mklink /J "Controllers" "..\Fab2ApprovalSystem\Controllers" | ||||||
|               mklink /J "DMO" "..\Fab2ApprovalSystem\DMO" |               mklink /J "DMO" "..\Fab2ApprovalSystem\DMO" | ||||||
|               mklink /J "Jobs" "..\Fab2ApprovalSystem\Jobs" |               mklink /J "Jobs" "..\Fab2ApprovalSystem\Jobs" | ||||||
|               mklink /J "JobSchedules" "..\Fab2ApprovalSystem\JobSchedules" |               mklink /J "JobSchedules" "..\Fab2ApprovalSystem\JobSchedules" | ||||||
| @ -148,6 +149,7 @@ stages: | |||||||
|  |  | ||||||
|           - script: | |           - script: | | ||||||
|               mklink /J ".vscode\.UserSecrets" "%AppData%\Microsoft\UserSecrets\f2da5035-aba9-4676-9f8d-d6689f84663d" |               mklink /J ".vscode\.UserSecrets" "%AppData%\Microsoft\UserSecrets\f2da5035-aba9-4676-9f8d-d6689f84663d" | ||||||
|  |               mklink /J "Controllers" "..\Fab2ApprovalSystem\Controllers" | ||||||
|               mklink /J "DMO" "..\Fab2ApprovalSystem\DMO" |               mklink /J "DMO" "..\Fab2ApprovalSystem\DMO" | ||||||
|               mklink /J "Jobs" "..\Fab2ApprovalSystem\Jobs" |               mklink /J "Jobs" "..\Fab2ApprovalSystem\Jobs" | ||||||
|               mklink /J "JobSchedules" "..\Fab2ApprovalSystem\JobSchedules" |               mklink /J "JobSchedules" "..\Fab2ApprovalSystem\JobSchedules" | ||||||
|  | |||||||
| @ -48,6 +48,7 @@ stages: | |||||||
|  |  | ||||||
|           - script: | |           - script: | | ||||||
|               mklink /J ".vscode\.UserSecrets" "%AppData%\Microsoft\UserSecrets\f2da5035-aba9-4676-9f8d-d6689f84663d" |               mklink /J ".vscode\.UserSecrets" "%AppData%\Microsoft\UserSecrets\f2da5035-aba9-4676-9f8d-d6689f84663d" | ||||||
|  |               mklink /J "Controllers" "..\Fab2ApprovalSystem\Controllers" | ||||||
|               mklink /J "DMO" "..\Fab2ApprovalSystem\DMO" |               mklink /J "DMO" "..\Fab2ApprovalSystem\DMO" | ||||||
|               mklink /J "Jobs" "..\Fab2ApprovalSystem\Jobs" |               mklink /J "Jobs" "..\Fab2ApprovalSystem\Jobs" | ||||||
|               mklink /J "JobSchedules" "..\Fab2ApprovalSystem\JobSchedules" |               mklink /J "JobSchedules" "..\Fab2ApprovalSystem\JobSchedules" | ||||||
| @ -155,6 +156,7 @@ stages: | |||||||
|  |  | ||||||
|           - script: | |           - script: | | ||||||
|               mklink /J ".vscode\.UserSecrets" "%AppData%\Microsoft\UserSecrets\f2da5035-aba9-4676-9f8d-d6689f84663d" |               mklink /J ".vscode\.UserSecrets" "%AppData%\Microsoft\UserSecrets\f2da5035-aba9-4676-9f8d-d6689f84663d" | ||||||
|  |               mklink /J "Controllers" "..\Fab2ApprovalSystem\Controllers" | ||||||
|               mklink /J "DMO" "..\Fab2ApprovalSystem\DMO" |               mklink /J "DMO" "..\Fab2ApprovalSystem\DMO" | ||||||
|               mklink /J "Jobs" "..\Fab2ApprovalSystem\Jobs" |               mklink /J "Jobs" "..\Fab2ApprovalSystem\Jobs" | ||||||
|               mklink /J "JobSchedules" "..\Fab2ApprovalSystem\JobSchedules" |               mklink /J "JobSchedules" "..\Fab2ApprovalSystem\JobSchedules" | ||||||
|  | |||||||
| @ -52,7 +52,7 @@ public class EngChangeNoticeDMOTests { | |||||||
|         try { throw new Exception(); } catch (Exception) { } |         try { throw new Exception(); } catch (Exception) { } | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     private static void EngChangeNoticeDMO(ILogger? logger, AppSettings appSettings) { |     private static void EngChangeNoticeDMO(ILogger? logger, AppSettings appSettings, int ecnNumber) { | ||||||
| #pragma warning disable IDE0059 | #pragma warning disable IDE0059 | ||||||
|         SetGlobalVars(logger, appSettings); |         SetGlobalVars(logger, appSettings); | ||||||
|         ECN_DMO ecnDMO = new(); |         ECN_DMO ecnDMO = new(); | ||||||
| @ -84,6 +84,9 @@ public class EngChangeNoticeDMOTests { | |||||||
|         // int SubmitTECNExtensionDocument(int issueID, appSettings.UserId, int documentType, DateTime extensionDate); |         // int SubmitTECNExtensionDocument(int issueID, appSettings.UserId, int documentType, DateTime extensionDate); | ||||||
|         // void TECNExtensionLog(int ecnNumber, DateTime extensionDate); |         // void TECNExtensionLog(int ecnNumber, DateTime extensionDate); | ||||||
|         // void UpdateECNType(int ecnNumber, string ecnType); |         // void UpdateECNType(int ecnNumber, string ecnType); | ||||||
|  |         ECNPdf ecn = ecnDMO.GetECNPdf(ecnNumber); | ||||||
|  |         string categoryId = ecnDMO.GetCategoryID(ecn); | ||||||
|  |         string trainingNotificationTo = ecnDMO.GetTrainingNotificationTo(ecn, new TrainingDMO()); | ||||||
|         if (ecnDMO is null) { } |         if (ecnDMO is null) { } | ||||||
| #pragma warning restore IDE0059 | #pragma warning restore IDE0059 | ||||||
|     } |     } | ||||||
| @ -92,13 +95,14 @@ public class EngChangeNoticeDMOTests { | |||||||
|     [Ignore] |     [Ignore] | ||||||
| #endif | #endif | ||||||
|     [TestMethod] |     [TestMethod] | ||||||
|     public void EngChangeNoticeDMOIsAttachedOnly() { |     [DataRow(82689)] | ||||||
|  |     public void EngChangeNoticeDMOIsAttachedOnly(int ecnNumber) { | ||||||
|         _Logger?.LogInformation("Starting Web Application"); |         _Logger?.LogInformation("Starting Web Application"); | ||||||
|         IServiceProvider? serviceProvider = _WebApplicationFactory?.Services.CreateScope().ServiceProvider; |         IServiceProvider? serviceProvider = _WebApplicationFactory?.Services.CreateScope().ServiceProvider; | ||||||
|         AppSettings? appSettings = serviceProvider?.GetRequiredService<AppSettings>(); |         AppSettings? appSettings = serviceProvider?.GetRequiredService<AppSettings>(); | ||||||
|         Assert.IsTrue(appSettings is not null); |         Assert.IsTrue(appSettings is not null); | ||||||
|         if (System.Diagnostics.Debugger.IsAttached) |         if (System.Diagnostics.Debugger.IsAttached) | ||||||
|             EngChangeNoticeDMO(_Logger, appSettings); |             EngChangeNoticeDMO(_Logger, appSettings, ecnNumber); | ||||||
|         _Logger?.LogInformation("{TestName} completed", _TestContext?.TestName); |         _Logger?.LogInformation("{TestName} completed", _TestContext?.TestName); | ||||||
|         NonThrowTryCatch(); |         NonThrowTryCatch(); | ||||||
|     } |     } | ||||||
|  | |||||||
| @ -1,55 +0,0 @@ | |||||||
| using System; |  | ||||||
| using System.Threading.Tasks; |  | ||||||
|  |  | ||||||
| using MesaFabApproval.API.Services; |  | ||||||
| using MesaFabApproval.Shared.Models; |  | ||||||
|  |  | ||||||
| using Microsoft.Extensions.Caching.Memory; |  | ||||||
| using Microsoft.Extensions.Logging; |  | ||||||
|  |  | ||||||
| using Moq; |  | ||||||
|  |  | ||||||
| using Xunit; |  | ||||||
|  |  | ||||||
| namespace MesaFabApproval.API.Test; |  | ||||||
|  |  | ||||||
| public class ApprovalServiceTests { |  | ||||||
|     private readonly Mock<ILogger<ApprovalService>> _loggerMock; |  | ||||||
|     private readonly Mock<IMemoryCache> _cacheMock; |  | ||||||
|     private readonly Mock<IDalService> _dalServiceMock; |  | ||||||
|     private readonly Mock<IUserService> _userServiceMock; |  | ||||||
|     private readonly ApprovalService _approvalService; |  | ||||||
|  |  | ||||||
|     public ApprovalServiceTests() { |  | ||||||
|         _loggerMock = new Mock<ILogger<ApprovalService>>(); |  | ||||||
|         _cacheMock = new Mock<IMemoryCache>(); |  | ||||||
|         _dalServiceMock = new Mock<IDalService>(); |  | ||||||
|         _userServiceMock = new Mock<IUserService>(); |  | ||||||
|         _approvalService = new ApprovalService(_loggerMock.Object, _cacheMock.Object, _dalServiceMock.Object, _userServiceMock.Object); |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     [Fact] |  | ||||||
|     public async Task DeleteApproval_ValidApprovalID_DeletesApproval() { |  | ||||||
|         int approvalID = 1; |  | ||||||
|         _dalServiceMock.Setup(d => d.ExecuteAsync(It.IsAny<string>(), It.IsAny<object>())).ReturnsAsync(1); |  | ||||||
|  |  | ||||||
|         await _approvalService.DeleteApproval(approvalID); |  | ||||||
|  |  | ||||||
|         _dalServiceMock.Verify(d => d.ExecuteAsync(It.IsAny<string>(), It.IsAny<object>()), Times.Once); |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     [Fact] |  | ||||||
|     public async Task DeleteApproval_InvalidApprovalID_ThrowsArgumentException() { |  | ||||||
|         int approvalID = 0; |  | ||||||
|  |  | ||||||
|         await Assert.ThrowsAsync<ArgumentException>(() => _approvalService.DeleteApproval(approvalID)); |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     [Fact] |  | ||||||
|     public async Task DeleteApproval_DeletionFails_ThrowsException() { |  | ||||||
|         int approvalID = 1; |  | ||||||
|         _dalServiceMock.Setup(d => d.ExecuteAsync(It.IsAny<string>(), It.IsAny<object>())).ReturnsAsync(0); |  | ||||||
|  |  | ||||||
|         await Assert.ThrowsAsync<Exception>(() => _approvalService.DeleteApproval(approvalID)); |  | ||||||
|     } |  | ||||||
| } |  | ||||||
| @ -1,18 +0,0 @@ | |||||||
| using Microsoft.Extensions.Caching.Memory; |  | ||||||
|  |  | ||||||
| using Moq; |  | ||||||
|  |  | ||||||
| namespace MesaFabApproval.API.Test; |  | ||||||
|  |  | ||||||
| public static class MockMemoryCacheService { |  | ||||||
|     public static Mock<IMemoryCache> GetMemoryCache(object expectedValue) { |  | ||||||
|         Mock<IMemoryCache> mockMemoryCache = new Mock<IMemoryCache>(); |  | ||||||
|         mockMemoryCache |  | ||||||
|             .Setup(x => x.TryGetValue(It.IsAny<object>(), out expectedValue)) |  | ||||||
|             .Returns(true); |  | ||||||
|         mockMemoryCache |  | ||||||
|             .Setup(x => x.CreateEntry(It.IsAny<object>())) |  | ||||||
|             .Returns(Mock.Of<ICacheEntry>()); |  | ||||||
|         return mockMemoryCache; |  | ||||||
|     } |  | ||||||
| } |  | ||||||
| @ -1,196 +0,0 @@ | |||||||
| using MesaFabApproval.API.Services; |  | ||||||
| using MesaFabApproval.Models; |  | ||||||
| using MesaFabApproval.Shared.Models; |  | ||||||
|  |  | ||||||
| using Microsoft.Extensions.Caching.Memory; |  | ||||||
| using Microsoft.Extensions.Logging; |  | ||||||
|  |  | ||||||
| using Moq; |  | ||||||
|  |  | ||||||
| namespace MesaFabApproval.API.Test; |  | ||||||
|  |  | ||||||
| public class PCRBFollowUpCommentsTests { |  | ||||||
|     private readonly Mock<ILogger<PCRBService>> _loggerMock; |  | ||||||
|     private readonly Mock<IDalService> _dalServiceMock; |  | ||||||
|     private readonly Mock<IMemoryCache> _cacheMock; |  | ||||||
|     private readonly Mock<IUserService> _userServiceMock; |  | ||||||
|     private readonly Mock<IApprovalService> _approvalServiceMock; |  | ||||||
|     private readonly Mock<ISmtpService> _smtpServiceMock; |  | ||||||
|     private readonly PCRBService _pcrbService; |  | ||||||
|     private readonly AppSettings _appSettings; |  | ||||||
|  |  | ||||||
|     private static PCRBFollowUpComment FOLLOW_UP_COMMENT = new PCRBFollowUpComment { |  | ||||||
|         PlanNumber = 1, |  | ||||||
|         FollowUpID = 1, |  | ||||||
|         Comment = "Comment", |  | ||||||
|         UserID = 1 |  | ||||||
|     }; |  | ||||||
|  |  | ||||||
|     private static IEnumerable<PCRBFollowUpComment> FOLLOW_UP_COMMENTS = new List<PCRBFollowUpComment>() { FOLLOW_UP_COMMENT }; |  | ||||||
|  |  | ||||||
|     public PCRBFollowUpCommentsTests() { |  | ||||||
|         _loggerMock = new Mock<ILogger<PCRBService>>(); |  | ||||||
|         _dalServiceMock = new Mock<IDalService>(); |  | ||||||
|         _userServiceMock = new Mock<IUserService>(); |  | ||||||
|         _approvalServiceMock = new Mock<IApprovalService>(); |  | ||||||
|         _smtpServiceMock = new Mock<ISmtpService>(); |  | ||||||
|         _cacheMock = MockMemoryCacheService.GetMemoryCache(FOLLOW_UP_COMMENTS); |  | ||||||
|         _appSettings = new AppSettings( |  | ||||||
|             Company: "Infineon", |  | ||||||
|             DbConnectionString: "connectionString", |  | ||||||
|             JwtAudience: "audience", |  | ||||||
|             JwtIssuer: "issuer", |  | ||||||
|             JwtKey: "key", |  | ||||||
|             MrbAttachmentPath: "mrbAttachmentPath", |  | ||||||
|             PcrbAttachmentPath: "pcrbAttachmentPath", |  | ||||||
|             ShouldSendEmail: false, |  | ||||||
|             SiteBaseUrl: "siteBaseUrl", |  | ||||||
|             WorkingDirectoryName: "workingDirectoryName" |  | ||||||
|         ); |  | ||||||
|  |  | ||||||
|         _pcrbService = new PCRBService( |  | ||||||
|             _loggerMock.Object, |  | ||||||
|             _dalServiceMock.Object, |  | ||||||
|             _cacheMock.Object, |  | ||||||
|             _userServiceMock.Object, |  | ||||||
|             _approvalServiceMock.Object, |  | ||||||
|             _smtpServiceMock.Object, |  | ||||||
|             _appSettings |  | ||||||
|         ); |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     [Fact] |  | ||||||
|     public async Task CreateFollowUpComment_WithValidParam_ShouldCreateFollowUp() { |  | ||||||
|         _dalServiceMock.Setup(d => d.ExecuteAsync<PCRBFollowUpComment>(It.IsAny<string>(), FOLLOW_UP_COMMENT)) |  | ||||||
|             .ReturnsAsync(1); |  | ||||||
|  |  | ||||||
|         await _pcrbService.CreateFollowUpComment(FOLLOW_UP_COMMENT); |  | ||||||
|  |  | ||||||
|         _dalServiceMock.Verify(d => d.ExecuteAsync<PCRBFollowUpComment>(It.IsAny<string>(), FOLLOW_UP_COMMENT), Times.Once); |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     [Fact] |  | ||||||
|     public async Task CreateFollowUpComment_WithNullParam_ShouldThrowException() { |  | ||||||
|         await Assert.ThrowsAsync<ArgumentNullException>(() => _pcrbService.CreateFollowUpComment(null)); |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     [Fact] |  | ||||||
|     public async Task CreateFollowUpComment_WithDatabaseFailure_ShouldThrowException() { |  | ||||||
|         _dalServiceMock.Setup(d => d.ExecuteAsync<PCRBFollowUpComment>(It.IsAny<string>(), FOLLOW_UP_COMMENT)) |  | ||||||
|             .ReturnsAsync(0); |  | ||||||
|  |  | ||||||
|         await Assert.ThrowsAsync<Exception>(() => _pcrbService.CreateFollowUpComment(FOLLOW_UP_COMMENT)); |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     [Fact] |  | ||||||
|     public async Task CreateFollowUpComment_WithDatabaseException_ShouldThrowException() { |  | ||||||
|         _dalServiceMock.Setup(d => d.ExecuteAsync<PCRBFollowUpComment>(It.IsAny<string>(), FOLLOW_UP_COMMENT)) |  | ||||||
|             .Throws<Exception>(); |  | ||||||
|  |  | ||||||
|         await Assert.ThrowsAsync<Exception>(() => _pcrbService.CreateFollowUpComment(FOLLOW_UP_COMMENT)); |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     [Fact] |  | ||||||
|     public async Task GetFollowUpCommentsByPlanNumber_WithCacheBypass_ShouldReturnFollowUps() { |  | ||||||
|         int planNumber = 1; |  | ||||||
|  |  | ||||||
|         _dalServiceMock.Setup(d => d.QueryAsync<PCRBFollowUpComment>(It.IsAny<string>(), It.IsAny<object>())) |  | ||||||
|             .ReturnsAsync(FOLLOW_UP_COMMENTS); |  | ||||||
|  |  | ||||||
|         IEnumerable<PCRBFollowUpComment> result = await _pcrbService.GetFollowUpCommentsByPlanNumber(planNumber, true); |  | ||||||
|  |  | ||||||
|         Assert.NotNull(result); |  | ||||||
|         Assert.Single(result); |  | ||||||
|         Assert.Equal(FOLLOW_UP_COMMENTS, result); |  | ||||||
|         _dalServiceMock.Verify(d => d.QueryAsync<PCRBFollowUpComment>(It.IsAny<string>(), It.IsAny<object>()), Times.Once); |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     [Fact] |  | ||||||
|     public async Task GetFollowUpCommentsByPlanNumber_WithCacheBypass_AndDatabaseException_ShouldThrowException() { |  | ||||||
|         int planNumber = 1; |  | ||||||
|  |  | ||||||
|         _dalServiceMock.Setup(d => d.QueryAsync<PCRBFollowUpComment>(It.IsAny<string>(), It.IsAny<object>())) |  | ||||||
|             .Throws<Exception>(); |  | ||||||
|  |  | ||||||
|         await Assert.ThrowsAsync<Exception>(() => _pcrbService.GetFollowUpCommentsByPlanNumber(planNumber, true)); |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     [Fact] |  | ||||||
|     public async Task GetFollowUpCommentsByPlanNumber_WithoutCacheBypass_ShouldReturnFollowUps() { |  | ||||||
|         int planNumber = 1; |  | ||||||
|  |  | ||||||
|         IEnumerable<PCRBFollowUpComment> result = await _pcrbService.GetFollowUpCommentsByPlanNumber(planNumber, false); |  | ||||||
|  |  | ||||||
|         Assert.NotNull(result); |  | ||||||
|         Assert.Single(result); |  | ||||||
|         Assert.Equal(FOLLOW_UP_COMMENTS, result); |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     [Fact] |  | ||||||
|     public async Task UpdateFollowUpComment_WithValidParam_ShouldUpdateFollowUp() { |  | ||||||
|         _dalServiceMock.Setup(d => d.ExecuteAsync<PCRBFollowUpComment>(It.IsAny<string>(), FOLLOW_UP_COMMENT)) |  | ||||||
|             .ReturnsAsync(1); |  | ||||||
|  |  | ||||||
|         await _pcrbService.UpdateFollowUpComment(FOLLOW_UP_COMMENT); |  | ||||||
|  |  | ||||||
|         _dalServiceMock.Verify(d => d.ExecuteAsync<PCRBFollowUpComment>(It.IsAny<string>(), FOLLOW_UP_COMMENT), Times.Once); |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     [Fact] |  | ||||||
|     public async Task UpdateFollowUpComment_WithNullParam_ShouldThrowException() { |  | ||||||
|         await Assert.ThrowsAsync<ArgumentNullException>(() => _pcrbService.UpdateFollowUpComment(null)); |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     [Fact] |  | ||||||
|     public async Task UpdateFollowUpComment_WithDatabaseFailure_ShouldThrowException() { |  | ||||||
|         _dalServiceMock.Setup(d => d.ExecuteAsync<PCRBFollowUpComment>(It.IsAny<string>(), FOLLOW_UP_COMMENT)) |  | ||||||
|             .ReturnsAsync(0); |  | ||||||
|  |  | ||||||
|         await Assert.ThrowsAsync<Exception>(() => _pcrbService.UpdateFollowUpComment(FOLLOW_UP_COMMENT)); |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     [Fact] |  | ||||||
|     public async Task UpdateFollowUpComment_WithDatabaseException_ShouldThrowException() { |  | ||||||
|         _dalServiceMock.Setup(d => d.ExecuteAsync<PCRBFollowUpComment>(It.IsAny<string>(), FOLLOW_UP_COMMENT)) |  | ||||||
|             .Throws<Exception>(); |  | ||||||
|  |  | ||||||
|         await Assert.ThrowsAsync<Exception>(() => _pcrbService.UpdateFollowUpComment(FOLLOW_UP_COMMENT)); |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     [Fact] |  | ||||||
|     public async Task DeleteFollowUpComment_WithValidId_ShouldDeleteFollowUp() { |  | ||||||
|         int commentId = 1; |  | ||||||
|  |  | ||||||
|         _dalServiceMock.Setup(d => d.ExecuteAsync(It.IsAny<string>(), It.IsAny<object>())) |  | ||||||
|             .ReturnsAsync(1); |  | ||||||
|  |  | ||||||
|         await _pcrbService.DeleteFollowUpComment(commentId); |  | ||||||
|  |  | ||||||
|         _dalServiceMock.Verify(d => d.ExecuteAsync(It.IsAny<string>(), It.IsAny<object>()), Times.Once); |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     [Fact] |  | ||||||
|     public async Task DeleteFollowUpComment_WithInvalidId_ShouldThrowException() { |  | ||||||
|         await Assert.ThrowsAsync<ArgumentException>(() => _pcrbService.DeleteFollowUpComment(0)); |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     [Fact] |  | ||||||
|     public async Task DeleteFollowUpComment_WithDatabaseFailure_ShouldThrowException() { |  | ||||||
|         int commentId = 1; |  | ||||||
|  |  | ||||||
|         _dalServiceMock.Setup(d => d.ExecuteAsync(It.IsAny<string>(), It.IsAny<object>())) |  | ||||||
|             .ReturnsAsync(0); |  | ||||||
|  |  | ||||||
|         await Assert.ThrowsAsync<Exception>(() => _pcrbService.DeleteFollowUpComment(commentId)); |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     [Fact] |  | ||||||
|     public async Task DeleteFollowUpComment_WithDatabaseException_ShouldThrowException() { |  | ||||||
|         int commentId = 1; |  | ||||||
|  |  | ||||||
|         _dalServiceMock.Setup(d => d.ExecuteAsync(It.IsAny<string>(), It.IsAny<object>())) |  | ||||||
|             .Throws<Exception>(); |  | ||||||
|  |  | ||||||
|         await Assert.ThrowsAsync<Exception>(() => _pcrbService.DeleteFollowUpComment(commentId)); |  | ||||||
|     } |  | ||||||
| } |  | ||||||
| @ -1,198 +0,0 @@ | |||||||
| using MesaFabApproval.API.Services; |  | ||||||
| using MesaFabApproval.Models; |  | ||||||
| using MesaFabApproval.Shared.Models; |  | ||||||
|  |  | ||||||
| using Microsoft.Extensions.Caching.Memory; |  | ||||||
| using Microsoft.Extensions.Logging; |  | ||||||
|  |  | ||||||
| using Moq; |  | ||||||
|  |  | ||||||
| namespace MesaFabApproval.API.Test; |  | ||||||
|  |  | ||||||
| public class PCRBFollowUpTests { |  | ||||||
|     private readonly Mock<ILogger<PCRBService>> _loggerMock; |  | ||||||
|     private readonly Mock<IDalService> _dalServiceMock; |  | ||||||
|     private readonly Mock<IMemoryCache> _cacheMock; |  | ||||||
|     private readonly Mock<IUserService> _userServiceMock; |  | ||||||
|     private readonly Mock<IApprovalService> _approvalServiceMock; |  | ||||||
|     private readonly Mock<ISmtpService> _smtpServiceMock; |  | ||||||
|     private readonly PCRBService _pcrbService; |  | ||||||
|     private readonly AppSettings _appSettings; |  | ||||||
|  |  | ||||||
|     private static PCRBFollowUp FOLLOW_UP = new PCRBFollowUp { |  | ||||||
|         ID = 1, |  | ||||||
|         PlanNumber = 1, |  | ||||||
|         Step = 1, |  | ||||||
|         FollowUpDate = DateTime.Now |  | ||||||
|     }; |  | ||||||
|  |  | ||||||
|     private static IEnumerable<PCRBFollowUp> FOLLOW_UPS = new List<PCRBFollowUp>() {  |  | ||||||
|         new PCRBFollowUp { ID = 1, PlanNumber = 1, Step = 1, FollowUpDate = DateTime.Now } |  | ||||||
|     }; |  | ||||||
|  |  | ||||||
|     public PCRBFollowUpTests() { |  | ||||||
|         _loggerMock = new Mock<ILogger<PCRBService>>(); |  | ||||||
|         _dalServiceMock = new Mock<IDalService>(); |  | ||||||
|         _userServiceMock = new Mock<IUserService>(); |  | ||||||
|         _approvalServiceMock = new Mock<IApprovalService>(); |  | ||||||
|         _smtpServiceMock = new Mock<ISmtpService>(); |  | ||||||
|         _cacheMock = MockMemoryCacheService.GetMemoryCache(FOLLOW_UPS); |  | ||||||
|         _appSettings = new AppSettings( |  | ||||||
|             Company: "Infineon", |  | ||||||
|             DbConnectionString: "connectionString", |  | ||||||
|             JwtAudience: "audience", |  | ||||||
|             JwtIssuer: "issuer", |  | ||||||
|             JwtKey: "key", |  | ||||||
|             MrbAttachmentPath: "mrbAttachmentPath", |  | ||||||
|             PcrbAttachmentPath: "pcrbAttachmentPath", |  | ||||||
|             ShouldSendEmail: false, |  | ||||||
|             SiteBaseUrl: "siteBaseUrl", |  | ||||||
|             WorkingDirectoryName: "workingDirectoryName" |  | ||||||
|         ); |  | ||||||
|  |  | ||||||
|         _pcrbService = new PCRBService( |  | ||||||
|             _loggerMock.Object, |  | ||||||
|             _dalServiceMock.Object, |  | ||||||
|             _cacheMock.Object, |  | ||||||
|             _userServiceMock.Object, |  | ||||||
|             _approvalServiceMock.Object, |  | ||||||
|             _smtpServiceMock.Object, |  | ||||||
|             _appSettings |  | ||||||
|         ); |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     [Fact] |  | ||||||
|     public async Task CreateFollowUp_WithValidParam_ShouldCreateFollowUp() { |  | ||||||
|         _dalServiceMock.Setup(d => d.ExecuteAsync<PCRBFollowUp>(It.IsAny<string>(), FOLLOW_UP)) |  | ||||||
|             .ReturnsAsync(1); |  | ||||||
|  |  | ||||||
|         await _pcrbService.CreateFollowUp(FOLLOW_UP); |  | ||||||
|  |  | ||||||
|         _dalServiceMock.Verify(d => d.ExecuteAsync<PCRBFollowUp>(It.IsAny<string>(), FOLLOW_UP), Times.Once); |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     [Fact] |  | ||||||
|     public async Task CreateFollowUp_WithNullParam_ShouldThrowException() { |  | ||||||
|         await Assert.ThrowsAsync<ArgumentNullException>(() => _pcrbService.CreateFollowUp(null)); |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     [Fact] |  | ||||||
|     public async Task CreateFollowUp_WithDatabaseFailure_ShouldThrowException() { |  | ||||||
|         _dalServiceMock.Setup(d => d.ExecuteAsync<PCRBFollowUp>(It.IsAny<string>(), FOLLOW_UP)) |  | ||||||
|             .ReturnsAsync(0); |  | ||||||
|  |  | ||||||
|         await Assert.ThrowsAsync<Exception>(() => _pcrbService.CreateFollowUp(FOLLOW_UP)); |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     [Fact] |  | ||||||
|     public async Task CreateFollowUp_WithDatabaseException_ShouldThrowException() { |  | ||||||
|         _dalServiceMock.Setup(d => d.ExecuteAsync<PCRBFollowUp>(It.IsAny<string>(), FOLLOW_UP)) |  | ||||||
|             .Throws<Exception>(); |  | ||||||
|  |  | ||||||
|         await Assert.ThrowsAsync<Exception>(() => _pcrbService.CreateFollowUp(FOLLOW_UP)); |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     [Fact] |  | ||||||
|     public async Task GetFollowUpsByPlanNumber_WithCacheBypass_ShouldReturnFollowUps() { |  | ||||||
|         int planNumber = 1; |  | ||||||
|  |  | ||||||
|         _dalServiceMock.Setup(d => d.QueryAsync<PCRBFollowUp>(It.IsAny<string>(), It.IsAny<object>())) |  | ||||||
|             .ReturnsAsync(FOLLOW_UPS); |  | ||||||
|  |  | ||||||
|         IEnumerable<PCRBFollowUp> result = await _pcrbService.GetFollowUpsByPlanNumber(planNumber, true); |  | ||||||
|  |  | ||||||
|         Assert.NotNull(result); |  | ||||||
|         Assert.Single(result); |  | ||||||
|         Assert.Equal(FOLLOW_UPS, result); |  | ||||||
|         _dalServiceMock.Verify(d => d.QueryAsync<PCRBFollowUp>(It.IsAny<string>(), It.IsAny<object>()), Times.Once); |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     [Fact] |  | ||||||
|     public async Task GetFollowUpsByPlanNumber_WithCacheBypass_AndDatabaseException_ShouldThrowException() { |  | ||||||
|         int planNumber = 1; |  | ||||||
|  |  | ||||||
|         _dalServiceMock.Setup(d => d.QueryAsync<PCRBFollowUp>(It.IsAny<string>(), It.IsAny<object>())) |  | ||||||
|             .Throws<Exception>(); |  | ||||||
|  |  | ||||||
|         await Assert.ThrowsAsync<Exception>(() => _pcrbService.GetFollowUpsByPlanNumber(planNumber, true)); |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     [Fact] |  | ||||||
|     public async Task GetFollowUpsByPlanNumber_WithoutCacheBypass_ShouldReturnFollowUps() { |  | ||||||
|         int planNumber = 1; |  | ||||||
|  |  | ||||||
|         IEnumerable<PCRBFollowUp> result = await _pcrbService.GetFollowUpsByPlanNumber(planNumber, false); |  | ||||||
|  |  | ||||||
|         Assert.NotNull(result); |  | ||||||
|         Assert.Single(result); |  | ||||||
|         Assert.Equal(FOLLOW_UPS, result); |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     [Fact] |  | ||||||
|     public async Task UpdateFollowUp_WithValidParam_ShouldUpdateFollowUp() { |  | ||||||
|         _dalServiceMock.Setup(d => d.ExecuteAsync<PCRBFollowUp>(It.IsAny<string>(), FOLLOW_UP)) |  | ||||||
|             .ReturnsAsync(1); |  | ||||||
|  |  | ||||||
|         await _pcrbService.UpdateFollowUp(FOLLOW_UP); |  | ||||||
|  |  | ||||||
|         _dalServiceMock.Verify(d => d.ExecuteAsync<PCRBFollowUp>(It.IsAny<string>(), FOLLOW_UP), Times.Once); |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     [Fact] |  | ||||||
|     public async Task UpdateFollowUp_WithNullParam_ShouldThrowException() { |  | ||||||
|         await Assert.ThrowsAsync<ArgumentNullException>(() => _pcrbService.UpdateFollowUp(null)); |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     [Fact] |  | ||||||
|     public async Task UpdateFollowUp_WithDatabaseFailure_ShouldThrowException() { |  | ||||||
|         _dalServiceMock.Setup(d => d.ExecuteAsync<PCRBFollowUp>(It.IsAny<string>(), FOLLOW_UP)) |  | ||||||
|             .ReturnsAsync(0); |  | ||||||
|  |  | ||||||
|         await Assert.ThrowsAsync<Exception>(() => _pcrbService.UpdateFollowUp(FOLLOW_UP)); |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     [Fact] |  | ||||||
|     public async Task UpdateFollowUp_WithDatabaseException_ShouldThrowException() { |  | ||||||
|         _dalServiceMock.Setup(d => d.ExecuteAsync<PCRBFollowUp>(It.IsAny<string>(), FOLLOW_UP)) |  | ||||||
|             .Throws<Exception>(); |  | ||||||
|  |  | ||||||
|         await Assert.ThrowsAsync<Exception>(() => _pcrbService.UpdateFollowUp(FOLLOW_UP)); |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     [Fact] |  | ||||||
|     public async Task DeleteFollowUp_WithValidId_ShouldDeleteFollowUp() { |  | ||||||
|         int followUpId = 1; |  | ||||||
|  |  | ||||||
|         _dalServiceMock.Setup(d => d.ExecuteAsync(It.IsAny<string>(), It.IsAny<object>())) |  | ||||||
|             .ReturnsAsync(1); |  | ||||||
|  |  | ||||||
|         await _pcrbService.DeleteFollowUp(followUpId); |  | ||||||
|  |  | ||||||
|         _dalServiceMock.Verify(d => d.ExecuteAsync(It.IsAny<string>(), It.IsAny<object>()), Times.Once); |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     [Fact] |  | ||||||
|     public async Task DeleteFollowUp_WithInvalidId_ShouldThrowException() { |  | ||||||
|         await Assert.ThrowsAsync<ArgumentException>(() => _pcrbService.DeleteFollowUp(0)); |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     [Fact] |  | ||||||
|     public async Task DeleteFollowUp_WithDatabaseFailure_ShouldThrowException() { |  | ||||||
|         int followUpId = 1; |  | ||||||
|  |  | ||||||
|         _dalServiceMock.Setup(d => d.ExecuteAsync(It.IsAny<string>(), It.IsAny<object>())) |  | ||||||
|             .ReturnsAsync(0); |  | ||||||
|  |  | ||||||
|         await Assert.ThrowsAsync<Exception>(() => _pcrbService.DeleteFollowUp(followUpId)); |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     [Fact] |  | ||||||
|     public async Task DeleteFollowUp_WithDatabaseException_ShouldThrowException() { |  | ||||||
|         int followUpId = 1; |  | ||||||
|  |  | ||||||
|         _dalServiceMock.Setup(d => d.ExecuteAsync(It.IsAny<string>(), It.IsAny<object>())) |  | ||||||
|             .Throws<Exception>(); |  | ||||||
|  |  | ||||||
|         await Assert.ThrowsAsync<Exception>(() => _pcrbService.DeleteFollowUp(followUpId)); |  | ||||||
|     } |  | ||||||
| } |  | ||||||
| @ -1,15 +1,28 @@ | |||||||
| using MesaFabApproval.API.Services; | using MesaFabApproval.API.Services; | ||||||
| using MesaFabApproval.Models; | using MesaFabApproval.Models; | ||||||
| using MesaFabApproval.Shared.Models; | using MesaFabApproval.Shared.Models; | ||||||
|  |  | ||||||
| using Microsoft.Extensions.Caching.Memory; | using Microsoft.Extensions.Caching.Memory; | ||||||
| using Microsoft.Extensions.Logging; | using Microsoft.Extensions.Logging; | ||||||
|  |  | ||||||
| using Moq; | using Moq; | ||||||
|  |  | ||||||
| using System.Net.Mail; |  | ||||||
|  |  | ||||||
| namespace MesaFabApproval.API.Test; | namespace MesaFabApproval.API.Test; | ||||||
| public class PCRBServiceTests |  | ||||||
| { | public static class MockMemoryCacheService { | ||||||
|  |     public static Mock<IMemoryCache> GetMemoryCache(object expectedValue) { | ||||||
|  |         Mock<IMemoryCache> mockMemoryCache = new Mock<IMemoryCache>(); | ||||||
|  |         mockMemoryCache | ||||||
|  |             .Setup(x => x.TryGetValue(It.IsAny<object>(), out expectedValue)) | ||||||
|  |             .Returns(true); | ||||||
|  |         mockMemoryCache | ||||||
|  |             .Setup(x => x.CreateEntry(It.IsAny<object>())) | ||||||
|  |             .Returns(Mock.Of<ICacheEntry>()); | ||||||
|  |         return mockMemoryCache; | ||||||
|  |     } | ||||||
|  | } | ||||||
|  |  | ||||||
|  | public class PCRBServiceTests { | ||||||
|     private readonly Mock<ILogger<PCRBService>> _loggerMock; |     private readonly Mock<ILogger<PCRBService>> _loggerMock; | ||||||
|     private readonly Mock<IDalService> _dalServiceMock; |     private readonly Mock<IDalService> _dalServiceMock; | ||||||
|     private Mock<IMemoryCache> _cacheMock; |     private Mock<IMemoryCache> _cacheMock; | ||||||
| @ -51,8 +64,7 @@ public class PCRBServiceTests | |||||||
|             WorkingDirectoryName: "workingDirectoryName" |             WorkingDirectoryName: "workingDirectoryName" | ||||||
|         ); |         ); | ||||||
|  |  | ||||||
|     public PCRBServiceTests() |     public PCRBServiceTests() { | ||||||
|     { |  | ||||||
|         _loggerMock = new Mock<ILogger<PCRBService>>(); |         _loggerMock = new Mock<ILogger<PCRBService>>(); | ||||||
|         _dalServiceMock = new Mock<IDalService>(); |         _dalServiceMock = new Mock<IDalService>(); | ||||||
|         _userServiceMock = new Mock<IUserService>(); |         _userServiceMock = new Mock<IUserService>(); | ||||||
| @ -72,10 +84,8 @@ public class PCRBServiceTests | |||||||
|     } |     } | ||||||
|  |  | ||||||
|     [Fact] |     [Fact] | ||||||
|     public async Task CreateNewPCRB_WithValidParam_ShouldCreatePCRB() |     public async Task CreateNewPCRB_WithValidParam_ShouldCreatePCRB() { | ||||||
|     { |         var pcrb = new PCRB { | ||||||
|         var pcrb = new PCRB |  | ||||||
|         { |  | ||||||
|             OwnerID = 1, |             OwnerID = 1, | ||||||
|             Title = "Test Title", |             Title = "Test Title", | ||||||
|             ChangeLevel = "Level 1", |             ChangeLevel = "Level 1", | ||||||
| @ -97,16 +107,13 @@ public class PCRBServiceTests | |||||||
|     } |     } | ||||||
|  |  | ||||||
|     [Fact] |     [Fact] | ||||||
|     public async Task CreateNewPCRB_WithNullParam_ShouldThrowException() |     public async Task CreateNewPCRB_WithNullParam_ShouldThrowException() { | ||||||
|     { |  | ||||||
|         await Assert.ThrowsAsync<ArgumentNullException>(() => _pcrbService.CreateNewPCRB(null)); |         await Assert.ThrowsAsync<ArgumentNullException>(() => _pcrbService.CreateNewPCRB(null)); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     [Fact] |     [Fact] | ||||||
|     public async Task CreateNewPCRB_WithDatabaseFailure_ShouldThrowException() |     public async Task CreateNewPCRB_WithDatabaseFailure_ShouldThrowException() { | ||||||
|     { |         var pcrb = new PCRB { | ||||||
|         var pcrb = new PCRB |  | ||||||
|         { |  | ||||||
|             OwnerID = 1, |             OwnerID = 1, | ||||||
|             Title = "Test Title", |             Title = "Test Title", | ||||||
|             ChangeLevel = "Level 1", |             ChangeLevel = "Level 1", | ||||||
| @ -126,10 +133,8 @@ public class PCRBServiceTests | |||||||
|     } |     } | ||||||
|  |  | ||||||
|     [Fact] |     [Fact] | ||||||
|     public async Task CreateNewPCRB_WithDatabaseException_ShouldThrowException() |     public async Task CreateNewPCRB_WithDatabaseException_ShouldThrowException() { | ||||||
|     { |         var pcrb = new PCRB { | ||||||
|         var pcrb = new PCRB |  | ||||||
|         { |  | ||||||
|             OwnerID = 1, |             OwnerID = 1, | ||||||
|             Title = "Test Title", |             Title = "Test Title", | ||||||
|             ChangeLevel = "Level 1", |             ChangeLevel = "Level 1", | ||||||
| @ -149,8 +154,7 @@ public class PCRBServiceTests | |||||||
|     } |     } | ||||||
|  |  | ||||||
|     [Fact] |     [Fact] | ||||||
|     public async Task UpdatePCRB_WithValidParam_ShouldUpdatePCRB() |     public async Task UpdatePCRB_WithValidParam_ShouldUpdatePCRB() { | ||||||
|     { |  | ||||||
|         _cacheMock = MockMemoryCacheService.GetMemoryCache(PCRBS); |         _cacheMock = MockMemoryCacheService.GetMemoryCache(PCRBS); | ||||||
|  |  | ||||||
|         _pcrbService = new PCRBService( |         _pcrbService = new PCRBService( | ||||||
| @ -163,8 +167,7 @@ public class PCRBServiceTests | |||||||
|             appSettings |             appSettings | ||||||
|         ); |         ); | ||||||
|  |  | ||||||
|         var pcrb = new PCRB |         var pcrb = new PCRB { | ||||||
|         { |  | ||||||
|             PlanNumber = 1, |             PlanNumber = 1, | ||||||
|             OwnerID = 1, |             OwnerID = 1, | ||||||
|             Title = "Test Title", |             Title = "Test Title", | ||||||
| @ -187,16 +190,13 @@ public class PCRBServiceTests | |||||||
|     } |     } | ||||||
|  |  | ||||||
|     [Fact] |     [Fact] | ||||||
|     public async Task UpdatePCRB_WithNullParam_ShouldThrowException() |     public async Task UpdatePCRB_WithNullParam_ShouldThrowException() { | ||||||
|     { |  | ||||||
|         await Assert.ThrowsAsync<ArgumentNullException>(() => _pcrbService.UpdatePCRB(null)); |         await Assert.ThrowsAsync<ArgumentNullException>(() => _pcrbService.UpdatePCRB(null)); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     [Fact] |     [Fact] | ||||||
|     public async Task UpdatePCRB_WithDatabaseFailure_ShouldThrowException() |     public async Task UpdatePCRB_WithDatabaseFailure_ShouldThrowException() { | ||||||
|     { |         var pcrb = new PCRB { | ||||||
|         var pcrb = new PCRB |  | ||||||
|         { |  | ||||||
|             PlanNumber = 1, |             PlanNumber = 1, | ||||||
|             OwnerID = 1, |             OwnerID = 1, | ||||||
|             Title = "Test Title", |             Title = "Test Title", | ||||||
| @ -217,10 +217,8 @@ public class PCRBServiceTests | |||||||
|     } |     } | ||||||
|  |  | ||||||
|     [Fact] |     [Fact] | ||||||
|     public async Task UpdatePCRB_WithDatabaseException_ShouldThrowException() |     public async Task UpdatePCRB_WithDatabaseException_ShouldThrowException() { | ||||||
|     { |         var pcrb = new PCRB { | ||||||
|         var pcrb = new PCRB |  | ||||||
|         { |  | ||||||
|             PlanNumber = 1, |             PlanNumber = 1, | ||||||
|             OwnerID = 1, |             OwnerID = 1, | ||||||
|             Title = "Test Title", |             Title = "Test Title", | ||||||
| @ -241,88 +239,176 @@ public class PCRBServiceTests | |||||||
|     } |     } | ||||||
|  |  | ||||||
|     [Fact] |     [Fact] | ||||||
|     public async Task NotifyApprover_ShouldSendNotification() |     public async Task CreateFollowUp_WithValidParam_ShouldCreateFollowUp() { | ||||||
|     { |         var followUp = new PCRBFollowUp { | ||||||
|         PCRBNotification notification = new PCRBNotification |             PlanNumber = 1, | ||||||
|         { |             Step = 1, | ||||||
|             Message = "Test Message", |             FollowUpDate = DateTime.Now | ||||||
|             PCRB = new PCRB { PlanNumber = 1, Title = "Test PCRB" }, |  | ||||||
|             Approval = new Approval |  | ||||||
|             { |  | ||||||
|                 UserID = 1, |  | ||||||
|                 IssueID = 1, |  | ||||||
|                 RoleName = "Role", |  | ||||||
|                 SubRole = "SubRole", |  | ||||||
|                 SubRoleID = 1, |  | ||||||
|                 AssignedDate = DateTime.Now |  | ||||||
|             } |  | ||||||
|         }; |         }; | ||||||
|  |  | ||||||
|         _userServiceMock.Setup(s => s.GetUserByUserId(It.IsAny<int>())) |         _dalServiceMock.Setup(d => d.ExecuteAsync<PCRBFollowUp>(It.IsAny<string>(), followUp)) | ||||||
|                         .ReturnsAsync(new User |             .ReturnsAsync(1); | ||||||
|                         { |  | ||||||
|                             UserID = 1, |  | ||||||
|                             LoginID = "testLogin", |  | ||||||
|                             FirstName = "Test", |  | ||||||
|                             LastName = "User", |  | ||||||
|                             Email = "test@example.com" |  | ||||||
|                         }); |  | ||||||
|  |  | ||||||
|         _smtpServiceMock.Setup(s => s.SendEmail(It.IsAny<IEnumerable<MailAddress>>(), |         await _pcrbService.CreateFollowUp(followUp); | ||||||
|                                                 It.IsAny<IEnumerable<MailAddress>>(), |  | ||||||
|                                                 It.IsAny<string>(), |  | ||||||
|                                                 It.IsAny<string>())) |  | ||||||
|             .ReturnsAsync(true); |  | ||||||
|  |  | ||||||
|         _approvalServiceMock.Setup(s => s.UpdateApproval(It.IsAny<Approval>())) |         _dalServiceMock.Verify(d => d.ExecuteAsync<PCRBFollowUp>(It.IsAny<string>(), followUp), Times.Once); | ||||||
|             .Returns(Task.CompletedTask); |  | ||||||
|  |  | ||||||
|         await _pcrbService.NotifyApprover(notification); |  | ||||||
|  |  | ||||||
|         _smtpServiceMock.Verify(s => s.SendEmail(It.IsAny<IEnumerable<MailAddress>>(), |  | ||||||
|                                                  It.IsAny<IEnumerable<MailAddress>>(), |  | ||||||
|                                                  It.IsAny<string>(), |  | ||||||
|                                                  It.IsAny<string>()), Times.Once); |  | ||||||
|         _approvalServiceMock.Verify(s => s.UpdateApproval(It.IsAny<Approval>()), Times.Once); |  | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     [Fact] |     [Fact] | ||||||
|     public async Task NotifyApprover_ShouldThrowException_WhenNotificationIsNull() |     public async Task CreateFollowUp_WithNullParam_ShouldThrowException() { | ||||||
|     { |         await Assert.ThrowsAsync<ArgumentNullException>(() => _pcrbService.CreateFollowUp(null)); | ||||||
|         await Assert.ThrowsAsync<ArgumentNullException>(() => _pcrbService.NotifyApprover(null)); |  | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     [Fact] |     [Fact] | ||||||
|     public async Task NotifyApprover_ShouldThrowException_WhenPCRBIsNull() |     public async Task CreateFollowUp_WithDatabaseFailure_ShouldThrowException() { | ||||||
|     { |         var followUp = new PCRBFollowUp { | ||||||
|         PCRBNotification notification = new PCRBNotification |             PlanNumber = 1, | ||||||
|         { |             Step = 1, | ||||||
|             Message = "Test Message", |             FollowUpDate = DateTime.Now | ||||||
|             PCRB = null, |  | ||||||
|             Approval = new Approval |  | ||||||
|             { |  | ||||||
|                 UserID = 1, |  | ||||||
|                 IssueID = 1, |  | ||||||
|                 RoleName = "Role", |  | ||||||
|                 SubRole = "SubRole", |  | ||||||
|                 SubRoleID = 1, |  | ||||||
|                 AssignedDate = DateTime.Now |  | ||||||
|             } |  | ||||||
|         }; |         }; | ||||||
|  |  | ||||||
|         await Assert.ThrowsAsync<ArgumentNullException>(() => _pcrbService.NotifyApprover(notification)); |         _dalServiceMock.Setup(d => d.ExecuteAsync<PCRBFollowUp>(It.IsAny<string>(), followUp)) | ||||||
|  |             .ReturnsAsync(0); | ||||||
|  |  | ||||||
|  |         await Assert.ThrowsAsync<Exception>(() => _pcrbService.CreateFollowUp(followUp)); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     [Fact] |     [Fact] | ||||||
|     public async Task NotifyApprover_ShouldThrowException_WhenApprovalIsNull() |     public async Task CreateFollowUp_WithDatabaseException_ShouldThrowException() { | ||||||
|     { |         var followUp = new PCRBFollowUp { | ||||||
|         PCRBNotification notification = new PCRBNotification |             PlanNumber = 1, | ||||||
|         { |             Step = 1, | ||||||
|             Message = "Test Message", |             FollowUpDate = DateTime.Now | ||||||
|             PCRB = new PCRB { PlanNumber = 1, Title = "Test PCRB" }, |  | ||||||
|             Approval = null |  | ||||||
|         }; |         }; | ||||||
|  |  | ||||||
|         await Assert.ThrowsAsync<ArgumentNullException>(() => _pcrbService.NotifyApprover(notification)); |         _dalServiceMock.Setup(d => d.ExecuteAsync<PCRBFollowUp>(It.IsAny<string>(), followUp)) | ||||||
|  |             .Throws<Exception>(); | ||||||
|  |  | ||||||
|  |         await Assert.ThrowsAsync<Exception>(() => _pcrbService.CreateFollowUp(followUp)); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     [Fact] | ||||||
|  |     public async Task GetFollowUpsByPlanNumber_WithCacheBypass_ShouldReturnFollowUps() { | ||||||
|  |         int planNumber = 1; | ||||||
|  |  | ||||||
|  |         _dalServiceMock.Setup(d => d.QueryAsync<PCRBFollowUp>(It.IsAny<string>(), It.IsAny<object>())) | ||||||
|  |             .ReturnsAsync(FOLLOW_UPS); | ||||||
|  |  | ||||||
|  |         IEnumerable<PCRBFollowUp> result = await _pcrbService.GetFollowUpsByPlanNumber(planNumber, true); | ||||||
|  |  | ||||||
|  |         Assert.NotNull(result); | ||||||
|  |         Assert.Single(result); | ||||||
|  |         Assert.Equal(FOLLOW_UPS, result); | ||||||
|  |         _dalServiceMock.Verify(d => d.QueryAsync<PCRBFollowUp>(It.IsAny<string>(), It.IsAny<object>()), Times.Once); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     [Fact] | ||||||
|  |     public async Task GetFollowUpsByPlanNumber_WithCacheBypass_AndDatabaseException_ShouldThrowException() { | ||||||
|  |         int planNumber = 1; | ||||||
|  |  | ||||||
|  |         _dalServiceMock.Setup(d => d.QueryAsync<PCRBFollowUp>(It.IsAny<string>(), It.IsAny<object>())) | ||||||
|  |             .Throws<Exception>(); | ||||||
|  |  | ||||||
|  |         await Assert.ThrowsAsync<Exception>(() => _pcrbService.GetFollowUpsByPlanNumber(planNumber, true)); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     [Fact] | ||||||
|  |     public async Task GetFollowUpsByPlanNumber_WithoutCacheBypass_ShouldReturnFollowUps() { | ||||||
|  |         int planNumber = 1; | ||||||
|  |  | ||||||
|  |         IEnumerable<PCRBFollowUp> result = await _pcrbService.GetFollowUpsByPlanNumber(planNumber, false); | ||||||
|  |  | ||||||
|  |         Assert.NotNull(result); | ||||||
|  |         Assert.Single(result); | ||||||
|  |         Assert.Equal(FOLLOW_UPS, result); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     [Fact] | ||||||
|  |     public async Task UpdateFollowUp_WithValidParam_ShouldUpdateFollowUp() { | ||||||
|  |         var followUp = new PCRBFollowUp { | ||||||
|  |             ID = 1, | ||||||
|  |             PlanNumber = 1, | ||||||
|  |             Step = 1, | ||||||
|  |             FollowUpDate = DateTime.Now | ||||||
|  |         }; | ||||||
|  |  | ||||||
|  |         _dalServiceMock.Setup(d => d.ExecuteAsync<PCRBFollowUp>(It.IsAny<string>(), followUp)) | ||||||
|  |             .ReturnsAsync(1); | ||||||
|  |  | ||||||
|  |         await _pcrbService.UpdateFollowUp(followUp); | ||||||
|  |  | ||||||
|  |         _dalServiceMock.Verify(d => d.ExecuteAsync<PCRBFollowUp>(It.IsAny<string>(), followUp), Times.Once); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     [Fact] | ||||||
|  |     public async Task UpdateFollowUp_WithNullParam_ShouldThrowException() { | ||||||
|  |         await Assert.ThrowsAsync<ArgumentNullException>(() => _pcrbService.UpdateFollowUp(null)); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     [Fact] | ||||||
|  |     public async Task UpdateFollowUp_WithDatabaseFailure_ShouldThrowException() { | ||||||
|  |         var followUp = new PCRBFollowUp { | ||||||
|  |             ID = 1, | ||||||
|  |             PlanNumber = 1, | ||||||
|  |             Step = 1, | ||||||
|  |             FollowUpDate = DateTime.Now | ||||||
|  |         }; | ||||||
|  |  | ||||||
|  |         _dalServiceMock.Setup(d => d.ExecuteAsync<PCRBFollowUp>(It.IsAny<string>(), followUp)) | ||||||
|  |             .ReturnsAsync(0); | ||||||
|  |  | ||||||
|  |         await Assert.ThrowsAsync<Exception>(() => _pcrbService.UpdateFollowUp(followUp)); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     [Fact] | ||||||
|  |     public async Task UpdateFollowUp_WithDatabaseException_ShouldThrowException() { | ||||||
|  |         var followUp = new PCRBFollowUp { | ||||||
|  |             ID = 1, | ||||||
|  |             PlanNumber = 1, | ||||||
|  |             Step = 1, | ||||||
|  |             FollowUpDate = DateTime.Now | ||||||
|  |         }; | ||||||
|  |  | ||||||
|  |         _dalServiceMock.Setup(d => d.ExecuteAsync<PCRBFollowUp>(It.IsAny<string>(), followUp)) | ||||||
|  |             .Throws<Exception>(); | ||||||
|  |  | ||||||
|  |         await Assert.ThrowsAsync<Exception>(() => _pcrbService.UpdateFollowUp(followUp)); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     [Fact] | ||||||
|  |     public async Task DeleteFollowUp_WithValidId_ShouldDeleteFollowUp() { | ||||||
|  |         int followUpId = 1; | ||||||
|  |  | ||||||
|  |         _dalServiceMock.Setup(d => d.ExecuteAsync(It.IsAny<string>(), It.IsAny<object>())) | ||||||
|  |             .ReturnsAsync(1); | ||||||
|  |  | ||||||
|  |         await _pcrbService.DeleteFollowUp(followUpId); | ||||||
|  |  | ||||||
|  |         _dalServiceMock.Verify(d => d.ExecuteAsync(It.IsAny<string>(), It.IsAny<object>()), Times.Once); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     [Fact] | ||||||
|  |     public async Task DeleteFollowUp_WithInvalidId_ShouldThrowException() { | ||||||
|  |         await Assert.ThrowsAsync<ArgumentException>(() => _pcrbService.DeleteFollowUp(0)); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     [Fact] | ||||||
|  |     public async Task DeleteFollowUp_WithDatabaseFailure_ShouldThrowException() { | ||||||
|  |         int followUpId = 1; | ||||||
|  |  | ||||||
|  |         _dalServiceMock.Setup(d => d.ExecuteAsync(It.IsAny<string>(), It.IsAny<object>())) | ||||||
|  |             .ReturnsAsync(0); | ||||||
|  |  | ||||||
|  |         await Assert.ThrowsAsync<Exception>(() => _pcrbService.DeleteFollowUp(followUpId)); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     [Fact] | ||||||
|  |     public async Task DeleteFollowUp_WithDatabaseException_ShouldThrowException() { | ||||||
|  |         int followUpId = 1; | ||||||
|  |  | ||||||
|  |         _dalServiceMock.Setup(d => d.ExecuteAsync(It.IsAny<string>(), It.IsAny<object>())) | ||||||
|  |             .Throws<Exception>(); | ||||||
|  |  | ||||||
|  |         await Assert.ThrowsAsync<Exception>(() => _pcrbService.DeleteFollowUp(followUpId)); | ||||||
|     } |     } | ||||||
| } | } | ||||||
|  | |||||||
| @ -1,5 +1,4 @@ | |||||||
| using MesaFabApproval.API.Services; | using MesaFabApproval.API.Services; | ||||||
| using MesaFabApproval.API.Utilities; |  | ||||||
| using MesaFabApproval.Shared.Models; | using MesaFabApproval.Shared.Models; | ||||||
| using MesaFabApproval.Shared.Services; | using MesaFabApproval.Shared.Services; | ||||||
|  |  | ||||||
| @ -12,13 +11,13 @@ namespace MesaFabApproval.API.Controllers; | |||||||
| public class ApprovalController : ControllerBase { | public class ApprovalController : ControllerBase { | ||||||
|     private readonly ILogger<ApprovalController> _logger; |     private readonly ILogger<ApprovalController> _logger; | ||||||
|     private readonly IApprovalService _approvalService; |     private readonly IApprovalService _approvalService; | ||||||
|     private readonly IMonInUtils _monInUtils; |     private readonly IMonInWorkerClient _monInClient; | ||||||
|  |  | ||||||
|     public ApprovalController(ILogger<ApprovalController> logger, IApprovalService approvalService, |     public ApprovalController(ILogger<ApprovalController> logger, IApprovalService approvalService, | ||||||
|                               IMonInUtils monInUtils) { |                               IMonInWorkerClient monInClient) { | ||||||
|         _logger = logger ?? throw new ArgumentNullException("ILogger not injected"); |         _logger = logger ?? throw new ArgumentNullException("ILogger not injected"); | ||||||
|         _approvalService = approvalService ?? throw new ArgumentNullException("IApprovalService not injected"); |         _approvalService = approvalService ?? throw new ArgumentNullException("IApprovalService not injected"); | ||||||
|         _monInUtils = monInUtils ?? throw new ArgumentNullException("IMonInUtils not injected"); |         _monInClient = monInClient ?? throw new ArgumentNullException("IMonInWorkerClient not injected"); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     [HttpPost] |     [HttpPost] | ||||||
| @ -40,19 +39,26 @@ public class ApprovalController : ControllerBase { | |||||||
|         } catch (ArgumentException ex) { |         } catch (ArgumentException ex) { | ||||||
|             isArgumentError = true; |             isArgumentError = true; | ||||||
|             errorMessage = ex.Message; |             errorMessage = ex.Message; | ||||||
|             _logger.LogWarning($"Argument error when attempting to create approval: {errorMessage}"); |  | ||||||
|             return BadRequest(errorMessage); |             return BadRequest(errorMessage); | ||||||
|         } catch (Exception ex) { |         } catch (Exception ex) { | ||||||
|             isInternalError = true; |             isInternalError = true; | ||||||
|             errorMessage = $"Cannot create new approval, because {ex.Message}"; |             errorMessage = $"Cannot create new approval, because {ex.Message}"; | ||||||
|             _logger.LogError(errorMessage); |  | ||||||
|             return Problem(errorMessage); |             return Problem(errorMessage); | ||||||
|         } finally { |         } finally { | ||||||
|             string metricName = "CreateApproval"; |             string metricName = "CreateApproval"; | ||||||
|             DateTime end = DateTime.Now; |             DateTime end = DateTime.Now; | ||||||
|             double millisecondsDiff = (end - start).TotalMilliseconds; |             double millisecondsDiff = (end - start).TotalMilliseconds; | ||||||
|  |             _monInClient.PostAverage(metricName + "Latency", millisecondsDiff); | ||||||
|  |  | ||||||
|             _monInUtils.PostMetrics(metricName, millisecondsDiff, isArgumentError, isInternalError); |             if (isArgumentError) { | ||||||
|  |                 _logger.LogWarning(errorMessage); | ||||||
|  |                 _monInClient.PostStatus(metricName, StatusValue.Ok); | ||||||
|  |             } else if (isInternalError) { | ||||||
|  |                 _logger.LogError(errorMessage); | ||||||
|  |                 _monInClient.PostStatus(metricName, StatusValue.Critical); | ||||||
|  |             } else { | ||||||
|  |                 _monInClient.PostStatus(metricName, StatusValue.Ok); | ||||||
|  |             } | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  |  | ||||||
| @ -75,19 +81,26 @@ public class ApprovalController : ControllerBase { | |||||||
|         } catch (ArgumentException ex) { |         } catch (ArgumentException ex) { | ||||||
|             isArgumentError = true; |             isArgumentError = true; | ||||||
|             errorMessage = ex.Message; |             errorMessage = ex.Message; | ||||||
|             _logger.LogWarning($"Argument error when getting approvals for issue {issueId}: {errorMessage}"); |  | ||||||
|             return BadRequest(errorMessage); |             return BadRequest(errorMessage); | ||||||
|         } catch (Exception ex) { |         } catch (Exception ex) { | ||||||
|             isInternalError = true; |             isInternalError = true; | ||||||
|             errorMessage = $"Cannot get approvals, because {ex.Message}"; |             errorMessage = $"Cannot get approvals, because {ex.Message}"; | ||||||
|             _logger.LogError(errorMessage); |  | ||||||
|             return Problem(errorMessage); |             return Problem(errorMessage); | ||||||
|         } finally { |         } finally { | ||||||
|             string metricName = "GetApprovalsForIssueId"; |             string metricName = "GetApprovalsForIssueId"; | ||||||
|             DateTime end = DateTime.Now; |             DateTime end = DateTime.Now; | ||||||
|             double millisecondsDiff = (end - start).TotalMilliseconds; |             double millisecondsDiff = (end - start).TotalMilliseconds; | ||||||
|  |             _monInClient.PostAverage(metricName + "Latency", millisecondsDiff); | ||||||
|  |  | ||||||
|             _monInUtils.PostMetrics(metricName, millisecondsDiff, isArgumentError, isInternalError); |             if (isArgumentError) { | ||||||
|  |                 _logger.LogWarning(errorMessage); | ||||||
|  |                 _monInClient.PostStatus(metricName, StatusValue.Ok); | ||||||
|  |             } else if (isInternalError) { | ||||||
|  |                 _logger.LogError(errorMessage); | ||||||
|  |                 _monInClient.PostStatus(metricName, StatusValue.Critical); | ||||||
|  |             } else { | ||||||
|  |                 _monInClient.PostStatus(metricName, StatusValue.Ok); | ||||||
|  |             } | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  |  | ||||||
| @ -110,19 +123,26 @@ public class ApprovalController : ControllerBase { | |||||||
|         } catch (ArgumentException ex) { |         } catch (ArgumentException ex) { | ||||||
|             isArgumentError = true; |             isArgumentError = true; | ||||||
|             errorMessage = ex.Message; |             errorMessage = ex.Message; | ||||||
|             _logger.LogWarning($"Argument error when getting approvals for user {userId}: {errorMessage}"); |  | ||||||
|             return BadRequest(errorMessage); |             return BadRequest(errorMessage); | ||||||
|         } catch (Exception ex) { |         } catch (Exception ex) { | ||||||
|             isInternalError = true; |             isInternalError = true; | ||||||
|             errorMessage = $"Cannot get approvals, because {ex.Message}"; |             errorMessage = $"Cannot get approvals, because {ex.Message}"; | ||||||
|             _logger.LogError(errorMessage); |  | ||||||
|             return Problem(errorMessage); |             return Problem(errorMessage); | ||||||
|         } finally { |         } finally { | ||||||
|             string metricName = "GetApprovalsForUserId"; |             string metricName = "GetApprovalsForUserId"; | ||||||
|             DateTime end = DateTime.Now; |             DateTime end = DateTime.Now; | ||||||
|             double millisecondsDiff = (end - start).TotalMilliseconds; |             double millisecondsDiff = (end - start).TotalMilliseconds; | ||||||
|  |             _monInClient.PostAverage(metricName + "Latency", millisecondsDiff); | ||||||
|  |  | ||||||
|             _monInUtils.PostMetrics(metricName, millisecondsDiff, isArgumentError, isInternalError); |             if (isArgumentError) { | ||||||
|  |                 _logger.LogWarning(errorMessage); | ||||||
|  |                 _monInClient.PostStatus(metricName, StatusValue.Ok); | ||||||
|  |             } else if (isInternalError) { | ||||||
|  |                 _logger.LogError(errorMessage); | ||||||
|  |                 _monInClient.PostStatus(metricName, StatusValue.Critical); | ||||||
|  |             } else { | ||||||
|  |                 _monInClient.PostStatus(metricName, StatusValue.Ok); | ||||||
|  |             } | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  |  | ||||||
| @ -145,19 +165,26 @@ public class ApprovalController : ControllerBase { | |||||||
|         } catch (ArgumentException ex) { |         } catch (ArgumentException ex) { | ||||||
|             isArgumentError = true; |             isArgumentError = true; | ||||||
|             errorMessage = ex.Message; |             errorMessage = ex.Message; | ||||||
|             _logger.LogWarning($"Argument error when getting approval group members for sub role {subRoleId}: {errorMessage}"); |  | ||||||
|             return BadRequest(errorMessage); |             return BadRequest(errorMessage); | ||||||
|         } catch (Exception ex) { |         } catch (Exception ex) { | ||||||
|             isInternalError = true; |             isInternalError = true; | ||||||
|             errorMessage = $"Cannot get approval group members, because {ex.Message}"; |             errorMessage = $"Cannot get approval group members, because {ex.Message}"; | ||||||
|             _logger.LogError(errorMessage); |  | ||||||
|             return Problem(errorMessage); |             return Problem(errorMessage); | ||||||
|         } finally { |         } finally { | ||||||
|             string metricName = "GetApprovalsGroupMembers"; |             string metricName = "GetApprovalsGroupMembers"; | ||||||
|             DateTime end = DateTime.Now; |             DateTime end = DateTime.Now; | ||||||
|             double millisecondsDiff = (end - start).TotalMilliseconds; |             double millisecondsDiff = (end - start).TotalMilliseconds; | ||||||
|  |             _monInClient.PostAverage(metricName + "Latency", millisecondsDiff); | ||||||
|  |  | ||||||
|             _monInUtils.PostMetrics(metricName, millisecondsDiff, isArgumentError, isInternalError); |             if (isArgumentError) { | ||||||
|  |                 _logger.LogWarning(errorMessage); | ||||||
|  |                 _monInClient.PostStatus(metricName, StatusValue.Ok); | ||||||
|  |             } else if (isInternalError) { | ||||||
|  |                 _logger.LogError(errorMessage); | ||||||
|  |                 _monInClient.PostStatus(metricName, StatusValue.Critical); | ||||||
|  |             } else { | ||||||
|  |                 _monInClient.PostStatus(metricName, StatusValue.Ok); | ||||||
|  |             } | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  |  | ||||||
| @ -170,7 +197,7 @@ public class ApprovalController : ControllerBase { | |||||||
|         string errorMessage = ""; |         string errorMessage = ""; | ||||||
|  |  | ||||||
|         try { |         try { | ||||||
|             _logger.LogInformation("Attempting to update approval"); |             _logger.LogInformation($"Attempting to update approval"); | ||||||
|  |  | ||||||
|             if (approval is null) throw new ArgumentNullException($"approval cannot be null"); |             if (approval is null) throw new ArgumentNullException($"approval cannot be null"); | ||||||
|  |  | ||||||
| @ -180,54 +207,26 @@ public class ApprovalController : ControllerBase { | |||||||
|         } catch (ArgumentException ex) { |         } catch (ArgumentException ex) { | ||||||
|             isArgumentError = true; |             isArgumentError = true; | ||||||
|             errorMessage = ex.Message; |             errorMessage = ex.Message; | ||||||
|             _logger.LogWarning($"Argument error when attempting to update approval: {errorMessage}"); |  | ||||||
|             return BadRequest(errorMessage); |             return BadRequest(errorMessage); | ||||||
|         } catch (Exception ex) { |         } catch (Exception ex) { | ||||||
|             isInternalError = true; |             isInternalError = true; | ||||||
|             errorMessage = $"Cannot update approval, because {ex.Message}"; |             errorMessage = $"Cannot update approval, because {ex.Message}"; | ||||||
|             _logger.LogError(errorMessage); |  | ||||||
|             return Problem(errorMessage); |             return Problem(errorMessage); | ||||||
|         } finally { |         } finally { | ||||||
|             string metricName = "UpdateApproval"; |             string metricName = "UpdateApproval"; | ||||||
|             DateTime end = DateTime.Now; |             DateTime end = DateTime.Now; | ||||||
|             double millisecondsDiff = (end - start).TotalMilliseconds; |             double millisecondsDiff = (end - start).TotalMilliseconds; | ||||||
|  |             _monInClient.PostAverage(metricName + "Latency", millisecondsDiff); | ||||||
|  |  | ||||||
|             _monInUtils.PostMetrics(metricName, millisecondsDiff, isArgumentError, isInternalError); |             if (isArgumentError) { | ||||||
|         } |                 _logger.LogWarning(errorMessage); | ||||||
|     } |                 _monInClient.PostStatus(metricName, StatusValue.Ok); | ||||||
|  |             } else if (isInternalError) { | ||||||
|     [HttpDelete] |  | ||||||
|     [Route("approval")] |  | ||||||
|     public async Task<IActionResult> DeleteApproval(int approvalID) { |  | ||||||
|         DateTime start = DateTime.Now; |  | ||||||
|         bool isArgumentError = false; |  | ||||||
|         bool isInternalError = false; |  | ||||||
|         string errorMessage = ""; |  | ||||||
|  |  | ||||||
|         try { |  | ||||||
|             _logger.LogInformation($"Attempting to delete approval {approvalID}"); |  | ||||||
|  |  | ||||||
|             if (approvalID <= 0) throw new ArgumentException("Invalid approval ID"); |  | ||||||
|  |  | ||||||
|             await _approvalService.DeleteApproval(approvalID); |  | ||||||
|  |  | ||||||
|             return Ok(); |  | ||||||
|         } catch (ArgumentException ex) { |  | ||||||
|             isArgumentError = true; |  | ||||||
|             errorMessage = ex.Message; |  | ||||||
|             _logger.LogWarning($"Argument error when attempting to delete approval: {errorMessage}"); |  | ||||||
|             return BadRequest(errorMessage); |  | ||||||
|         } catch (Exception ex) { |  | ||||||
|             isInternalError = true; |  | ||||||
|             errorMessage = $"Cannot delete approval, because {ex.Message}"; |  | ||||||
|                 _logger.LogError(errorMessage); |                 _logger.LogError(errorMessage); | ||||||
|             return Problem(errorMessage); |                 _monInClient.PostStatus(metricName, StatusValue.Critical); | ||||||
|         } finally { |             } else { | ||||||
|             string metricName = "UpdateApproval"; |                 _monInClient.PostStatus(metricName, StatusValue.Ok); | ||||||
|             DateTime end = DateTime.Now; |             } | ||||||
|             double millisecondsDiff = (end - start).TotalMilliseconds; |  | ||||||
|  |  | ||||||
|             _monInUtils.PostMetrics(metricName, millisecondsDiff, isArgumentError, isInternalError); |  | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  |  | ||||||
| @ -250,19 +249,26 @@ public class ApprovalController : ControllerBase { | |||||||
|         } catch (ArgumentException ex) { |         } catch (ArgumentException ex) { | ||||||
|             isArgumentError = true; |             isArgumentError = true; | ||||||
|             errorMessage = ex.Message; |             errorMessage = ex.Message; | ||||||
|             _logger.LogWarning($"Argument error when attempting to approve: {errorMessage}"); |  | ||||||
|             return BadRequest(errorMessage); |             return BadRequest(errorMessage); | ||||||
|         } catch (Exception ex) { |         } catch (Exception ex) { | ||||||
|             isInternalError = true; |             isInternalError = true; | ||||||
|             errorMessage = $"Cannot approve, because {ex.Message}"; |             errorMessage = $"Cannot approve, because {ex.Message}"; | ||||||
|             _logger.LogError(errorMessage); |  | ||||||
|             return Problem(errorMessage); |             return Problem(errorMessage); | ||||||
|         } finally { |         } finally { | ||||||
|             string metricName = "Approve"; |             string metricName = "Approve"; | ||||||
|             DateTime end = DateTime.Now; |             DateTime end = DateTime.Now; | ||||||
|             double millisecondsDiff = (end - start).TotalMilliseconds; |             double millisecondsDiff = (end - start).TotalMilliseconds; | ||||||
|  |             _monInClient.PostAverage(metricName + "Latency", millisecondsDiff); | ||||||
|  |  | ||||||
|             _monInUtils.PostMetrics(metricName, millisecondsDiff, isArgumentError, isInternalError); |             if (isArgumentError) { | ||||||
|  |                 _logger.LogWarning(errorMessage); | ||||||
|  |                 _monInClient.PostStatus(metricName, StatusValue.Ok); | ||||||
|  |             } else if (isInternalError) { | ||||||
|  |                 _logger.LogError(errorMessage); | ||||||
|  |                 _monInClient.PostStatus(metricName, StatusValue.Critical); | ||||||
|  |             } else { | ||||||
|  |                 _monInClient.PostStatus(metricName, StatusValue.Ok); | ||||||
|  |             } | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  |  | ||||||
| @ -285,19 +291,26 @@ public class ApprovalController : ControllerBase { | |||||||
|         } catch (ArgumentException ex) { |         } catch (ArgumentException ex) { | ||||||
|             isArgumentError = true; |             isArgumentError = true; | ||||||
|             errorMessage = ex.Message; |             errorMessage = ex.Message; | ||||||
|             _logger.LogWarning($"Argument error when attempting to deny approval: {errorMessage}"); |  | ||||||
|             return BadRequest(errorMessage); |             return BadRequest(errorMessage); | ||||||
|         } catch (Exception ex) { |         } catch (Exception ex) { | ||||||
|             isInternalError = true; |             isInternalError = true; | ||||||
|             errorMessage = $"Approval denial failed, because {ex.Message}"; |             errorMessage = $"Approval denial failed, because {ex.Message}"; | ||||||
|             _logger.LogError(errorMessage); |  | ||||||
|             return Problem(errorMessage); |             return Problem(errorMessage); | ||||||
|         } finally { |         } finally { | ||||||
|             string metricName = "Deny"; |             string metricName = "Deny"; | ||||||
|             DateTime end = DateTime.Now; |             DateTime end = DateTime.Now; | ||||||
|             double millisecondsDiff = (end - start).TotalMilliseconds; |             double millisecondsDiff = (end - start).TotalMilliseconds; | ||||||
|  |             _monInClient.PostAverage(metricName + "Latency", millisecondsDiff); | ||||||
|  |  | ||||||
|             _monInUtils.PostMetrics(metricName, millisecondsDiff, isArgumentError, isInternalError); |             if (isArgumentError) { | ||||||
|  |                 _logger.LogWarning(errorMessage); | ||||||
|  |                 _monInClient.PostStatus(metricName, StatusValue.Ok); | ||||||
|  |             } else if (isInternalError) { | ||||||
|  |                 _logger.LogError(errorMessage); | ||||||
|  |                 _monInClient.PostStatus(metricName, StatusValue.Critical); | ||||||
|  |             } else { | ||||||
|  |                 _monInClient.PostStatus(metricName, StatusValue.Ok); | ||||||
|  |             } | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  |  | ||||||
| @ -320,19 +333,26 @@ public class ApprovalController : ControllerBase { | |||||||
|         } catch (ArgumentException ex) { |         } catch (ArgumentException ex) { | ||||||
|             isArgumentError = true; |             isArgumentError = true; | ||||||
|             errorMessage = ex.Message; |             errorMessage = ex.Message; | ||||||
|             _logger.LogWarning($"Argument error when attempting to get role ID by role name: {errorMessage}"); |  | ||||||
|             return BadRequest(errorMessage); |             return BadRequest(errorMessage); | ||||||
|         } catch (Exception ex) { |         } catch (Exception ex) { | ||||||
|             isInternalError = true; |             isInternalError = true; | ||||||
|             errorMessage = $"Cannot get role ID, because {ex.Message}"; |             errorMessage = $"Cannot get role ID, because {ex.Message}"; | ||||||
|             _logger.LogError(errorMessage); |  | ||||||
|             return Problem(errorMessage); |             return Problem(errorMessage); | ||||||
|         } finally { |         } finally { | ||||||
|             string metricName = "GetRoleIdForRoleName"; |             string metricName = "GetRoleIdForRoleName"; | ||||||
|             DateTime end = DateTime.Now; |             DateTime end = DateTime.Now; | ||||||
|             double millisecondsDiff = (end - start).TotalMilliseconds; |             double millisecondsDiff = (end - start).TotalMilliseconds; | ||||||
|  |             _monInClient.PostAverage(metricName + "Latency", millisecondsDiff); | ||||||
|  |  | ||||||
|             _monInUtils.PostMetrics(metricName, millisecondsDiff, isArgumentError, isInternalError); |             if (isArgumentError) { | ||||||
|  |                 _logger.LogWarning(errorMessage); | ||||||
|  |                 _monInClient.PostStatus(metricName, StatusValue.Ok); | ||||||
|  |             } else if (isInternalError) { | ||||||
|  |                 _logger.LogError(errorMessage); | ||||||
|  |                 _monInClient.PostStatus(metricName, StatusValue.Critical); | ||||||
|  |             } else { | ||||||
|  |                 _monInClient.PostStatus(metricName, StatusValue.Ok); | ||||||
|  |             } | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  |  | ||||||
| @ -356,19 +376,26 @@ public class ApprovalController : ControllerBase { | |||||||
|         } catch (ArgumentException ex) { |         } catch (ArgumentException ex) { | ||||||
|             isArgumentError = true; |             isArgumentError = true; | ||||||
|             errorMessage = ex.Message; |             errorMessage = ex.Message; | ||||||
|             _logger.LogWarning($"Argument error when attempting to get sub roles by sub role name: {errorMessage}"); |  | ||||||
|             return BadRequest(errorMessage); |             return BadRequest(errorMessage); | ||||||
|         } catch (Exception ex) { |         } catch (Exception ex) { | ||||||
|             isInternalError = true; |             isInternalError = true; | ||||||
|             errorMessage = $"Cannot get role ID, because {ex.Message}"; |             errorMessage = $"Cannot get role ID, because {ex.Message}"; | ||||||
|             _logger.LogError(errorMessage); |  | ||||||
|             return Problem(errorMessage); |             return Problem(errorMessage); | ||||||
|         } finally { |         } finally { | ||||||
|             string metricName = "GetSubRoleIdForSubRoleName"; |             string metricName = "GetSubRoleIdForSubRoleName"; | ||||||
|             DateTime end = DateTime.Now; |             DateTime end = DateTime.Now; | ||||||
|             double millisecondsDiff = (end - start).TotalMilliseconds; |             double millisecondsDiff = (end - start).TotalMilliseconds; | ||||||
|  |             _monInClient.PostAverage(metricName + "Latency", millisecondsDiff); | ||||||
|  |  | ||||||
|             _monInUtils.PostMetrics(metricName, millisecondsDiff, isArgumentError, isInternalError); |             if (isArgumentError) { | ||||||
|  |                 _logger.LogWarning(errorMessage); | ||||||
|  |                 _monInClient.PostStatus(metricName, StatusValue.Ok); | ||||||
|  |             } else if (isInternalError) { | ||||||
|  |                 _logger.LogError(errorMessage); | ||||||
|  |                 _monInClient.PostStatus(metricName, StatusValue.Critical); | ||||||
|  |             } else { | ||||||
|  |                 _monInClient.PostStatus(metricName, StatusValue.Ok); | ||||||
|  |             } | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
| } | } | ||||||
| @ -790,42 +790,6 @@ public class PCRBController : ControllerBase { | |||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     [HttpPost] |  | ||||||
|     [Route("pcrb/notify/approver")] |  | ||||||
|     public async Task<IActionResult> NotifyApprover(PCRBNotification notification) { |  | ||||||
|         DateTime start = DateTime.Now; |  | ||||||
|         bool isArgumentError = false; |  | ||||||
|         bool isInternalError = false; |  | ||||||
|         string errorMessage = ""; |  | ||||||
|  |  | ||||||
|         try { |  | ||||||
|             _logger.LogInformation("Attempting to notify an approver"); |  | ||||||
|  |  | ||||||
|             if (notification is null) throw new ArgumentNullException("notification cannot be null"); |  | ||||||
|             if (notification.PCRB is null) throw new ArgumentNullException("PCRB cannot be null"); |  | ||||||
|             if (notification.Approval is null) throw new ArgumentNullException("approval cannot be null"); |  | ||||||
|             if (string.IsNullOrWhiteSpace(notification.Message)) throw new ArgumentException("message cannot be null or empty"); |  | ||||||
|  |  | ||||||
|             await _pcrbService.NotifyApprover(notification); |  | ||||||
|  |  | ||||||
|             return Ok(); |  | ||||||
|         } catch (ArgumentException ex) { |  | ||||||
|             isArgumentError = true; |  | ||||||
|             errorMessage = ex.Message; |  | ||||||
|             return BadRequest(errorMessage); |  | ||||||
|         } catch (Exception ex) { |  | ||||||
|             isInternalError = true; |  | ||||||
|             errorMessage = $"Unable to notify an approver, because {ex.Message}"; |  | ||||||
|             return Problem(errorMessage); |  | ||||||
|         } finally { |  | ||||||
|             string metricName = "NotifyPCRBApprover"; |  | ||||||
|             DateTime end = DateTime.Now; |  | ||||||
|             double millisecondsDiff = (end - start).TotalMilliseconds; |  | ||||||
|  |  | ||||||
|             _monInUtils.PostMetrics(metricName, millisecondsDiff, isArgumentError, isInternalError); |  | ||||||
|         } |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     [HttpPost] |     [HttpPost] | ||||||
|     [Route("pcrb/notify/approvers")] |     [Route("pcrb/notify/approvers")] | ||||||
|     public async Task<IActionResult> NotifyApprovers(PCRBNotification notification) { |     public async Task<IActionResult> NotifyApprovers(PCRBNotification notification) { | ||||||
| @ -973,7 +937,7 @@ public class PCRBController : ControllerBase { | |||||||
|         string errorMessage = ""; |         string errorMessage = ""; | ||||||
|  |  | ||||||
|         try { |         try { | ||||||
|             _logger.LogInformation($"Attempting to get follow ups for plan# {planNumber}"); |             _logger.LogInformation($"Attempting to get attendees for plan# {planNumber}"); | ||||||
|  |  | ||||||
|             if (planNumber <= 0) throw new ArgumentException($"{planNumber} is not a valid PCRB Plan#"); |             if (planNumber <= 0) throw new ArgumentException($"{planNumber} is not a valid PCRB Plan#"); | ||||||
|  |  | ||||||
| @ -1062,136 +1026,4 @@ public class PCRBController : ControllerBase { | |||||||
|             _monInUtils.PostMetrics(metricName, millisecondsDiff, isArgumentError, isInternalError); |             _monInUtils.PostMetrics(metricName, millisecondsDiff, isArgumentError, isInternalError); | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     [HttpPost] |  | ||||||
|     [Route("pcrb/followUpComment")] |  | ||||||
|     public async Task<IActionResult> CreateFollowUpComment(PCRBFollowUpComment comment) { |  | ||||||
|         DateTime start = DateTime.Now; |  | ||||||
|         bool isArgumentError = false; |  | ||||||
|         bool isInternalError = false; |  | ||||||
|         string errorMessage = ""; |  | ||||||
|  |  | ||||||
|         try { |  | ||||||
|             _logger.LogInformation("Attempting to create follow up comment"); |  | ||||||
|  |  | ||||||
|             if (comment is null) throw new ArgumentNullException("comment cannot be null"); |  | ||||||
|  |  | ||||||
|             await _pcrbService.CreateFollowUpComment(comment); |  | ||||||
|  |  | ||||||
|             return Ok(); |  | ||||||
|         } catch (ArgumentException ex) { |  | ||||||
|             isArgumentError = true; |  | ||||||
|             errorMessage = ex.Message; |  | ||||||
|             return BadRequest(errorMessage); |  | ||||||
|         } catch (Exception ex) { |  | ||||||
|             isInternalError = true; |  | ||||||
|             errorMessage = $"Unable to create follow up comment, because {ex.Message}"; |  | ||||||
|             return Problem(errorMessage); |  | ||||||
|         } finally { |  | ||||||
|             string metricName = "CreatePCRBFollowUpComment"; |  | ||||||
|             DateTime end = DateTime.Now; |  | ||||||
|             double millisecondsDiff = (end - start).TotalMilliseconds; |  | ||||||
|  |  | ||||||
|             _monInUtils.PostMetrics(metricName, millisecondsDiff, isArgumentError, isInternalError); |  | ||||||
|         } |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     [HttpGet] |  | ||||||
|     [Route("pcrb/followUpComments")] |  | ||||||
|     public async Task<IActionResult> GetFollowUpCommentsByPlanNumber(int planNumber, bool bypassCache) { |  | ||||||
|         DateTime start = DateTime.Now; |  | ||||||
|         bool isArgumentError = false; |  | ||||||
|         bool isInternalError = false; |  | ||||||
|         string errorMessage = ""; |  | ||||||
|  |  | ||||||
|         try { |  | ||||||
|             _logger.LogInformation($"Attempting to get follow up comments for plan# {planNumber}"); |  | ||||||
|  |  | ||||||
|             if (planNumber <= 0) throw new ArgumentException($"{planNumber} is not a valid PCRB Plan#"); |  | ||||||
|  |  | ||||||
|             List<PCRBFollowUpComment> comments = (await _pcrbService.GetFollowUpCommentsByPlanNumber(planNumber, bypassCache)).ToList(); |  | ||||||
|  |  | ||||||
|             return Ok(comments); |  | ||||||
|         } catch (ArgumentException ex) { |  | ||||||
|             isArgumentError = true; |  | ||||||
|             errorMessage = ex.Message; |  | ||||||
|             return BadRequest(errorMessage); |  | ||||||
|         } catch (Exception ex) { |  | ||||||
|             isInternalError = true; |  | ||||||
|             errorMessage = $"Cannot get follow up comments for plan# {planNumber}, because {ex.Message}"; |  | ||||||
|             return Problem(errorMessage); |  | ||||||
|         } finally { |  | ||||||
|             string metricName = "GetPCRBFollowUpComments"; |  | ||||||
|             DateTime end = DateTime.Now; |  | ||||||
|             double millisecondsDiff = (end - start).TotalMilliseconds; |  | ||||||
|  |  | ||||||
|             _monInUtils.PostMetrics(metricName, millisecondsDiff, isArgumentError, isInternalError); |  | ||||||
|         } |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     [HttpPut] |  | ||||||
|     [Route("pcrb/followUpComment")] |  | ||||||
|     public async Task<IActionResult> UpdateFollowUpComment(PCRBFollowUpComment comment) { |  | ||||||
|         DateTime start = DateTime.Now; |  | ||||||
|         bool isArgumentError = false; |  | ||||||
|         bool isInternalError = false; |  | ||||||
|         string errorMessage = ""; |  | ||||||
|  |  | ||||||
|         try { |  | ||||||
|             _logger.LogInformation("Attempting to update follow up comment"); |  | ||||||
|  |  | ||||||
|             if (comment is null) throw new ArgumentNullException("comment cannot be null"); |  | ||||||
|  |  | ||||||
|             await _pcrbService.UpdateFollowUpComment(comment); |  | ||||||
|  |  | ||||||
|             return Ok(); |  | ||||||
|         } catch (ArgumentException ex) { |  | ||||||
|             isArgumentError = true; |  | ||||||
|             errorMessage = ex.Message; |  | ||||||
|             return BadRequest(errorMessage); |  | ||||||
|         } catch (Exception ex) { |  | ||||||
|             isInternalError = true; |  | ||||||
|             errorMessage = $"Unable to update follow up comment, because {ex.Message}"; |  | ||||||
|             return Problem(errorMessage); |  | ||||||
|         } finally { |  | ||||||
|             string metricName = "UpdatePCRBFollowUpComment"; |  | ||||||
|             DateTime end = DateTime.Now; |  | ||||||
|             double millisecondsDiff = (end - start).TotalMilliseconds; |  | ||||||
|  |  | ||||||
|             _monInUtils.PostMetrics(metricName, millisecondsDiff, isArgumentError, isInternalError); |  | ||||||
|         } |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     [HttpDelete] |  | ||||||
|     [Route("pcrb/followUpComment")] |  | ||||||
|     public async Task<IActionResult> DeleteFollowUpComment(int id) { |  | ||||||
|         DateTime start = DateTime.Now; |  | ||||||
|         bool isArgumentError = false; |  | ||||||
|         bool isInternalError = false; |  | ||||||
|         string errorMessage = ""; |  | ||||||
|  |  | ||||||
|         try { |  | ||||||
|             _logger.LogInformation("Attempting to delete follow up comment"); |  | ||||||
|  |  | ||||||
|             if (id <= 0) throw new ArgumentException($"{id} is not a valid PCRB follow up comment ID"); |  | ||||||
|  |  | ||||||
|             await _pcrbService.DeleteFollowUpComment(id); |  | ||||||
|  |  | ||||||
|             return Ok(); |  | ||||||
|         } catch (ArgumentException ex) { |  | ||||||
|             isArgumentError = true; |  | ||||||
|             errorMessage = ex.Message; |  | ||||||
|             return BadRequest(errorMessage); |  | ||||||
|         } catch (Exception ex) { |  | ||||||
|             isInternalError = true; |  | ||||||
|             errorMessage = $"Unable to delete follow up comment, because {ex.Message}"; |  | ||||||
|             return Problem(errorMessage); |  | ||||||
|         } finally { |  | ||||||
|             string metricName = "DeletePCRBFollowUpComment"; |  | ||||||
|             DateTime end = DateTime.Now; |  | ||||||
|             double millisecondsDiff = (end - start).TotalMilliseconds; |  | ||||||
|  |  | ||||||
|             _monInUtils.PostMetrics(metricName, millisecondsDiff, isArgumentError, isInternalError); |  | ||||||
|         } |  | ||||||
|     } |  | ||||||
| } | } | ||||||
| @ -13,7 +13,6 @@ public interface IApprovalService { | |||||||
|     Task<IEnumerable<User>> GetApprovalGroupMembers(int subRoleId); |     Task<IEnumerable<User>> GetApprovalGroupMembers(int subRoleId); | ||||||
|     Task CreateApproval(Approval approval); |     Task CreateApproval(Approval approval); | ||||||
|     Task UpdateApproval(Approval approval); |     Task UpdateApproval(Approval approval); | ||||||
|     Task DeleteApproval(int approvalID); |  | ||||||
|     Task Approve(Approval approval); |     Task Approve(Approval approval); | ||||||
|     Task Deny(Approval approval); |     Task Deny(Approval approval); | ||||||
|     Task<IEnumerable<Approval>> GetApprovalsForIssueId(int issueId, bool bypassCache); |     Task<IEnumerable<Approval>> GetApprovalsForIssueId(int issueId, bool bypassCache); | ||||||
| @ -41,11 +40,12 @@ public class ApprovalService : IApprovalService { | |||||||
|  |  | ||||||
|             StringBuilder queryBuilder = new(); |             StringBuilder queryBuilder = new(); | ||||||
|             queryBuilder.Append("insert into Approval (IssueID, RoleName, SubRole, UserID, SubRoleID, ItemStatus, "); |             queryBuilder.Append("insert into Approval (IssueID, RoleName, SubRole, UserID, SubRoleID, ItemStatus, "); | ||||||
|             queryBuilder.Append("AssignedDate, DocumentTypeID, DisplayDeniedDocument, Step, TaskID, CompletedDate) "); |             queryBuilder.Append("AssignedDate, DocumentTypeID, DisplayDeniedDocument, Step, TaskID) "); | ||||||
|             queryBuilder.Append("values (@IssueID, @RoleName, @SubRole, @UserID, @SubRoleID, 0, @AssignedDate, 3, 0, @Step, "); |             queryBuilder.Append($"values ({approval.IssueID}, '{approval.RoleName}', '{approval.SubRole}', {approval.UserID}, "); | ||||||
|             queryBuilder.Append("@TaskID, @CompletedDate)"); |             queryBuilder.Append($"{approval.SubRoleID}, 0, '{approval.AssignedDate.ToString("yyyy-MM-dd HH:mm:ss")}', "); | ||||||
|  |             queryBuilder.Append($"3, 0, {approval.Step}, {approval.TaskID});"); | ||||||
|  |  | ||||||
|             int rowsCreated = await _dalService.ExecuteAsync(queryBuilder.ToString(), approval); |             int rowsCreated = await _dalService.ExecuteAsync(queryBuilder.ToString()); | ||||||
|  |  | ||||||
|             if (rowsCreated <= 0) throw new Exception("Unable to insert approval in database"); |             if (rowsCreated <= 0) throw new Exception("Unable to insert approval in database"); | ||||||
|  |  | ||||||
| @ -70,16 +70,19 @@ public class ApprovalService : IApprovalService { | |||||||
|             if (approvals is null || approvals.Count() == 0) { |             if (approvals is null || approvals.Count() == 0) { | ||||||
|                 StringBuilder queryBuilder = new(); |                 StringBuilder queryBuilder = new(); | ||||||
|                 queryBuilder.Append("select a.*, src.SubRoleCategoryItem from Approval a "); |                 queryBuilder.Append("select a.*, src.SubRoleCategoryItem from Approval a "); | ||||||
|                 queryBuilder.Append("left outer join SubRole sr on a.SubRoleID=sr.SubRoleID "); |                 queryBuilder.Append("join SubRole sr on a.SubRoleID=sr.SubRoleID "); | ||||||
|                 queryBuilder.Append("left outer join SubRoleCategory src on sr.SubRoleCategoryID=src.SubRoleCategoryID "); |                 queryBuilder.Append("join SubRoleCategory src on sr.SubRoleCategoryID=src.SubRoleCategoryID "); | ||||||
|                 queryBuilder.Append($"where a.IssueID={issueId}"); |                 queryBuilder.Append($"where a.IssueID={issueId}"); | ||||||
|  |  | ||||||
|                 approvals = (await _dalService.QueryAsync<Approval>(queryBuilder.ToString())).ToList(); |                 approvals = (await _dalService.QueryAsync<Approval>(queryBuilder.ToString())).ToList(); | ||||||
|  |  | ||||||
|                 foreach (Approval approval in approvals) { |                 foreach (Approval approval in approvals) { | ||||||
|  |                     int successfulUpdates = 0; | ||||||
|  |  | ||||||
|                     User? user = await _userService.GetUserByUserId(approval.UserID); |                     User? user = await _userService.GetUserByUserId(approval.UserID); | ||||||
|                     if (user is not null) { |                     if (user is not null) { | ||||||
|                         approval.User = user; |                         approval.User = user; | ||||||
|  |                         successfulUpdates++; | ||||||
|                     } |                     } | ||||||
|  |  | ||||||
|                     if (approval.ItemStatus < 0) |                     if (approval.ItemStatus < 0) | ||||||
| @ -88,9 +91,6 @@ public class ApprovalService : IApprovalService { | |||||||
|                         approval.StatusMessage = "Assigned"; |                         approval.StatusMessage = "Assigned"; | ||||||
|                     if (approval.ItemStatus > 0) |                     if (approval.ItemStatus > 0) | ||||||
|                         approval.StatusMessage = "Approved"; |                         approval.StatusMessage = "Approved"; | ||||||
|  |  | ||||||
|                     if (string.IsNullOrWhiteSpace(approval.SubRoleCategoryItem)) |  | ||||||
|                         approval.SubRoleCategoryItem = approval.RoleName; |  | ||||||
|                 } |                 } | ||||||
|  |  | ||||||
|                 _cache.Set($"approvals{issueId}", approvals, DateTimeOffset.Now.AddMinutes(5)); |                 _cache.Set($"approvals{issueId}", approvals, DateTimeOffset.Now.AddMinutes(5)); | ||||||
| @ -217,8 +217,8 @@ public class ApprovalService : IApprovalService { | |||||||
|             if (approvals is null) { |             if (approvals is null) { | ||||||
|                 StringBuilder queryBuilder = new(); |                 StringBuilder queryBuilder = new(); | ||||||
|                 queryBuilder.Append($"select a.*, src.SubRoleCategoryItem from Approval a "); |                 queryBuilder.Append($"select a.*, src.SubRoleCategoryItem from Approval a "); | ||||||
|                 queryBuilder.Append("left outer join SubRole sr on a.SubRoleID=sr.SubRoleID "); |                 queryBuilder.Append("join SubRole sr on a.SubRoleID=sr.SubRoleID "); | ||||||
|                 queryBuilder.Append("left outer join SubRoleCategory src on sr.SubRoleCategoryID=src.SubRoleCategoryID "); |                 queryBuilder.Append("join SubRoleCategory src on sr.SubRoleCategoryID=src.SubRoleCategoryID "); | ||||||
|                 queryBuilder.Append($"where UserID={userId} and ItemStatus=0 and "); |                 queryBuilder.Append($"where UserID={userId} and ItemStatus=0 and "); | ||||||
|                 queryBuilder.Append($"(AssignedDate is not null and "); |                 queryBuilder.Append($"(AssignedDate is not null and "); | ||||||
|                 queryBuilder.Append($"AssignedDate <= '{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")}' and "); |                 queryBuilder.Append($"AssignedDate <= '{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")}' and "); | ||||||
| @ -265,23 +265,6 @@ public class ApprovalService : IApprovalService { | |||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     public async Task DeleteApproval(int approvalID) { |  | ||||||
|         try { |  | ||||||
|             _logger.LogInformation($"Attempting to delete approval with ID: {approvalID}"); |  | ||||||
|  |  | ||||||
|             if (approvalID <= 0) throw new ArgumentException("Invalid approval ID"); |  | ||||||
|  |  | ||||||
|             string sql = "delete from Approval where ApprovalID=@ApprovalID"; |  | ||||||
|  |  | ||||||
|             int rowsDeleted = await _dalService.ExecuteAsync(sql, new { ApprovalID = approvalID }); |  | ||||||
|  |  | ||||||
|             if (rowsDeleted <= 0) throw new Exception("unable to delete approval from database"); |  | ||||||
|         } catch (Exception ex) { |  | ||||||
|             _logger.LogError($"Unable to delete approval with ID: {approvalID}, because {ex.Message}"); |  | ||||||
|             throw; |  | ||||||
|         } |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     public async Task Approve(Approval approval) { |     public async Task Approve(Approval approval) { | ||||||
|         try { |         try { | ||||||
|             _logger.LogInformation("Attempting to submit approval"); |             _logger.LogInformation("Attempting to submit approval"); | ||||||
|  | |||||||
| @ -144,7 +144,7 @@ public class AuthenticationService : IAuthenticationService { | |||||||
|                 Audience = _jwtAudience, |                 Audience = _jwtAudience, | ||||||
|                 Subject = identity, |                 Subject = identity, | ||||||
|                 NotBefore = DateTime.Now, |                 NotBefore = DateTime.Now, | ||||||
|                 Expires = DateTime.Now.AddDays(1), |                 Expires = DateTime.Now.AddHours(8), | ||||||
|                 SigningCredentials = new SigningCredentials(new SymmetricSecurityKey(key), SecurityAlgorithms.HmacSha256Signature) |                 SigningCredentials = new SigningCredentials(new SymmetricSecurityKey(key), SecurityAlgorithms.HmacSha256Signature) | ||||||
|             }; |             }; | ||||||
|  |  | ||||||
|  | |||||||
| @ -212,9 +212,9 @@ public class MRBService : IMRBService { | |||||||
|                 StringBuilder queryBuilder = new(); |                 StringBuilder queryBuilder = new(); | ||||||
|                 queryBuilder.Append("select (u.FirstName + ' ' + u.LastName) as OriginatorName, m.* "); |                 queryBuilder.Append("select (u.FirstName + ' ' + u.LastName) as OriginatorName, m.* "); | ||||||
|                 queryBuilder.Append("from MRB m join Users u on m.OriginatorID = u.UserID "); |                 queryBuilder.Append("from MRB m join Users u on m.OriginatorID = u.UserID "); | ||||||
|                 queryBuilder.Append("where m.Title = @Title"); |                 queryBuilder.Append($"where m.Title = '{title}'"); | ||||||
|  |  | ||||||
|                 mrb = (await _dalService.QueryAsync<MRB>(queryBuilder.ToString(), new { Title=title })).FirstOrDefault(); |                 mrb = (await _dalService.QueryAsync<MRB>(queryBuilder.ToString())).FirstOrDefault(); | ||||||
|  |  | ||||||
|                 _cache.Set($"mrb{title}", mrb, DateTimeOffset.Now.AddHours(1)); |                 _cache.Set($"mrb{title}", mrb, DateTimeOffset.Now.AddHours(1)); | ||||||
|             } |             } | ||||||
|  | |||||||
| @ -34,7 +34,6 @@ public interface IPCRBService { | |||||||
|     Task UpdatePCR3Document(PCR3Document document); |     Task UpdatePCR3Document(PCR3Document document); | ||||||
|     Task<IEnumerable<PCR3Document>> GetPCR3DocumentsForPlanNumber(int planNumber, bool bypassCache); |     Task<IEnumerable<PCR3Document>> GetPCR3DocumentsForPlanNumber(int planNumber, bool bypassCache); | ||||||
|     Task NotifyNewApprovals(PCRB pcrb); |     Task NotifyNewApprovals(PCRB pcrb); | ||||||
|     Task NotifyApprover(PCRBNotification notification); |  | ||||||
|     Task NotifyApprovers(PCRBNotification notification); |     Task NotifyApprovers(PCRBNotification notification); | ||||||
|     Task NotifyOriginator(PCRBNotification notification); |     Task NotifyOriginator(PCRBNotification notification); | ||||||
|     Task NotifyResponsiblePerson(PCRBActionItemNotification notification); |     Task NotifyResponsiblePerson(PCRBActionItemNotification notification); | ||||||
| @ -42,10 +41,6 @@ public interface IPCRBService { | |||||||
|     Task<IEnumerable<PCRBFollowUp>> GetFollowUpsByPlanNumber(int planNumber, bool bypassCache); |     Task<IEnumerable<PCRBFollowUp>> GetFollowUpsByPlanNumber(int planNumber, bool bypassCache); | ||||||
|     Task UpdateFollowUp(PCRBFollowUp followUp); |     Task UpdateFollowUp(PCRBFollowUp followUp); | ||||||
|     Task DeleteFollowUp(int id); |     Task DeleteFollowUp(int id); | ||||||
|     Task CreateFollowUpComment(PCRBFollowUpComment comment); |  | ||||||
|     Task<IEnumerable<PCRBFollowUpComment>> GetFollowUpCommentsByPlanNumber(int planNumber, bool bypassCache); |  | ||||||
|     Task UpdateFollowUpComment(PCRBFollowUpComment comment); |  | ||||||
|     Task DeleteFollowUpComment(int id); |  | ||||||
| } | } | ||||||
|  |  | ||||||
| public class PCRBService : IPCRBService { | public class PCRBService : IPCRBService { | ||||||
| @ -115,7 +110,6 @@ public class PCRBService : IPCRBService { | |||||||
|                 foreach (PCRB pcrb in allPCRBs) { |                 foreach (PCRB pcrb in allPCRBs) { | ||||||
|                     if (string.IsNullOrWhiteSpace(pcrb.OwnerName) && pcrb.OwnerID > 0) |                     if (string.IsNullOrWhiteSpace(pcrb.OwnerName) && pcrb.OwnerID > 0) | ||||||
|                         pcrb.OwnerName = (await _userService.GetUserByUserId(pcrb.OwnerID)).GetFullName(); |                         pcrb.OwnerName = (await _userService.GetUserByUserId(pcrb.OwnerID)).GetFullName(); | ||||||
|                     pcrb.FollowUps = await GetFollowUpsByPlanNumber(pcrb.PlanNumber, bypassCache); |  | ||||||
|                 } |                 } | ||||||
|  |  | ||||||
|                 _cache.Set("allPCRBs", allPCRBs, DateTimeOffset.Now.AddHours(1)); |                 _cache.Set("allPCRBs", allPCRBs, DateTimeOffset.Now.AddHours(1)); | ||||||
| @ -150,8 +144,6 @@ public class PCRBService : IPCRBService { | |||||||
|                     if (string.IsNullOrWhiteSpace(pcrb.OwnerName) && pcrb.OwnerID > 0) |                     if (string.IsNullOrWhiteSpace(pcrb.OwnerName) && pcrb.OwnerID > 0) | ||||||
|                         pcrb.OwnerName = (await _userService.GetUserByUserId(pcrb.OwnerID)).GetFullName(); |                         pcrb.OwnerName = (await _userService.GetUserByUserId(pcrb.OwnerID)).GetFullName(); | ||||||
|  |  | ||||||
|                     pcrb.FollowUps = await GetFollowUpsByPlanNumber(pcrb.PlanNumber, bypassCache); |  | ||||||
|  |  | ||||||
|                     _cache.Set($"pcrb{planNumber}", pcrb, DateTimeOffset.Now.AddHours(1)); |                     _cache.Set($"pcrb{planNumber}", pcrb, DateTimeOffset.Now.AddHours(1)); | ||||||
|                     _cache.Set($"pcrb{pcrb.Title}", pcrb, DateTimeOffset.Now.AddHours(1)); |                     _cache.Set($"pcrb{pcrb.Title}", pcrb, DateTimeOffset.Now.AddHours(1)); | ||||||
|                 } |                 } | ||||||
| @ -177,9 +169,9 @@ public class PCRBService : IPCRBService { | |||||||
|             if (!bypassCache) pcrb = _cache.Get<PCRB>($"pcrb{title}"); |             if (!bypassCache) pcrb = _cache.Get<PCRB>($"pcrb{title}"); | ||||||
|  |  | ||||||
|             if (pcrb is null) { |             if (pcrb is null) { | ||||||
|                 string sql = "select * from CCChangeControl where Title=@Title"; |                 string sql = $"select * from CCChangeControl where Title='{title}'"; | ||||||
|  |  | ||||||
|                 pcrb = (await _dalService.QueryAsync<PCRB>(sql, new { Title = title })).FirstOrDefault(); |                 pcrb = (await _dalService.QueryAsync<PCRB>(sql)).FirstOrDefault(); | ||||||
|  |  | ||||||
|                 if (pcrb is not null) { |                 if (pcrb is not null) { | ||||||
|                     if (string.IsNullOrWhiteSpace(pcrb.OwnerName) && pcrb.OwnerID > 0) |                     if (string.IsNullOrWhiteSpace(pcrb.OwnerName) && pcrb.OwnerID > 0) | ||||||
| @ -667,62 +659,6 @@ public class PCRBService : IPCRBService { | |||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     public async Task NotifyApprover(PCRBNotification notification) { |  | ||||||
|         try { |  | ||||||
|             _logger.LogInformation("Attempting to send a notification to an approver"); |  | ||||||
|  |  | ||||||
|             if (notification is null) throw new ArgumentNullException("notification cannot be null"); |  | ||||||
|             if (notification.PCRB is null) throw new ArgumentNullException("PCRB cannot be null"); |  | ||||||
|             if (notification.Approval is null) throw new ArgumentNullException("approval cannot be null"); |  | ||||||
|  |  | ||||||
|             User user = await _userService.GetUserByUserId(notification.Approval.UserID); |  | ||||||
|  |  | ||||||
|             List<MailAddress> toAddresses = new(); |  | ||||||
|             toAddresses.Add(new MailAddress(user.Email)); |  | ||||||
|  |  | ||||||
|             List<string> ccEmails = new List<string>(); |  | ||||||
|  |  | ||||||
|             if (notification.NotifyQaPreApprover) { |  | ||||||
|                 IEnumerable<User> qaPreApprovers = await GetQAPreApprovers(); |  | ||||||
|  |  | ||||||
|                 foreach (User qaPreApprover in qaPreApprovers) { |  | ||||||
|                     if (!ccEmails.Contains(qaPreApprover.Email)) |  | ||||||
|                         ccEmails.Add(qaPreApprover.Email); |  | ||||||
|                 } |  | ||||||
|             } |  | ||||||
|  |  | ||||||
|             List<MailAddress> ccAddresses = new(); |  | ||||||
|             foreach (string email in ccEmails) { |  | ||||||
|                 ccAddresses.Add(new MailAddress(email)); |  | ||||||
|             } |  | ||||||
|  |  | ||||||
|             StringBuilder sb = new(); |  | ||||||
|  |  | ||||||
|             string subject = string.Empty; |  | ||||||
|             if (!string.IsNullOrWhiteSpace(notification.Subject)) { |  | ||||||
|                 subject = notification.Subject; |  | ||||||
|             } else { |  | ||||||
|                 sb.Append($"[Approval Update] Mesa Fab Approval - PCRB# {notification.PCRB.PlanNumber} - "); |  | ||||||
|                 sb.Append($"{notification.PCRB.Title}"); |  | ||||||
|  |  | ||||||
|                 subject = sb.ToString(); |  | ||||||
|             } |  | ||||||
|  |  | ||||||
|             sb.Clear(); |  | ||||||
|             sb.Append($"{notification.Message} <br /> <br />"); |  | ||||||
|             sb.Append($"Click {_siteBaseUrl}/redirect?redirectPath=pcrb/{notification.PCRB.PlanNumber} "); |  | ||||||
|             sb.Append("to view the PCRB."); |  | ||||||
|  |  | ||||||
|             await _smtpService.SendEmail(toAddresses, ccAddresses, subject, sb.ToString()); |  | ||||||
|  |  | ||||||
|             notification.Approval.NotifyDate = DateTime.Now; |  | ||||||
|             await _approvalService.UpdateApproval(notification.Approval); |  | ||||||
|         } catch (Exception ex) { |  | ||||||
|             _logger.LogError($"Unable to send notification to approver, because {ex.Message}"); |  | ||||||
|             throw; |  | ||||||
|         } |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     public async Task NotifyApprovers(PCRBNotification notification) { |     public async Task NotifyApprovers(PCRBNotification notification) { | ||||||
|         try { |         try { | ||||||
|             _logger.LogInformation("Attempting to send notification to approvers"); |             _logger.LogInformation("Attempting to send notification to approvers"); | ||||||
| @ -776,28 +712,9 @@ public class PCRBService : IPCRBService { | |||||||
|             List<MailAddress> toAddresses = new(); |             List<MailAddress> toAddresses = new(); | ||||||
|             toAddresses.Add(new MailAddress(user.Email)); |             toAddresses.Add(new MailAddress(user.Email)); | ||||||
|  |  | ||||||
|             List<string> ccEmails = new List<string>(); |  | ||||||
|  |  | ||||||
|             if (notification.NotifyQaPreApprover) { |  | ||||||
|                 IEnumerable<User> qaPreApprovers = await GetQAPreApprovers(); |  | ||||||
|  |  | ||||||
|                 foreach (User qaPreApprover in qaPreApprovers) { |  | ||||||
|                     if (!ccEmails.Contains(qaPreApprover.Email)) |  | ||||||
|                         ccEmails.Add(qaPreApprover.Email); |  | ||||||
|                 } |  | ||||||
|             } |  | ||||||
|  |  | ||||||
|             List<MailAddress> ccAddresses = new(); |             List<MailAddress> ccAddresses = new(); | ||||||
|             foreach (string email in ccEmails) { |  | ||||||
|                 ccAddresses.Add(new MailAddress(email)); |  | ||||||
|             } |  | ||||||
|  |  | ||||||
|             string subject = string.Empty; |             string subject = $"[Update] Mesa Fab Approval - PCRB# {notification.PCRB.PlanNumber} - {notification.PCRB.Title}"; | ||||||
|             if (!string.IsNullOrWhiteSpace(notification.Subject)) { |  | ||||||
|                 subject = notification.Subject; |  | ||||||
|             } else { |  | ||||||
|                 subject = $"[Update] Mesa Fab Approval - PCRB# {notification.PCRB.PlanNumber} - {notification.PCRB.Title}"; |  | ||||||
|             } |  | ||||||
|  |  | ||||||
|             StringBuilder bodyBuilder = new(); |             StringBuilder bodyBuilder = new(); | ||||||
|             bodyBuilder.Append($"{notification.Message} <br /> <br />"); |             bodyBuilder.Append($"{notification.Message} <br /> <br />"); | ||||||
| @ -846,8 +763,8 @@ public class PCRBService : IPCRBService { | |||||||
|             if (followUp is null) throw new ArgumentNullException("follow up cannot be null"); |             if (followUp is null) throw new ArgumentNullException("follow up cannot be null"); | ||||||
|  |  | ||||||
|             StringBuilder queryBuilder = new(); |             StringBuilder queryBuilder = new(); | ||||||
|             queryBuilder.Append("insert into CCPCRBFollowUp (PlanNumber, Step, FollowUpDate, CompletedDate, UpdateDate) "); |             queryBuilder.Append("insert into CCPCRBFollowUp (PlanNumber, Step, FollowUpDate, CompletedDate) "); | ||||||
|             queryBuilder.Append("values (@PlanNumber, @Step, @FollowUpDate, @CompletedDate, @UpdateDate)"); |             queryBuilder.Append("values (@PlanNumber, @Step, @FollowUpDate, @CompletedDate)"); | ||||||
|  |  | ||||||
|             int rowsReturned = await _dalService.ExecuteAsync<PCRBFollowUp>(queryBuilder.ToString(), followUp); |             int rowsReturned = await _dalService.ExecuteAsync<PCRBFollowUp>(queryBuilder.ToString(), followUp); | ||||||
|  |  | ||||||
| @ -875,7 +792,7 @@ public class PCRBService : IPCRBService { | |||||||
|                 followUps = await _dalService.QueryAsync<PCRBFollowUp>(sql, new { PlanNumber = planNumber }); |                 followUps = await _dalService.QueryAsync<PCRBFollowUp>(sql, new { PlanNumber = planNumber }); | ||||||
|  |  | ||||||
|                 if (followUps is not null) |                 if (followUps is not null) | ||||||
|                     _cache.Set($"pcrbFollowUps{planNumber}", followUps, DateTimeOffset.Now.AddHours(1)); |                     _cache.Set($"pcrbFollowUps{planNumber}", followUps, DateTimeOffset.Now.AddMinutes(15)); | ||||||
|             } |             } | ||||||
|  |  | ||||||
|             return followUps ?? new List<PCRBFollowUp>(); |             return followUps ?? new List<PCRBFollowUp>(); | ||||||
| @ -894,8 +811,7 @@ public class PCRBService : IPCRBService { | |||||||
|  |  | ||||||
|             StringBuilder queryBuilder = new(); |             StringBuilder queryBuilder = new(); | ||||||
|             queryBuilder.Append("update CCPCRBFollowUp set Step=@Step, FollowUpDate=@FollowUpDate, IsComplete=@IsComplete, "); |             queryBuilder.Append("update CCPCRBFollowUp set Step=@Step, FollowUpDate=@FollowUpDate, IsComplete=@IsComplete, "); | ||||||
|             queryBuilder.Append("IsDeleted=@IsDeleted, CompletedDate=@CompletedDate, IsPendingApproval=@IsPendingApproval, "); |             queryBuilder.Append("IsDeleted=@IsDeleted, CompletedDate=@CompletedDate, Comments=@Comments "); | ||||||
|             queryBuilder.Append("UpdateDate=@UpdateDate "); |  | ||||||
|             queryBuilder.Append("where ID=@ID"); |             queryBuilder.Append("where ID=@ID"); | ||||||
|  |  | ||||||
|             int rowsAffected = await _dalService.ExecuteAsync<PCRBFollowUp>(queryBuilder.ToString(), followUp); |             int rowsAffected = await _dalService.ExecuteAsync<PCRBFollowUp>(queryBuilder.ToString(), followUp); | ||||||
| @ -924,89 +840,6 @@ public class PCRBService : IPCRBService { | |||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     public async Task CreateFollowUpComment(PCRBFollowUpComment comment) { |  | ||||||
|         try { |  | ||||||
|             _logger.LogInformation("Attempting to create PCRB follow up"); |  | ||||||
|  |  | ||||||
|             if (comment is null) throw new ArgumentNullException("comment cannot be null"); |  | ||||||
|  |  | ||||||
|             StringBuilder queryBuilder = new(); |  | ||||||
|             queryBuilder.Append("insert into CCPCRBFollowUpComments (PlanNumber, FollowUpID, Comment, CommentDate, UserID) "); |  | ||||||
|             queryBuilder.Append("values (@PlanNumber, @FollowUpID, @Comment, @CommentDate, @UserID)"); |  | ||||||
|  |  | ||||||
|             int rowsReturned = await _dalService.ExecuteAsync<PCRBFollowUpComment>(queryBuilder.ToString(), comment); |  | ||||||
|  |  | ||||||
|             if (rowsReturned <= 0) throw new Exception("unable to insert new follow up comment in the database"); |  | ||||||
|         } catch (Exception ex) { |  | ||||||
|             _logger.LogError($"Unable to create new follow up comment, because {ex.Message}"); |  | ||||||
|             throw; |  | ||||||
|         } |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     public async Task<IEnumerable<PCRBFollowUpComment>> GetFollowUpCommentsByPlanNumber(int planNumber, bool bypassCache) { |  | ||||||
|         try { |  | ||||||
|             _logger.LogInformation($"Attempting to fetch follow up comments for PCRB {planNumber}"); |  | ||||||
|  |  | ||||||
|             if (planNumber <= 0) throw new ArgumentException($"{planNumber} is not a valid PCRB Plan#"); |  | ||||||
|  |  | ||||||
|             IEnumerable<PCRBFollowUpComment>? comments = new List<PCRBFollowUpComment>(); |  | ||||||
|  |  | ||||||
|             if (!bypassCache) |  | ||||||
|                 comments = _cache.Get<IEnumerable<PCRBFollowUpComment>>($"pcrbFollowUpComments{planNumber}"); |  | ||||||
|  |  | ||||||
|             if (comments is null || comments.Count() == 0) { |  | ||||||
|                 string sql = "select * from CCPCRBFollowUpComments where PlanNumber=@PlanNumber"; |  | ||||||
|  |  | ||||||
|                 comments = await _dalService.QueryAsync<PCRBFollowUpComment>(sql, new { PlanNumber = planNumber }); |  | ||||||
|  |  | ||||||
|                 if (comments is not null) |  | ||||||
|                     _cache.Set($"pcrbFollowUpComments{planNumber}", comments, DateTimeOffset.Now.AddHours(1)); |  | ||||||
|             } |  | ||||||
|  |  | ||||||
|             return comments ?? new List<PCRBFollowUpComment>(); |  | ||||||
|         } catch (Exception ex) { |  | ||||||
|             _logger.LogError($"Unable to fetch follow up comments for PCRB {planNumber}, because {ex.Message}"); |  | ||||||
|             throw; |  | ||||||
|         } |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     public async Task UpdateFollowUpComment(PCRBFollowUpComment comment) { |  | ||||||
|         try { |  | ||||||
|             _logger.LogInformation("Attempting to update a follow up"); |  | ||||||
|  |  | ||||||
|             if (comment is null) |  | ||||||
|                 throw new ArgumentNullException("comment cannot be null"); |  | ||||||
|  |  | ||||||
|             StringBuilder queryBuilder = new(); |  | ||||||
|             queryBuilder.Append("update CCPCRBFollowUpComments set Comment=@Comment, CommentDate=@CommentDate, "); |  | ||||||
|             queryBuilder.Append("UserID=@UserID where ID=@ID"); |  | ||||||
|  |  | ||||||
|             int rowsAffected = await _dalService.ExecuteAsync<PCRBFollowUpComment>(queryBuilder.ToString(), comment); |  | ||||||
|  |  | ||||||
|             if (rowsAffected <= 0) throw new Exception("update failed in database"); |  | ||||||
|         } catch (Exception ex) { |  | ||||||
|             _logger.LogError($"Unable to update follow up comment, because {ex.Message}"); |  | ||||||
|             throw; |  | ||||||
|         } |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     public async Task DeleteFollowUpComment(int id) { |  | ||||||
|         try { |  | ||||||
|             _logger.LogInformation($"Attempting to delete follow up comment {id}"); |  | ||||||
|  |  | ||||||
|             if (id <= 0) throw new ArgumentException($"{id} is not a valid follow up ID"); |  | ||||||
|  |  | ||||||
|             string sql = "delete from CCPCRBFollowUpComments where ID=@ID"; |  | ||||||
|  |  | ||||||
|             int rowsAffected = await _dalService.ExecuteAsync(sql, new { ID = id }); |  | ||||||
|  |  | ||||||
|             if (rowsAffected <= 0) throw new Exception("delete operation failed in database"); |  | ||||||
|         } catch (Exception ex) { |  | ||||||
|             _logger.LogError($"Unable to delete follow up comment {id}, because {ex.Message}"); |  | ||||||
|             throw; |  | ||||||
|         } |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     private async Task SaveAttachmentInDb(IFormFile file, PCRBAttachment attachment) { |     private async Task SaveAttachmentInDb(IFormFile file, PCRBAttachment attachment) { | ||||||
|         try { |         try { | ||||||
|             _logger.LogInformation($"Attempting to save attachment to database"); |             _logger.LogInformation($"Attempting to save attachment to database"); | ||||||
| @ -1030,34 +863,4 @@ public class PCRBService : IPCRBService { | |||||||
|             throw; |             throw; | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     private async Task<IEnumerable<User>> GetQAPreApprovers() { |  | ||||||
|         try { |  | ||||||
|             _logger.LogInformation("Attempting to fetch QA Pre-Approvers"); |  | ||||||
|  |  | ||||||
|             IEnumerable<User> qaPreApprovers = new List<User>(); |  | ||||||
|  |  | ||||||
|             int qaPreApproverRoleId = await _approvalService.GetRoleIdForRoleName("QA_PRE_APPROVAL"); |  | ||||||
|  |  | ||||||
|             if (qaPreApproverRoleId > 0) { |  | ||||||
|                 IEnumerable<SubRole> qaPreApproverSubRoles = |  | ||||||
|                     await _approvalService.GetSubRolesForSubRoleName("QA_PRE_APPROVAL", qaPreApproverRoleId); |  | ||||||
|  |  | ||||||
|                 foreach (SubRole subRole in qaPreApproverSubRoles) { |  | ||||||
|                     IEnumerable<User> members = |  | ||||||
|                         await _approvalService.GetApprovalGroupMembers(subRole.SubRoleID); |  | ||||||
|  |  | ||||||
|                     foreach (User member in members) { |  | ||||||
|                         if (!qaPreApprovers.Any(u => u.UserID == member.UserID)) |  | ||||||
|                             qaPreApprovers = qaPreApprovers.Append(member); |  | ||||||
|                     } |  | ||||||
|                 } |  | ||||||
|             } |  | ||||||
|  |  | ||||||
|             return qaPreApprovers; |  | ||||||
|         } catch (Exception ex) { |  | ||||||
|             _logger.LogError($"Unable to fetch QA Pre-Approvers, because {ex.Message}"); |  | ||||||
|             throw; |  | ||||||
|         } |  | ||||||
|     } |  | ||||||
| } | } | ||||||
| @ -1,95 +0,0 @@ | |||||||
| using System; |  | ||||||
| using System.Net; |  | ||||||
| using System.Net.Http; |  | ||||||
| using System.Threading; |  | ||||||
| using System.Threading.Tasks; |  | ||||||
|  |  | ||||||
| using MesaFabApproval.Client.Services; |  | ||||||
| using MesaFabApproval.Shared.Models; |  | ||||||
|  |  | ||||||
| using Microsoft.Extensions.Caching.Memory; |  | ||||||
|  |  | ||||||
| using Moq; |  | ||||||
| using Moq.Protected; |  | ||||||
|  |  | ||||||
| using Xunit; |  | ||||||
|  |  | ||||||
| namespace MesaFabApproval.Client.Test; |  | ||||||
|  |  | ||||||
| public class ApprovalServiceTests { |  | ||||||
|     private readonly Mock<IMemoryCache> _cacheMock; |  | ||||||
|     private readonly Mock<IHttpClientFactory> _httpClientFactoryMock; |  | ||||||
|     private readonly ApprovalService _approvalService; |  | ||||||
|  |  | ||||||
|     public ApprovalServiceTests() { |  | ||||||
|         _cacheMock = new Mock<IMemoryCache>(); |  | ||||||
|         _httpClientFactoryMock = new Mock<IHttpClientFactory>(); |  | ||||||
|         _approvalService = new ApprovalService(_cacheMock.Object, _httpClientFactoryMock.Object); |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     [Fact] |  | ||||||
|     public async Task DeleteApproval_ValidApprovalID_DeletesApproval() { |  | ||||||
|         int approvalID = 1; |  | ||||||
|  |  | ||||||
|         Mock<HttpMessageHandler> handlerMock = new Mock<HttpMessageHandler>(); |  | ||||||
|  |  | ||||||
|         handlerMock |  | ||||||
|             .Protected() |  | ||||||
|             .Setup<Task<HttpResponseMessage>>( |  | ||||||
|                 "SendAsync", |  | ||||||
|                 ItExpr.Is<HttpRequestMessage>(req => req.Method == HttpMethod.Delete), |  | ||||||
|                 ItExpr.IsAny<CancellationToken>() |  | ||||||
|             ) |  | ||||||
|             .ReturnsAsync(new HttpResponseMessage { |  | ||||||
|                 StatusCode = HttpStatusCode.OK, |  | ||||||
|             }); |  | ||||||
|  |  | ||||||
|         HttpClient httpClient = new HttpClient(handlerMock.Object) { |  | ||||||
|             BaseAddress = new Uri("https://localhost:5000") |  | ||||||
|         }; |  | ||||||
|  |  | ||||||
|         _httpClientFactoryMock.Setup(_ => _.CreateClient(It.IsAny<string>())).Returns(httpClient); |  | ||||||
|  |  | ||||||
|         await _approvalService.DeleteApproval(approvalID); |  | ||||||
|  |  | ||||||
|         handlerMock.Protected().Verify( |  | ||||||
|             "SendAsync", |  | ||||||
|             Times.Once(), |  | ||||||
|             ItExpr.Is<HttpRequestMessage>(req => req.Method == HttpMethod.Delete), |  | ||||||
|             ItExpr.IsAny<CancellationToken>() |  | ||||||
|         ); |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     [Fact] |  | ||||||
|     public async Task DeleteApproval_InvalidApprovalID_ThrowsArgumentException() { |  | ||||||
|         int approvalID = 0; |  | ||||||
|  |  | ||||||
|         await Assert.ThrowsAsync<ArgumentException>(() => _approvalService.DeleteApproval(approvalID)); |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     [Fact] |  | ||||||
|     public async Task DeleteApproval_DeletionFails_ThrowsException() { |  | ||||||
|         int approvalID = 1; |  | ||||||
|  |  | ||||||
|         Mock<HttpMessageHandler> handlerMock = new Mock<HttpMessageHandler>(); |  | ||||||
|         handlerMock |  | ||||||
|             .Protected() |  | ||||||
|             .Setup<Task<HttpResponseMessage>>( |  | ||||||
|                 "SendAsync", |  | ||||||
|                 ItExpr.Is<HttpRequestMessage>(req => req.Method == HttpMethod.Delete), |  | ||||||
|                 ItExpr.IsAny<CancellationToken>() |  | ||||||
|             ) |  | ||||||
|             .ReturnsAsync(new HttpResponseMessage { |  | ||||||
|                 StatusCode = HttpStatusCode.BadRequest, |  | ||||||
|                 ReasonPhrase = "Bad Request" |  | ||||||
|             }); |  | ||||||
|  |  | ||||||
|         HttpClient httpClient = new HttpClient(handlerMock.Object) { |  | ||||||
|             BaseAddress = new Uri("https://localhost:5000") |  | ||||||
|         }; |  | ||||||
|  |  | ||||||
|         _httpClientFactoryMock.Setup(_ => _.CreateClient(It.IsAny<string>())).Returns(httpClient); |  | ||||||
|  |  | ||||||
|         await Assert.ThrowsAsync<Exception>(() => _approvalService.DeleteApproval(approvalID)); |  | ||||||
|     } |  | ||||||
| } |  | ||||||
| @ -1,18 +0,0 @@ | |||||||
| using Microsoft.Extensions.Caching.Memory; |  | ||||||
|  |  | ||||||
| using Moq; |  | ||||||
|  |  | ||||||
| namespace MesaFabApproval.Client.Test; |  | ||||||
|  |  | ||||||
| public static class MockMemoryCacheService { |  | ||||||
|     public static Mock<IMemoryCache> GetMemoryCache(object expectedValue) { |  | ||||||
|         Mock<IMemoryCache> mockMemoryCache = new Mock<IMemoryCache>(); |  | ||||||
|         mockMemoryCache |  | ||||||
|             .Setup(x => x.TryGetValue(It.IsAny<object>(), out expectedValue)) |  | ||||||
|             .Returns(true); |  | ||||||
|         mockMemoryCache |  | ||||||
|             .Setup(x => x.CreateEntry(It.IsAny<object>())) |  | ||||||
|             .Returns(Mock.Of<ICacheEntry>()); |  | ||||||
|         return mockMemoryCache; |  | ||||||
|     } |  | ||||||
| } |  | ||||||
Some files were not shown because too many files have changed in this diff Show More
		Reference in New Issue
	
	Block a user