Compare commits
	
		
			30 Commits
		
	
	
		
			b99b721458
			...
			compile-co
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 83789cdd91 | |||
| 8bae94de96 | |||
| 032c971472 | |||
| 704df4fa8c | |||
| e452047dfb | |||
| bf3e46a784 | |||
| 909f358356 | |||
| b3fb328b98 | |||
| f110fba4cd | |||
| c4d29dad4e | |||
| 2dbde5d70c | |||
| 2119b31764 | |||
| 55d3a96228 | |||
| aa38d17daf | |||
| d4fcbe0dc6 | |||
| 6a7bc39ff8 | |||
| b3a2ee7285 | |||
| a2326315a6 | |||
| 8684e97db7 | |||
| 1946623c9e | |||
| 40e7a3f8e0 | |||
| f0df620dc9 | |||
| 6a2bc0b4ab | |||
| c4036471f7 | |||
| e19cb5fcda | |||
| e68a1a4c3b | |||
| 7ddda56987 | |||
| 77f45fabb1 | |||
| 1b22ffa439 | |||
| 123bbdb9fe | 
							
								
								
									
										27
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										27
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							| @ -351,9 +351,36 @@ ASALocalRun/ | ||||
| /Fab2ApprovalMKLink/Utilities | ||||
| /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 | ||||
| /Fab2ApprovalSystem/.vscode/.UserSecrets | ||||
| /Fab2ApprovalTests/.vscode/.UserSecrets | ||||
| /MesaFabApproval.API/.vscode/.UserSecrets | ||||
| /MesaFabApproval.Client/.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", | ||||
|             "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", | ||||
|             "type": "coreclr", | ||||
|  | ||||
							
								
								
									
										3
									
								
								.vscode/settings.json
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										3
									
								
								.vscode/settings.json
									
									
									
									
										vendored
									
									
								
							| @ -420,5 +420,6 @@ | ||||
|     "windowsphone", | ||||
|     "Winsock", | ||||
|     "worlflow" | ||||
|   ] | ||||
|   ], | ||||
|   "dotnet.preferCSharpExtension": true | ||||
| } | ||||
							
								
								
									
										33
									
								
								.vscode/tasks.json
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										33
									
								
								.vscode/tasks.json
									
									
									
									
										vendored
									
									
								
							| @ -2,7 +2,7 @@ | ||||
|     "version": "2.0.0", | ||||
|     "tasks": [ | ||||
|         { | ||||
|             "label": "MSBuild", | ||||
|             "label": "MSBuild-Debug", | ||||
|             "command": "C:/Program Files (x86)/Microsoft Visual Studio/2022/BuildTools/MSBuild/Current/Bin/MSBuild.exe", | ||||
|             "type": "process", | ||||
|             "args": [ | ||||
| @ -16,6 +16,21 @@ | ||||
|             ], | ||||
|             "problemMatcher": "$msCompile" | ||||
|         }, | ||||
|         { | ||||
|             "label": "MSBuild-Release", | ||||
|             "command": "C:/Program Files (x86)/Microsoft Visual Studio/2022/BuildTools/MSBuild/Current/Bin/MSBuild.exe", | ||||
|             "type": "process", | ||||
|             "args": [ | ||||
|                 "/target:Build", | ||||
|                 "/restore:True", | ||||
|                 "/p:RestoreSources=https://artifactory.intra.infineon.com/artifactory/api/nuget/ngt-fi-package-main-vir/%3Bhttps://packagemanagement.eu.infineon.com:4430/api/v2/%3Bhttps://api.nuget.org/v3/index.json", | ||||
|                 "/detailedsummary", | ||||
|                 "/consoleloggerparameters:PerformanceSummary;ErrorsOnly;", | ||||
|                 "/property:Configuration=Release;TargetFrameworkVersion=v4.8", | ||||
|                 "Fab2ApprovalSystem/Fab2ApprovalSystem.csproj" | ||||
|             ], | ||||
|             "problemMatcher": "$msCompile" | ||||
|         }, | ||||
|         { | ||||
|             "label": "Fab2ApprovalMKLink-User Secrets Init", | ||||
|             "command": "dotnet", | ||||
| @ -48,6 +63,7 @@ | ||||
|             "type": "process", | ||||
|             "args": [ | ||||
|                 "format", | ||||
|                 "${workspaceFolder}/Fab2ApprovalMKLink/Fab2ApprovalMKLink.csproj", | ||||
|                 "--report", | ||||
|                 ".vscode", | ||||
|                 "--verbosity", | ||||
| @ -63,7 +79,8 @@ | ||||
|             "type": "process", | ||||
|             "args": [ | ||||
|                 "format", | ||||
|                 "whitespace" | ||||
|                 "whitespace", | ||||
|                 "${workspaceFolder}/Fab2ApprovalMKLink/Fab2ApprovalMKLink.csproj" | ||||
|             ], | ||||
|             "problemMatcher": "$msCompile" | ||||
|         }, | ||||
| @ -79,6 +96,18 @@ | ||||
|             ], | ||||
|             "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", | ||||
|             "command": "dotnet", | ||||
|  | ||||
| @ -367,6 +367,7 @@ dotnet_diagnostic.IDE0065.severity = none # Question - | ||||
| dotnet_diagnostic.IDE0066.severity = none # Question - Use  | ||||
| dotnet_diagnostic.IDE0078.severity = none # Question - Use pattern matching (may change code meaning) | ||||
| dotnet_diagnostic.IDE0090.severity = warning # Question - Simplify new expression | ||||
| dotnet_diagnostic.IDE0100.severity = error # Question - Remove redundant equality | ||||
| dotnet_diagnostic.IDE0160.severity = warning # Question - Use block-scoped namespace | ||||
| dotnet_diagnostic.IDE0161.severity = warning # Question - Namespace declaration preferences | ||||
| dotnet_diagnostic.IDE0270.severity = none # Question - Null check can be simplified | ||||
|  | ||||
							
								
								
									
										34
									
								
								Fab2ApprovalMKLink/.vscode/mklink.md
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										34
									
								
								Fab2ApprovalMKLink/.vscode/mklink.md
									
									
									
									
										vendored
									
									
								
							| @ -35,3 +35,37 @@ mklink /J "L:\DevOps\Mesa_FI\MesaFabApproval\Fab2ApprovalMKLink\PdfGenerator" "L | ||||
| mklink /J "L:\DevOps\Mesa_FI\MesaFabApproval\Fab2ApprovalMKLink\Jobs" "L:\DevOps\Mesa_FI\MesaFabApproval\Fab2ApprovalSystem\Jobs" | ||||
| mklink /J "L:\DevOps\Mesa_FI\MesaFabApproval\Fab2ApprovalMKLink\JobSchedules" "L:\DevOps\Mesa_FI\MesaFabApproval\Fab2ApprovalSystem\JobSchedules" | ||||
| ``` | ||||
|  | ||||
| ```bash 1747242128286 = 638828389282860000 = 2025-2.Spring = Wed May 14 2025 10:02:07 GMT-0700 (Mountain Standard Time) | ||||
| mklink /J "Fab2ApprovalMKLink\.vscode\.UserSecrets" "%AppData%\Microsoft\UserSecrets\f2da5035-aba9-4676-9f8d-d6689f84663d" | ||||
| mklink /J "Fab2ApprovalMKLink\Controllers" "Fab2ApprovalSystem\Controllers" | ||||
| mklink /J "Fab2ApprovalMKLink\DMO" "Fab2ApprovalSystem\DMO" | ||||
| mklink /J "Fab2ApprovalMKLink\Jobs" "Fab2ApprovalSystem\Jobs" | ||||
| mklink /J "Fab2ApprovalMKLink\JobSchedules" "Fab2ApprovalSystem\JobSchedules" | ||||
| mklink /J "Fab2ApprovalMKLink\Misc" "Fab2ApprovalSystem\Misc" | ||||
| mklink /J "Fab2ApprovalMKLink\Models" "Fab2ApprovalSystem\Models" | ||||
| mklink /J "Fab2ApprovalMKLink\PdfGenerator" "Fab2ApprovalSystem\PdfGenerator" | ||||
| 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" | ||||
| ``` | ||||
|  | ||||
							
								
								
									
										74
									
								
								Fab2ApprovalMKLink/Extensions/ControllerExtensions.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										74
									
								
								Fab2ApprovalMKLink/Extensions/ControllerExtensions.cs
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,74 @@ | ||||
| #if NET8 | ||||
|  | ||||
| using System; | ||||
| using System.IO; | ||||
| using System.Threading.Tasks; | ||||
|  | ||||
| using Fab2ApprovalSystem.PdfGenerator; | ||||
|  | ||||
| using Microsoft.AspNetCore.Mvc; | ||||
| using Microsoft.AspNetCore.Mvc.Rendering; | ||||
| using Microsoft.AspNetCore.Mvc.ViewEngines; | ||||
| using Microsoft.AspNetCore.Mvc.ViewFeatures; | ||||
| using Microsoft.Extensions.DependencyInjection; | ||||
|  | ||||
| namespace Fab2ApprovalSystem.Extensions; | ||||
|  | ||||
| public static class ControllerExtensions { | ||||
|  | ||||
|     public static ActionResult GetBinaryContentResult<TModel>(this Controller controller, string viewName, string contentType, TModel model) { | ||||
|         string pageTitle = string.Empty; | ||||
|  | ||||
|         string htmlText = RenderViewToString(controller, viewName, model); | ||||
|  | ||||
|         StandardPdfRenderer standardPdfRenderer = new(); | ||||
|         // Let the html be rendered into a PDF document through iTextSharp. | ||||
|         byte[] buffer = standardPdfRenderer.Render(htmlText, pageTitle); | ||||
|  | ||||
|         // Return the PDF as a binary stream to the client. | ||||
|         return new BinaryContentResult(buffer, contentType); | ||||
|     } | ||||
|  | ||||
|     public static string RenderViewToString<TModel>(this Controller controller, string viewName, TModel model) { | ||||
|         if (string.IsNullOrEmpty(viewName)) | ||||
|             viewName = controller.ControllerContext.ActionDescriptor.ActionName; | ||||
|  | ||||
|         controller.ViewData.Model = model; | ||||
|  | ||||
|         using (StringWriter writer = new()) { | ||||
|             try { | ||||
|                 CompositeViewEngine compositeViewEngine = controller.HttpContext.RequestServices.GetRequiredService(typeof(ICompositeViewEngine)) as CompositeViewEngine; | ||||
|                 if (compositeViewEngine is null || compositeViewEngine.ViewEngines.Count == 0) { } | ||||
|  | ||||
|                 ViewEngineResult viewResult = null; | ||||
|  | ||||
|                 if (viewName.EndsWith(".cshtml")) | ||||
|                     viewResult = compositeViewEngine.GetView(viewName, viewName, false); | ||||
|                 else | ||||
|                     viewResult = compositeViewEngine.FindView(controller.ControllerContext, viewName, false); | ||||
|  | ||||
|                 if (!viewResult.Success) | ||||
|                     return $"A view with the name '{viewName}' could not be found"; | ||||
|  | ||||
|                 ViewContext viewContext = new( | ||||
|                     controller.ControllerContext, | ||||
|                     viewResult.View, | ||||
|                     controller.ViewData, | ||||
|                     controller.TempData, | ||||
|                     writer, | ||||
|                     new HtmlHelperOptions() | ||||
|                 ); | ||||
|  | ||||
|                 Task task = viewResult.View.RenderAsync(viewContext); | ||||
|                 task.Wait(); | ||||
|  | ||||
|                 return writer.GetStringBuilder().ToString(); | ||||
|             } catch (Exception ex) { | ||||
|                 return $"Failed - {ex.Message}"; | ||||
|             } | ||||
|         } | ||||
|     } | ||||
|  | ||||
| } | ||||
|  | ||||
| #endif | ||||
| @ -18,12 +18,19 @@ | ||||
|   <PropertyGroup Condition="'$(TargetFramework)' == 'net8.0'"> | ||||
|     <DefineConstants>NET8</DefineConstants> | ||||
|   </PropertyGroup> | ||||
|   <ItemGroup> | ||||
|     <AssemblyAttribute Include="System.Runtime.CompilerServices.InternalsVisibleTo"> | ||||
|       <_Parameter1>Fab2ApprovalTests</_Parameter1> | ||||
|     </AssemblyAttribute> | ||||
|   </ItemGroup> | ||||
|   <ItemGroup> | ||||
|     <PackageReference Include="Dapper.Contrib" Version="2.0.78" /> | ||||
|     <PackageReference Include="Dapper" Version="2.1.44" /> | ||||
|     <PackageReference Include="DocumentFormat.OpenXml" Version="3.3.0" /> | ||||
|     <PackageReference Include="EntityFramework" Version="6.5.1" /> | ||||
|     <PackageReference Include="ExcelDataReader" Version="3.7.0" /> | ||||
|     <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.Data.SqlClient" Version="5.2.0" /> | ||||
|     <PackageReference Include="Microsoft.Data.Sqlite" Version="8.0.2" /> | ||||
|  | ||||
| @ -1,15 +1,23 @@ | ||||
| using System; | ||||
| using System.Diagnostics; | ||||
| using System.Text; | ||||
|  | ||||
| using Fab2ApprovalSystem.Misc; | ||||
| using Fab2ApprovalSystem.Models; | ||||
| using Fab2ApprovalSystem.Services; | ||||
|  | ||||
| using Microsoft.AspNetCore.Authentication.JwtBearer; | ||||
| using Microsoft.AspNetCore.Authorization; | ||||
| using Microsoft.AspNetCore.Builder; | ||||
| using Microsoft.AspNetCore.Http; | ||||
| using Microsoft.AspNetCore.Mvc; | ||||
| using Microsoft.AspNetCore.Mvc.ViewEngines; | ||||
| using Microsoft.Extensions.Configuration; | ||||
| using Microsoft.Extensions.DependencyInjection; | ||||
| using Microsoft.Extensions.Hosting; | ||||
| using Microsoft.Extensions.Hosting.WindowsServices; | ||||
| using Microsoft.Extensions.Logging; | ||||
| using Microsoft.IdentityModel.Tokens; | ||||
|  | ||||
| namespace Fab2ApprovalMKLink; | ||||
|  | ||||
| @ -24,12 +32,36 @@ public class Program { | ||||
|             throw new Exception("Company name must have a value!"); | ||||
|         if (string.IsNullOrEmpty(appSettings.WorkingDirectoryName)) | ||||
|             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 { | ||||
|             _ = webApplicationBuilder.Services.Configure<ApiBehaviorOptions>(options => options.SuppressModelStateInvalidFilter = true); | ||||
|             _ = webApplicationBuilder.Services.AddControllers(); | ||||
|             _ = webApplicationBuilder.Services.AddControllersWithViews(); | ||||
|             _ = webApplicationBuilder.Services.AddDistributedMemoryCache(); | ||||
|             _ = webApplicationBuilder.Services.AddHttpClient(); | ||||
|             _ = webApplicationBuilder.Services.AddMemoryCache(); | ||||
|             _ = 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.AddSession(sessionOptions => { | ||||
|                 sessionOptions.IdleTimeout = TimeSpan.FromSeconds(2000); | ||||
| @ -37,6 +69,29 @@ public class Program { | ||||
|                 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()) { | ||||
|                 _ = webApplicationBuilder.Services.AddSingleton<IHostLifetime, WindowsServiceLifetime>(); | ||||
|                 _ = webApplicationBuilder.Logging.AddEventLog(settings => { | ||||
| @ -65,6 +120,8 @@ public class Program { | ||||
|             } | ||||
|             _ = webApplication.UseSession(); | ||||
|             _ = webApplication.MapControllers(); | ||||
|             _ = webApplication.UseAuthentication(); | ||||
|             _ = webApplication.UseAuthorization(); | ||||
|             logger.LogInformation("Starting Web Application"); | ||||
|             webApplication.Run(); | ||||
|             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,105 +0,0 @@ | ||||
| trigger: | ||||
|   branches: | ||||
|     include: | ||||
|       - Development | ||||
|   paths: | ||||
|     include: | ||||
|       - "Fab2ApprovalSystem/*" | ||||
|     exclude: | ||||
|       - "**/*.yaml" | ||||
|       - "**/*.yml" | ||||
|       - "SQL/*" | ||||
|       - "references/*" | ||||
|       - "packages/*" | ||||
|       - "Kendo/*" | ||||
|  | ||||
| pool: | ||||
|   name: Mesa-IIS | ||||
|   demands: Fab2ApprovalSystem-Development | ||||
|  | ||||
| variables: | ||||
|   # solution: '**/*.sln' | ||||
|   # buildPlatform: 'Any CPU' | ||||
|   buildConfiguration: "Debug" | ||||
|   ASPNETCORE_ENVIRONMENT: "Development" | ||||
|  | ||||
| steps: | ||||
|   - script: | | ||||
|       set assemblyTitle=Fab2ApprovalSystem | ||||
|       echo %assemblyTitle% | ||||
|       echo ##vso[task.setvariable variable=AssemblyTitle;]%assemblyTitle% | ||||
|       echo $(AssemblyTitle) | ||||
|     displayName: AssemblyTitle | ||||
|  | ||||
|   - script: | | ||||
|       set targetFrameworkVersion=v4.8 | ||||
|       echo %targetFrameworkVersion% | ||||
|       echo ##vso[task.setvariable variable=TargetFrameworkVersion;]%targetFrameworkVersion% | ||||
|       echo $(TargetFrameworkVersion) | ||||
|     displayName: TargetFrameworkVersion | ||||
|  | ||||
|   - script: | | ||||
|       set coreVersion=na | ||||
|       echo %coreVersion% | ||||
|       echo ##vso[task.setvariable variable=CoreVersion;]%coreVersion% | ||||
|       echo $(CoreVersion) | ||||
|     displayName: CoreVersion | ||||
|  | ||||
|   - script: | | ||||
|       set configuration=Debug | ||||
|       echo %configuration% | ||||
|       echo ##vso[task.setvariable variable=Configuration;]%configuration% | ||||
|       echo $(Configuration) | ||||
|     displayName: Configuration | ||||
|  | ||||
|   - script: | | ||||
|       REM set nugetSource=https://messa017.infineon.com/v3/index.json | ||||
|       set nugetSource=https://eaf-prod.mes.infineon.com/v3/index.json | ||||
|       echo %nugetSource% | ||||
|       echo ##vso[task.setvariable variable=NugetSource;]%nugetSource% | ||||
|       echo $(NugetSource) | ||||
|     displayName: NugetSource | ||||
|  | ||||
|   - script: | | ||||
|       set gitCommit=$(Build.SourceVersion) | ||||
|       set gitCommitSeven=%gitCommit:~0,7% | ||||
|       echo %gitCommitSeven% | ||||
|       echo ##vso[task.setvariable variable=GitCommitSeven;]%gitCommitSeven% | ||||
|       echo $(GitCommitSeven) | ||||
|     displayName: GitCommitSeven | ||||
|  | ||||
|   - script: | | ||||
|       echo $(AssemblyTitle) | ||||
|       echo $(Build.BuildId) | ||||
|       echo $(Build.Reason) | ||||
|       echo $(Build.Repository.Id) | ||||
|       echo $(Build.Repository.Name) | ||||
|       echo $(Build.SourceVersion) | ||||
|       echo $(CoreVersion) | ||||
|       echo $(Configuration) | ||||
|       echo $(NugetSource) | ||||
|       echo $(GitCommitSeven) | ||||
|       echo $(TargetFrameworkVersion) | ||||
|       REM echo $(pipelinePassword) | ||||
|     displayName: "Echo Check" | ||||
|  | ||||
|   - script: '"C:/Program Files (x86)/Microsoft Visual Studio/2022/BuildTools/MSBuild/Current/Bin/MSBuild.exe" /target:Restore /DetailedSummary /ConsoleLoggerParameters:PerformanceSummary;ErrorsOnly; /p:Configuration=$(Configuration);TargetFrameworkVersion=$(TargetFrameworkVersion) /p:RestoreSources=$(NugetSource) $(AssemblyTitle).csproj' | ||||
|     workingDirectory: Fab2ApprovalSystem | ||||
|     displayName: "Framework Restore" | ||||
|  | ||||
|   - script: '"C:/Program Files (x86)/Microsoft Visual Studio/2022/BuildTools/MSBuild/Current/Bin/MSBuild.exe" /target:Build /DetailedSummary /ConsoleLoggerParameters:PerformanceSummary;ErrorsOnly; /p:Configuration=$(Configuration);TargetFrameworkVersion=$(TargetFrameworkVersion) $(AssemblyTitle).csproj' | ||||
|     workingDirectory: Fab2ApprovalSystem | ||||
|     displayName: "Framework Build" | ||||
|  | ||||
|   - script: '"C:/Program Files (x86)/Microsoft Visual Studio/2022/BuildTools/MSBuild/Current/Bin/MSBuild.exe" /DetailedSummary /ConsoleLoggerParameters:PerformanceSummary;ErrorsOnly; /p:Configuration=$(Configuration);TargetFrameworkVersion=$(TargetFrameworkVersion) /p:DebugSymbols=false /p:DeleteExistingFiles=true /p:DeployOnBuild=true /p:EnableUpdateAble=true /p:ExcludeApp_Data=true /p:LastUsedBuildConfiguration=$(Configuration) /p:LastUsedPlatform="Any CPU" /p:LaunchSiteAfterPublish=true /p:OutputPath="D:\$(TargetFrameworkVersion)\$(Build.Repository.Name)\$(GitCommitSeven)-$(Build.BuildId)-$(Build.Repository.Name)-$(Configuration)" /p:PreCompileBeforePublish=true /p:PublishProvider=FileSystem /p:PublishUrl="D:/PublishUrl" /p:SiteUrlToLaunchAfterPublish="" /p:WDPMergeOption=DoNotMerge /p:WebPublishMethod=FileSystem $(AssemblyTitle).csproj' | ||||
|     workingDirectory: Fab2ApprovalSystem | ||||
|     displayName: "Framework Pack" | ||||
|  | ||||
|   - script: '"C:/Program Files (x86)/IIS/Microsoft Web Deploy V3/MSDeploy.exe" -AllowUntrusted -dest:auto -disableLink:AppPoolExtension -disableLink:CertificateExtension -disableLink:ContentExtension -setParam:name="IIS Web Application Name",value=$(Build.Repository.Name) -setParamFile:"D:\$(TargetFrameworkVersion)\$(Build.Repository.Name)\$(GitCommitSeven)-$(Build.BuildId)-$(Build.Repository.Name)-$(Configuration)" "/_PublishedWebsites/$(Build.Repository.Name)_Package/$(Build.Repository.Name).SetParameters.xml" -source:package="D:\$(TargetFrameworkVersion)\$(Build.Repository.Name)\$(GitCommitSeven)-$(Build.BuildId)-$(Build.Repository.Name)-$(Configuration)" "/_PublishedWebsites/$(AssemblyTitle)_Package/$(AssemblyTitle).zip" -verb:sync' | ||||
|     workingDirectory: Fab2ApprovalSystem | ||||
|     displayName: "Framework Deploy" | ||||
|     enabled: false | ||||
|  | ||||
|   - script: 'echo $(Build.SourceVersion)-$(Build.BuildId)>bin_x_x_\$(Configuration)\$(CoreVersion)\win-x64\$(Build.Repository.Name).txt' | ||||
|     displayName: "Force Fail" | ||||
|     enabled: false | ||||
| @ -6,6 +6,9 @@ MinimumVisualStudioVersion = 10.0.40219.1 | ||||
| Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Fab2ApprovalSystem", "Fab2ApprovalSystem\Fab2ApprovalSystem.csproj", "{AAE52608-4DD1-4732-92BD-CC8915DEC71E}" | ||||
| EndProject | ||||
| Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MesaFabApproval.API", "MesaFabApproval.API\MesaFabApproval.API.csproj", "{852E528D-015A-43B5-999D-F281E3359E5E}" | ||||
| 	ProjectSection(ProjectDependencies) = postProject | ||||
| 		{2C16014D-B04E-46AF-AB4C-D2691D44A339} = {2C16014D-B04E-46AF-AB4C-D2691D44A339} | ||||
| 	EndProjectSection | ||||
| EndProject | ||||
| Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MesaFabApproval.Shared", "MesaFabApproval.Shared\MesaFabApproval.Shared.csproj", "{2C16014D-B04E-46AF-AB4C-D2691D44A339}" | ||||
| EndProject | ||||
| @ -14,6 +17,18 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MesaFabApproval.Client", "M | ||||
| 		{2C16014D-B04E-46AF-AB4C-D2691D44A339} = {2C16014D-B04E-46AF-AB4C-D2691D44A339} | ||||
| 	EndProjectSection | ||||
| EndProject | ||||
| Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MesaFabApproval.API.Test", "MesaFabApproval.API.Test\MesaFabApproval.API.Test.csproj", "{D03AB305-BA29-4EB1-AC66-ABBF76FBF5C1}" | ||||
| 	ProjectSection(ProjectDependencies) = postProject | ||||
| 		{2C16014D-B04E-46AF-AB4C-D2691D44A339} = {2C16014D-B04E-46AF-AB4C-D2691D44A339} | ||||
| 		{852E528D-015A-43B5-999D-F281E3359E5E} = {852E528D-015A-43B5-999D-F281E3359E5E} | ||||
| 	EndProjectSection | ||||
| EndProject | ||||
| Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MesaFabApproval.Client.Test", "MesaFabApproval.Client.Test\MesaFabApproval.Client.Test.csproj", "{A0E5BD7D-3910-43BD-BBA3-3820AD524423}" | ||||
| 	ProjectSection(ProjectDependencies) = postProject | ||||
| 		{2C16014D-B04E-46AF-AB4C-D2691D44A339} = {2C16014D-B04E-46AF-AB4C-D2691D44A339} | ||||
| 		{34D52F44-A81F-4247-8180-16E204824A07} = {34D52F44-A81F-4247-8180-16E204824A07} | ||||
| 	EndProjectSection | ||||
| EndProject | ||||
| Global | ||||
| 	GlobalSection(SolutionConfigurationPlatforms) = preSolution | ||||
| 		Debug|Any CPU = Debug|Any CPU | ||||
| @ -36,6 +51,14 @@ Global | ||||
| 		{34D52F44-A81F-4247-8180-16E204824A07}.Debug|Any CPU.Build.0 = Debug|Any CPU | ||||
| 		{34D52F44-A81F-4247-8180-16E204824A07}.Release|Any CPU.ActiveCfg = Release|Any CPU | ||||
| 		{34D52F44-A81F-4247-8180-16E204824A07}.Release|Any CPU.Build.0 = Release|Any CPU | ||||
| 		{D03AB305-BA29-4EB1-AC66-ABBF76FBF5C1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU | ||||
| 		{D03AB305-BA29-4EB1-AC66-ABBF76FBF5C1}.Debug|Any CPU.Build.0 = Debug|Any CPU | ||||
| 		{D03AB305-BA29-4EB1-AC66-ABBF76FBF5C1}.Release|Any CPU.ActiveCfg = Release|Any CPU | ||||
| 		{D03AB305-BA29-4EB1-AC66-ABBF76FBF5C1}.Release|Any CPU.Build.0 = Release|Any CPU | ||||
| 		{A0E5BD7D-3910-43BD-BBA3-3820AD524423}.Debug|Any CPU.ActiveCfg = Debug|Any CPU | ||||
| 		{A0E5BD7D-3910-43BD-BBA3-3820AD524423}.Debug|Any CPU.Build.0 = Debug|Any CPU | ||||
| 		{A0E5BD7D-3910-43BD-BBA3-3820AD524423}.Release|Any CPU.ActiveCfg = Release|Any CPU | ||||
| 		{A0E5BD7D-3910-43BD-BBA3-3820AD524423}.Release|Any CPU.Build.0 = Release|Any CPU | ||||
| 	EndGlobalSection | ||||
| 	GlobalSection(SolutionProperties) = preSolution | ||||
| 		HideSolutionNode = FALSE | ||||
|  | ||||
| @ -1,5 +1,7 @@ | ||||
| using System.Web; | ||||
| #if !NET8 | ||||
| using System.Web.Mvc; | ||||
| #endif | ||||
|  | ||||
| namespace Fab2ApprovalSystem; | ||||
|  | ||||
|  | ||||
| @ -3,13 +3,16 @@ using System.Collections.Generic; | ||||
| using System.Linq; | ||||
| using System.Web; | ||||
| using System.Web.Http; | ||||
| #if !NET8 | ||||
| using System.Web.Mvc; | ||||
| #endif | ||||
| using System.Web.Routing; | ||||
|  | ||||
| namespace Fab2ApprovalSystem; | ||||
|  | ||||
| public class RouteConfig { | ||||
|     public static void RegisterRoutes(RouteCollection routes) { | ||||
| #if !NET8 | ||||
|         routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); | ||||
|  | ||||
|         routes.MapRoute( | ||||
| @ -20,5 +23,6 @@ public class RouteConfig { | ||||
|             // otherwise MVC generates the wrong form action url | ||||
|             defaults: new { controller = "Home", action = "MyTasks", id = UrlParameter.Optional } | ||||
|         ); | ||||
| #endif | ||||
|     } | ||||
| } | ||||
| @ -6,10 +6,12 @@ public static class WebApiConfig { | ||||
|     public static void Register(HttpConfiguration config) { | ||||
|         config.MapHttpAttributeRoutes(); | ||||
|  | ||||
| #if !NET8 | ||||
|         config.Routes.MapHttpRoute( | ||||
|             name: "DefaultApi", | ||||
|             routeTemplate: "api/{controller}/{id}", | ||||
|             defaults: new { id = RouteParameter.Optional } | ||||
|         ); | ||||
| #endif | ||||
|     } | ||||
| } | ||||
| @ -1,9 +1,9 @@ | ||||
|     /*vertical height between form-groups*/ | ||||
|     .my-form .form-group { | ||||
| /*vertical height between form-groups*/ | ||||
| .my-form .form-group { | ||||
|     margin-bottom: 4px; | ||||
|     } | ||||
| } | ||||
|  | ||||
|     @media (min-width:768px) { | ||||
| @media (min-width:768px) { | ||||
|     .my-form .row { | ||||
|         margin-left: -1px; | ||||
|         margin-right: -1px; | ||||
| @ -12,7 +12,8 @@ | ||||
|     .my-form [class*="col-"] { | ||||
|         padding: 0 2px; | ||||
|     } | ||||
|     } | ||||
| } | ||||
|  | ||||
| body { | ||||
|     padding-top: 50px; | ||||
|     padding-bottom: 20px; | ||||
| @ -29,10 +30,10 @@ body { | ||||
| /*input, | ||||
| select | ||||
| { | ||||
|     max-width: 280px; | ||||
| max-width: 280px; | ||||
| }*/ | ||||
|  | ||||
| .row{ | ||||
| .row { | ||||
|     margin-top: 2px; | ||||
|     margin-bottom: 2px | ||||
| } | ||||
| @ -71,10 +72,10 @@ input[type="checkbox"].input-validation-error { | ||||
|     padding-left: 20px; | ||||
|     padding-right: 20px; | ||||
|     background-color: #87b3de; | ||||
|   background-image: -moz-linear-gradient(top,#87b3de, #4d79a5); | ||||
|   background-image: -ms-linear-gradient(top,#87b3de, #4d79a5); | ||||
|   background-image: -webkit-gradient(linear, 0 0, 0 50%, from( #87b3de), to(#4d79a5)); | ||||
|   background-image: -webkit-linear-gradient(top,#87b3de, #4d79a5); | ||||
|     background-image: -moz-linear-gradient(top, #87b3de, #4d79a5); | ||||
|     background-image: -ms-linear-gradient(top, #87b3de, #4d79a5); | ||||
|     background-image: -webkit-gradient(linear, 0 0, 0 50%, from(#87b3de), to(#4d79a5)); | ||||
|     background-image: -webkit-linear-gradient(top, #87b3de, #4d79a5); | ||||
|     background-image: -o-linear-gradient(top, #87b3de, #4d79a5); | ||||
|     background-image: linear-gradient(top, #87b3de, #4d79a5); | ||||
|     background-repeat: repeat-x; | ||||
| @ -89,7 +90,7 @@ input[type="checkbox"].input-validation-error { | ||||
|  | ||||
| .label-color { | ||||
|     background-color: #e5e0e0; | ||||
|     } | ||||
| } | ||||
|  | ||||
| .linkbutton { | ||||
|     display: inline-block; | ||||
| @ -101,6 +102,17 @@ input[type="checkbox"].input-validation-error { | ||||
|     border: 0; | ||||
|     vertical-align: middle; | ||||
| } | ||||
|  | ||||
| .linkbutton.edit { | ||||
|     background: url('/Content/icons/edit.gif'); | ||||
| } | ||||
|  | ||||
| .modal-dialog { | ||||
|     margin-top: 80px; | ||||
| } | ||||
|  | ||||
| .affix { | ||||
|   position: fixed; | ||||
|   top: 55px; | ||||
|   left: 25px; | ||||
| } | ||||
| @ -1,35 +1,49 @@ | ||||
| #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.Collections.Generic; | ||||
| using System.Net; | ||||
| using System.Net.Http; | ||||
| using System.Security.Claims; | ||||
| using System.Text; | ||||
| 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; | ||||
| #endif | ||||
|  | ||||
| namespace Fab2ApprovalSystem.Controllers; | ||||
|  | ||||
| [Authorize] | ||||
| #if NET8 | ||||
| [Route("[controller]")] | ||||
| #endif | ||||
| public class AccountController : Controller { | ||||
|     private string _apiBaseUrl; | ||||
|  | ||||
| #if !NET8 | ||||
|  | ||||
|     public AccountController() | ||||
|         : this(new UserManager<ApplicationUser>(new UserStore<ApplicationUser>(new ApplicationDbContext()))) { | ||||
|         _apiBaseUrl = Environment.GetEnvironmentVariable("FabApprovalApiBaseUrl") ?? | ||||
|             throw new ArgumentNullException("FabApprovalApiBaseUrl environment variable not found"); | ||||
|     } | ||||
|  | ||||
|     public AccountController(UserManager<ApplicationUser> userManager) { | ||||
| @ -38,25 +52,23 @@ public class AccountController : Controller { | ||||
|  | ||||
|     public UserManager<ApplicationUser> UserManager { get; private set; } | ||||
|  | ||||
| #endif | ||||
|  | ||||
| #if !NET8 | ||||
|     // GET: /Account/Login | ||||
|     [AllowAnonymous] | ||||
|     // 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 = "*")] | ||||
| #endif | ||||
|     public ActionResult Login(string returnUrl) { | ||||
|         ViewBag.ReturnUrl = returnUrl; | ||||
|         return View(); | ||||
|     } | ||||
|  | ||||
|     private void SetSessionParameters(LoginResult loginResult, LoginModel user) { | ||||
|         Session["JWT"] = loginResult.AuthTokens.JwtToken; | ||||
|         Session["RefreshToken"] = loginResult.AuthTokens.RefreshToken; | ||||
| #if !NET8 | ||||
|  | ||||
|         Session[GlobalVars.SESSION_USERID] = user.UserID; | ||||
|         Session[GlobalVars.SESSION_USERNAME] = user.FullName; | ||||
|         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); | ||||
|     private void SetSessionParameters(LoginResult loginResult, LoginModel user) { | ||||
|         GlobalVars.SetSessionParameters(GetSession(), loginResult, user); | ||||
|  | ||||
|         FormsAuthentication.SetAuthCookie(user.LoginID, true); | ||||
|     } | ||||
| @ -69,7 +81,7 @@ public class AccountController : Controller { | ||||
|             bool isLoginValid; | ||||
|  | ||||
|             HttpClient httpClient = HttpClientFactory.Create(); | ||||
|             httpClient.BaseAddress = new Uri(_apiBaseUrl); | ||||
|             httpClient.BaseAddress = new Uri(GlobalVars.AppSettings.ApiBaseUrl); | ||||
|  | ||||
|             LoginResult loginResult = await AccountDMO.LoginAsync(httpClient, model); | ||||
|  | ||||
| @ -105,8 +117,8 @@ public class AccountController : Controller { | ||||
|                 ModelState.AddModelError("", "The user name or password provided is incorrect."); | ||||
|             } | ||||
|         } catch (Exception ex) { | ||||
|             Functions.WriteEvent(GlobalVars.AppSettings, @User.Identity.Name + " " + ex.InnerException, System.Diagnostics.EventLogEntryType.Error); | ||||
|             EventLogDMO.Add(new WinEventLog() { IssueID = 99999, UserID = @User.Identity.Name, DocumentType = "Login", OperationType = "Error", Comments = "Reject - " + ex.Message }); | ||||
|             Functions.WriteEvent(GlobalVars.AppSettings, GetUserIdentityName() + " " + ex.InnerException, System.Diagnostics.EventLogEntryType.Error); | ||||
|             EventLogDMO.Add(new WinEventLog() { IssueID = 99999, UserID = GetUserIdentityName(), DocumentType = "Login", OperationType = "Error", Comments = "Reject - " + ex.Message }); | ||||
|             ModelState.AddModelError("", ex.Message); | ||||
|         } | ||||
|  | ||||
| @ -121,7 +133,7 @@ public class AccountController : Controller { | ||||
|             bool isLoginValid; | ||||
|  | ||||
|             HttpClient httpClient = HttpClientFactory.Create(); | ||||
|             httpClient.BaseAddress = new Uri(_apiBaseUrl); | ||||
|             httpClient.BaseAddress = new Uri(GlobalVars.AppSettings.ApiBaseUrl); | ||||
|  | ||||
|             LoginResult loginResult = await AccountDMO.ExternalAuthSetupAsync(httpClient, authAttempt); | ||||
|  | ||||
| @ -161,20 +173,24 @@ public class AccountController : Controller { | ||||
|                 return new HttpResponseMessage(HttpStatusCode.Unauthorized); | ||||
|             } | ||||
|         } catch (Exception ex) { | ||||
|             Functions.WriteEvent(GlobalVars.AppSettings, @User.Identity.Name + " " + ex.InnerException, System.Diagnostics.EventLogEntryType.Error); | ||||
|             EventLogDMO.Add(new WinEventLog() { IssueID = 99999, UserID = @User.Identity.Name, DocumentType = "Login", OperationType = "Error", Comments = "Reject - " + ex.Message }); | ||||
|             Functions.WriteEvent(GlobalVars.AppSettings, GetUserIdentityName() + " " + ex.InnerException, System.Diagnostics.EventLogEntryType.Error); | ||||
|             EventLogDMO.Add(new WinEventLog() { IssueID = 99999, UserID = GetUserIdentityName(), DocumentType = "Login", OperationType = "Error", Comments = "Reject - " + ex.Message }); | ||||
|             ModelState.AddModelError("", ex.Message); | ||||
|  | ||||
|             return new HttpResponseMessage(HttpStatusCode.InternalServerError); | ||||
|         } | ||||
|     } | ||||
|  | ||||
| #endif | ||||
|  | ||||
|     // GET: /Account/Register | ||||
|     [AllowAnonymous] | ||||
|     public ActionResult Register() { | ||||
|         return View(); | ||||
|     } | ||||
|  | ||||
| #if !NET8 | ||||
|  | ||||
|     // POST: /Account/Disassociate | ||||
|     [HttpPost] | ||||
|     [ValidateAntiForgeryToken] | ||||
| @ -189,6 +205,8 @@ public class AccountController : Controller { | ||||
|         return RedirectToAction("Manage", new { Message = message }); | ||||
|     } | ||||
|  | ||||
| #endif | ||||
|  | ||||
|     // GET: /Account/Manage | ||||
| #pragma warning disable IDE0060 // Remove unused parameter | ||||
|     public ActionResult Manage(ManageMessageId? message) { | ||||
| @ -196,6 +214,8 @@ public class AccountController : Controller { | ||||
|     } | ||||
| #pragma warning restore IDE0060 // Remove unused parameter | ||||
|  | ||||
| #if !NET8 | ||||
|  | ||||
|     // POST: /Account/ExternalLogin | ||||
|     [HttpPost] | ||||
|     [AllowAnonymous] | ||||
| @ -226,7 +246,6 @@ public class AccountController : Controller { | ||||
|         return RedirectToAction("Manage", new { Message = ManageMessageId.Error }); | ||||
|     } | ||||
|  | ||||
|     // POST: /Account/LogOff | ||||
|     [HttpPost] | ||||
|     [ValidateAntiForgeryToken] | ||||
|     public ActionResult LogOff() { | ||||
| @ -234,12 +253,15 @@ public class AccountController : Controller { | ||||
|         return RedirectToAction("Login", "Account"); | ||||
|     } | ||||
|  | ||||
|     // GET: /Account/ExternalLoginFailure | ||||
| #endif | ||||
|  | ||||
|     [AllowAnonymous] | ||||
|     public ActionResult ExternalLoginFailure() { | ||||
|         return View(); | ||||
|     } | ||||
|  | ||||
| #if !NET8 | ||||
|  | ||||
|     [ChildActionOnly] | ||||
|     public ActionResult RemoveAccountList() { | ||||
|         IList<UserLoginInfo> linkedAccounts = UserManager.GetLogins(User.Identity.GetUserId()); | ||||
| @ -255,10 +277,14 @@ public class AccountController : Controller { | ||||
|         base.Dispose(disposing); | ||||
|     } | ||||
|  | ||||
| #endif | ||||
|  | ||||
|     #region Helpers | ||||
|     // Used for XSRF protection when adding external logins | ||||
|     private const string XsrfKey = "XsrfId"; | ||||
|  | ||||
| #if !NET8 | ||||
|  | ||||
|     private IAuthenticationManager AuthenticationManager { | ||||
|         get { | ||||
|             return HttpContext.GetOwinContext().Authentication; | ||||
| @ -285,6 +311,8 @@ public class AccountController : Controller { | ||||
|         return false; | ||||
|     } | ||||
|  | ||||
| #endif | ||||
|  | ||||
|     public enum ManageMessageId { | ||||
|         ChangePasswordSuccess, | ||||
|         SetPasswordSuccess, | ||||
| @ -300,7 +328,18 @@ public class AccountController : Controller { | ||||
|         } | ||||
|     } | ||||
|  | ||||
| #if !NET8 | ||||
|  | ||||
|     private class ChallengeResult : HttpUnauthorizedResult { | ||||
|  | ||||
| #endif | ||||
|  | ||||
| #if NET8 | ||||
|  | ||||
|     private class ChallengeResult { | ||||
|  | ||||
| #endif | ||||
|  | ||||
|         public ChallengeResult(string provider, string redirectUri) : this(provider, redirectUri, null) { | ||||
|         } | ||||
|  | ||||
| @ -314,6 +353,8 @@ public class AccountController : Controller { | ||||
|         public string RedirectUri { get; set; } | ||||
|         public string UserId { get; set; } | ||||
|  | ||||
| #if !NET8 | ||||
|  | ||||
|         public override void ExecuteResult(ControllerContext context) { | ||||
|             AuthenticationProperties properties = new AuthenticationProperties() { RedirectUri = RedirectUri }; | ||||
|             if (UserId != null) { | ||||
| @ -321,6 +362,40 @@ public class AccountController : Controller { | ||||
|             } | ||||
|             context.HttpContext.GetOwinContext().Authentication.Challenge(properties, LoginProvider); | ||||
|         } | ||||
|  | ||||
| #endif | ||||
|  | ||||
|     } | ||||
|  | ||||
|     #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.Collections.Generic; | ||||
| using System.Linq; | ||||
| #if !NET8 | ||||
| using System.Web; | ||||
| using System.Web.Mvc; | ||||
| #endif | ||||
|  | ||||
| #if NET8 | ||||
| using Microsoft.AspNetCore.Mvc; | ||||
| using Microsoft.AspNetCore.Authorization; | ||||
| #endif | ||||
|  | ||||
| using Fab2ApprovalSystem.DMO; | ||||
| using Fab2ApprovalSystem.Misc; | ||||
| using Fab2ApprovalSystem.Models; | ||||
| #if !NET8 | ||||
| using System.Linq; | ||||
| using Fab2ApprovalSystem.ViewModels; | ||||
| #endif | ||||
|  | ||||
| #if !NET8 | ||||
| using Kendo.Mvc.Extensions; | ||||
| using Kendo.Mvc.UI; | ||||
| #endif | ||||
|  | ||||
| namespace Fab2ApprovalSystem.Controllers; | ||||
|  | ||||
| [Authorize] | ||||
| #if !NET8 | ||||
| [SessionExpireFilter] | ||||
| #endif | ||||
| #if NET8 | ||||
| [Route("[controller]")] | ||||
| #endif | ||||
| public class AdminController : Controller { | ||||
|     // GET: /Admin/ | ||||
|     UserAccountDMO userDMO = new UserAccountDMO(); | ||||
|     AdminDMO adminDMO = new AdminDMO(); | ||||
|     TrainingDMO trainingDMO = new TrainingDMO(); | ||||
|     LotDispositionDMO ldDMO = new LotDispositionDMO(); | ||||
|     private readonly AppSettings _AppSettings = GlobalVars.AppSettings; | ||||
|     private readonly UserAccountDMO userDMO = new(); | ||||
|     private readonly AdminDMO adminDMO = new(); | ||||
|     private readonly TrainingDMO trainingDMO = new(); | ||||
|     private readonly LotDispositionDMO ldDMO = new(); | ||||
|     private readonly AppSettings? _AppSettings = GlobalVars.AppSettings; | ||||
|  | ||||
|     public ActionResult Index() { | ||||
|         if ((bool)Session[GlobalVars.IS_ADMIN]) { | ||||
|         if (GlobalVars.IsAdmin(GetSession())) { | ||||
|             var model = userDMO.GetAllUsers(); | ||||
|             ViewBag.AllActiveUsers = userDMO.GetAllActiveUsers(); | ||||
|             return View(model); | ||||
| @ -33,8 +49,10 @@ public class AdminController : Controller { | ||||
|             return Content("Not Autthorized"); | ||||
|     } | ||||
|  | ||||
| #if !NET8 | ||||
|  | ||||
|     public ActionResult AssignRoles() { | ||||
|         if ((bool)Session[GlobalVars.IS_ADMIN]) { | ||||
|         if (GlobalVars.IsAdmin(GetSession())) { | ||||
|             ViewBag.ToplevelNode = GetRoles_SubRolesList(); | ||||
|             return View(); | ||||
|         } else | ||||
| @ -43,36 +61,33 @@ public class AdminController : Controller { | ||||
|  | ||||
|     public ActionResult GetAllUserList([DataSourceRequest] DataSourceRequest request) { | ||||
|         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) { | ||||
|         return Json(userDMO.GetAllUsers().ToDataSourceResult(request)); | ||||
|         return GetJsonResult(userDMO.GetAllUsers().ToDataSourceResult(request)); | ||||
|     } | ||||
|  | ||||
| #endif | ||||
|  | ||||
|     public JsonResult GetAllUserListBySubRole(int subRole) { | ||||
|         IEnumerable<LoginModel> userlist = adminDMO.GetAllUsersBySubRole(subRole); | ||||
|         return Json(userlist, JsonRequestBehavior.AllowGet); | ||||
|         return GetJsonResult(userlist); | ||||
|     } | ||||
|  | ||||
|     public JsonResult AllSubRoles(string showInactiveRoles = "") { | ||||
|         List<ParentChildModel> newRoles = adminDMO.GetAllSubRoles(showInactiveRoles); | ||||
|  | ||||
|         return Json(newRoles, JsonRequestBehavior.AllowGet); | ||||
|         return GetJsonResult(newRoles); | ||||
|     } | ||||
|  | ||||
| #if !NET8 | ||||
|  | ||||
|     public ActionResult GetSubRoleListByUserId([DataSourceRequest] DataSourceRequest request, string userId) { | ||||
|         int userIdInt = Convert.ToInt32(userId); | ||||
|  | ||||
|         return Json(adminDMO.GetUserSubRoles(userIdInt).ToDataSourceResult(request)); | ||||
|     } | ||||
|  | ||||
|     /// <summary> | ||||
|     /// OBSOLETE FUNCTION BELOW FOR THE KENDO TREEVIEW  | ||||
|     /// </summary> | ||||
|     private IEnumerable<TreeViewItemModel> GetRoles_SubRolesList() { | ||||
|         List<Role> roles = adminDMO.GetSubRoles(); | ||||
|  | ||||
| @ -103,6 +118,8 @@ public class AdminController : Controller { | ||||
|         return ToplevelNode; | ||||
|     } | ||||
|  | ||||
| #endif | ||||
|  | ||||
|     public ActionResult AddUserRoles(int subRole, string users) { | ||||
|         adminDMO.AddUserRoles(subRole, users); | ||||
|         return View(); | ||||
| @ -128,6 +145,8 @@ public class AdminController : Controller { | ||||
|         return View(); | ||||
|     } | ||||
|  | ||||
| #if !NET8 | ||||
|  | ||||
|     // POST: /Workflow/Create | ||||
|     [HttpPost] | ||||
|     public ActionResult Create(FormCollection collection) { | ||||
| @ -154,12 +173,16 @@ public class AdminController : Controller { | ||||
|         return Json(new[] { model }.ToDataSourceResult(request, ModelState)); | ||||
|     } | ||||
|  | ||||
| #endif | ||||
|  | ||||
|     public ActionResult DeleteUser(string userId) { | ||||
|         LoginModel loginModel = userDMO.GetUserByID(Convert.ToInt32(userId)); | ||||
|         adminDMO.DeleteUser(userDMO, trainingDMO, loginModel); | ||||
|         return Content("Success"); | ||||
|     } | ||||
|  | ||||
| #if !NET8 | ||||
|  | ||||
|     [AcceptVerbs(HttpVerbs.Post)] | ||||
|     public ActionResult InsertUser([DataSourceRequest] DataSourceRequest request, LoginModel model) { | ||||
|         try { | ||||
| @ -174,6 +197,8 @@ public class AdminController : Controller { | ||||
|         return Json(new[] { model }.ToDataSourceResult(request, ModelState)); | ||||
|     } | ||||
|  | ||||
| #endif | ||||
|  | ||||
|     public ActionResult EnableOOOStatus(int oooUserID, int delegatedTo, DateTime startDate, DateTime endDate) { | ||||
|         int returnValue = MiscDMO.EnableOOOStatus(oooUserID, delegatedTo, startDate, endDate); | ||||
|         if (returnValue == 3) // the delegator is already a delegator to someone else | ||||
| @ -191,7 +216,7 @@ public class AdminController : Controller { | ||||
|     } | ||||
|  | ||||
|     public ActionResult ManageTrainingGroups() { | ||||
|         if ((bool)Session[GlobalVars.IS_ADMIN]) { | ||||
|         if (GlobalVars.IsAdmin(GetSession())) { | ||||
|             ViewBag.AllGroups = GetTrainingGroups(); | ||||
|             return View(); | ||||
|         } else | ||||
| @ -212,15 +237,17 @@ public class AdminController : Controller { | ||||
|         return TrainingGroups; | ||||
|     } | ||||
|  | ||||
| #if !NET8 | ||||
|  | ||||
|     public ActionResult GetTaskListByUser([DataSourceRequest] DataSourceRequest request, string userId) { | ||||
|         IEnumerable<IssuesViewModel> data = ldDMO.GetTaskList(Convert.ToInt32(userId)); | ||||
|         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) { | ||||
|         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) { | ||||
| @ -232,6 +259,8 @@ public class AdminController : Controller { | ||||
|         } | ||||
|     } | ||||
|  | ||||
| #endif | ||||
|  | ||||
|     public ActionResult DeleteTrainingGroup(int groupID) { | ||||
|         try { | ||||
|             adminDMO.DeleteTrainingGroup(groupID); | ||||
| @ -246,6 +275,8 @@ public class AdminController : Controller { | ||||
|         return View(); | ||||
|     } | ||||
|  | ||||
| #if !NET8 | ||||
|  | ||||
|     public ActionResult TrainingGroupPartial(int TrainingGroupID) { | ||||
|         ViewBag.AllUsers = userDMO.GetAllActiveUsers(); | ||||
|         ViewBag.TrainingGroupId = TrainingGroupID; | ||||
| @ -263,6 +294,8 @@ public class AdminController : Controller { | ||||
|         return Json(new { test = "Succesfully saved" }); | ||||
|     } | ||||
|  | ||||
| #endif | ||||
|  | ||||
|     public ActionResult DeleteFromGroup(int userId, int groupId) { | ||||
|         try { | ||||
|             adminDMO.DeleteFromGroup(userId, groupId); | ||||
| @ -274,7 +307,7 @@ public class AdminController : Controller { | ||||
|     } | ||||
|  | ||||
|     public ActionResult JobSchedulerConfiguration() { | ||||
|         if ((bool)Session[GlobalVars.IS_ADMIN]) { | ||||
|         if (GlobalVars.IsAdmin(GetSession())) { | ||||
|             return View(); | ||||
|         } else | ||||
|             return Content("Not Autthorized"); | ||||
| @ -283,7 +316,7 @@ public class AdminController : Controller { | ||||
|     public ActionResult TrainingReportConfig() { | ||||
|         ViewBag.AllUsers = userDMO.GetAllActiveUsers(); | ||||
|         List<TrainingReportUser> currentTrainingReportUsersIds = adminDMO.GetTrainingReportUsers(); | ||||
|         List<LoginModel> currentTrainingReportUsers = new List<LoginModel>(); | ||||
|         List<LoginModel> currentTrainingReportUsers = new(); | ||||
|  | ||||
|         foreach (TrainingReportUser id in currentTrainingReportUsersIds) { | ||||
|             currentTrainingReportUsers.Add(userDMO.GetUserByID(id.UserId)); | ||||
| @ -292,10 +325,12 @@ public class AdminController : Controller { | ||||
|         return PartialView(); | ||||
|     } | ||||
|  | ||||
| #if !NET8 | ||||
|  | ||||
|     public ActionResult TECNNotificationConfig() { | ||||
|         ViewBag.AllUsers = userDMO.GetAllActiveUsers(); | ||||
|         List<TECNNotificationsUser> currentTECNNotificationUsersIds = adminDMO.GetTECNNotificationUsers(); | ||||
|         List<LoginModel> currentTECNNotificationUsers = new List<LoginModel>(); | ||||
|         List<LoginModel> currentTECNNotificationUsers = new(); | ||||
|  | ||||
|         foreach (TECNNotificationsUser id in currentTECNNotificationUsersIds) { | ||||
|             currentTECNNotificationUsers.Add(userDMO.GetUserByID(id.UserId)); | ||||
| @ -304,8 +339,10 @@ public class AdminController : Controller { | ||||
|         return PartialView(); | ||||
|     } | ||||
|  | ||||
| #endif | ||||
|  | ||||
|     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 | ||||
|             bool userExists = false; | ||||
|             List<TrainingReportUser> existingUsers = adminDMO.GetTrainingReportUsers(); | ||||
| @ -329,8 +366,10 @@ public class AdminController : Controller { | ||||
|         } | ||||
|     } | ||||
|  | ||||
| #if !NET8 | ||||
|  | ||||
|     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 | ||||
|             bool userExists = false; | ||||
|             List<TECNNotificationsUser> existingUsers = adminDMO.GetTECNNotificationUsers(); | ||||
| @ -360,8 +399,10 @@ public class AdminController : Controller { | ||||
|         } | ||||
|     } | ||||
|  | ||||
| #endif | ||||
|  | ||||
|     public ActionResult DeleteFromTrainingReport(int userId) { | ||||
|         if ((bool)Session[GlobalVars.IS_ADMIN]) { | ||||
|         if (GlobalVars.IsAdmin(GetSession())) { | ||||
|             try { | ||||
|                 adminDMO.TrainingReportDeleteUser(userId); | ||||
|                 return Content("Successfully Deleted"); | ||||
| @ -374,7 +415,7 @@ public class AdminController : Controller { | ||||
|     } | ||||
|  | ||||
|     public ActionResult DeleteFromTECNNotification(int userId) { | ||||
|         if ((bool)Session[GlobalVars.IS_ADMIN]) { | ||||
|         if (GlobalVars.IsAdmin(GetSession())) { | ||||
|             try { | ||||
|                 adminDMO.TECNExpirationDeleteUser(userId); | ||||
|                 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.Collections.Generic; | ||||
| using System.Configuration; | ||||
| using System.Linq; | ||||
| #if !NET8 | ||||
| using System.Web; | ||||
| using System.Web.Mvc; | ||||
| #endif | ||||
|  | ||||
| #if NET8 | ||||
| using Microsoft.AspNetCore.Mvc; | ||||
| using Microsoft.AspNetCore.Authorization; | ||||
| #endif | ||||
|  | ||||
| using Fab2ApprovalSystem.DMO; | ||||
| using Fab2ApprovalSystem.Misc; | ||||
| using Fab2ApprovalSystem.Models; | ||||
| #if !NET8 | ||||
| using System.Configuration; | ||||
| using System.Linq; | ||||
| using Fab2ApprovalSystem.Utilities; | ||||
| #endif | ||||
|  | ||||
| #if !NET8 | ||||
| using Kendo.Mvc.Extensions; | ||||
| using Kendo.Mvc.UI; | ||||
| #endif | ||||
|  | ||||
| namespace Fab2ApprovalSystem.Controllers; | ||||
|  | ||||
| [Authorize] | ||||
| #if !NET8 | ||||
| [OutputCache(NoStore = true, Duration = 0, VaryByParam = "*")] | ||||
| [SessionExpireFilter] | ||||
| #endif | ||||
| #if NET8 | ||||
| [Route("[controller]")] | ||||
| #endif | ||||
| public class AuditController : Controller { | ||||
|  | ||||
|     AuditDMO auditDMO = new AuditDMO(GlobalVars.AppSettings); | ||||
|     CorrectiveActionDMO caDMO = new CorrectiveActionDMO(); | ||||
|     private readonly AuditDMO auditDMO = new(GlobalVars.AppSettings); | ||||
|     private readonly CorrectiveActionDMO caDMO = new(); | ||||
|     private readonly AppSettings _AppSettings = GlobalVars.AppSettings; | ||||
|  | ||||
|     // GET: Audit | ||||
| @ -30,11 +46,11 @@ public class AuditController : Controller { | ||||
|     } | ||||
|  | ||||
|     public ActionResult Create() { | ||||
|         Audit audit = new Audit(); | ||||
|         Audit audit = new(); | ||||
|         try { | ||||
|             // TODO: Add insert logic here | ||||
|  | ||||
|             audit.OriginatorID = (int)Session[GlobalVars.SESSION_USERID]; | ||||
|             audit.OriginatorID = GlobalVars.GetUserId(GetSession()); | ||||
|             auditDMO.InsertAudit(audit); | ||||
|             return RedirectToAction("Edit", new { issueID = audit.AuditNo }); | ||||
|         } catch (Exception e) { | ||||
| @ -45,19 +61,20 @@ public class AuditController : Controller { | ||||
|                 detailedException = e.Message; | ||||
|             } | ||||
|             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); | ||||
|             EventLogDMO.Add(new WinEventLog() { IssueID = audit.AuditNo, UserID = @User.Identity.Name, DocumentType = "Audit", OperationType = "Error", Comments = "SubmitDocument - " + exceptionString }); | ||||
|             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 = GetUserIdentityName(), DocumentType = "Audit", OperationType = "Error", Comments = "SubmitDocument - " + exceptionString }); | ||||
|             throw new Exception(e.Message); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     public ActionResult Edit(int issueID) { | ||||
|         int isITARCompliant = 1; | ||||
|         Audit audit = new Audit(); | ||||
|         Audit audit = new(); | ||||
|  | ||||
|         try { | ||||
|             bool isAdmin = (bool)Session[GlobalVars.IS_ADMIN]; | ||||
|             int userId = (int)Session[GlobalVars.SESSION_USERID]; | ||||
|             bool isAdmin = GlobalVars.IsAdmin(GetSession()); | ||||
|             int userId = GlobalVars.GetUserId(GetSession()); | ||||
|             audit = auditDMO.GetAuditItem(issueID, userId); | ||||
|             AuditEdit auditEdit = auditDMO.GetAuditEdit(issueID, audit, isAdmin, userId); | ||||
|             if (auditEdit.RedirectToAction) | ||||
|                 return RedirectToAction("ReadOnlyAudit", new { auditNo = audit.AuditNo }); | ||||
| @ -80,8 +97,8 @@ public class AuditController : Controller { | ||||
|                 detailedException = e.Message; | ||||
|             } | ||||
|             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); | ||||
|             EventLogDMO.Add(new WinEventLog() { IssueID = audit.AuditNo, UserID = @User.Identity.Name, DocumentType = "Audit", OperationType = "Error", Comments = "Edit - " + exceptionString }); | ||||
|             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 = GetUserIdentityName(), DocumentType = "Audit", OperationType = "Error", Comments = "Edit - " + exceptionString }); | ||||
|             throw new Exception(e.Message); | ||||
|         } | ||||
|  | ||||
| @ -92,7 +109,7 @@ public class AuditController : Controller { | ||||
|     public ActionResult Edit(Audit model) { | ||||
|         try { | ||||
|             var data = model; | ||||
|             auditDMO.UpdateAudit(model, (int)Session[GlobalVars.SESSION_USERID]); | ||||
|             auditDMO.UpdateAudit(model, GlobalVars.GetUserId(GetSession())); | ||||
|         } catch (Exception ex) { | ||||
|             return Content(ex.Message); | ||||
|         } | ||||
| @ -112,8 +129,8 @@ public class AuditController : Controller { | ||||
|     } | ||||
|  | ||||
|     public ActionResult ReadOnlyAudit(int auditNo) { | ||||
|         Audit audit = new Audit(); | ||||
|         audit = auditDMO.GetAuditItemReadOnly(auditNo, (int)Session[GlobalVars.SESSION_USERID]); | ||||
|         Audit audit = new(); | ||||
|         audit = auditDMO.GetAuditItemReadOnly(auditNo, GlobalVars.GetUserId(GetSession())); | ||||
|  | ||||
|         ViewBag.AuditTypeList = auditDMO.GetAuditTypeList(); | ||||
|         ViewBag.AuditorList = auditDMO.GetAuditorList(); | ||||
| @ -123,11 +140,13 @@ public class AuditController : Controller { | ||||
|         return View(audit); | ||||
|     } | ||||
|  | ||||
| #if !NET8 | ||||
|  | ||||
|     public ActionResult AuditReportAttachSave(IEnumerable<HttpPostedFileBase> AuditReportFiles, int auditNo) { | ||||
|         try { | ||||
|             // The Name of the Upload component is "files" | ||||
|             if (AuditReportFiles != null) { | ||||
|                 int userId = (int)Session[GlobalVars.SESSION_USERID]; | ||||
|                 int userId = GlobalVars.GetUserId(GetSession()); | ||||
|                 foreach (var file in AuditReportFiles) { | ||||
|                     AuditHelper.AuditReportAttachSave(_AppSettings, auditDMO, auditNo, userId, file.FileName, file.InputStream); | ||||
|                 } | ||||
| @ -144,6 +163,8 @@ public class AuditController : Controller { | ||||
|         return Json(auditDMO.GetAuditReportAttachments(auditNo).ToDataSourceResult(request)); | ||||
|     } | ||||
|  | ||||
| #endif | ||||
|  | ||||
|     [HttpPost] | ||||
|     public void DeleteAuditReportAttachment(int attachID) { | ||||
|         auditDMO.DeleteAuditReportAttachment(attachID); | ||||
| @ -172,18 +193,21 @@ public class AuditController : Controller { | ||||
|         } | ||||
|     } | ||||
|  | ||||
| #if !NET8 | ||||
|  | ||||
|     public ActionResult GetAuditFindingsList([DataSourceRequest] DataSourceRequest request, int auditNo) { | ||||
|         return Json(auditDMO.GetAuditFindingsList(auditNo).ToDataSourceResult(request)); | ||||
|     } | ||||
|  | ||||
| #endif | ||||
|  | ||||
|     public ActionResult InsertAuditFindingsItem(AuditFindings data) { | ||||
|         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."); | ||||
|         } else { | ||||
|             int userId = (int)Session[GlobalVars.SESSION_USERID]; | ||||
|             int userId = GlobalVars.GetUserId(GetSession()); | ||||
|             Audit audit = auditDMO.InsertAndGetAudit(caDMO, data, userId); | ||||
|  | ||||
|             return Json(audit, JsonRequestBehavior.AllowGet); | ||||
|             return GetJsonResult(audit); | ||||
|         } | ||||
|     } | ||||
|  | ||||
| @ -191,25 +215,24 @@ public class AuditController : Controller { | ||||
|         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."); | ||||
|         } else { | ||||
|             int userId = (int)Session[GlobalVars.SESSION_USERID]; | ||||
|             int userId = GlobalVars.GetUserId(GetSession()); | ||||
|             Audit audit = auditDMO.UpdateAndGetAudit(caDMO, data, userId); | ||||
|  | ||||
|             return Json(audit, JsonRequestBehavior.AllowGet); | ||||
|             return GetJsonResult(audit); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     public ActionResult DeleteAuditFindingsItem(int auditFindingsID) { | ||||
|         int userId = (int)Session[GlobalVars.SESSION_USERID]; | ||||
|         int userId = GlobalVars.GetUserId(GetSession()); | ||||
|         Audit audit = auditDMO.DeleteAndGetAudit(auditFindingsID, userId); | ||||
|         return Json(audit, JsonRequestBehavior.AllowGet); | ||||
|         return GetJsonResult(audit); | ||||
|     } | ||||
|  | ||||
|     public void ReleaseLockOnDocument(int issueID) { | ||||
|         try { | ||||
|             auditDMO.ReleaseLockOnDocument((int)Session[GlobalVars.SESSION_USERID], issueID); | ||||
|             auditDMO.ReleaseLockOnDocument(GlobalVars.GetUserId(GetSession()), issueID); | ||||
|         } catch (Exception e) { | ||||
|             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 { } | ||||
|             auditDMO.ReleaseLockOnDocument(-1, issueID); | ||||
|         } | ||||
| @ -236,6 +259,8 @@ public class AuditController : Controller { | ||||
|         return Content(""); | ||||
|     } | ||||
|  | ||||
| #if !NET8 | ||||
|  | ||||
|     public ActionResult GetCAFindingsList([DataSourceRequest] DataSourceRequest request, int auditNo) { | ||||
|         return Json(auditDMO.GetCAFindingsList(auditNo).ToDataSourceResult(request)); | ||||
|     } | ||||
| @ -244,8 +269,10 @@ public class AuditController : Controller { | ||||
|         return Json(auditDMO.GetCAFindingsItemAttachments(caFindingsID).ToDataSourceResult(request)); | ||||
|     } | ||||
|  | ||||
| #endif | ||||
|  | ||||
|     public ActionResult GetCAFindingsItem(int caFindingsID) { | ||||
|         var model = new CAFindings(); | ||||
|         CAFindings model = new(); | ||||
|         model = auditDMO.GetCAFindingsItem(caFindingsID); | ||||
|  | ||||
|         return PartialView("_CAFindingsAttachment", model); | ||||
| @ -256,11 +283,13 @@ public class AuditController : Controller { | ||||
|         auditDMO.DeleteCAFindingsItem(caFindingsID); | ||||
|     } | ||||
|  | ||||
| #if !NET8 | ||||
|  | ||||
|     public ActionResult SaveCAFindings_Attachemnt(IEnumerable<HttpPostedFileBase> CAFindings_Attachemnt, int caFindingsID, int auditNo) { | ||||
|         try { | ||||
|             // The Name of the Upload component is "files" | ||||
|             if (CAFindings_Attachemnt != null) { | ||||
|                 int userId = (int)Session[GlobalVars.SESSION_USERID]; | ||||
|                 int userId = GlobalVars.GetUserId(GetSession()); | ||||
|                 foreach (var file in CAFindings_Attachemnt) { | ||||
|                     AuditHelper.SaveAndInsert(_AppSettings, auditDMO, caFindingsID, auditNo, userId, file.FileName, file.InputStream); | ||||
|                 } | ||||
| @ -272,12 +301,14 @@ public class AuditController : Controller { | ||||
|         return Content(""); | ||||
|     } | ||||
|  | ||||
| #endif | ||||
|  | ||||
|     public void NotifyActionItemOwner(int issueID, DateTime? dueDate, int? responsibleOwnerID) { | ||||
|         try { | ||||
|             string email = auditDMO.NotifyActionItemOwner(issueID, dueDate, responsibleOwnerID, _AppSettings.EmailTemplatesPath); | ||||
|  | ||||
|             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 (Exception e) { | ||||
|             string detailedException = ""; | ||||
| @ -288,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(); | ||||
|             Functions.WriteEvent(_AppSettings, @User.Identity.Name + "\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 }); | ||||
|             Functions.WriteEvent(_AppSettings, GetUserIdentityName() + "\r\n 5s/CAFindings - NotifyActionItemOwner\r\n" + detailedException, System.Diagnostics.EventLogEntryType.Error); | ||||
|             EventLogDMO.Add(new WinEventLog() { IssueID = issueID, UserID = GetUserIdentityName(), DocumentType = "Corrective Action", OperationType = "Error", Comments = "5s/CAFindings Notification - " + exceptionString }); | ||||
|         } | ||||
|     } | ||||
|  | ||||
| @ -297,4 +328,33 @@ public class AuditController : Controller { | ||||
|         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.Collections.Generic; | ||||
| using System.Linq; | ||||
| #if !NET8 | ||||
| using System.Web; | ||||
| using System.Web.Mvc; | ||||
| using System.Web.Services; | ||||
| #endif | ||||
|  | ||||
| #if NET8 | ||||
| using Microsoft.AspNetCore.Mvc; | ||||
| using Microsoft.AspNetCore.Authorization; | ||||
| #endif | ||||
|  | ||||
| using Fab2ApprovalSystem.DMO; | ||||
| using Fab2ApprovalSystem.Misc; | ||||
| using Fab2ApprovalSystem.Models; | ||||
| using Fab2ApprovalSystem.ViewModels; | ||||
|  | ||||
| #if !NET8 | ||||
| using Kendo.Mvc.Extensions; | ||||
| using Kendo.Mvc.UI; | ||||
| #endif | ||||
|  | ||||
| namespace Fab2ApprovalSystem.Controllers; | ||||
|  | ||||
| [Authorize] | ||||
| #if !NET8 | ||||
| [OutputCache(NoStore = true, Duration = 0, VaryByParam = "*")] | ||||
| [SessionExpireFilter] | ||||
| #endif | ||||
| #if NET8 | ||||
| [Route("[controller]")] | ||||
| #endif | ||||
| public class ChangeControlController : Controller { | ||||
|  | ||||
|     ChangeControlDMO ccDMO = new ChangeControlDMO(); | ||||
|     private readonly AppSettings _AppSettings = GlobalVars.AppSettings; | ||||
|     private readonly ChangeControlDMO ccDMO = new(); | ||||
|     private readonly AppSettings? _AppSettings = GlobalVars.AppSettings; | ||||
|  | ||||
|     public ActionResult Index() { | ||||
|         return View(); | ||||
|     } | ||||
|  | ||||
|     public ActionResult Create() { | ||||
|         ChangeControlViewModel cc = new ChangeControlViewModel(); | ||||
|         ChangeControlViewModel cc = new(); | ||||
|         try { | ||||
|             cc.OwnerID = (int)Session[GlobalVars.SESSION_USERID]; | ||||
|             cc.OwnerID = GlobalVars.GetUserId(GetSession()); | ||||
|             ccDMO.InsertChangeControl(cc); | ||||
|             return RedirectToAction("Edit", new { issueID = cc.PlanNumber }); | ||||
|         } catch (Exception e) { | ||||
| @ -41,74 +55,37 @@ public class ChangeControlController : Controller { | ||||
|                 detailedException = e.Message; | ||||
|             } | ||||
|             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); | ||||
|             EventLogDMO.Add(new WinEventLog() { IssueID = cc.PlanNumber, UserID = @User.Identity.Name, DocumentType = "Change Control", OperationType = "Error", Comments = "Create - " + exceptionString }); | ||||
|             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 = GetUserIdentityName(), DocumentType = "Change Control", OperationType = "Error", Comments = "Create - " + exceptionString }); | ||||
|             throw new Exception(e.Message); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     public ActionResult Edit(int issueID) { | ||||
|         int isITARCompliant = 1; | ||||
|         ChangeControlViewModel cc = new ChangeControlViewModel(); | ||||
|         cc = ccDMO.GetChangeControlRead(issueID, out isITARCompliant, (int)Session[GlobalVars.SESSION_USERID]); | ||||
|         string jwt = GlobalVars.GetJWT(GetSession()); | ||||
|         string encodedJwt = System.Net.WebUtility.UrlEncode(jwt); | ||||
|         string refreshToken = GlobalVars.GetRefreshToken(GetSession()); | ||||
|         string encodedRefreshToken = System.Net.WebUtility.UrlEncode(refreshToken); | ||||
|         string mrbUrl = $"{GlobalVars.AppSettings.WasmClientUrl}/redirect?jwt={encodedJwt}&refreshToken={encodedRefreshToken}&redirectPath=pcrb/{issueID}"; | ||||
|  | ||||
|         List<ApproversListViewModel> userList = MiscDMO.GetApproversListByDocument(cc.PlanNumber, cc.CurrentStep, (int)GlobalVars.DocumentType.ChangeControl); | ||||
|         ApproversListViewModel appUser = userList.Find(delegate (ApproversListViewModel al) { return al.UserID == (int)Session[GlobalVars.SESSION_USERID]; }); | ||||
|         if (appUser != null) { | ||||
|             ViewBag.IsApprover = "true"; | ||||
|         } | ||||
|         // TODO locked functionality | ||||
|  | ||||
|         if (isITARCompliant == 0) // not ITAR Compliant | ||||
|         { | ||||
|             return View("UnAuthorizedAccess"); | ||||
|         } else { | ||||
|             if ((int)Session[GlobalVars.SESSION_USERID] == cc.OwnerID) | ||||
|                 ViewBag.IsOriginator = "true"; | ||||
|             else | ||||
|                 ViewBag.IsOriginator = "false"; | ||||
|  | ||||
|             if ((cc.RecordLockIndicator && cc.RecordLockedBy != (int)Session[GlobalVars.SESSION_USERID]) || | ||||
|                 cc.ClosedDate != null) { | ||||
|                 return RedirectToAction("ReadOnlyCC", new { issueID = issueID }); | ||||
|             } else { | ||||
|                 cc = ccDMO.GetChangeControl(issueID, out isITARCompliant, (int)Session[GlobalVars.SESSION_USERID]); | ||||
|                 ViewBag.Attendees = ccDMO.GetUsers(); | ||||
|                 ViewBag.Generations = ccDMO.GetGenerations(); | ||||
|                 ViewBag.PartNumbers = ccDMO.GetPartNumbers(); | ||||
|                 ViewBag.Processes = ccDMO.GetProcesses(); | ||||
|                 ViewBag.Logistics = ccDMO.GetLogistics(); | ||||
|                 ViewBag.AIResponsibles = ccDMO.GetActionItemResponsible(); | ||||
|                 ViewBag.Sites = ccDMO.GetSites(); | ||||
|                 return View(cc); | ||||
|             } | ||||
|         } | ||||
|         return Redirect(mrbUrl); | ||||
|     } | ||||
|  | ||||
|     public ActionResult ReadOnlyCC(int issueID) { | ||||
|         int isITARCompliant = 1; | ||||
|         ChangeControlViewModel cc = new ChangeControlViewModel(); | ||||
|         cc = ccDMO.GetChangeControlRead(issueID, out isITARCompliant, (int)Session[GlobalVars.SESSION_USERID]); | ||||
|         // TODO locked functionality | ||||
|         string jwt = GlobalVars.GetJWT(GetSession()); | ||||
|         string encodedJwt = System.Net.WebUtility.UrlEncode(jwt); | ||||
|         string refreshToken = GlobalVars.GetRefreshToken(GetSession()); | ||||
|         string encodedRefreshToken = System.Net.WebUtility.UrlEncode(refreshToken); | ||||
|         string mrbUrl = $"{GlobalVars.AppSettings.WasmClientUrl}/redirect?jwt={encodedJwt}&refreshToken={encodedRefreshToken}&redirectPath=pcrb/{issueID}"; | ||||
|  | ||||
|         if (isITARCompliant == 0) // not ITAR Compliant | ||||
|         { | ||||
|             return View("UnAuthorizedAccess"); | ||||
|         } else { | ||||
|             ViewBag.MeetingList = ccDMO.GetMeetingList(issueID); | ||||
|             ViewBag.Generations = ccDMO.GetGenerations(); | ||||
|             ViewBag.PartNumbers = ccDMO.GetPartNumbers(); | ||||
|             ViewBag.Processes = ccDMO.GetProcesses(); | ||||
|             ViewBag.Logistics = ccDMO.GetLogistics(); | ||||
|             return View(cc); | ||||
|         } | ||||
|         return Redirect(mrbUrl); | ||||
|     } | ||||
|  | ||||
|     [HttpPost] | ||||
|     public ActionResult Edit(ChangeControlViewModel model) { | ||||
|         try { | ||||
|             var data = model; | ||||
|             ccDMO.UpdateChangeControl(model, (int)Session[GlobalVars.SESSION_USERID]); | ||||
|             ccDMO.UpdateChangeControl(model, GlobalVars.GetUserId(GetSession())); | ||||
|             ViewBag.AIResponsibles = ccDMO.GetActionItemResponsible(); | ||||
|         } catch (Exception ex) { | ||||
|             return Content(ex.Message); | ||||
| @ -130,10 +107,12 @@ public class ChangeControlController : Controller { | ||||
|     } | ||||
|  | ||||
|     public JsonResult SearchParts(string searchText) { | ||||
|         List<String> partList = MiscDMO.SearchLTParts(searchText.Trim()).Select(x => x.WIPPartData).ToList<String>(); | ||||
|         return Json(partList, JsonRequestBehavior.AllowGet); | ||||
|         List<string> partList = MiscDMO.SearchLTParts(searchText.Trim()).Select(x => x.WIPPartData).ToList(); | ||||
|         return GetJsonResult(partList); | ||||
|     } | ||||
|  | ||||
| #if !NET8 | ||||
|  | ||||
|     public ActionResult GetCCAttachments([DataSourceRequest] DataSourceRequest request, int planNumber) { | ||||
|         return Json(ccDMO.GetCCAttachment(planNumber).ToDataSourceResult(request)); | ||||
|     } | ||||
| @ -167,7 +146,7 @@ public class ChangeControlController : Controller { | ||||
|     public ActionResult AttachSaveCC(IEnumerable<HttpPostedFileBase> files, int planNumber, int attachID) { | ||||
|         // The Name of the Upload component is "files" | ||||
|         if (files != null) { | ||||
|             int userId = (int)Session[GlobalVars.SESSION_USERID]; | ||||
|             int userId = GlobalVars.GetUserId(GetSession()); | ||||
|             foreach (var file in files) { | ||||
|                 ChangeControlHelper.AttachSaveCC(_AppSettings, ccDMO, planNumber, attachID, userId, file.FileName, file.InputStream); | ||||
|             } | ||||
| @ -182,6 +161,7 @@ public class ChangeControlController : Controller { | ||||
|     public ActionResult GetMeetingAttachments([DataSourceRequest] DataSourceRequest request, int meetingID) { | ||||
|         return Json(ccDMO.GetMeetingAttachments(meetingID).ToDataSourceResult(request)); | ||||
|     } | ||||
|  | ||||
|     public ActionResult GetPCRB([DataSourceRequest] DataSourceRequest request, int PlanNumber, string PCRB) { | ||||
|         return Json(ccDMO.GetPCRB(PlanNumber, PCRB).ToDataSourceResult(request)); | ||||
|     } | ||||
| @ -214,7 +194,7 @@ public class ChangeControlController : Controller { | ||||
|     public ActionResult AttachSaveMeeting(IEnumerable<HttpPostedFileBase> files, int planNumber, int meetingID, int attachID) { | ||||
|         // The Name of the Upload component is "files" | ||||
|         if (files != null) { | ||||
|             int userId = (int)Session[GlobalVars.SESSION_USERID]; | ||||
|             int userId = GlobalVars.GetUserId(GetSession()); | ||||
|             foreach (var file in files) { | ||||
|                 ChangeControlHelper.AttachSaveMeeting(_AppSettings, ccDMO, planNumber, attachID, userId, file.FileName, file.InputStream); | ||||
|             } | ||||
| @ -222,6 +202,8 @@ public class ChangeControlController : Controller { | ||||
|         return Content(""); | ||||
|     } | ||||
|  | ||||
| #endif | ||||
|  | ||||
|     public FileResult DownloadCCFile(string fileGuid, int planNumber) { | ||||
|         string fileName = ccDMO.GetCCFileName(fileGuid); | ||||
|  | ||||
| @ -256,20 +238,20 @@ public class ChangeControlController : Controller { | ||||
|                 detailedException = e.Message; | ||||
|             } | ||||
|             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); | ||||
|             EventLogDMO.Add(new WinEventLog() { IssueID = planNumber, UserID = @User.Identity.Name, DocumentType = "Meeting", OperationType = "Error", Comments = "Create - " + exceptionString }); | ||||
|             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 = GetUserIdentityName(), DocumentType = "Meeting", OperationType = "Error", Comments = "Create - " + exceptionString }); | ||||
|             throw new Exception("Error: " + e.Message); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     public ActionResult EditMeeting(int meetingID) { | ||||
|         int isITARCompliant = 1; | ||||
|         CCMeeting meeting = new CCMeeting(); | ||||
|         meeting = ccDMO.GetMeetingRead(meetingID, out isITARCompliant, (int)Session[GlobalVars.SESSION_USERID]); | ||||
|         CCMeeting meeting = new(); | ||||
|         meeting = ccDMO.GetMeetingRead(meetingID, out isITARCompliant, GlobalVars.GetUserId(GetSession())); | ||||
|         ViewBag.MeetingList = ccDMO.GetMeetingList(meeting.PlanNumber); | ||||
|         // TODO locked functionality | ||||
|         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) { | ||||
|             ViewBag.IsApprover = "true"; | ||||
|         } | ||||
| @ -278,7 +260,7 @@ public class ChangeControlController : Controller { | ||||
|         { | ||||
|             return View("UnAuthorizedAccess"); | ||||
|         } else { | ||||
|             if ((meeting.RecordLockIndicator && meeting.RecordLockedBy != (int)Session[GlobalVars.SESSION_USERID]) | ||||
|             if ((meeting.RecordLockIndicator && meeting.RecordLockedBy != GlobalVars.GetUserId(GetSession())) | ||||
|                 || (meeting.PCRBClosed)) { | ||||
|                 return RedirectToAction("ReadOnlyMeeting", new { meetingID = meetingID }); | ||||
|             } else if (meeting.Decision != -1) { | ||||
| @ -288,7 +270,7 @@ public class ChangeControlController : Controller { | ||||
|                 ViewBag.Attendees = ccDMO.GetUsers(); | ||||
|                 ViewBag.Sites = ccDMO.GetSites(); | ||||
|                 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); | ||||
|             } | ||||
| @ -297,8 +279,8 @@ public class ChangeControlController : Controller { | ||||
|  | ||||
|     public ActionResult ReadOnlyMeeting(int meetingID) { | ||||
|         int isITARCompliant = 1; | ||||
|         CCMeeting meeting = new CCMeeting(); | ||||
|         meeting = ccDMO.GetMeetingRead(meetingID, out isITARCompliant, (int)Session[GlobalVars.SESSION_USERID]); | ||||
|         CCMeeting meeting = new(); | ||||
|         meeting = ccDMO.GetMeetingRead(meetingID, out isITARCompliant, GlobalVars.GetUserId(GetSession())); | ||||
|         ViewBag.MeetingList = ccDMO.GetMeetingList(meeting.PlanNumber); | ||||
|         ViewBag.PCRValues = ccDMO.GetPCRValues(); | ||||
|  | ||||
| @ -323,13 +305,13 @@ public class ChangeControlController : Controller { | ||||
|  | ||||
|     public ActionResult EditMeetingUpdate(int meetingID) { | ||||
|         int isITARCompliant = 1; | ||||
|         CCMeeting meeting = new CCMeeting(); | ||||
|         meeting = ccDMO.GetMeetingRead(meetingID, out isITARCompliant, (int)Session[GlobalVars.SESSION_USERID]); | ||||
|         CCMeeting meeting = new(); | ||||
|         meeting = ccDMO.GetMeetingRead(meetingID, out isITARCompliant, GlobalVars.GetUserId(GetSession())); | ||||
|         ViewBag.MeetingList = ccDMO.GetMeetingList(meeting.PlanNumber); | ||||
|         ViewBag.PCRValues = ccDMO.GetPCRValues(); | ||||
|         // TODO locked functionality | ||||
|         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) { | ||||
|             ViewBag.IsApprover = "true"; | ||||
|         } | ||||
| @ -338,11 +320,11 @@ public class ChangeControlController : Controller { | ||||
|         { | ||||
|             return View("UnAuthorizedAccess"); | ||||
|         } else { | ||||
|             if ((meeting.RecordLockIndicator && meeting.RecordLockedBy != (int)Session[GlobalVars.SESSION_USERID]) | ||||
|             if ((meeting.RecordLockIndicator && meeting.RecordLockedBy != GlobalVars.GetUserId(GetSession())) | ||||
|                 || (meeting.PCRBClosed)) { | ||||
|                 return RedirectToAction("ReadOnlyMeeting", new { meetingID = meetingID }); | ||||
|             } 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(); | ||||
|  | ||||
| @ -373,10 +355,14 @@ public class ChangeControlController : Controller { | ||||
|         return File(sDocument, System.Net.Mime.MediaTypeNames.Application.Octet, fileName); | ||||
|     } | ||||
|  | ||||
| #if !NET8 | ||||
|  | ||||
|     public ActionResult GetDecisionsSummaryList([DataSourceRequest] DataSourceRequest request, int meetingID) { | ||||
|         return Json(ccDMO.GetDecisionsSummaryList(meetingID).ToDataSourceResult(request)); | ||||
|     } | ||||
|  | ||||
| #endif | ||||
|  | ||||
|     public ActionResult UpdateMeetingDecisionNotes(CCDecisionSummary model) { | ||||
|         try { | ||||
|             ccDMO.UpdateDecisionSummary(model); | ||||
| @ -386,6 +372,8 @@ public class ChangeControlController : Controller { | ||||
|         return Content("Saved Succesfully"); | ||||
|     } | ||||
|  | ||||
| #if !NET8 | ||||
|  | ||||
|     [AcceptVerbs(HttpVerbs.Post)] | ||||
|     public ActionResult DeleteDecisionsSummary([DataSourceRequest] DataSourceRequest request, CCDecisionSummary model) { | ||||
|         if (model != null && ModelState.IsValid) { | ||||
| @ -394,6 +382,8 @@ public class ChangeControlController : Controller { | ||||
|         return Json(new[] { model }.ToDataSourceResult(request, ModelState)); | ||||
|     } | ||||
|  | ||||
| #endif | ||||
|  | ||||
|     public ActionResult InsertDecisionsSummary(CCDecisionSummary model) { | ||||
|         try { | ||||
|             ccDMO.InsertDecisionSummary(model); | ||||
| @ -412,19 +402,23 @@ public class ChangeControlController : Controller { | ||||
|         return Content("Saved Succesfully", "application/json"); | ||||
|     } | ||||
|  | ||||
| #if !NET8 | ||||
|  | ||||
|     public ActionResult GetMeetingList([DataSourceRequest] DataSourceRequest request, int planNumber) { | ||||
|         var meetingList = ccDMO.GetMeetingList(planNumber); | ||||
|         return Json(meetingList.ToDataSourceResult(request)); | ||||
|     } | ||||
|  | ||||
|     ///  | ||||
|     public ActionResult GetMeetingAttendees([DataSourceRequest] DataSourceRequest request, int meetingID) { | ||||
|         return Json(ccDMO.GetMeetingAttendees(meetingID).ToDataSourceResult(request)); | ||||
|     } | ||||
|  | ||||
|     public ActionResult GetPCRBAttendees([DataSourceRequest] DataSourceRequest request, int PCRBID) { | ||||
|         return Json(ccDMO.GetPCRBAttendees(PCRBID).ToDataSourceResult(request)); | ||||
|     } | ||||
|  | ||||
| #endif | ||||
|  | ||||
|     public void InsertNewMeetingAttendee(string attendeeName, string jobTitle, string siteName) { | ||||
|         try { | ||||
|         } catch (Exception e) { | ||||
| @ -449,8 +443,8 @@ public class ChangeControlController : Controller { | ||||
|                 detailedException = e.Message; | ||||
|             } | ||||
|             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); | ||||
|             EventLogDMO.Add(new WinEventLog() { IssueID = docid, UserID = @User.Identity.Name, DocumentType = "Change Control", OperationType = "Error", Comments = "UpdateMeetingAttendee - " + exceptionString }); | ||||
|             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 = GetUserIdentityName(), DocumentType = "Change Control", OperationType = "Error", Comments = "UpdateMeetingAttendee - " + exceptionString }); | ||||
|             throw new Exception(e.Message); | ||||
|         } | ||||
|     } | ||||
| @ -469,12 +463,14 @@ public class ChangeControlController : Controller { | ||||
|                 detailedException = e.Message; | ||||
|             } | ||||
|             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); | ||||
|             EventLogDMO.Add(new WinEventLog() { IssueID = docid, UserID = @User.Identity.Name, DocumentType = "Change Control", OperationType = "Error", Comments = "UpdateMeetingAttendee - " + exceptionString }); | ||||
|             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 = GetUserIdentityName(), DocumentType = "Change Control", OperationType = "Error", Comments = "UpdateMeetingAttendee - " + exceptionString }); | ||||
|             throw new Exception(e.Message); | ||||
|         } | ||||
|     } | ||||
|  | ||||
| #if !NET8 | ||||
|  | ||||
|     [AcceptVerbs(HttpVerbs.Post)] | ||||
|     public ActionResult DeleteMeetingAttendee([DataSourceRequest] DataSourceRequest request, CCMeetingAttendee model) { | ||||
|         if (model != null && ModelState.IsValid) { | ||||
| @ -512,6 +508,8 @@ public class ChangeControlController : Controller { | ||||
|         return Json(ccDMO.GetMeetingActionItems_All(planNumber).ToDataSourceResult(request)); | ||||
|     } | ||||
|  | ||||
| #endif | ||||
|  | ||||
|     public ActionResult InsertPCRBActionItem(CCPCRBActionItem model) { | ||||
|         try { | ||||
|             if (model != null) { | ||||
| @ -538,6 +536,8 @@ public class ChangeControlController : Controller { | ||||
|         return Content("1"); | ||||
|     } | ||||
|  | ||||
| #if !NET8 | ||||
|  | ||||
|     public ActionResult InsertPCRBAttendee([DataSourceRequest] DataSourceRequest request, int pcrId, int attendeeId, string jobTitle, string siteName) { | ||||
|         CCPCRBAttendee newAttendee = new CCPCRBAttendee(); | ||||
|         newAttendee.AttendeeID = attendeeId; | ||||
| @ -554,6 +554,8 @@ public class ChangeControlController : Controller { | ||||
|         return Content("1"); | ||||
|     } | ||||
|  | ||||
| #endif | ||||
|  | ||||
|     public ActionResult UpdatePCRBActionItem(CCPCRBActionItem model) { | ||||
|         try { | ||||
|             if (model != null) { | ||||
| @ -566,10 +568,12 @@ public class ChangeControlController : Controller { | ||||
|         return Content("1"); | ||||
|     } | ||||
|  | ||||
| #if !NET8 | ||||
|  | ||||
|     [AcceptVerbs(HttpVerbs.Post)] | ||||
|     public ActionResult UpdateMeetingActionItemAll([DataSourceRequest] DataSourceRequest request, CCMeetingActionItemAll model) { | ||||
|         if (model != null && ModelState.IsValid) { | ||||
|             model.ClosedBy = (int)Session[GlobalVars.SESSION_USERID]; | ||||
|             model.ClosedBy = GlobalVars.GetUserId(GetSession()); | ||||
|             ccDMO.UpdateMeetingActionItem_All(model); | ||||
|         } | ||||
|         if (model.ClosedStatus) | ||||
| @ -580,6 +584,8 @@ public class ChangeControlController : Controller { | ||||
|         return Json(new[] { model }.ToDataSourceResult(request, ModelState)); | ||||
|     } | ||||
|  | ||||
| #endif | ||||
|  | ||||
|     public ActionResult UpdateMeetingActionItem(CCMeetingActionItem model) { | ||||
|         try { | ||||
|             if (model != null) { | ||||
| @ -594,11 +600,11 @@ public class ChangeControlController : Controller { | ||||
|  | ||||
|     [HttpPost] | ||||
|     public ActionResult ReassignMeetingActionItemResponsiblePersons(int meetingActionItemId, string newResponsiblePersonIDs, string comments) { | ||||
|         if (Session[GlobalVars.IS_ADMIN] == null) | ||||
|         if (GlobalVars.IsAdminValueNull(GetSession())) | ||||
|             throw new Exception("Permission denied"); | ||||
|  | ||||
|         try { | ||||
|             ccDMO.ReassignMeetingActionItemResponsiblePersons(meetingActionItemId, newResponsiblePersonIDs, comments, (int)Session[GlobalVars.SESSION_USERID]); | ||||
|             ccDMO.ReassignMeetingActionItemResponsiblePersons(meetingActionItemId, newResponsiblePersonIDs, comments, GlobalVars.GetUserId(GetSession())); | ||||
|         } catch (Exception ex) { | ||||
|             return Content(ex.Message.ToString()); | ||||
|         } | ||||
| @ -606,6 +612,8 @@ public class ChangeControlController : Controller { | ||||
|         return Content("1"); | ||||
|     } | ||||
|  | ||||
| #if !NET8 | ||||
|  | ||||
|     [AcceptVerbs(HttpVerbs.Post)] | ||||
|     public ActionResult DeleteMeetingActionItem([DataSourceRequest] DataSourceRequest request, CCMeetingActionItem model) { | ||||
|         if (model != null && ModelState.IsValid) { | ||||
| @ -621,6 +629,8 @@ public class ChangeControlController : Controller { | ||||
|         return Json(new[] { model }.ToDataSourceResult(request, ModelState)); | ||||
|     } | ||||
|  | ||||
| #endif | ||||
|  | ||||
|     public void CompleteCC(int planNumber) { | ||||
|         int docid = planNumber; | ||||
|         try { | ||||
| @ -633,8 +643,8 @@ public class ChangeControlController : Controller { | ||||
|                 detailedException = e.Message; | ||||
|             } | ||||
|             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); | ||||
|             EventLogDMO.Add(new WinEventLog() { IssueID = docid, UserID = @User.Identity.Name, DocumentType = "Change Control", OperationType = "Error", Comments = "CompleteCC - " + exceptionString }); | ||||
|             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 = GetUserIdentityName(), DocumentType = "Change Control", OperationType = "Error", Comments = "CompleteCC - " + exceptionString }); | ||||
|             throw new Exception(e.Message); | ||||
|         } | ||||
|     } | ||||
| @ -651,16 +661,18 @@ public class ChangeControlController : Controller { | ||||
|                 detailedException = e.Message; | ||||
|             } | ||||
|             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); | ||||
|             EventLogDMO.Add(new WinEventLog() { IssueID = docid, UserID = @User.Identity.Name, DocumentType = "Change Control", OperationType = "Error", Comments = "CancelCC - " + exceptionString }); | ||||
|             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 = GetUserIdentityName(), DocumentType = "Change Control", OperationType = "Error", Comments = "CancelCC - " + exceptionString }); | ||||
|             throw new Exception(e.Message); | ||||
|         } | ||||
|     } | ||||
|  | ||||
| #if !NET8 | ||||
|  | ||||
|     public ActionResult AttachSaveActionItem(IEnumerable<HttpPostedFileBase> AIfiles, int planNumber, int attachID) { | ||||
|         // The Name of the Upload component is "files" | ||||
|         if (AIfiles != null) { | ||||
|             int userId = (int)Session[GlobalVars.SESSION_USERID]; | ||||
|             int userId = GlobalVars.GetUserId(GetSession()); | ||||
|             foreach (var file in AIfiles) { | ||||
|                 ChangeControlHelper.AttachSaveActionItem(_AppSettings, ccDMO, planNumber, attachID, userId, file.FileName, file.InputStream); | ||||
|             } | ||||
| @ -668,6 +680,8 @@ public class ChangeControlController : Controller { | ||||
|         return Content(""); | ||||
|     } | ||||
|  | ||||
| #endif | ||||
|  | ||||
|     public FileResult DownloadActionItemFile(string fileGuid, int planNumber) { | ||||
|         string fileName = ccDMO.GetActionItemFileName(fileGuid); | ||||
|  | ||||
| @ -695,36 +709,36 @@ public class ChangeControlController : Controller { | ||||
|     } | ||||
|  | ||||
|     public void ReleaseLockOnDocument(int planNumber) { | ||||
|         ccDMO.ReleaseLockOnDocument((int)Session[GlobalVars.SESSION_USERID], planNumber); | ||||
|         ccDMO.ReleaseLockOnDocument(GlobalVars.GetUserId(GetSession()), planNumber); | ||||
|  | ||||
|         try { | ||||
|             ccDMO.ReleaseLockOnDocument((int)Session[GlobalVars.SESSION_USERID], planNumber); | ||||
|             ccDMO.ReleaseLockOnDocument(GlobalVars.GetUserId(GetSession()), planNumber); | ||||
|         } catch (Exception e) { | ||||
|             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 { } | ||||
|             ccDMO.ReleaseLockOnDocument(-1, planNumber); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     public JsonResult GetAllUsersList() { | ||||
|         UserAccountDMO userDMO = new UserAccountDMO(); | ||||
|         UserAccountDMO userDMO = new(); | ||||
|         IEnumerable<LoginModel> userlist = userDMO.GetAllUsers(); | ||||
|         return Json(userlist, JsonRequestBehavior.AllowGet); | ||||
|         return GetJsonResult(userlist); | ||||
|     } | ||||
|  | ||||
|     [HttpPost] | ||||
|     public void ReAssignOwnerByAdmin(string planNumber, string comments, int newOwnerId) { | ||||
|         if (Session[GlobalVars.IS_ADMIN] == null) | ||||
|         if (GlobalVars.IsAdminValueNull(GetSession())) | ||||
|             throw new Exception("Permission denied"); | ||||
|  | ||||
|         int planNumberInt = 0; | ||||
|  | ||||
|         try { | ||||
|             // 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) { | ||||
|             string detailedException = ""; | ||||
|             try { | ||||
| @ -735,17 +749,46 @@ public class ChangeControlController : Controller { | ||||
|             string exceptionString = e.Message.ToString().Trim(); | ||||
|             if (exceptionString.Length > 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); | ||||
|             EventLogDMO.Add(new WinEventLog() { IssueID = planNumberInt, UserID = @User.Identity.Name, DocumentType = "ChangeControl", OperationType = "Error", Comments = "ReAssignOwnerByAdmin - " + exceptionString }); | ||||
|             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 = GetUserIdentityName(), DocumentType = "ChangeControl", OperationType = "Error", Comments = "ReAssignOwnerByAdmin - " + exceptionString }); | ||||
|             throw new Exception(e.Message); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     public ActionResult GetPCRBMesaTitle(int issueID) { | ||||
|         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; | ||||
|         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.Collections.Generic; | ||||
| using System.Configuration; | ||||
| using System.Linq; | ||||
| #if !NET8 | ||||
| using System.Web; | ||||
| using System.Web.Mvc; | ||||
| #endif | ||||
|  | ||||
| #if NET8 | ||||
| using Microsoft.AspNetCore.Mvc; | ||||
| using Microsoft.AspNetCore.Authorization; | ||||
| #endif | ||||
|  | ||||
| using Fab2ApprovalSystem.DMO; | ||||
| using Fab2ApprovalSystem.Misc; | ||||
| using Fab2ApprovalSystem.Models; | ||||
| #if !NET8 | ||||
| using Fab2ApprovalSystem.Utilities; | ||||
| #endif | ||||
| using Fab2ApprovalSystem.ViewModels; | ||||
|  | ||||
| #if !NET8 | ||||
| using Kendo.Mvc.Extensions; | ||||
| using Kendo.Mvc.UI; | ||||
| #endif | ||||
|  | ||||
| namespace Fab2ApprovalSystem.Controllers; | ||||
|  | ||||
| [Authorize] | ||||
| #if !NET8 | ||||
| [OutputCache(NoStore = true, Duration = 0, VaryByParam = "*")] | ||||
| [SessionExpireFilter] | ||||
| #endif | ||||
| #if NET8 | ||||
| [Route("[controller]")] | ||||
| #endif | ||||
| public class CorrectiveActionController : Controller { | ||||
|  | ||||
|     AuditDMO auditDMO = new AuditDMO(GlobalVars.AppSettings); | ||||
|     CorrectiveActionDMO caDMO = new CorrectiveActionDMO(); | ||||
|     WorkflowDMO wfDMO = new WorkflowDMO(); | ||||
|     private readonly AuditDMO auditDMO = new(GlobalVars.AppSettings); | ||||
|     private readonly CorrectiveActionDMO caDMO = new(); | ||||
|     private readonly WorkflowDMO wfDMO = new(); | ||||
|     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>(); | ||||
|  | ||||
| #endif | ||||
|  | ||||
|     public ActionResult Index() { | ||||
|         return View(); | ||||
|     } | ||||
|  | ||||
|     public ActionResult Create() { | ||||
|         CorrectiveAction ca = new CorrectiveAction(); | ||||
|         CorrectiveAction ca = new(); | ||||
|         try { | ||||
|             // TODO: Add insert logic here | ||||
|  | ||||
|             ca.RequestorID = (int)Session[GlobalVars.SESSION_USERID]; | ||||
|             ca.RequestorID = GlobalVars.GetUserId(GetSession()); | ||||
|             caDMO.InsertCA(ca); | ||||
|             return RedirectToAction("Edit", new { issueID = ca.CANo }); | ||||
|         } catch (Exception e) { | ||||
| @ -48,18 +68,18 @@ public class CorrectiveActionController : Controller { | ||||
|                 detailedException = e.Message; | ||||
|             } | ||||
|             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); | ||||
|             EventLogDMO.Add(new WinEventLog() { IssueID = ca.CANo, UserID = @User.Identity.Name, DocumentType = "CA", OperationType = "Error", Comments = "SubmitDocument - " + exceptionString }); | ||||
|             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 = GetUserIdentityName(), DocumentType = "CA", OperationType = "Error", Comments = "SubmitDocument - " + exceptionString }); | ||||
|             throw new Exception(e.Message); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     public ActionResult CreateFromAudit(string title) { | ||||
|         CorrectiveAction ca = new CorrectiveAction(); | ||||
|         CorrectiveAction ca = new(); | ||||
|         try { | ||||
|             // TODO: Add insert logic here | ||||
|  | ||||
|             ca.RequestorID = (int)Session[GlobalVars.SESSION_USERID]; | ||||
|             ca.RequestorID = GlobalVars.GetUserId(GetSession()); | ||||
|             ca.CASource = "Audit"; | ||||
|             caDMO.InsertCA(ca); | ||||
|             string test = ca.CANoDisp; | ||||
| @ -72,43 +92,43 @@ public class CorrectiveActionController : Controller { | ||||
|                 detailedException = e.Message; | ||||
|             } | ||||
|             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); | ||||
|             EventLogDMO.Add(new WinEventLog() { IssueID = ca.CANo, UserID = @User.Identity.Name, DocumentType = "CA", OperationType = "Error", Comments = "SubmitDocument - " + exceptionString }); | ||||
|             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 = GetUserIdentityName(), DocumentType = "CA", OperationType = "Error", Comments = "SubmitDocument - " + exceptionString }); | ||||
|             throw new Exception(e.Message); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     public ActionResult Edit(int issueID) { | ||||
|         CorrectiveAction ca = new CorrectiveAction(); | ||||
|         CorrectiveAction ca = new(); | ||||
|         string s = Functions.ReturnCANoStringFormat(issueID); | ||||
|         try { | ||||
|             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"; | ||||
|             if (QAs != 0) { | ||||
|                 ViewBag.Is8DQA = "true"; | ||||
|             } | ||||
|  | ||||
|             ca = caDMO.GetCAItem(issueID, (int)Session[GlobalVars.SESSION_USERID]); | ||||
|             ca = caDMO.GetCAItem(issueID, GlobalVars.GetUserId(GetSession())); | ||||
|  | ||||
|             ViewBag.CanCompleteCA = "false"; | ||||
|             if (ca.D1AssigneeID == (int)Session[GlobalVars.SESSION_USERID]) | ||||
|             if (ca.D1AssigneeID == GlobalVars.GetUserId(GetSession())) | ||||
|                 ViewBag.CanCompleteCA = "true"; | ||||
|  | ||||
|             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) | ||||
|                 ViewBag.IsApprover = "false"; | ||||
|             else | ||||
|                 ViewBag.IsApprover = "true"; | ||||
|  | ||||
|             ViewBag.IsAIAssignee = caDMO.IsAIAssignee((int)Session[GlobalVars.SESSION_USERID], issueID); | ||||
|             ViewBag.IsSectionApprover = caDMO.IsUserSectionApprover(ca.CANo, (int)Session[GlobalVars.SESSION_USERID]); | ||||
|             ViewBag.IsAIAssignee = caDMO.IsAIAssignee(GlobalVars.GetUserId(GetSession()), issueID); | ||||
|             ViewBag.IsSectionApprover = caDMO.IsUserSectionApprover(ca.CANo, GlobalVars.GetUserId(GetSession())); | ||||
|             ViewBag.AuditFindingCategoriesOptions = auditDMO.GetAuditFindingCategories().ToList(); | ||||
|             if (ca.RelatedAudit != null && ca.RelatedAudit > 0) { | ||||
|                 Audit audit = auditDMO.GetAuditItem(ca.RelatedAudit, (int)Session[GlobalVars.SESSION_USERID]); | ||||
|             if (ca.RelatedAudit > 0) { | ||||
|                 Audit audit = auditDMO.GetAuditItem(ca.RelatedAudit, GlobalVars.GetUserId(GetSession())); | ||||
|                 IEnumerable<AuditFindings> auditFindings = auditDMO.GetAuditFindingsList(audit.AuditNo); | ||||
|  | ||||
|                 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) || | ||||
|                  // TODO Aproverslist================================================================ | ||||
|                  (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 }); | ||||
|             } else { | ||||
|                 ViewBag.ECNList = caDMO.GetECNList(); | ||||
| @ -154,8 +174,8 @@ public class CorrectiveActionController : Controller { | ||||
|                 detailedException = e.Message; | ||||
|             } | ||||
|             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); | ||||
|             EventLogDMO.Add(new WinEventLog() { IssueID = ca.CANo, UserID = @User.Identity.Name, DocumentType = "Audit", OperationType = "Error", Comments = "Edit - " + exceptionString }); | ||||
|             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 = GetUserIdentityName(), DocumentType = "Audit", OperationType = "Error", Comments = "Edit - " + exceptionString }); | ||||
|             throw new Exception(e.Message); | ||||
|         } | ||||
|  | ||||
| @ -164,7 +184,7 @@ public class CorrectiveActionController : Controller { | ||||
|  | ||||
|     [HttpPost] | ||||
|     public ActionResult Edit(CorrectiveAction model) { | ||||
|         int currentUserId = (int)Session[GlobalVars.SESSION_USERID]; | ||||
|         int currentUserId = GlobalVars.GetUserId(GetSession()); | ||||
|         CorrectiveAction caPrevious = caDMO.GetCAItemReadOnly(model.CANo, currentUserId); | ||||
|         if ((currentUserId != caPrevious.D1AssigneeID && currentUserId != caPrevious.QAID && currentUserId != caPrevious.RequestorID)) { | ||||
|             return Content("User is not authorized to save the CA."); | ||||
| @ -201,7 +221,7 @@ public class CorrectiveActionController : Controller { | ||||
|                 return Content("Successfully Saved...Approval initiated!"); | ||||
|             } | ||||
|             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); | ||||
|                 return Content("Successfully Saved...Approval initiated!"); | ||||
|             } | ||||
| @ -213,9 +233,9 @@ public class CorrectiveActionController : Controller { | ||||
|     } | ||||
|  | ||||
|     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) { | ||||
|             ViewBag.UserList = caDMO.GetAllUserList(); | ||||
|         } else { | ||||
| @ -227,8 +247,8 @@ public class CorrectiveActionController : Controller { | ||||
|         ViewBag.D5D6ImprovementIDs = caDMO.GetD5D6Improvement(); | ||||
|  | ||||
|         ViewBag.AuditFindingCategoriesOptions = auditDMO.GetAuditFindingCategories().ToList(); | ||||
|         if (ca.RelatedAudit != null && ca.RelatedAudit > 0) { | ||||
|             Audit audit = auditDMO.GetAuditItem(ca.RelatedAudit, (int)Session[GlobalVars.SESSION_USERID]); | ||||
|         if (ca.RelatedAudit > 0) { | ||||
|             Audit audit = auditDMO.GetAuditItem(ca.RelatedAudit, GlobalVars.GetUserId(GetSession())); | ||||
|             IEnumerable<AuditFindings> auditFindings = auditDMO.GetAuditFindingsList(audit.AuditNo); | ||||
|  | ||||
|             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); | ||||
|         } catch (Exception e) { | ||||
|             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 { } | ||||
|             caDMO.ReleaseLockOnDocument(-1, issueID); | ||||
|         } | ||||
|     } | ||||
|  | ||||
| #if !NET8 | ||||
|  | ||||
|     public ActionResult GetD2AttachmentList([DataSourceRequest] DataSourceRequest request, int caNo) { | ||||
|  | ||||
|         return Json(caDMO.GetCAAttachmentsList(caNo, Functions.CASectionMapper(GlobalVars.CASection.D2)).ToDataSourceResult(request)); | ||||
|     } | ||||
|  | ||||
|     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] | ||||
|     public void DeleteCAAttachment(int attachmentID) { | ||||
|         caDMO.DeleteCAAttachment(attachmentID); | ||||
|     } | ||||
|  | ||||
| #if !NET8 | ||||
|  | ||||
|     public ActionResult DownloadCAAttachment(string fileGuid, int caNo) { | ||||
|         try { | ||||
|             string fileName = caDMO.GetCAAttachmentFileName(fileGuid); | ||||
| @ -312,7 +338,7 @@ public class CorrectiveActionController : Controller { | ||||
|         try { | ||||
|             // The Name of the Upload component is "files" | ||||
|             if (files != null) { | ||||
|                 int userId = (int)Session[GlobalVars.SESSION_USERID]; | ||||
|                 int userId = GlobalVars.GetUserId(GetSession()); | ||||
|                 foreach (var file in files) { | ||||
|                     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)); | ||||
|     } | ||||
|  | ||||
| #endif | ||||
|  | ||||
|     public ActionResult UpdateD3ContainmentAction(D3ContainmentAction data) { | ||||
|         caDMO.UpdateD3ContainmentAction(data); | ||||
|         if (data.ResponsibilityOwnerID != data.CurrentResponsibilityOwnerID && data.ResponsibilityOwnerID != 0) { | ||||
| @ -339,7 +367,7 @@ public class CorrectiveActionController : Controller { | ||||
|  | ||||
|     public ActionResult InsertD3ContainmentAction(D3ContainmentAction data) { | ||||
|         caDMO.InsertD3ContainmentAction(data); | ||||
|         if (data.ResponsibilityOwnerID != null && data.ResponsibilityOwnerID != 0) { | ||||
|         if (data.ResponsibilityOwnerID != 0) { | ||||
|             NotifyActionItemOwner(data.CANo, data.ECD, data.ResponsibilityOwnerID, "CorrectiveActionAIAssigned.txt"); | ||||
|         } | ||||
|         return Content(""); | ||||
| @ -350,6 +378,8 @@ public class CorrectiveActionController : Controller { | ||||
|         caDMO.DeleteD3ContainmentActionItem(d3ContainmentActionID); | ||||
|     } | ||||
|  | ||||
| #if !NET8 | ||||
|  | ||||
|     public ActionResult GetD4AttachmentList([DataSourceRequest] DataSourceRequest request, int caNo) { | ||||
|         return Json(caDMO.GetCAAttachmentsList(caNo, Functions.CASectionMapper(GlobalVars.CASection.D4)).ToDataSourceResult(request)); | ||||
|     } | ||||
| @ -358,7 +388,7 @@ public class CorrectiveActionController : Controller { | ||||
|         try { | ||||
|             // The Name of the Upload component is "files" | ||||
|             if (D4Files != null) { | ||||
|                 int userId = (int)Session[GlobalVars.SESSION_USERID]; | ||||
|                 int userId = GlobalVars.GetUserId(GetSession()); | ||||
|                 foreach (var file in D4Files) { | ||||
|                     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)); | ||||
|     } | ||||
|  | ||||
| #endif | ||||
|  | ||||
|     public ActionResult InsertD5D6CAItem(D5D6CorrectivetAction data) { | ||||
|         try { | ||||
|             caDMO.InsertD5D6CorrectivetAction(data); | ||||
| @ -385,7 +417,7 @@ public class CorrectiveActionController : Controller { | ||||
|  | ||||
|     public ActionResult UpdateD5D6CAItem(D5D6CorrectivetAction data) { | ||||
|         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 { | ||||
|             caDMO.UpdateD5D6CorrectivetAction(data); | ||||
|         } catch (Exception e) { | ||||
| @ -404,26 +436,32 @@ public class CorrectiveActionController : Controller { | ||||
|     } | ||||
|  | ||||
|     public ActionResult GetD5D6CAItem(int d5d6CAID) { | ||||
|         var model = new D5D6CorrectivetAction(); | ||||
|         D5D6CorrectivetAction model = new(); | ||||
|         model = caDMO.GetD5D5CAItem(d5d6CAID); | ||||
|  | ||||
|         return PartialView("_D5D6CAAttachment", model); | ||||
|     } | ||||
|  | ||||
| #if !NET8 | ||||
|  | ||||
|     public ActionResult GetD5D6ItemAttachments([DataSourceRequest] DataSourceRequest request, int d5d6CAID) { | ||||
|         return Json(caDMO.GetD5D6ItemAttachments(d5d6CAID).ToDataSourceResult(request)); | ||||
|     } | ||||
|  | ||||
| #endif | ||||
|  | ||||
|     [HttpPost] | ||||
|     public void DeleteD5D6CAItem(int d5d6CAID) { | ||||
|         caDMO.DeleteD5D6CorrectivetAction(d5d6CAID); | ||||
|     } | ||||
|  | ||||
| #if !NET8 | ||||
|  | ||||
|     public ActionResult SaveD5D6CA_Attachemnt(IEnumerable<HttpPostedFileBase> D5D6CA_Attachemnt, int d5d6CAID, int caNo) { | ||||
|         try { | ||||
|             // The Name of the Upload component is "files" | ||||
|             if (D5D6CA_Attachemnt != null) { | ||||
|                 int userId = (int)Session[GlobalVars.SESSION_USERID]; | ||||
|                 int userId = GlobalVars.GetUserId(GetSession()); | ||||
|                 foreach (var file in D5D6CA_Attachemnt) { | ||||
|                     CorrectiveActionHelper.SaveD5D6CA_Attachemnt(_AppSettings, caDMO, d5d6CAID, caNo, userId, file.FileName, file.InputStream); | ||||
|                 } | ||||
| @ -435,14 +473,15 @@ public class CorrectiveActionController : Controller { | ||||
|         return Content(""); | ||||
|     } | ||||
|  | ||||
|     // D7 ==================================================================================== | ||||
|     public ActionResult GetD7PreventiveActionList([DataSourceRequest] DataSourceRequest request, int caNo) { | ||||
|         return Json(caDMO.GetD7PreventiveActions(caNo).ToDataSourceResult(request)); | ||||
|     } | ||||
|  | ||||
| #endif | ||||
|  | ||||
|     public ActionResult InsertD7PAItem(D7PreventiveAction data) { | ||||
|         caDMO.InsertD7PreventiveAction(data); | ||||
|         if (data.ResponsibilityOwnerID != null && data.ResponsibilityOwnerID != 0) { | ||||
|         if (data.ResponsibilityOwnerID != 0) { | ||||
|             NotifyActionItemOwner(data.CANo, data.ECD, data.ResponsibilityOwnerID, "CorrectiveActionAIAssigned.txt"); | ||||
|         } | ||||
|  | ||||
| @ -459,26 +498,32 @@ public class CorrectiveActionController : Controller { | ||||
|     } | ||||
|  | ||||
|     public ActionResult GetD7PAItem(int d7paID) { | ||||
|         var model = new D7PreventiveAction(); | ||||
|         D7PreventiveAction model = new(); | ||||
|         model = caDMO.GetD7PAItem(d7paID); | ||||
|  | ||||
|         return PartialView("_D7PAAttachment", model); | ||||
|     } | ||||
|  | ||||
| #if !NET8 | ||||
|  | ||||
|     public ActionResult GetD7ItemAttachments([DataSourceRequest] DataSourceRequest request, int d7PAID) { | ||||
|         return Json(caDMO.GetD7ItemAttachments(d7PAID).ToDataSourceResult(request)); | ||||
|     } | ||||
|  | ||||
| #endif | ||||
|  | ||||
|     [HttpPost] | ||||
|     public void DeleteD7PAItem(int d7PAID) { | ||||
|         caDMO.DeleteD7PreventiveActionItem(d7PAID); | ||||
|     } | ||||
|  | ||||
| #if !NET8 | ||||
|  | ||||
|     public ActionResult SaveD7PA_Attachemnt(IEnumerable<HttpPostedFileBase> D7PA_Attachemnt, int d7PAID, int caNo) { | ||||
|         try { | ||||
|             // The Name of the Upload component is "files" | ||||
|             if (D7PA_Attachemnt != null) { | ||||
|                 int userId = (int)Session[GlobalVars.SESSION_USERID]; | ||||
|                 int userId = GlobalVars.GetUserId(GetSession()); | ||||
|                 foreach (var file in D7PA_Attachemnt) { | ||||
|                     CorrectiveActionHelper.SaveD7PA_Attachemnt(_AppSettings, caDMO, d7PAID, caNo, userId, file.FileName, file.InputStream); | ||||
|                 } | ||||
| @ -490,21 +535,23 @@ public class CorrectiveActionController : Controller { | ||||
|         return Content(""); | ||||
|     } | ||||
|  | ||||
| #endif | ||||
|  | ||||
|     public void ReleaseLockOnDocument(int issueID) { | ||||
|         try { | ||||
|             caDMO.ReleaseLockOnDocument((int)Session[GlobalVars.SESSION_USERID], issueID); | ||||
|             caDMO.ReleaseLockOnDocument(GlobalVars.GetUserId(GetSession()), issueID); | ||||
|         } catch (Exception e) { | ||||
|             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 { } | ||||
|             caDMO.ReleaseLockOnDocument(-1, issueID); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     public JsonResult GetAllUsersList() { | ||||
|         UserAccountDMO userDMO = new UserAccountDMO(); | ||||
|         UserAccountDMO userDMO = new(); | ||||
|         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) { | ||||
| @ -519,20 +566,20 @@ public class CorrectiveActionController : Controller { | ||||
|                 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(); | ||||
|             Functions.WriteEvent(_AppSettings, @User.Identity.Name + "\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 }); | ||||
|             Functions.WriteEvent(_AppSettings, GetUserIdentityName() + "\r\n ReAssignApproval\r\n" + detailedException, System.Diagnostics.EventLogEntryType.Error); | ||||
|             EventLogDMO.Add(new WinEventLog() { IssueID = issueID, UserID = GetUserIdentityName(), DocumentType = "CA", OperationType = "Error", Comments = "ReAssignApproval - " + exceptionString }); | ||||
|             throw new Exception(e.Message); | ||||
|         } | ||||
|         CorrectiveActionHelper.ReAssignApproverByAdmin(_AppSettings, issueID, email); | ||||
|         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 { } | ||||
|     } | ||||
|  | ||||
|     public void ReAssignApproval(int issueID, int userIDs, byte step) { | ||||
|         var email = ""; | ||||
|         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) { | ||||
|             string detailedException = ""; | ||||
|             try { | ||||
| @ -541,20 +588,20 @@ public class CorrectiveActionController : Controller { | ||||
|                 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(); | ||||
|             Functions.WriteEvent(_AppSettings, @User.Identity.Name + "\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 }); | ||||
|             Functions.WriteEvent(_AppSettings, GetUserIdentityName() + "\r\n ReAssignApproval\r\n" + detailedException, System.Diagnostics.EventLogEntryType.Error); | ||||
|             EventLogDMO.Add(new WinEventLog() { IssueID = issueID, UserID = GetUserIdentityName(), DocumentType = "Corrective Action", OperationType = "Error", Comments = "ReAssignApproval - " + exceptionString }); | ||||
|             throw new Exception(e.Message); | ||||
|         } | ||||
|         CorrectiveActionHelper.ReAssignApproval(_AppSettings, issueID, email); | ||||
|         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 { } | ||||
|     } | ||||
|  | ||||
|     public void Reject(int issueID, byte currentStep, string comments) { | ||||
|         try { | ||||
|             if (Session[GlobalVars.SESSION_USERID] != null) { | ||||
|                 wfDMO.Reject(issueID, currentStep, comments, (int)Session[GlobalVars.SESSION_USERID], (int)GlobalVars.DocumentType.CorrectiveAction); | ||||
|             if (GlobalVars.IsUserIdValueNotNull(GetSession())) { | ||||
|                 wfDMO.Reject(issueID, currentStep, comments, GlobalVars.GetUserId(GetSession()), (int)GlobalVars.DocumentType.CorrectiveAction); | ||||
|                 NotifyRejectionToAssignee(issueID, comments); | ||||
|             } else { | ||||
|                 Response.Redirect("~/Account/Login"); | ||||
| @ -567,18 +614,18 @@ public class CorrectiveActionController : Controller { | ||||
|                 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(); | ||||
|             Functions.WriteEvent(_AppSettings, @User.Identity.Name + "\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 }); | ||||
|             Functions.WriteEvent(_AppSettings, GetUserIdentityName() + "\r\n Reject\r\n" + detailedException, System.Diagnostics.EventLogEntryType.Error); | ||||
|             EventLogDMO.Add(new WinEventLog() { IssueID = issueID, UserID = GetUserIdentityName(), DocumentType = "Corrective Action", OperationType = "Error", Comments = "Reject - " + exceptionString }); | ||||
|             throw new Exception(e.Message); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     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(); | ||||
|         string userEmail = CorrectiveActionHelper.NotifyRejectionToAssignee(_AppSettings, issueID, comments, username, emailIst); | ||||
|         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 { } | ||||
|     } | ||||
|  | ||||
| @ -586,9 +633,9 @@ public class CorrectiveActionController : Controller { | ||||
|         int isITARCompliant = 1; | ||||
|         try { | ||||
|             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) { | ||||
|                 // Set to complete | ||||
| @ -610,8 +657,8 @@ public class CorrectiveActionController : Controller { | ||||
|                 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(); | ||||
|             Functions.WriteEvent(_AppSettings, @User.Identity.Name + "\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 }); | ||||
|             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 = GetUserIdentityName(), DocumentType = "Corrective Action", OperationType = "Error", Comments = "Approve - " + exceptionString }); | ||||
|             throw new Exception(e.Message); | ||||
|         } | ||||
|     } | ||||
| @ -621,7 +668,7 @@ public class CorrectiveActionController : Controller { | ||||
|             string userEmail = userDMO.GetUserEmailByID(userId); | ||||
|             CorrectiveActionHelper.NotifySectionApprover(_AppSettings, issueID, section, userEmail); | ||||
|             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 (Exception e) { | ||||
|             string detailedException = ""; | ||||
| @ -631,9 +678,9 @@ public class CorrectiveActionController : Controller { | ||||
|                 detailedException = e.Message; | ||||
|             } | ||||
|             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); | ||||
|             EventLogDMO.Add(new WinEventLog() { IssueID = issueID, UserID = @User.Identity.Name, DocumentType = "Corrective Action", OperationType = "Error", Comments = "AddAdditionalApproval - " + exceptionString }); | ||||
|             throw e; | ||||
|             Functions.WriteEvent(_AppSettings, GetUserIdentityName() + "\r\n Corrective Action - NotifyApprovers\r\n" + detailedException, System.Diagnostics.EventLogEntryType.Error); | ||||
|             EventLogDMO.Add(new WinEventLog() { IssueID = issueID, UserID = GetUserIdentityName(), DocumentType = "Corrective Action", OperationType = "Error", Comments = "AddAdditionalApproval - " + exceptionString }); | ||||
|             throw; | ||||
|         } | ||||
|     } | ||||
|  | ||||
| @ -642,7 +689,7 @@ public class CorrectiveActionController : Controller { | ||||
|             List<string> emailIst = MiscDMO.GetApproverEmailListByDocument(@issueID, currentStep, (int)GlobalVars.DocumentType.CorrectiveAction).Distinct().ToList(); | ||||
|             string emailSentList = CorrectiveActionHelper.NotifyApprovers(_AppSettings, issueID, emailIst); | ||||
|             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 (Exception e) { | ||||
|             string detailedException = ""; | ||||
| @ -652,9 +699,9 @@ public class CorrectiveActionController : Controller { | ||||
|                 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(); | ||||
|             Functions.WriteEvent(_AppSettings, @User.Identity.Name + "\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 }); | ||||
|             throw e; | ||||
|             Functions.WriteEvent(_AppSettings, GetUserIdentityName() + "\r\n Corrective Action - NotifyApprovers\r\n" + detailedException, System.Diagnostics.EventLogEntryType.Error); | ||||
|             EventLogDMO.Add(new WinEventLog() { IssueID = issueID, UserID = GetUserIdentityName(), DocumentType = "Corrective Action", OperationType = "Error", Comments = "AddAdditionalApproval - " + exceptionString }); | ||||
|             throw; | ||||
|         } | ||||
|     } | ||||
|  | ||||
| @ -673,18 +720,20 @@ public class CorrectiveActionController : Controller { | ||||
|                 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(); | ||||
|             Functions.WriteEvent(_AppSettings, @User.Identity.Name + "\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 }); | ||||
|             Functions.WriteEvent(_AppSettings, GetUserIdentityName() + "\r\n AddAdditionalApproval\r\n" + detailedException, System.Diagnostics.EventLogEntryType.Error); | ||||
|             EventLogDMO.Add(new WinEventLog() { IssueID = issueID, UserID = GetUserIdentityName(), DocumentType = "Corrective Action", OperationType = "Error", Comments = "AddAdditionalApproval - " + exceptionString }); | ||||
|             throw new Exception(e.Message); | ||||
|         } | ||||
|         emailSentList = CorrectiveActionHelper.AddAdditionalApproval(_AppSettings, issueID, emailSentList, emailArray); | ||||
|         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 { } | ||||
|     } | ||||
|  | ||||
|     #endregion | ||||
|  | ||||
| #if !NET8 | ||||
|  | ||||
|     public ActionResult GetApproversList([DataSourceRequest] DataSourceRequest request, int issueID, byte step) { | ||||
|         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)); | ||||
|     } | ||||
|  | ||||
| #endif | ||||
|  | ||||
|     public void NotifyRequestor(int issueID, DateTime? dueDate, int? responsibleOwnerID, string template) { | ||||
|         try { | ||||
|             string email = MiscDMO.GetEmail(responsibleOwnerID); | ||||
|             CorrectiveActionHelper.NotifyRequestor(_AppSettings, issueID, dueDate, template, email); | ||||
|             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 (Exception e) { | ||||
|             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(); | ||||
|             Functions.WriteEvent(_AppSettings, @User.Identity.Name + "\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 }); | ||||
|             Functions.WriteEvent(_AppSettings, GetUserIdentityName() + "\r\n 8D Action Item - NotifyActionItemOwner\r\n" + detailedException, System.Diagnostics.EventLogEntryType.Error); | ||||
|             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); | ||||
|             CorrectiveActionHelper.NotifyAssignee(_AppSettings, issueID, template, D3DueDate, D5D7DueDate, email); | ||||
|             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 (Exception e) { | ||||
|             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(); | ||||
|             Functions.WriteEvent(_AppSettings, @User.Identity.Name + "\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 }); | ||||
|             Functions.WriteEvent(_AppSettings, GetUserIdentityName() + "\r\n 8D Action Item - NotifyActionItemOwner\r\n" + detailedException, System.Diagnostics.EventLogEntryType.Error); | ||||
|             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 { | ||||
|             string email = CorrectiveActionHelper.NotifyActionItemOwner(_AppSettings, issueID, dueDate, responsibleOwnerID, template); | ||||
|             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 (Exception e) { | ||||
|             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(); | ||||
|             Functions.WriteEvent(_AppSettings, @User.Identity.Name + "\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 }); | ||||
|             Functions.WriteEvent(_AppSettings, GetUserIdentityName() + "\r\n 8D Action Item - NotifyActionItemOwner\r\n" + detailedException, System.Diagnostics.EventLogEntryType.Error); | ||||
|             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 { | ||||
|             string email = CorrectiveActionHelper.NotifyActionItemCompletion(_AppSettings, issueID, dueDate, recipientId, template); | ||||
|             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 (Exception e) { | ||||
|             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(); | ||||
|             Functions.WriteEvent(_AppSettings, @User.Identity.Name + "\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 }); | ||||
|             Functions.WriteEvent(_AppSettings, GetUserIdentityName() + "\r\n 8D Action Item - NotifyActionItemCompletion\r\n" + detailedException, System.Diagnostics.EventLogEntryType.Error); | ||||
|             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 { | ||||
|             string emailSentList = CorrectiveActionHelper.NotifyClosureOf8D(_AppSettings, issueID); | ||||
|             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 (Exception e) { | ||||
|             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(); | ||||
|             Functions.WriteEvent(_AppSettings, @User.Identity.Name + "\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 }); | ||||
|             Functions.WriteEvent(_AppSettings, GetUserIdentityName() + "\r\n Closure of 8D  - NotifyActionItemOwner\r\n" + detailedException, System.Diagnostics.EventLogEntryType.Error); | ||||
|             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 { | ||||
|             string emailSentList = CorrectiveActionHelper.NotifyCompletionOf8D(_AppSettings, issueID, followUpDate); | ||||
|             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 (Exception e) { | ||||
|             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(); | ||||
|             Functions.WriteEvent(_AppSettings, @User.Identity.Name + "\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 }); | ||||
|             Functions.WriteEvent(_AppSettings, GetUserIdentityName() + "\r\n Closure of 8D  - NotifyActionItemOwner\r\n" + detailedException, System.Diagnostics.EventLogEntryType.Error); | ||||
|             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) { | ||||
|         try { | ||||
|             CorrectiveAction ca = caDMO.GetCAItem(issueID, (int)Session[GlobalVars.SESSION_USERID]); | ||||
|             CorrectiveAction ca = caDMO.GetCAItem(issueID, GlobalVars.GetUserId(GetSession())); | ||||
|  | ||||
|             int requestorId = ca.RequestorID; | ||||
|             int qaId = ca.QAID; | ||||
| @ -834,16 +885,16 @@ public class CorrectiveActionController : Controller { | ||||
|                 detailedException = e.Message; | ||||
|             } | ||||
|             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); | ||||
|             EventLogDMO.Add(new WinEventLog() { IssueID = issueID, UserID = @User.Identity.Name, DocumentType = "Corrective Action", OperationType = "Error", Comments = "Approve - " + exceptionString }); | ||||
|             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 = GetUserIdentityName(), DocumentType = "Corrective Action", OperationType = "Error", Comments = "Approve - " + exceptionString }); | ||||
|             throw new Exception(e.Message); | ||||
|         } | ||||
|     } | ||||
|     [HttpPost] | ||||
|     public ActionResult ApproveSection(int issueID, string dSection) { | ||||
|         try { | ||||
|             int userID = (int)Session[GlobalVars.SESSION_USERID]; | ||||
|             CorrectiveAction caItem = caDMO.GetCAItem(issueID, (int)Session[GlobalVars.SESSION_USERID]); | ||||
|             int userID = GlobalVars.GetUserId(GetSession()); | ||||
|             CorrectiveAction caItem = caDMO.GetCAItem(issueID, GlobalVars.GetUserId(GetSession())); | ||||
|             caDMO.ApproveSection(issueID, userID, dSection); | ||||
|             bool isLastApprover = caDMO.IsLastSectionApprover(issueID, dSection); | ||||
|             if (isLastApprover) { | ||||
| @ -876,8 +927,8 @@ public class CorrectiveActionController : Controller { | ||||
|                 detailedException = e.Message; | ||||
|             } | ||||
|             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); | ||||
|             EventLogDMO.Add(new WinEventLog() { IssueID = issueID, UserID = @User.Identity.Name, DocumentType = "Corrective Action", OperationType = "Error", Comments = "Approve - " + exceptionString }); | ||||
|             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 = GetUserIdentityName(), DocumentType = "Corrective Action", OperationType = "Error", Comments = "Approve - " + exceptionString }); | ||||
|             return Content(e.Message); | ||||
|         } | ||||
|     } | ||||
| @ -885,7 +936,7 @@ public class CorrectiveActionController : Controller { | ||||
|     public ActionResult RejectSection(int issueID, string dSection, string comments) { | ||||
|         try { | ||||
|  | ||||
|             int userID = (int)Session[GlobalVars.SESSION_USERID]; | ||||
|             int userID = GlobalVars.GetUserId(GetSession()); | ||||
|             CorrectiveAction ca = caDMO.GetCAItem(issueID, userID); | ||||
|             caDMO.RejectSection(issueID, userID, dSection, comments); | ||||
|             // Notify Rejection to assignee and requestor | ||||
| @ -905,18 +956,19 @@ public class CorrectiveActionController : Controller { | ||||
|                 detailedException = e.Message; | ||||
|             } | ||||
|             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); | ||||
|             EventLogDMO.Add(new WinEventLog() { IssueID = issueID, UserID = @User.Identity.Name, DocumentType = "Corrective Action", OperationType = "Error", Comments = "Reject - " + exceptionString }); | ||||
|             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 = GetUserIdentityName(), DocumentType = "Corrective Action", OperationType = "Error", Comments = "Reject - " + exceptionString }); | ||||
|             return Content(e.Message); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     public void NotifySectionRejection(int issueID, int recipientUserId, int loggedInUserId, string section, string comment) { | ||||
|         try { | ||||
|             LoginModel recipient = userDMO.GetUserByID(recipientUserId); | ||||
|             LoginModel loggedInUser = userDMO.GetUserByID(loggedInUserId); | ||||
|             CorrectiveActionHelper.NotifySectionRejection(_AppSettings, issueID, section, comment, recipient, loggedInUser); | ||||
|             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 (Exception e) { | ||||
|             string detailedException = ""; | ||||
| @ -926,9 +978,9 @@ public class CorrectiveActionController : Controller { | ||||
|                 detailedException = e.Message; | ||||
|             } | ||||
|             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); | ||||
|             EventLogDMO.Add(new WinEventLog() { IssueID = issueID, UserID = @User.Identity.Name, DocumentType = "Corrective Action", OperationType = "Error", Comments = "AddAdditionalApproval - " + exceptionString }); | ||||
|             throw e; | ||||
|             Functions.WriteEvent(_AppSettings, GetUserIdentityName() + "\r\n Corrective Action - NotifyApprovers\r\n" + detailedException, System.Diagnostics.EventLogEntryType.Error); | ||||
|             EventLogDMO.Add(new WinEventLog() { IssueID = issueID, UserID = GetUserIdentityName(), DocumentType = "Corrective Action", OperationType = "Error", Comments = "AddAdditionalApproval - " + exceptionString }); | ||||
|             throw; | ||||
|         } | ||||
|     } | ||||
|  | ||||
| @ -937,7 +989,7 @@ public class CorrectiveActionController : Controller { | ||||
|             string userEmail = userDMO.GetUserEmailByID(userId); | ||||
|             CorrectiveActionHelper.NotifyForD5D6D7Validation(_AppSettings, issueID, dSection, userEmail); | ||||
|             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 (Exception e) { | ||||
|             string detailedException = ""; | ||||
| @ -947,9 +999,9 @@ public class CorrectiveActionController : Controller { | ||||
|                 detailedException = e.Message; | ||||
|             } | ||||
|             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); | ||||
|             EventLogDMO.Add(new WinEventLog() { IssueID = issueID, UserID = @User.Identity.Name, DocumentType = "Corrective Action", OperationType = "Error", Comments = "AddAdditionalApproval - " + exceptionString }); | ||||
|             throw e; | ||||
|             Functions.WriteEvent(_AppSettings, GetUserIdentityName() + "\r\n Corrective Action - NotifyApprovers\r\n" + detailedException, System.Diagnostics.EventLogEntryType.Error); | ||||
|             EventLogDMO.Add(new WinEventLog() { IssueID = issueID, UserID = GetUserIdentityName(), DocumentType = "Corrective Action", OperationType = "Error", Comments = "AddAdditionalApproval - " + exceptionString }); | ||||
|             throw; | ||||
|         } | ||||
|     } | ||||
|  | ||||
| @ -958,7 +1010,7 @@ public class CorrectiveActionController : Controller { | ||||
|             string userEmail = userDMO.GetUserEmailByID(userId); | ||||
|             CorrectiveActionHelper.NotifyUsersDSectionApproved(_AppSettings, issueID, dSection, userEmail); | ||||
|             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 (Exception e) { | ||||
|             string detailedException = ""; | ||||
| @ -968,9 +1020,9 @@ public class CorrectiveActionController : Controller { | ||||
|                 detailedException = e.Message; | ||||
|             } | ||||
|             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); | ||||
|             EventLogDMO.Add(new WinEventLog() { IssueID = issueID, UserID = @User.Identity.Name, DocumentType = "Corrective Action", OperationType = "Error", Comments = "AddAdditionalApproval - " + exceptionString }); | ||||
|             throw e; | ||||
|             Functions.WriteEvent(_AppSettings, GetUserIdentityName() + "\r\n Corrective Action - NotifyApprovers\r\n" + detailedException, System.Diagnostics.EventLogEntryType.Error); | ||||
|             EventLogDMO.Add(new WinEventLog() { IssueID = issueID, UserID = GetUserIdentityName(), DocumentType = "Corrective Action", OperationType = "Error", Comments = "AddAdditionalApproval - " + exceptionString }); | ||||
|             throw; | ||||
|         } | ||||
|     } | ||||
|  | ||||
| @ -979,10 +1031,12 @@ public class CorrectiveActionController : Controller { | ||||
|  | ||||
|         return d3DueDate; | ||||
|     } | ||||
|  | ||||
|     public DateTime SetD5D7DueDate(int caNo) { | ||||
|         DateTime d5d7DueDate = caDMO.SetCAD5D7DueDate(caNo); | ||||
|         return d5d7DueDate; | ||||
|     } | ||||
|  | ||||
|     public bool ProcessCARDueDates() { | ||||
|         bool isSuccess = false; | ||||
|         List<CAD3D5D7Due> dueCAs = caDMO.GetCAD3D5D7Due().ToList(); | ||||
| @ -1006,8 +1060,8 @@ public class CorrectiveActionController : Controller { | ||||
|                     detailedException = e.Message; | ||||
|                 } | ||||
|                 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); | ||||
|                 EventLogDMO.Add(new WinEventLog() { IssueID = dueCA.CANo, UserID = @User.Identity.Name, DocumentType = "Corrective Action", OperationType = "Error", Comments = "ProcessCARDueDates - Called via API - " + exceptionString }); | ||||
|                 Functions.WriteEvent(_AppSettings, GetUserIdentityName() + "\r\n Corrective Action - ProcessCARDueDates\r\n" + detailedException, System.Diagnostics.EventLogEntryType.Error); | ||||
|                 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() { | ||||
|     } | ||||
|  | ||||
| #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.Collections.Generic; | ||||
| using System.Configuration; | ||||
| using System.Linq; | ||||
| #if !NET8 | ||||
| using System.Web; | ||||
| using System.Web.Mvc; | ||||
| #endif | ||||
|  | ||||
| #if NET8 | ||||
| using Microsoft.AspNetCore.Mvc; | ||||
| #endif | ||||
|  | ||||
| using Fab2ApprovalSystem.DMO; | ||||
| using Fab2ApprovalSystem.Misc; | ||||
| using Fab2ApprovalSystem.Models; | ||||
| 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.UI; | ||||
| #endif | ||||
|  | ||||
| namespace Fab2ApprovalSystem.Controllers; | ||||
|  | ||||
| #if !NET8 | ||||
| [Authorize] | ||||
| #if !NET8 | ||||
| [SessionExpireFilter] | ||||
| #endif | ||||
| [OutputCache(NoStore = true, Duration = 0, VaryByParam = "*")] | ||||
| #endif | ||||
| #if NET8 | ||||
| [Route("[controller]")] | ||||
| #endif | ||||
| public class HomeController : Controller { | ||||
|  | ||||
|     MRB_DMO mrbDMO = new MRB_DMO(GlobalVars.AppSettings); | ||||
|     PartsRequestDMO prDMO = new PartsRequestDMO(); | ||||
|     LotDispositionDMO ldDMO = new LotDispositionDMO(); | ||||
|     WorkflowDMO wfDMO = new WorkflowDMO(); | ||||
|     ECN_DMO ecnDMO = new ECN_DMO(); | ||||
|     UserUtilities userDMO = new UserUtilities(); | ||||
|     UserAccountDMO originalUserDMO = new UserAccountDMO(); | ||||
|     TrainingDMO trainingDMO = new TrainingDMO(); | ||||
|     MiscDMO miscDMO = new MiscDMO(); | ||||
|     private readonly MRB_DMO mrbDMO = new(GlobalVars.AppSettings); | ||||
|     private readonly PartsRequestDMO prDMO = new(); | ||||
|     private readonly LotDispositionDMO ldDMO = new(); | ||||
|     private readonly WorkflowDMO wfDMO = new(); | ||||
|     private readonly ECN_DMO ecnDMO = new(); | ||||
|     private readonly UserUtilities userDMO = new(); | ||||
|     private readonly UserAccountDMO originalUserDMO = new(); | ||||
|     private readonly TrainingDMO trainingDMO = new(); | ||||
|     private readonly MiscDMO miscDMO = new(); | ||||
|     private readonly AppSettings _AppSettings = GlobalVars.AppSettings; | ||||
|  | ||||
|     public ActionResult Index(string tabName) { | ||||
| @ -57,6 +75,7 @@ public class HomeController : Controller { | ||||
|     public ActionResult ECNList() { | ||||
|         return View(); | ||||
|     } | ||||
|  | ||||
|     public ActionResult TrainingList() { | ||||
|         return View(); | ||||
|     } | ||||
| @ -82,25 +101,25 @@ public class HomeController : Controller { | ||||
|         return View(); | ||||
|     } | ||||
|  | ||||
| #if !NET8 | ||||
|  | ||||
|     public ActionResult GetTaskList([DataSourceRequest] DataSourceRequest request, string tabName) { | ||||
|         try { | ||||
|             ViewBag.ActiveTabName = tabName; | ||||
|             List<IssuesViewModel> data = ldDMO.GetTaskList((int)Session[GlobalVars.SESSION_USERID]).Distinct().ToList(); | ||||
|             return Json(data.ToDataSourceResult(request), JsonRequestBehavior.AllowGet); | ||||
|             List<IssuesViewModel> data = ldDMO.GetTaskList(GlobalVars.GetUserId(GetSession())).Distinct().ToList(); | ||||
|             return GetJsonResult(data.ToDataSourceResult(request)); | ||||
|         } catch (Exception ex) { | ||||
|             // TODO record the error | ||||
|             throw ex; | ||||
|             throw; | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     public ActionResult GetMyOpenActionItems([DataSourceRequest] DataSourceRequest request, string tabName) { | ||||
|         try { | ||||
|             ViewBag.ActiveTabName = tabName; | ||||
|             List<OpenActionItemViewModel> data = ldDMO.GetMyOpenActionItems((int)Session[GlobalVars.SESSION_USERID]).Distinct().ToList(); | ||||
|             return Json(data.ToDataSourceResult(request), JsonRequestBehavior.AllowGet); | ||||
|             List<OpenActionItemViewModel> data = ldDMO.GetMyOpenActionItems(GlobalVars.GetUserId(GetSession())).Distinct().ToList(); | ||||
|             return GetJsonResult(data.ToDataSourceResult(request)); | ||||
|         } catch (Exception ex) { | ||||
|             // TODO record the error | ||||
|             throw ex; | ||||
|             throw; | ||||
|         } | ||||
|     } | ||||
|  | ||||
| @ -116,76 +135,82 @@ public class HomeController : Controller { | ||||
|     } | ||||
|  | ||||
|     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)); | ||||
|     } | ||||
|  | ||||
|     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)); | ||||
|     } | ||||
|  | ||||
|     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)); | ||||
|     } | ||||
|  | ||||
|     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)); | ||||
|     } | ||||
|  | ||||
|     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)); | ||||
|     } | ||||
|  | ||||
|     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)); | ||||
|     } | ||||
|  | ||||
|     public ActionResult GetTrainingList([DataSourceRequest] DataSourceRequest request) { | ||||
|         IEnumerable<Training> data = trainingDMO.GetAllTrainings(); | ||||
|         return Json(data.ToDataSourceResult(request)); | ||||
|     } | ||||
|  | ||||
| #endif | ||||
|  | ||||
|     public ActionResult MyECNsTECNs(string dataType) { | ||||
|         ViewBag.ActiveTabName = dataType; | ||||
|         return View(); | ||||
|     } | ||||
|  | ||||
| #if !NET8 | ||||
|  | ||||
|     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"; | ||||
|         Session[GlobalVars.ECN_VIEW_OPTION] = ViewBag.ViewOption; | ||||
|         GlobalVars.SetECNViewOption(GetSession(), ViewBag.ViewOption); | ||||
|         return Json(data.ToDataSourceResult(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"; | ||||
|         Session[GlobalVars.ECN_VIEW_OPTION] = ViewBag.ViewOption; | ||||
|         GlobalVars.SetECNViewOption(GetSession(), ViewBag.ViewOption); | ||||
|         return Json(data.ToDataSourceResult(request)); | ||||
|     } | ||||
|  | ||||
|     public ActionResult GetAllTECNs([DataSourceRequest] DataSourceRequest request) { | ||||
|         IEnumerable<IssuesViewModel> data = ecnDMO.GetAllTECNs(); | ||||
|         ViewBag.ViewOption = "All TECNs"; | ||||
|         Session[GlobalVars.ECN_VIEW_OPTION] = ViewBag.ViewOption; | ||||
|         GlobalVars.SetECNViewOption(GetSession(), ViewBag.ViewOption); | ||||
|         return Json(data.ToDataSourceResult(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"; | ||||
|         Session[GlobalVars.ECN_VIEW_OPTION] = ViewBag.ViewOption; | ||||
|         GlobalVars.SetECNViewOption(GetSession(), ViewBag.ViewOption); | ||||
|         return Json(data.ToDataSourceResult(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"; | ||||
|         Session[GlobalVars.ECN_VIEW_OPTION] = ViewBag.ViewOption; | ||||
|         GlobalVars.SetECNViewOption(GetSession(), ViewBag.ViewOption); | ||||
|         return Json(data.ToDataSourceResult(request)); | ||||
|     } | ||||
|  | ||||
| @ -194,17 +219,17 @@ public class HomeController : Controller { | ||||
|         return Json(LotTravDMO.GetLotListBasedOnSWRNumber(workRequestID).ToDataSourceResult(request)); | ||||
|     } | ||||
|  | ||||
|     /// <returns></returns> | ||||
| #endif | ||||
|  | ||||
|     public ActionResult SetOOOStatus(int delegatedTo, DateTime startDate, DateTime endDate, string tab) { | ||||
|         if (Session[GlobalVars.SESSION_USERID] != null) { | ||||
|             int returnValue = MiscDMO.EnableOOOStatus(int.Parse(Session[GlobalVars.SESSION_USERID].ToString()), delegatedTo, startDate, endDate); | ||||
|         if (GlobalVars.IsUserIdValueNotNull(GetSession())) { | ||||
|             int returnValue = MiscDMO.EnableOOOStatus(GlobalVars.GetUserId(GetSession()), delegatedTo, startDate, endDate); | ||||
|             if (returnValue == 3) // the delegator is already a delegator to someone else | ||||
|             { | ||||
|                 return Content("3"); | ||||
|             } | ||||
|             if (startDate <= DateTime.Today) | ||||
|                 Session[GlobalVars.OOO] = true; | ||||
|                 GlobalVars.SetOOO(GetSession(), true); | ||||
|  | ||||
|             NotifyDelegation(delegatedTo, startDate, endDate); | ||||
|         } | ||||
| @ -213,12 +238,14 @@ public class HomeController : Controller { | ||||
|     } | ||||
|  | ||||
|     public void ExpireOOOStatus(string tab) { | ||||
|         if (Session[GlobalVars.SESSION_USERID] != null) { | ||||
|             MiscDMO.ExpireOOOStatus(int.Parse(Session[GlobalVars.SESSION_USERID].ToString())); | ||||
|             Session[GlobalVars.OOO] = false; | ||||
|         if (GlobalVars.IsUserIdValueNotNull(GetSession())) { | ||||
|             MiscDMO.ExpireOOOStatus(GlobalVars.GetUserId(GetSession())); | ||||
|             GlobalVars.SetOOO(GetSession(), false); | ||||
|         } | ||||
|     } | ||||
|  | ||||
| #if !NET8 | ||||
|  | ||||
|     [AcceptVerbs(HttpVerbs.Post)] | ||||
|     public ActionResult DeleteItem([DataSourceRequest] DataSourceRequest request, IssuesViewModel issue) { | ||||
|         GlobalVars.DocumentType dType; | ||||
| @ -228,20 +255,22 @@ public class HomeController : Controller { | ||||
|         else if (dType == GlobalVars.DocumentType.LotDisposition) | ||||
|             ldDMO.DeleteLotDisposition(issue.IssueID); | ||||
|         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) | ||||
|             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)); | ||||
|     } | ||||
|  | ||||
|     [AcceptVerbs(HttpVerbs.Post)] | ||||
|     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)); | ||||
|     } | ||||
|  | ||||
| #endif | ||||
|  | ||||
|     public ActionResult About() { | ||||
|         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) { | ||||
|         var email = ""; | ||||
|         int delegateFrom = (int)Session[GlobalVars.SESSION_USERID]; | ||||
|         int delegateFrom = GlobalVars.GetUserId(GetSession()); | ||||
|         try { | ||||
|             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) { | ||||
|             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); | ||||
|             EventLogDMO.Add(new WinEventLog() { IssueID = issueID, UserID = @User.Identity.Name, DocumentType = " + ecnTypeString + ", OperationType = "Error", Comments = "DelegateApproval - " + exceptionString }); | ||||
|             Functions.WriteEvent(_AppSettings, GetUserIdentityName() + "\r\n DelegateApproval\r\n" + e.Message.ToString(), System.Diagnostics.EventLogEntryType.Error); | ||||
|             EventLogDMO.Add(new WinEventLog() { IssueID = issueID, UserID = GetUserIdentityName(), DocumentType = " + ecnTypeString + ", OperationType = "Error", Comments = "DelegateApproval - " + exceptionString }); | ||||
|             throw new Exception(e.Message); | ||||
|         } | ||||
|         HomeHelper.DelegateDocumentApproval(_AppSettings, issueID, ecnTypeString, title, email); | ||||
|         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 { } | ||||
|     } | ||||
|  | ||||
|     public JsonResult GetAllUsersList() { | ||||
|  | ||||
|         UserAccountDMO userDMO = new UserAccountDMO(); | ||||
|         UserAccountDMO userDMO = new(); | ||||
|         IEnumerable<LoginModel> userlist = userDMO.GetAllUsers(); | ||||
|         return Json(userlist, JsonRequestBehavior.AllowGet); | ||||
|         return GetJsonResult(userlist); | ||||
|     } | ||||
|  | ||||
|     public ActionResult SaveAllDocumentsFilter(string data) { | ||||
|         Session["AllDocumentsFilterData"] = data; | ||||
|         GlobalVars.SetAllDocumentsFilterData(GetSession(), data); | ||||
|         return new EmptyResult(); | ||||
|     } | ||||
|  | ||||
|     public ActionResult LoadAllDocumentsFilter() { | ||||
|         return Json(Session["AllDocumentsFilterData"], JsonRequestBehavior.AllowGet); | ||||
|         return GetJsonResult(GlobalVars.GetAllDocumentsFilterData(GetSession())); | ||||
|     } | ||||
|  | ||||
|     public ActionResult SaveSWRFilter(string data) { | ||||
|         Session["SWRFilterData"] = data; | ||||
|         GlobalVars.SetSWRFilterData(GetSession(), data); | ||||
|         return new EmptyResult(); | ||||
|     } | ||||
|  | ||||
|     public ActionResult LoadSWRFilter() { | ||||
|         return Json(Session["SWRFilterData"], JsonRequestBehavior.AllowGet); | ||||
|         return GetJsonResult(GlobalVars.GetSWRFilterData(GetSession())); | ||||
|     } | ||||
|  | ||||
|     public ActionResult SavePCRBFilter(string data) { | ||||
|         Session["PCRBFilterData"] = data; | ||||
|         GlobalVars.SetPCRBFilterData(GetSession(), data); | ||||
|         return new EmptyResult(); | ||||
|     } | ||||
|  | ||||
|     public ActionResult LoadPCRBFilter() { | ||||
|         return Json(Session["PCRBFilterData"], JsonRequestBehavior.AllowGet); | ||||
|         return GetJsonResult(GlobalVars.GetPCRBFilterData(GetSession())); | ||||
|     } | ||||
|  | ||||
|     public ActionResult PartsRequestList() { | ||||
|         ViewBag.CanDeletePR = Session[GlobalVars.CAN_CREATE_PARTS_REQUEST]; | ||||
|         ViewBag.CanDeletePR = GlobalVars.GetCanCreatePartsRequest(GetSession()); | ||||
|         return View(); | ||||
|     } | ||||
|  | ||||
| #if !NET8 | ||||
|  | ||||
|     public ActionResult GetPartsRequestList([DataSourceRequest] DataSourceRequest request) { | ||||
|         IEnumerable<PartsRequestList> data = prDMO.GetPartsRequestList(); | ||||
|         return Json(data.ToDataSourceResult(request)); | ||||
| @ -346,31 +377,32 @@ public class HomeController : Controller { | ||||
|     public ActionResult GetMyPartsRequestsList([DataSourceRequest] DataSourceRequest request, string tabName) { | ||||
|         try { | ||||
|             ViewBag.ActiveTabName = tabName; | ||||
|             var data = prDMO.GetMyPartsRequests((int)Session[GlobalVars.SESSION_USERID]); | ||||
|             return Json(data.ToDataSourceResult(request), JsonRequestBehavior.AllowGet); | ||||
|             var data = prDMO.GetMyPartsRequests(GlobalVars.GetUserId(GetSession())); | ||||
|             return GetJsonResult(data.ToDataSourceResult(request)); | ||||
|         } catch (Exception ex) { | ||||
|             // TODO record the error | ||||
|             throw ex; | ||||
|             throw; | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     [AcceptVerbs(HttpVerbs.Post)] | ||||
|     public ActionResult DeletePR([DataSourceRequest] DataSourceRequest request, MyPartsRequestList pr) { | ||||
|         try { | ||||
|             if (Convert.ToBoolean(Session[GlobalVars.CAN_CREATE_PARTS_REQUEST]) == false) | ||||
|             if (!GlobalVars.GetCanCreatePartsRequest(GetSession())) | ||||
|                 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)); | ||||
|         } catch (Exception ex) { | ||||
|             return new HttpStatusCodeResult(System.Net.HttpStatusCode.BadRequest, ex.Message); | ||||
|         } | ||||
|     } | ||||
|  | ||||
| #endif | ||||
|  | ||||
|     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); | ||||
|         List<string> emailList = new List<string>(); | ||||
|         List<string> emailList = new(); | ||||
|         emailList.Add(delegateFrom.Email); | ||||
|         emailList.Add(delegateTo.Email); | ||||
|         HomeHelper.NotifyDelegation(_AppSettings, startDate, endDate, delegateFrom, delegateTo, emailList); | ||||
| @ -381,22 +413,24 @@ public class HomeController : Controller { | ||||
|     public bool ProcessOoO() { | ||||
|  | ||||
|         try { | ||||
|             UserAccountDMO userDMO = new UserAccountDMO(); | ||||
|             UserAccountDMO userDMO = new(); | ||||
|             userDMO.ProcessOoO(); | ||||
|             return true; | ||||
|         } catch { | ||||
|             return false; | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     public bool ExpireOoO() { | ||||
|         try { | ||||
|             UserAccountDMO userDMO = new UserAccountDMO(); | ||||
|             UserAccountDMO userDMO = new(); | ||||
|             userDMO.ExpireOoO(); | ||||
|             return true; | ||||
|         } catch { | ||||
|             return false; | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     public bool ApprovalsReminderNotifications() { | ||||
|         try { | ||||
|             // Get list of approvals | ||||
| @ -417,12 +451,13 @@ public class HomeController : Controller { | ||||
|             return false; | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     public void NotifyApprover(string toEmail, string title, int issueId, string docType) { | ||||
|         try { | ||||
|             HomeHelper.NotifyApprover(_AppSettings, toEmail, title, issueId, docType); | ||||
|  | ||||
|             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 (Exception e) { | ||||
| @ -432,9 +467,38 @@ public class HomeController : Controller { | ||||
|             } catch { | ||||
|                 detailedException = e.Message; | ||||
|             } | ||||
|             EventLogDMO.Add(new WinEventLog() { IssueID = issueId, UserID = @User.Identity.Name, DocumentType = docType, OperationType = "Email", Comments = "Approval reminders" }); | ||||
|             throw e; | ||||
|             EventLogDMO.Add(new WinEventLog() { IssueID = issueId, UserID = GetUserIdentityName(), DocumentType = docType, OperationType = "Email", Comments = "Approval reminders" }); | ||||
|             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.Collections; | ||||
| using System.Collections.Generic; | ||||
| using System.Configuration; | ||||
| using System.Linq; | ||||
| using System.Reflection; | ||||
| using System.Runtime.Serialization; | ||||
| #if !NET8 | ||||
| using System.Web; | ||||
| 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.Misc; | ||||
| using Fab2ApprovalSystem.Models; | ||||
| using Fab2ApprovalSystem.ViewModels; | ||||
|  | ||||
| #if !NET8 | ||||
| using Kendo.Mvc.Extensions; | ||||
| using Kendo.Mvc.UI; | ||||
| #endif | ||||
|  | ||||
| #if !NET8 | ||||
| using System.Collections; | ||||
| using System.Configuration; | ||||
| using System.Runtime.Serialization; | ||||
| #endif | ||||
|  | ||||
| namespace Fab2ApprovalSystem.Controllers; | ||||
|  | ||||
| [Authorize] | ||||
| #if !NET8 | ||||
| [OutputCache(NoStore = true, Duration = 0, VaryByParam = "*")] | ||||
| [SessionExpireFilter] | ||||
| #endif | ||||
| #if NET8 | ||||
| [Route("[controller]")] | ||||
| #endif | ||||
| public class LotDispositionController : Controller { | ||||
|  | ||||
|     LotDispositionDMO ldDMO = new LotDispositionDMO(); | ||||
|     WorkflowDMO wfDMO = new WorkflowDMO(); | ||||
|     private readonly AppSettings _AppSettings = GlobalVars.AppSettings; | ||||
|     private readonly LotDispositionDMO ldDMO = new(); | ||||
|     private readonly WorkflowDMO wfDMO = new(); | ||||
|     private readonly AppSettings? _AppSettings = GlobalVars.AppSettings; | ||||
|  | ||||
|     // GET: /LotDisposition/Create | ||||
|     public ActionResult Create() { | ||||
|         LotDisposition lotDispo = new LotDisposition(); | ||||
|         LotDisposition lotDispo = new(); | ||||
|         try { | ||||
|             // insert a records to get the issueID | ||||
|  | ||||
|             lotDispo.OriginatorID = (int)Session[GlobalVars.SESSION_USERID]; | ||||
|             lotDispo.OriginatorID = GlobalVars.GetUserId(GetSession()); | ||||
|             ldDMO.InsertLotDisposition(lotDispo); | ||||
|             return RedirectToAction("Edit", new { issueID = lotDispo.IssueID.ToString() }); | ||||
|         } catch (Exception e) { | ||||
| @ -44,16 +62,16 @@ public class LotDispositionController : Controller { | ||||
|                 detailedException = e.Message; | ||||
|             } | ||||
|             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); | ||||
|             EventLogDMO.Add(new WinEventLog() { IssueID = lotDispo.IssueID, UserID = @User.Identity.Name, DocumentType = "Lot Disposition", OperationType = "Error", Comments = exceptionString }); | ||||
|             Functions.WriteEvent(_AppSettings, GetUserIdentityName() + "\r\nCreat Lot Disposition\r\n" + detailedException, System.Diagnostics.EventLogEntryType.Error); | ||||
|             EventLogDMO.Add(new WinEventLog() { IssueID = lotDispo.IssueID, UserID = GetUserIdentityName(), DocumentType = "Lot Disposition", OperationType = "Error", Comments = exceptionString }); | ||||
|             return View("Error"); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     public JsonResult AddLot(Lot lot) { | ||||
|         Lot l = lot; | ||||
|         MRB_DMO mrbDMO = new MRB_DMO(_AppSettings); | ||||
|         IssueWithExistingLotsViewModel issueWEL = new IssueWithExistingLotsViewModel(); | ||||
|         MRB_DMO mrbDMO = new(_AppSettings); | ||||
|         IssueWithExistingLotsViewModel issueWEL = new(); | ||||
|         try { | ||||
|  | ||||
|             lot.LotStatusOption.LotStatusOptionID = l.LotStatusOptionID; | ||||
| @ -67,22 +85,22 @@ public class LotDispositionController : Controller { | ||||
|                 detailedException = e.Message; | ||||
|             } | ||||
|             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); | ||||
|             EventLogDMO.Add(new WinEventLog() { IssueID = l.IssueID, UserID = @User.Identity.Name, DocumentType = "Lot Disposition", OperationType = "Error", Comments = exceptionString }); | ||||
|             Functions.WriteEvent(_AppSettings, GetUserIdentityName() + "\r\n Add Lot Disposition\r\n" + detailedException, System.Diagnostics.EventLogEntryType.Error); | ||||
|             EventLogDMO.Add(new WinEventLog() { IssueID = l.IssueID, UserID = GetUserIdentityName(), DocumentType = "Lot Disposition", OperationType = "Error", Comments = exceptionString }); | ||||
|             throw new Exception(e.Message); | ||||
|         } | ||||
|         return Json(l, JsonRequestBehavior.AllowGet); | ||||
|         return GetJsonResult(l); | ||||
|     } | ||||
|  | ||||
|     public JsonResult AddLots(string lotNumbers, int issueID) { | ||||
|         MRB_DMO mrbDMO = new MRB_DMO(_AppSettings); | ||||
|         MRB_DMO mrbDMO = new(_AppSettings); | ||||
|         bool existingLotUpdated; | ||||
|         IssueWithExistingLotsViewModel issueWEL = new IssueWithExistingLotsViewModel(); | ||||
|         IssueWithExistingLotsViewModel issueWEL = new(); | ||||
|         try { | ||||
|             if (lotNumbers.Length > 0) { | ||||
|                 string[] tempLots = lotNumbers.Split(new char[] { '~' }); | ||||
|                 foreach (string lotNumber in tempLots) { | ||||
|                     Lot l = new Lot(); | ||||
|                     Lot l = new(); | ||||
|                     l.LotNumber = lotNumber; | ||||
|                     l.IssueID = issueID; | ||||
|                     l.LotStatusOption.LotStatusOptionID = (int)GlobalVars.LotStatusOption.NotAvailable; | ||||
| @ -104,20 +122,19 @@ public class LotDispositionController : Controller { | ||||
|                 detailedException = e.Message; | ||||
|             } | ||||
|             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); | ||||
|             EventLogDMO.Add(new WinEventLog() { UserID = @User.Identity.Name, DocumentType = "Lot Disposition", OperationType = "Error", Comments = exceptionString }); | ||||
|             Functions.WriteEvent(_AppSettings, GetUserIdentityName() + "\r\n AddLots Disposition\r\n" + detailedException, System.Diagnostics.EventLogEntryType.Error); | ||||
|             EventLogDMO.Add(new WinEventLog() { UserID = GetUserIdentityName(), DocumentType = "Lot Disposition", OperationType = "Error", Comments = exceptionString }); | ||||
|             throw new Exception(e.Message); | ||||
|         } | ||||
|  | ||||
|         return Json(issueWEL, JsonRequestBehavior.AllowGet); | ||||
|         return GetJsonResult(issueWEL); | ||||
|     } | ||||
|  | ||||
|     // GET: /LotDisposition/Edit/5 | ||||
|     public ActionResult Edit(int issueID) { | ||||
|         int isITARCompliant = 1; | ||||
|         try { | ||||
|             LotDisposition lotDispo = new LotDisposition(); | ||||
|             lotDispo = ldDMO.GetLotDispositionItemForRead(issueID, out isITARCompliant, (int)Session[GlobalVars.SESSION_USERID]); | ||||
|             LotDisposition lotDispo = new(); | ||||
|             lotDispo = ldDMO.GetLotDispositionItemForRead(issueID, out isITARCompliant, GlobalVars.GetUserId(GetSession())); | ||||
|  | ||||
|             if (isITARCompliant == 0) // not ITAR Compliant | ||||
|             { | ||||
| @ -128,20 +145,20 @@ public class LotDispositionController : Controller { | ||||
|                 } | ||||
|                 if (lotDispo.CurrentStep == 1) { | ||||
|                     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) | ||||
|                         ViewBag.IsApprover = "false"; | ||||
|                     else | ||||
|                         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 }); | ||||
|                     } else { | ||||
|                         if ((ViewBag.IsApprover == "true" || (bool)Session[GlobalVars.IS_ADMIN]) | ||||
|                             || (int)Session[GlobalVars.SESSION_USERID] == lotDispo.OriginatorID) { | ||||
|                             lotDispo = ldDMO.GetLotDispositionItem(issueID, out isITARCompliant, (int)Session[GlobalVars.SESSION_USERID]); | ||||
|                         if ((ViewBag.IsApprover == "true" || GlobalVars.IsAdmin(GetSession())) | ||||
|                             || GlobalVars.GetUserId(GetSession()) == lotDispo.OriginatorID) { | ||||
|                             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(); | ||||
|                                 ViewBag.OriginatorList = ldDMO.GetUserList(); | ||||
|                                 ViewBag.deps = ldDMO.GetDepartments(); | ||||
| @ -159,7 +176,7 @@ public class LotDispositionController : Controller { | ||||
|                 } else if (lotDispo.CurrentStep > 1) { | ||||
|                     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) { | ||||
|                         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 }); | ||||
|                     } else { | ||||
|  | ||||
|                         if ((ViewBag.IsApprover == "true" || (bool)Session[GlobalVars.IS_ADMIN]) | ||||
|                            || (int)Session[GlobalVars.SESSION_USERID] == lotDispo.OriginatorID) { | ||||
|                         if ((ViewBag.IsApprover == "true" || GlobalVars.IsAdmin(GetSession())) | ||||
|                            || GlobalVars.GetUserId(GetSession()) == lotDispo.OriginatorID) { | ||||
|                             return RedirectToAction("EditStep", new { issueID = issueID }); | ||||
|  | ||||
|                         } else { | ||||
| @ -185,10 +202,10 @@ public class LotDispositionController : Controller { | ||||
|                 } else { | ||||
|                     // TODO | ||||
|                     // 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 }); | ||||
|                     } else { | ||||
|                         lotDispo = ldDMO.GetLotDispositionItem(issueID, out isITARCompliant, (int)Session[GlobalVars.SESSION_USERID]); | ||||
|                         lotDispo = ldDMO.GetLotDispositionItem(issueID, out isITARCompliant, GlobalVars.GetUserId(GetSession())); | ||||
|                         PopulateLotStatusOptions(); | ||||
|                         ViewBag.OriginatorList = ldDMO.GetUserList(); | ||||
|                         ViewBag.deps = ldDMO.GetDepartments(); | ||||
| @ -207,8 +224,8 @@ public class LotDispositionController : Controller { | ||||
|                 detailedException = e.Message; | ||||
|             } | ||||
|             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); | ||||
|             EventLogDMO.Add(new WinEventLog() { IssueID = issueID, UserID = @User.Identity.Name, DocumentType = "Lot Disposition", OperationType = "Error", Comments = exceptionString }); | ||||
|             Functions.WriteEvent(_AppSettings, GetUserIdentityName() + "\r\nEdit Lot Disposition\r\n" + detailedException, System.Diagnostics.EventLogEntryType.Error); | ||||
|             EventLogDMO.Add(new WinEventLog() { IssueID = issueID, UserID = GetUserIdentityName(), DocumentType = "Lot Disposition", OperationType = "Error", Comments = exceptionString }); | ||||
|             return View("Error"); | ||||
|         } | ||||
|     } | ||||
| @ -227,8 +244,8 @@ public class LotDispositionController : Controller { | ||||
|                 detailedException = e.Message; | ||||
|             } | ||||
|             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); | ||||
|             EventLogDMO.Add(new WinEventLog() { IssueID = lotDispo.IssueID, UserID = @User.Identity.Name, DocumentType = "Lot Disposition", OperationType = "Error", Comments = exceptionString }); | ||||
|             Functions.WriteEvent(_AppSettings, GetUserIdentityName() + "\r\n UpdatEdit Disposition\r\n" + detailedException, System.Diagnostics.EventLogEntryType.Error); | ||||
|             EventLogDMO.Add(new WinEventLog() { IssueID = lotDispo.IssueID, UserID = GetUserIdentityName(), DocumentType = "Lot Disposition", OperationType = "Error", Comments = exceptionString }); | ||||
|             throw new Exception(e.Message); | ||||
|         } | ||||
|     } | ||||
| @ -236,8 +253,8 @@ public class LotDispositionController : Controller { | ||||
|     public ActionResult ReadOnly(int issueID) { | ||||
|         int isITARCompliant = 1; | ||||
|         try { | ||||
|             LotDisposition lotDispo = new LotDisposition(); | ||||
|             lotDispo = ldDMO.GetLotDispositionItemForRead(issueID, out isITARCompliant, (int)Session[GlobalVars.SESSION_USERID]); | ||||
|             LotDisposition lotDispo = new(); | ||||
|             lotDispo = ldDMO.GetLotDispositionItemForRead(issueID, out isITARCompliant, GlobalVars.GetUserId(GetSession())); | ||||
|  | ||||
|             PopulateLotStatusOptions(); | ||||
|             ViewBag.OriginatorList = ldDMO.GetUserList(); | ||||
| @ -254,8 +271,8 @@ public class LotDispositionController : Controller { | ||||
|                 detailedException = e.Message; | ||||
|             } | ||||
|             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); | ||||
|             EventLogDMO.Add(new WinEventLog() { IssueID = issueID, UserID = @User.Identity.Name, DocumentType = "Lot Disposition", OperationType = "Error", Comments = exceptionString }); | ||||
|             Functions.WriteEvent(_AppSettings, GetUserIdentityName() + "\r\n ReadOnly Disposition\r\n" + detailedException, System.Diagnostics.EventLogEntryType.Error); | ||||
|             EventLogDMO.Add(new WinEventLog() { IssueID = issueID, UserID = GetUserIdentityName(), DocumentType = "Lot Disposition", OperationType = "Error", Comments = exceptionString }); | ||||
|             throw new Exception(e.Message); | ||||
|         } | ||||
|     } | ||||
| @ -264,10 +281,10 @@ public class LotDispositionController : Controller { | ||||
|         int isITARCompliant = 1; | ||||
|         try { | ||||
|  | ||||
|             LotDisposition lotDispo = new LotDisposition(); | ||||
|             lotDispo = ldDMO.GetLotDispositionItemForRead(issueID, out isITARCompliant, (int)Session[GlobalVars.SESSION_USERID]); | ||||
|             LotDisposition lotDispo = new(); | ||||
|             lotDispo = ldDMO.GetLotDispositionItemForRead(issueID, out isITARCompliant, GlobalVars.GetUserId(GetSession())); | ||||
|             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) | ||||
|                 ViewBag.IsApprover = "false"; | ||||
|             else | ||||
| @ -275,10 +292,10 @@ public class LotDispositionController : Controller { | ||||
|  | ||||
|             // Check the recordlock indicator | ||||
|  | ||||
|             if ((ViewBag.IsApprover == "true" || (bool)Session[GlobalVars.IS_ADMIN])) { | ||||
|                 lotDispo = ldDMO.GetLotDispositionItem(issueID, out isITARCompliant, (int)Session[GlobalVars.SESSION_USERID]); | ||||
|             if ((ViewBag.IsApprover == "true" || GlobalVars.IsAdmin(GetSession()))) { | ||||
|                 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(); | ||||
|                     ViewBag.OriginatorList = ldDMO.GetUserList(); | ||||
|                     ViewBag.deps = ldDMO.GetDepartments(); | ||||
| @ -301,8 +318,8 @@ public class LotDispositionController : Controller { | ||||
|                 detailedException = e.Message; | ||||
|             } | ||||
|             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); | ||||
|             EventLogDMO.Add(new WinEventLog() { IssueID = issueID, UserID = @User.Identity.Name, DocumentType = "Lot Disposition", OperationType = "Error", Comments = exceptionString }); | ||||
|             Functions.WriteEvent(_AppSettings, GetUserIdentityName() + "\r\n EditStep Disposition\r\n" + detailedException, System.Diagnostics.EventLogEntryType.Error); | ||||
|             EventLogDMO.Add(new WinEventLog() { IssueID = issueID, UserID = GetUserIdentityName(), DocumentType = "Lot Disposition", OperationType = "Error", Comments = exceptionString }); | ||||
|             throw new Exception(e.Message); | ||||
|         } | ||||
|     } | ||||
| @ -315,30 +332,32 @@ public class LotDispositionController : Controller { | ||||
|     public JsonResult GetResponsibilityIssue(int responsibilityID) { | ||||
|         List<ResponsibilityIssue> respIssue = ldDMO.GetResponsibilityIssueList(responsibilityID); | ||||
|  | ||||
|         var data = respIssue.Select(s => new SelectListItem { Value = s.ResponsibilityIssueID.ToString(), Text = s.Issue }); | ||||
|         return Json(data, JsonRequestBehavior.AllowGet); | ||||
|         var data = respIssue.Select(s => new SelectListItem() { Value = s.ResponsibilityIssueID.ToString(), Text = s.Issue }); | ||||
|         return GetJsonResult(data); | ||||
|     } | ||||
|  | ||||
| #if !NET8 | ||||
|  | ||||
|     public JsonResult GetDepartments([DataSourceRequest] DataSourceRequest request) { | ||||
|         var departments = ldDMO.GetDepartments(); | ||||
|         return Json(departments, JsonRequestBehavior.AllowGet); | ||||
|         return GetJsonResult(departments); | ||||
|     } | ||||
|  | ||||
| #endif | ||||
|  | ||||
|     public void PopulateLotStatusOptions() { | ||||
|         var lotStatusOptions = ldDMO.GetLotStatusOptions(); | ||||
|         ViewData["LotStatusOptions"] = lotStatusOptions; | ||||
|     } | ||||
|  | ||||
| #if !NET8 | ||||
|  | ||||
|     public ActionResult EditingCustom_Read([DataSourceRequest] DataSourceRequest request, int issueID) { | ||||
|         return Json(ldDMO.GetLotDispositionLots(issueID).ToDataSourceResult(request)); | ||||
|     } | ||||
|  | ||||
|     /// <summary> | ||||
|     /// Updates the lot tables | ||||
|     /// </summary> | ||||
|     [AcceptVerbs(HttpVerbs.Post)] | ||||
|     public ActionResult EditingCustom_Update([DataSourceRequest] DataSourceRequest request, Lot lot) { | ||||
|  | ||||
|         if (lot != null && ModelState.IsValid) { | ||||
|             ldDMO.UpdateLotDispoLot(lot); | ||||
|         } | ||||
| @ -347,10 +366,6 @@ public class LotDispositionController : Controller { | ||||
|         return Json(new[] { lot }.ToDataSourceResult(request, ModelState)); | ||||
|     } | ||||
|  | ||||
|     /// <summary> | ||||
|     /// Deletes record from the lot table | ||||
|     /// </summary> | ||||
|  | ||||
|     [AcceptVerbs(HttpVerbs.Post)] | ||||
|     public ActionResult EditingCustom_Destroy([DataSourceRequest] DataSourceRequest request, Lot lot) { | ||||
|         try { | ||||
| @ -366,8 +381,6 @@ public class LotDispositionController : Controller { | ||||
|         return Json(new[] { lot }.ToDataSourceResult(request, ModelState)); | ||||
|     } | ||||
|  | ||||
|     // REGION ATTACHMENT | ||||
|  | ||||
|     public ActionResult Attachment_Read([DataSourceRequest] DataSourceRequest request, int issueID) { | ||||
|         return Json(ldDMO.GetLotDispoAttachments(issueID).ToDataSourceResult(request)); | ||||
|     } | ||||
| @ -385,6 +398,8 @@ public class LotDispositionController : Controller { | ||||
|         return Json(new[] { attachment }.ToDataSourceResult(request, ModelState)); | ||||
|     } | ||||
|  | ||||
| #endif | ||||
|  | ||||
|     [HttpPost] | ||||
|     public void DeleteAttachment(int attachmentID, string fileName) { | ||||
|         try { | ||||
| @ -392,7 +407,7 @@ public class LotDispositionController : Controller { | ||||
|                 ldDMO.DeleteLotDispoAttachment(attachmentID); | ||||
|                 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) | ||||
|                     f.Delete(); | ||||
| @ -406,21 +421,23 @@ public class LotDispositionController : Controller { | ||||
|                 detailedException = e.Message; | ||||
|             } | ||||
|             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); | ||||
|             EventLogDMO.Add(new WinEventLog() { IssueID = 999, UserID = @User.Identity.Name, DocumentType = "Lot Disposition", OperationType = "Error", Comments = "AttachmentID Disposition " + exceptionString }); | ||||
|             Functions.WriteEvent(_AppSettings, GetUserIdentityName() + "\r\n AttachmentID Disposition\r\n" + detailedException, System.Diagnostics.EventLogEntryType.Error); | ||||
|             EventLogDMO.Add(new WinEventLog() { IssueID = 999, UserID = GetUserIdentityName(), DocumentType = "Lot Disposition", OperationType = "Error", Comments = "AttachmentID Disposition " + exceptionString }); | ||||
|             throw new Exception(e.Message); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     public JsonResult GetLotDispoAttachments(int issueID) { | ||||
|         var model = ldDMO.GetLotDispoAttachments(issueID); | ||||
|         return Json(model, JsonRequestBehavior.AllowGet); | ||||
|         return GetJsonResult(model); | ||||
|     } | ||||
|  | ||||
| #if !NET8 | ||||
|  | ||||
|     public ActionResult AttachSave(IEnumerable<HttpPostedFileBase> files, int issueID) { | ||||
|         // The Name of the Upload component is "files" | ||||
|         if (files != null) { | ||||
|             int userId = (int)Session[GlobalVars.SESSION_USERID]; | ||||
|             int userId = GlobalVars.GetUserId(GetSession()); | ||||
|             foreach (var file in files) { | ||||
|                 LotDispositionHelper.AttachSave(_AppSettings, ldDMO, issueID, userId, file.FileName, file.InputStream); | ||||
|             } | ||||
| @ -429,10 +446,11 @@ public class LotDispositionController : Controller { | ||||
|         return Content(""); | ||||
|     } | ||||
|  | ||||
|     public JsonResult SearchLots(string searchText, string searchBy) { | ||||
|         List<String> lotlist = MiscDMO.SearchLots(searchText, searchBy).Select(x => x.LotNumber).ToList<String>(); | ||||
| #endif | ||||
|  | ||||
|         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) { | ||||
| @ -440,10 +458,12 @@ public class LotDispositionController : Controller { | ||||
|         ldDMO.DeleteAllLotDispoLot(issueID); | ||||
|     } | ||||
|  | ||||
| #if !NET8 | ||||
|     [OutputCache(NoStore = true, Duration = 0, VaryByParam = "*")] | ||||
| #endif | ||||
|     public ActionResult LotStatusDetail(int issueID, string lotNumber, bool readonlyView, string lotLocation = "") { | ||||
|         ViewBag.LotLocation = lotLocation; | ||||
|         var model = new ScrapLot(); | ||||
|         ScrapLot model = new(); | ||||
|         var data = ldDMO.GetLotStausDetail(issueID, lotNumber); | ||||
|         if (data != null) | ||||
|             model = data; | ||||
| @ -470,7 +490,8 @@ public class LotDispositionController : Controller { | ||||
|         try { | ||||
|             foreach (PropertyInfo pi in sl.GetType().GetProperties()) { | ||||
|                 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) { | ||||
|                         releaseCount++; | ||||
|                         // required to update the lot status option | ||||
| @ -498,8 +519,8 @@ public class LotDispositionController : Controller { | ||||
|                 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(); | ||||
|             Functions.WriteEvent(_AppSettings, @User.Identity.Name + "\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 }); | ||||
|             Functions.WriteEvent(_AppSettings, GetUserIdentityName() + "\r\n Scrap Disposition\r\n" + detailedException, System.Diagnostics.EventLogEntryType.Error); | ||||
|             EventLogDMO.Add(new WinEventLog() { IssueID = sl.IssueID, UserID = GetUserIdentityName(), DocumentType = "Lot Disposition", OperationType = "Error", Comments = "UpdateLotScrapReleaseStatus - " + exceptionString }); | ||||
|             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 | ||||
|     /// </summary> | ||||
|     public void ReleaseAll(int issueID) { | ||||
|         ScrapLot sl = new ScrapLot(); | ||||
|         ScrapLot sl = new(); | ||||
|         try { | ||||
|             sl.IssueID = issueID; | ||||
|             foreach (PropertyInfo pi in sl.GetType().GetProperties()) { | ||||
| @ -526,8 +547,8 @@ public class LotDispositionController : Controller { | ||||
|                 detailedException = e.Message; | ||||
|             } | ||||
|             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); | ||||
|             EventLogDMO.Add(new WinEventLog() { IssueID = sl.IssueID, UserID = @User.Identity.Name, DocumentType = "Lot Disposition", OperationType = "Error", Comments = "ReleaseAll - " + exceptionString }); | ||||
|             Functions.WriteEvent(_AppSettings, GetUserIdentityName() + "\r\n Release All Disposition\r\n" + detailedException, System.Diagnostics.EventLogEntryType.Error); | ||||
|             EventLogDMO.Add(new WinEventLog() { IssueID = sl.IssueID, UserID = GetUserIdentityName(), DocumentType = "Lot Disposition", OperationType = "Error", Comments = "ReleaseAll - " + exceptionString }); | ||||
|             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 | ||||
|     /// </summary> | ||||
|     public void ScrapAll(int issueID) { | ||||
|         ScrapLot sl = new ScrapLot(); | ||||
|         ScrapLot sl = new(); | ||||
|         try { | ||||
|             sl.IssueID = issueID; | ||||
|             foreach (PropertyInfo pi in sl.GetType().GetProperties()) { | ||||
| @ -554,20 +575,20 @@ public class LotDispositionController : Controller { | ||||
|                 detailedException = e.Message; | ||||
|             } | ||||
|             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); | ||||
|             EventLogDMO.Add(new WinEventLog() { IssueID = sl.IssueID, UserID = @User.Identity.Name, DocumentType = "Lot Disposition", OperationType = "Error", Comments = "ScrapAll - " + exceptionString }); | ||||
|             Functions.WriteEvent(_AppSettings, GetUserIdentityName() + "\r\n Scrap All Disposition\r\n" + detailedException, System.Diagnostics.EventLogEntryType.Error); | ||||
|             EventLogDMO.Add(new WinEventLog() { IssueID = sl.IssueID, UserID = GetUserIdentityName(), DocumentType = "Lot Disposition", OperationType = "Error", Comments = "ScrapAll - " + exceptionString }); | ||||
|             throw new Exception(e.Message); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     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) { | ||||
|         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) | ||||
|                 NotifyApprovers(issueID, (byte)GlobalVars.WorkFLowStepNumber.Step1); | ||||
|             else { | ||||
| @ -576,10 +597,11 @@ public class LotDispositionController : Controller { | ||||
|  | ||||
|             } | ||||
|  | ||||
|             if (Request.IsAjaxRequest()) { | ||||
|             if (IsAjaxRequest()) { | ||||
|                 return Content("Redirect"); | ||||
|             } else | ||||
|             } else { | ||||
|                 return Content("Invalid"); | ||||
|             } | ||||
|         } catch (Exception e) { | ||||
|             string detailedException = ""; | ||||
|             try { | ||||
| @ -588,11 +610,11 @@ public class LotDispositionController : Controller { | ||||
|                 detailedException = e.Message; | ||||
|             } | ||||
|             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); | ||||
|             EventLogDMO.Add(new WinEventLog() { IssueID = issueID, UserID = @User.Identity.Name, DocumentType = "Lot Disposition", OperationType = "Error", Comments = "SubmitDocument - " + exceptionString }); | ||||
|             Functions.WriteEvent(_AppSettings, GetUserIdentityName() + "\r\n SubmitDocument\r\n" + detailedException, System.Diagnostics.EventLogEntryType.Error); | ||||
|             EventLogDMO.Add(new WinEventLog() { IssueID = issueID, UserID = GetUserIdentityName(), DocumentType = "Lot Disposition", OperationType = "Error", Comments = "SubmitDocument - " + exceptionString }); | ||||
|  | ||||
|             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; | ||||
|         try { | ||||
|             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) { | ||||
|                 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); | ||||
|             } | ||||
|         } catch (Exception e) { | ||||
| @ -617,16 +639,16 @@ public class LotDispositionController : Controller { | ||||
|                 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(); | ||||
|             Functions.WriteEvent(_AppSettings, @User.Identity.Name + "\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 }); | ||||
|             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 = GetUserIdentityName(), DocumentType = "Lot Disposition", OperationType = "Error", Comments = "Approve - " + exceptionString }); | ||||
|             throw new Exception(e.Message); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     public void Reject(int issueID, byte currentStep, string comments) { | ||||
|         try { | ||||
|             if (Session[GlobalVars.SESSION_USERID] != null) { | ||||
|                 wfDMO.Reject(issueID, currentStep, comments, (int)Session[GlobalVars.SESSION_USERID], (int)GlobalVars.DocumentType.LotDisposition); | ||||
|             if (GlobalVars.IsUserIdValueNotNull(GetSession())) { | ||||
|                 wfDMO.Reject(issueID, currentStep, comments, GlobalVars.GetUserId(GetSession()), (int)GlobalVars.DocumentType.LotDisposition); | ||||
|                 NotifyRejectionToOrginator(issueID); | ||||
|             } else { | ||||
|  | ||||
| @ -640,29 +662,30 @@ public class LotDispositionController : Controller { | ||||
|                 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(); | ||||
|             Functions.WriteEvent(_AppSettings, @User.Identity.Name + "\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 }); | ||||
|             Functions.WriteEvent(_AppSettings, GetUserIdentityName() + "\r\n Reject\r\n" + detailedException, System.Diagnostics.EventLogEntryType.Error); | ||||
|             EventLogDMO.Add(new WinEventLog() { IssueID = issueID, UserID = GetUserIdentityName(), DocumentType = "Lot Disposition", OperationType = "Error", Comments = "Reject - " + exceptionString }); | ||||
|             throw new Exception(e.Message); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     /// <summary> | ||||
|     /// Get a list of Approvers and the status | ||||
|     /// </summary> | ||||
| #if !NET8 | ||||
|  | ||||
|     public ActionResult GetApproversList([DataSourceRequest] DataSourceRequest request, int issueID, byte step) { | ||||
|         return Json(MiscDMO.GetApproversListByDocument(issueID, step, (int)GlobalVars.DocumentType.LotDisposition).ToDataSourceResult(request)); | ||||
|     } | ||||
|  | ||||
| #endif | ||||
|  | ||||
|     public JsonResult GetAllUsersList() { | ||||
|         UserAccountDMO userDMO = new UserAccountDMO(); | ||||
|         UserAccountDMO userDMO = new(); | ||||
|         IEnumerable<LoginModel> userlist = userDMO.GetAllUsers(); | ||||
|         return Json(userlist, JsonRequestBehavior.AllowGet); | ||||
|         return GetJsonResult(userlist); | ||||
|     } | ||||
|  | ||||
|     public void ReAssignApproval(int issueID, int userIDs, byte step) { | ||||
|         var email = ""; | ||||
|         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) { | ||||
|             string detailedException = ""; | ||||
|             try { | ||||
| @ -671,13 +694,13 @@ public class LotDispositionController : Controller { | ||||
|                 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(); | ||||
|             Functions.WriteEvent(_AppSettings, @User.Identity.Name + "\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 }); | ||||
|             Functions.WriteEvent(_AppSettings, GetUserIdentityName() + "\r\n ReAssignApproval\r\n" + detailedException, System.Diagnostics.EventLogEntryType.Error); | ||||
|             EventLogDMO.Add(new WinEventLog() { IssueID = issueID, UserID = GetUserIdentityName(), DocumentType = "Lot Disposition", OperationType = "Error", Comments = "ReAssignApproval - " + exceptionString }); | ||||
|             throw new Exception(e.Message); | ||||
|         } | ||||
|         LotDispositionHelper.ReAssignApproval(_AppSettings, issueID, email); | ||||
|         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 { } | ||||
|     } | ||||
|  | ||||
| @ -693,22 +716,22 @@ public class LotDispositionController : Controller { | ||||
|                 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(); | ||||
|             Functions.WriteEvent(_AppSettings, @User.Identity.Name + "\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 }); | ||||
|             Functions.WriteEvent(_AppSettings, GetUserIdentityName() + "\r\n ReAssignApproval\r\n" + detailedException, System.Diagnostics.EventLogEntryType.Error); | ||||
|             EventLogDMO.Add(new WinEventLog() { IssueID = issueID, UserID = GetUserIdentityName(), DocumentType = "Lot Disposition", OperationType = "Error", Comments = "ReAssignApproval - " + exceptionString }); | ||||
|             throw new Exception(e.Message); | ||||
|         } | ||||
|         LotDispositionHelper.ReAssignApproverByAdmin(_AppSettings, issueID, email); | ||||
|         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 { } | ||||
|     } | ||||
|  | ||||
|     #region Additional Approvers | ||||
|  | ||||
|     public JsonResult GetUserListForAdditionalAppprrovers() { | ||||
|         UserAccountDMO userDMO = new UserAccountDMO(); | ||||
|         UserAccountDMO userDMO = new(); | ||||
|         IEnumerable<LoginModel> userlist = userDMO.GetAllUsers(); | ||||
|         return Json(userlist, JsonRequestBehavior.AllowGet); | ||||
|         return GetJsonResult(userlist); | ||||
|     } | ||||
|  | ||||
|     public void AddAdditionalApproval(int issueID, byte step, string userIDs) { | ||||
| @ -724,13 +747,13 @@ public class LotDispositionController : Controller { | ||||
|                 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(); | ||||
|             Functions.WriteEvent(_AppSettings, @User.Identity.Name + "\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 }); | ||||
|             Functions.WriteEvent(_AppSettings, GetUserIdentityName() + "\r\n AddAdditionalApproval\r\n" + detailedException, System.Diagnostics.EventLogEntryType.Error); | ||||
|             EventLogDMO.Add(new WinEventLog() { IssueID = issueID, UserID = GetUserIdentityName(), DocumentType = "Lot Disposition", OperationType = "Error", Comments = "AddAdditionalApproval - " + exceptionString }); | ||||
|             throw new Exception(e.Message); | ||||
|         } | ||||
|         emailSentList = LotDispositionHelper.AddAdditionalApproval(_AppSettings, issueID, emailSentList, emailArray); | ||||
|         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 { } | ||||
|     } | ||||
|  | ||||
| @ -741,7 +764,7 @@ public class LotDispositionController : Controller { | ||||
|             List<string> emailIst = MiscDMO.GetApproverEmailListByDocument(@issueID, currentStep, (int)GlobalVars.DocumentType.LotDisposition).Distinct().ToList(); | ||||
|             string emailSentList = LotDispositionHelper.NotifyApprovers(_AppSettings, issueID, emailIst); | ||||
|             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 (Exception e) { | ||||
|             string detailedException = ""; | ||||
| @ -751,19 +774,19 @@ public class LotDispositionController : Controller { | ||||
|                 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(); | ||||
|             Functions.WriteEvent(_AppSettings, @User.Identity.Name + "\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 }); | ||||
|             throw e; | ||||
|             Functions.WriteEvent(_AppSettings, GetUserIdentityName() + "\r\n Lot Dispo - NotifyApprovers\r\n" + detailedException, System.Diagnostics.EventLogEntryType.Error); | ||||
|             EventLogDMO.Add(new WinEventLog() { IssueID = issueID, UserID = GetUserIdentityName(), DocumentType = "Lot Disposition", OperationType = "Error", Comments = "AddAdditionalApproval - " + exceptionString }); | ||||
|             throw; | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     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(); | ||||
|         string userEmail = LotDispositionHelper.NotifyRejectionToOrginator(_AppSettings, issueID, username, emailIst); | ||||
|         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 { } | ||||
|     } | ||||
|  | ||||
| @ -778,19 +801,23 @@ public class LotDispositionController : Controller { | ||||
|                 detailedException = e.Message; | ||||
|             } | ||||
|             string exceptionString = e.Message.ToString().Trim(); | ||||
|             Functions.WriteEvent(_AppSettings, @User.Identity.Name + "\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 }); | ||||
|             Functions.WriteEvent(_AppSettings, GetUserIdentityName() + "\r\n UpdateReasonForDisposition\r\n" + detailedException, System.Diagnostics.EventLogEntryType.Error); | ||||
|             EventLogDMO.Add(new WinEventLog() { IssueID = issueID, UserID = GetUserIdentityName(), DocumentType = "Lot Disposition", OperationType = "Error", Comments = "UpdateReasonForDisposition - " + exceptionString }); | ||||
|             throw new Exception(e.Message); | ||||
|         } | ||||
|     } | ||||
|  | ||||
| #if !NET8 | ||||
|  | ||||
|     public ActionResult GetComments([DataSourceRequest] DataSourceRequest request, int issueID) { | ||||
|         return Json(ldDMO.GetComments(issueID).ToDataSourceResult(request)); | ||||
|     } | ||||
|  | ||||
| #endif | ||||
|  | ||||
|     public void InsertComments(int issueID, string Comments) { | ||||
|         try { | ||||
|             ldDMO.InsertComments(issueID, Comments, (int)Session[GlobalVars.SESSION_USERID]); | ||||
|             ldDMO.InsertComments(issueID, Comments, GlobalVars.GetUserId(GetSession())); | ||||
|         } catch (Exception e) { | ||||
|             string detailedException = ""; | ||||
|             try { | ||||
| @ -799,17 +826,19 @@ public class LotDispositionController : Controller { | ||||
|                 detailedException = e.Message; | ||||
|             } | ||||
|             string exceptionString = e.Message.ToString().Trim(); | ||||
|             Functions.WriteEvent(_AppSettings, @User.Identity.Name + "\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 }); | ||||
|             Functions.WriteEvent(_AppSettings, GetUserIdentityName() + "\r\n UpdateCopmments\r\n" + detailedException, System.Diagnostics.EventLogEntryType.Error); | ||||
|             EventLogDMO.Add(new WinEventLog() { IssueID = issueID, UserID = GetUserIdentityName(), DocumentType = "Lot Disposition", OperationType = "Error", Comments = "UpdateCopmments - " + exceptionString }); | ||||
|             throw new Exception(e.Message); | ||||
|         } | ||||
|     } | ||||
|  | ||||
| #if !NET8 | ||||
|  | ||||
|     public ActionResult ExcelLotOpen(IEnumerable<HttpPostedFileBase> Lotfile, int issueID) { | ||||
|         MRB_DMO mrbDMO = new MRB_DMO(_AppSettings); | ||||
|         var physicalPath = ""; | ||||
|         try { | ||||
|             string userIdentityName = @User.Identity.Name; | ||||
|             string userIdentityName = GetUserIdentityName(); | ||||
|             foreach (var file in Lotfile) { | ||||
|                 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) { | ||||
|         try { | ||||
|             ldDMO.ReleaseLockOnDocument((int)Session[GlobalVars.SESSION_USERID], issueID); | ||||
|             ldDMO.ReleaseLockOnDocument(GlobalVars.GetUserId(GetSession()), issueID); | ||||
|         } catch (Exception e) { | ||||
|             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 { } | ||||
|             ldDMO.ReleaseLockOnDocument(-1, issueID); | ||||
|         } | ||||
| @ -857,4 +888,34 @@ public class LotDispositionController : Controller { | ||||
|  | ||||
|         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.Collections.Generic; | ||||
| using System.Configuration; | ||||
| using System.Diagnostics; | ||||
| using System.Dynamic; | ||||
| using System.Linq; | ||||
| using System.Text; | ||||
| using System.Threading; | ||||
| #if !NET8 | ||||
| using System.Web; | ||||
| using System.Web.Mvc; | ||||
| using System.Web.Script.Serialization; | ||||
| #endif | ||||
|  | ||||
| #if NET8 | ||||
| using Microsoft.AspNetCore.Mvc; | ||||
| using Microsoft.AspNetCore.Authorization; | ||||
| #endif | ||||
|  | ||||
| using Fab2ApprovalSystem.DMO; | ||||
| using Fab2ApprovalSystem.Misc; | ||||
| using Fab2ApprovalSystem.Models; | ||||
| using Fab2ApprovalSystem.ViewModels; | ||||
|  | ||||
| #if !NET8 | ||||
| using System.Dynamic; | ||||
| using System.Threading; | ||||
| using System.Configuration; | ||||
| #endif | ||||
|  | ||||
| #if !NET8 | ||||
| using Kendo.Mvc.Extensions; | ||||
| using Kendo.Mvc.UI; | ||||
| #endif | ||||
|  | ||||
| namespace Fab2ApprovalSystem.Controllers; | ||||
|  | ||||
| [Authorize] | ||||
| #if !NET8 | ||||
| [OutputCache(NoStore = true, Duration = 0, VaryByParam = "*")] | ||||
| [SessionExpireFilter] | ||||
| #endif | ||||
| #if NET8 | ||||
| [Route("[controller]")] | ||||
| #endif | ||||
| public class MRBController : Controller { | ||||
|  | ||||
|     MRB_DMO mrbDMO = new MRB_DMO(GlobalVars.AppSettings); | ||||
|     WorkflowDMO wfDMO = new WorkflowDMO(); | ||||
|     CredentialsStorage credentialsStorage = new CredentialsStorage(); | ||||
|     private readonly MRB_DMO mrbDMO = new(GlobalVars.AppSettings); | ||||
|     private readonly WorkflowDMO wfDMO = new(); | ||||
|     private readonly CredentialsStorage credentialsStorage = new(); | ||||
|     private readonly AppSettings _AppSettings = GlobalVars.AppSettings; | ||||
|  | ||||
|     // GET: /MRB/ | ||||
| @ -42,25 +59,27 @@ public class MRBController : Controller { | ||||
|  | ||||
|     // GET: /MRB/Create | ||||
|     public ActionResult Create() { | ||||
|         MRB mrb = new MRB(); | ||||
|         MRB_DMO mrbDMO = new MRB_DMO(_AppSettings); | ||||
|         mrb.OriginatorID = (int)Session[GlobalVars.SESSION_USERID]; | ||||
|         MRB mrb = new(); | ||||
|         MRB_DMO mrbDMO = new(_AppSettings); | ||||
|         mrb.OriginatorID = GlobalVars.GetUserId(GetSession()); | ||||
|         mrbDMO.InsertMRB(mrb); | ||||
|  | ||||
|         // Automatically Submit the Document as soon as an MRB is created | ||||
|         try { | ||||
|             PopulateCloseToQDB(); | ||||
|             mrbDMO.SubmitDocument(mrb.MRBNumber, (int)Session[GlobalVars.SESSION_USERID]); | ||||
|             mrbDMO.SubmitDocument(mrb.MRBNumber, GlobalVars.GetUserId(GetSession())); | ||||
|         } catch (Exception e) { | ||||
|             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); | ||||
|             EventLogDMO.Add(new WinEventLog() { IssueID = mrb.MRBNumber, UserID = @User.Identity.Name, DocumentType = "MRB", OperationType = "Error", Comments = "SubmitDocument - " + exceptionString }); | ||||
|             Functions.WriteEvent(_AppSettings, GetUserIdentityName() + "\r\n SubmitDocument - MRB\r\n" + e.Message.ToString(), EventLogEntryType.Error); | ||||
|             EventLogDMO.Add(new WinEventLog() { IssueID = mrb.MRBNumber, UserID = GetUserIdentityName(), DocumentType = "MRB", OperationType = "Error", Comments = "SubmitDocument - " + exceptionString }); | ||||
|             throw new Exception(e.Message); | ||||
|         } | ||||
|  | ||||
|         return RedirectToAction("Edit", new { IssueID = mrb.MRBNumber }); | ||||
|     } | ||||
|  | ||||
| #if !NET8 | ||||
|  | ||||
|     // POST: /MRB/Create | ||||
|     [HttpPost] | ||||
|     public ActionResult Create(FormCollection collection) { | ||||
| @ -73,15 +92,15 @@ public class MRBController : Controller { | ||||
|         } | ||||
|     } | ||||
|  | ||||
| #endif | ||||
|  | ||||
|     // GET: /MRB/Edit/5 | ||||
|     public ActionResult Edit(int issueID) { | ||||
|         string jwt = Session["JWT"].ToString(); | ||||
|         string jwt = GlobalVars.GetJWT(GetSession()); | ||||
|         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 wasmClientUrl = Environment.GetEnvironmentVariable("FabApprovalWasmClientUrl") ?? | ||||
|             "https://localhost:7255"; | ||||
|         string mrbUrl = $"{wasmClientUrl}/redirect?jwt={encodedJwt}&refreshToken={encodedRefreshToken}&redirectPath=/mrb/{issueID}"; | ||||
|         string mrbUrl = $"{GlobalVars.AppSettings.WasmClientUrl}/redirect?jwt={encodedJwt}&refreshToken={encodedRefreshToken}&redirectPath=mrb/{issueID}"; | ||||
|  | ||||
|         return Redirect(mrbUrl); | ||||
|     } | ||||
| @ -93,20 +112,18 @@ public class MRBController : Controller { | ||||
|             mrbDMO.UpdateMRB(mrb); | ||||
|         } catch (Exception e) { | ||||
|             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); | ||||
|             EventLogDMO.Add(new WinEventLog() { IssueID = mrb.MRBNumber, UserID = @User.Identity.Name, DocumentType = "MRB", OperationType = "Error", Comments = exceptionString }); | ||||
|             Functions.WriteEvent(_AppSettings, GetUserIdentityName() + "\r\n UpdateEdit MRB\r\n" + e.Message.ToString(), EventLogEntryType.Error); | ||||
|             EventLogDMO.Add(new WinEventLog() { IssueID = mrb.MRBNumber, UserID = GetUserIdentityName(), DocumentType = "MRB", OperationType = "Error", Comments = exceptionString }); | ||||
|             throw new Exception(e.Message); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     public ActionResult ReadOnly(int issueID) { | ||||
|         string jwt = Session["JWT"].ToString(); | ||||
|         string jwt = GlobalVars.GetJWT(GetSession()); | ||||
|         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 wasmClientUrl = Environment.GetEnvironmentVariable("FabApprovalWasmClientUrl") ?? | ||||
|             "https://localhost:7255"; | ||||
|         string mrbUrl = $"{wasmClientUrl}/redirect?jwt={encodedJwt}&refreshToken={encodedRefreshToken}&redirectPath=/mrb/{issueID}"; | ||||
|         string mrbUrl = $"{GlobalVars.AppSettings.WasmClientUrl}/redirect?jwt={encodedJwt}&refreshToken={encodedRefreshToken}&redirectPath=mrb/{issueID}"; | ||||
|  | ||||
|         return Redirect(mrbUrl); | ||||
|     } | ||||
| @ -116,6 +133,8 @@ public class MRBController : Controller { | ||||
|         return View(); | ||||
|     } | ||||
|  | ||||
| #if !NET8 | ||||
|  | ||||
|     // POST: /MRB/Delete/5 | ||||
|     [HttpPost] | ||||
|     public ActionResult Delete(int id, FormCollection collection) { | ||||
| @ -128,23 +147,31 @@ public class MRBController : Controller { | ||||
|         } | ||||
|     } | ||||
|  | ||||
| #endif | ||||
|  | ||||
|     public JsonResult SearchLots(string searchText, string searchBy) { | ||||
|         List<String> lotlist = MiscDMO.SearchLots(searchText, searchBy).Select(x => x.LotNumber).ToList<String>(); | ||||
|         return Json(lotlist, JsonRequestBehavior.AllowGet); | ||||
|         List<string> lotlist = MiscDMO.SearchLots(searchText, searchBy).Select(x => x.LotNumber).ToList(); | ||||
|         return GetJsonResult(lotlist); | ||||
|     } | ||||
|  | ||||
| #if !NET8 | ||||
|  | ||||
|     public ActionResult GetMRBLots([DataSourceRequest] DataSourceRequest request, int mrbNumber) { | ||||
|         return Json(mrbDMO.GetMRBLots(mrbNumber).ToDataSourceResult(request)); | ||||
|     } | ||||
|  | ||||
| #endif | ||||
|  | ||||
|     [HttpGet] | ||||
|     public ActionResult GetTools() { | ||||
|         return Json(mrbDMO.GetTools(), JsonRequestBehavior.AllowGet); | ||||
|         return GetJsonResult(mrbDMO.GetTools()); | ||||
|     } | ||||
|  | ||||
|     /// <summary> | ||||
|     /// Updates the lot tables | ||||
|     /// </summary> | ||||
| #if !NET8 | ||||
|  | ||||
|     [AcceptVerbs(HttpVerbs.Post)] | ||||
|     public ActionResult UpdateMRBLot([DataSourceRequest] DataSourceRequest request, Lot lot) { | ||||
|         if (lot != null && ModelState.IsValid) { | ||||
| @ -172,6 +199,8 @@ public class MRBController : Controller { | ||||
|         return Json(new[] { lot }.ToDataSourceResult(request, ModelState)); | ||||
|     } | ||||
|  | ||||
| #endif | ||||
|  | ||||
|     public void DeleteAllMRBLots(int issueID) { | ||||
|         // trap the error on then client side | ||||
|         mrbDMO.DeleteAllMRBLot(issueID); | ||||
| @ -187,24 +216,24 @@ public class MRBController : Controller { | ||||
|             mrbDMO.InsertLot(lot, false, out existingRowUpdated); | ||||
|         } catch (Exception e) { | ||||
|             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); | ||||
|             EventLogDMO.Add(new WinEventLog() { IssueID = l.IssueID, UserID = @User.Identity.Name, DocumentType = "MRB", OperationType = "Error", Comments = exceptionString }); | ||||
|             Functions.WriteEvent(_AppSettings, GetUserIdentityName() + "\r\n Add Lot Disposition\r\n" + e.Message.ToString(), EventLogEntryType.Error); | ||||
|             EventLogDMO.Add(new WinEventLog() { IssueID = l.IssueID, UserID = GetUserIdentityName(), DocumentType = "MRB", OperationType = "Error", Comments = exceptionString }); | ||||
|             throw new Exception(e.Message); | ||||
|         } | ||||
|         return Json(l, JsonRequestBehavior.AllowGet); | ||||
|         return GetJsonResult(l); | ||||
|     } | ||||
|  | ||||
|     public ActionResult AddLots(string lotNumbers, int mrbNumber) { | ||||
|         // This is for adding lot(s) via search | ||||
|  | ||||
|         try { | ||||
|             var warnings = new StringBuilder(); | ||||
|             StringBuilder warnings = new(); | ||||
|  | ||||
|             if (lotNumbers.Length > 0) { | ||||
|                 string[] tempLots = lotNumbers.Split(new char[] { '~' }); | ||||
|                 foreach (string lotNumber in tempLots) { | ||||
|                     bool existingRowUpdated; | ||||
|                     Lot l = new Lot(); | ||||
|                     Lot l = new(); | ||||
|                     l.LotNumber = lotNumber; | ||||
|                     l.MRBNumber = mrbNumber; | ||||
|                     mrbDMO.InsertLot(l, true, out existingRowUpdated); | ||||
| @ -214,8 +243,8 @@ public class MRBController : Controller { | ||||
|             return Content(warnings.ToString()); | ||||
|         } catch (Exception e) { | ||||
|             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); | ||||
|             EventLogDMO.Add(new WinEventLog() { UserID = @User.Identity.Name, OperationType = "Error", DocumentType = "MRB", Comments = exceptionString }); | ||||
|             Functions.WriteEvent(_AppSettings, GetUserIdentityName() + "\r\n AddLots MRB\r\n" + e.Message.ToString(), EventLogEntryType.Error); | ||||
|             EventLogDMO.Add(new WinEventLog() { UserID = GetUserIdentityName(), OperationType = "Error", DocumentType = "MRB", Comments = exceptionString }); | ||||
|  | ||||
|             Response.StatusCode = (int)System.Net.HttpStatusCode.InternalServerError; | ||||
|             return Content(e.Message); | ||||
| @ -224,10 +253,14 @@ public class MRBController : Controller { | ||||
|  | ||||
|     #region ATTACHMENT | ||||
|  | ||||
| #if !NET8 | ||||
|  | ||||
|     public ActionResult Attachment_Read([DataSourceRequest] DataSourceRequest request, int mrbNumber) { | ||||
|         return Json(mrbDMO.GetMRBAttachments(mrbNumber).ToDataSourceResult(request)); | ||||
|     } | ||||
|  | ||||
| #endif | ||||
|  | ||||
|     [HttpPost] | ||||
|     public void DeleteAttachment(int attachmentID) { | ||||
|         try { | ||||
| @ -237,16 +270,16 @@ public class MRBController : Controller { | ||||
|                 if (attachment == null) | ||||
|                     return; | ||||
|  | ||||
|                 String fileName = attachment.Path; | ||||
|                 if (String.IsNullOrEmpty(fileName)) | ||||
|                 string fileName = attachment.Path; | ||||
|                 if (string.IsNullOrEmpty(fileName)) | ||||
|                     fileName = attachment.FileName; | ||||
|  | ||||
|                 mrbDMO.DeleteMRBAttachment(attachmentID); | ||||
|  | ||||
|                 if (!String.IsNullOrWhiteSpace(fileName)) { | ||||
|                 if (!string.IsNullOrWhiteSpace(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) | ||||
|                         f.Delete(); | ||||
| @ -254,18 +287,20 @@ public class MRBController : Controller { | ||||
|             } | ||||
|         } catch (Exception e) { | ||||
|             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); | ||||
|             EventLogDMO.Add(new WinEventLog() { IssueID = 999, UserID = @User.Identity.Name, DocumentType = "MRB", OperationType = "Error", Comments = "AttachmentID Disposition " + exceptionString }); | ||||
|             Functions.WriteEvent(_AppSettings, GetUserIdentityName() + "\r\n AttachmentID MRB\r\n" + e.Message.ToString(), EventLogEntryType.Error); | ||||
|             EventLogDMO.Add(new WinEventLog() { IssueID = 999, UserID = GetUserIdentityName(), DocumentType = "MRB", OperationType = "Error", Comments = "AttachmentID Disposition " + exceptionString }); | ||||
|             throw new Exception(e.Message); | ||||
|         } | ||||
|     } | ||||
|  | ||||
| #if !NET8 | ||||
|  | ||||
|     public ActionResult AttachSave(IEnumerable<HttpPostedFileBase> files, int mrbNumber) { | ||||
|         var errorList = new List<String>(); | ||||
|  | ||||
|         // The Name of the Upload component is "files" | ||||
|         if (files != null) { | ||||
|             int userId = (int)Session[GlobalVars.SESSION_USERID]; | ||||
|             int userId = GlobalVars.GetUserId(GetSession()); | ||||
|             foreach (var file in files) { | ||||
|                 MRBHelper.AttachSave(_AppSettings, mrbDMO, mrbNumber, userId, file.FileName, file.InputStream); | ||||
|             } | ||||
| @ -273,13 +308,17 @@ public class MRBController : Controller { | ||||
|         return Json(new { errors = errorList }); | ||||
|     } | ||||
|  | ||||
| #endif | ||||
|  | ||||
|     #endregion | ||||
|  | ||||
| #if !NET8 | ||||
|  | ||||
|     public ActionResult ExcelLotOpen(IEnumerable<HttpPostedFileBase> Lotfile, int mrbNumber) { | ||||
|         var warnings = new StringBuilder(); | ||||
|         var physicalPath = ""; | ||||
|         try { | ||||
|             string userIdentityName = @User.Identity.Name; | ||||
|             string userIdentityName = GetUserIdentityName(); | ||||
|             var dispos = mrbDMO.GetDispositions(mrbNumber); | ||||
|             foreach (var file in Lotfile) { | ||||
|                 physicalPath = MRBHelper.ExcelLotOpen(mrbDMO, mrbNumber, warnings, dispos, userIdentityName, _AppSettings.LotTempPipeLine, file.FileName, file.InputStream); | ||||
| @ -294,8 +333,8 @@ public class MRBController : Controller { | ||||
|                 detailedException = e.Message; | ||||
|             } | ||||
|             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); | ||||
|             EventLogDMO.Add(new WinEventLog() { IssueID = mrbNumber, UserID = @User.Identity.Name, DocumentType = "Lot Disposition", OperationType = "Error", Comments = exceptionString }); | ||||
|             Functions.WriteEvent(_AppSettings, GetUserIdentityName() + "\r\n MRB Excel\r\n" + detailedException, EventLogEntryType.Error); | ||||
|             EventLogDMO.Add(new WinEventLog() { IssueID = mrbNumber, UserID = GetUserIdentityName(), DocumentType = "Lot Disposition", OperationType = "Error", Comments = exceptionString }); | ||||
|  | ||||
|             System.IO.FileInfo f = new System.IO.FileInfo(physicalPath); | ||||
|             if (f.Exists) | ||||
| @ -311,7 +350,7 @@ public class MRBController : Controller { | ||||
|         try { | ||||
|             string message; | ||||
|             string c = Server.MapPath("/FTPBatch/"); | ||||
|             string userIdentityName = @User.Identity.Name; | ||||
|             string userIdentityName = GetUserIdentityName(); | ||||
|             string b = Server.MapPath("/FTPBatch/" + _AppSettings.FTPSPNBatchFileName); | ||||
|             string a = Server.MapPath("/FTPBatch/" + _AppSettings.FTPSPNBatchFileName_Test); | ||||
|             foreach (var file in AddQDBFlag) { | ||||
| @ -336,7 +375,7 @@ public class MRBController : Controller { | ||||
|         try { | ||||
|             string message; | ||||
|             string c = Server.MapPath("/FTPBatch/"); | ||||
|             string userIdentityName = @User.Identity.Name; | ||||
|             string userIdentityName = GetUserIdentityName(); | ||||
|             string b = Server.MapPath("/FTPBatch/" + _AppSettings.FTPSPNBatchFileName); | ||||
|             string a = Server.MapPath("/FTPBatch/" + _AppSettings.FTPSPNBatchFileName_Test); | ||||
|             foreach (var file in RemoveQDBFlag) { | ||||
| @ -356,11 +395,19 @@ public class MRBController : Controller { | ||||
|         } | ||||
|     } | ||||
|  | ||||
| #if !NET8 | ||||
|  | ||||
|     public ActionResult GetContainmentActions([DataSourceRequest] DataSourceRequest request, int mrbNumber) { | ||||
|         return Json(mrbDMO.GetContainmentActions(mrbNumber).ToDataSourceResult(request)); | ||||
|     } | ||||
|  | ||||
| #endif | ||||
|  | ||||
| #endif | ||||
|  | ||||
| #if !NET8 | ||||
|     [AcceptVerbs(HttpVerbs.Post)] | ||||
| #endif | ||||
|     public ActionResult UpdateContainmentAction(ContainmentActionObj model) { | ||||
|         if (model != null && ModelState.IsValid) { | ||||
|             mrbDMO.UpdateContainmentAction(model); | ||||
| @ -369,7 +416,9 @@ public class MRBController : Controller { | ||||
|         return Content(""); | ||||
|     } | ||||
|  | ||||
| #if !NET8 | ||||
|     [AcceptVerbs(HttpVerbs.Post)] | ||||
| #endif | ||||
|     public ActionResult InsertContainmentAction(ContainmentActionObj model) { | ||||
|         if (model != null && ModelState.IsValid) { | ||||
|             mrbDMO.InsertContainmentAction(model); | ||||
| @ -378,6 +427,8 @@ public class MRBController : Controller { | ||||
|         return Content(""); | ||||
|     } | ||||
|  | ||||
| #if !NET8 | ||||
|  | ||||
|     [AcceptVerbs(HttpVerbs.Post)] | ||||
|     public ActionResult DeleteContainmentAction([DataSourceRequest] DataSourceRequest request, ContainmentActionObj model) { | ||||
|         if (model != null && ModelState.IsValid) { | ||||
| @ -387,19 +438,25 @@ public class MRBController : Controller { | ||||
|         return Json(new[] { model }.ToDataSourceResult(request, ModelState)); | ||||
|     } | ||||
|  | ||||
| #endif | ||||
|  | ||||
|     #region | ||||
|  | ||||
| #if !NET8 | ||||
|     public ActionResult GetDispostions([DataSourceRequest] DataSourceRequest request, int mrbNumber) { | ||||
|         return Json(mrbDMO.GetDispositions(mrbNumber).ToDataSourceResult(request)); | ||||
|     } | ||||
|  | ||||
| #endif | ||||
|  | ||||
| #if !NET8 | ||||
|  | ||||
|     [AcceptVerbs(HttpVerbs.Post)] | ||||
|     public ActionResult UpdateDisposition(Disposition model) { | ||||
|         if (model != null && ModelState.IsValid) { | ||||
|             mrbDMO.UpdateDisposition(model); | ||||
|         } | ||||
|  | ||||
|         return Json(model, JsonRequestBehavior.AllowGet); | ||||
|         return GetJsonResult(model); | ||||
|     } | ||||
|  | ||||
|     [AcceptVerbs(HttpVerbs.Post)] | ||||
| @ -415,13 +472,15 @@ public class MRBController : Controller { | ||||
|             mrbDMO.DeleteDisposition(model); | ||||
|         } | ||||
|  | ||||
|         return Json(model, JsonRequestBehavior.AllowGet); | ||||
|         return GetJsonResult(model); | ||||
|     } | ||||
|  | ||||
| #endif | ||||
|  | ||||
|     #endregion | ||||
|  | ||||
|     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 = 1, CloseToQDBOption = "Yes" }); | ||||
|         ViewData["CloseToQDBOptions"] = options; | ||||
| @ -432,28 +491,28 @@ public class MRBController : Controller { | ||||
|         List<string> emailIst = MiscDMO.GetApproverEmailListByDocument(mrbNumber, currentStep, (int)GlobalVars.DocumentType.MRB).Distinct().ToList(); | ||||
|         string emailSentList = MRBHelper.NotifyApprovers(_AppSettings, mrbNumber, emailIst); | ||||
|         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 { } | ||||
|     } | ||||
|  | ||||
|     public void Approve(int issueID, byte currentStep, string comments) { | ||||
|         int isITARCompliant = 1; | ||||
|         MRB mrb = new MRB(); | ||||
|         mrb = mrbDMO.GetMRBItem(issueID, out isITARCompliant, (int)Session[GlobalVars.SESSION_USERID]); | ||||
|         MRB mrb = new(); | ||||
|         mrb = mrbDMO.GetMRBItem(issueID, out isITARCompliant, GlobalVars.GetUserId(GetSession())); | ||||
|         try { | ||||
|             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) { | ||||
|                 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); | ||||
|             } | ||||
|         } 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(); | ||||
|             Functions.WriteEvent(_AppSettings, @User.Identity.Name + "\r\n Approve\r\n" + e.Message.ToString(), System.Diagnostics.EventLogEntryType.Error); | ||||
|             EventLogDMO.Add(new WinEventLog() { IssueID = issueID, UserID = @User.Identity.Name, DocumentType = "Lot Disposition", OperationType = "Error", Comments = "Approve - " + exceptionString }); | ||||
|             Functions.WriteEvent(_AppSettings, GetUserIdentityName() + "\r\n Approve\r\n" + e.Message.ToString(), EventLogEntryType.Error); | ||||
|             EventLogDMO.Add(new WinEventLog() { IssueID = issueID, UserID = GetUserIdentityName(), DocumentType = "Lot Disposition", OperationType = "Error", Comments = "Approve - " + exceptionString }); | ||||
|             throw new Exception(e.Message); | ||||
|         } | ||||
|     } | ||||
| @ -471,9 +530,11 @@ public class MRBController : Controller { | ||||
|         int waferCount = 0; | ||||
|         int dieCount = 0; | ||||
|         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) { | ||||
|         MRB mrbInfo; | ||||
|         try { | ||||
| @ -484,7 +545,7 @@ public class MRBController : Controller { | ||||
|         } | ||||
|  | ||||
|         if (!mrbInfo.ToolCSV.ToUpper().Equals("NA")) { | ||||
|             Lot l = new Lot(); | ||||
|             Lot l = new(); | ||||
|  | ||||
|             var mrbLotInfo = mrbDMO.GetLotsToFindNewChildLots(mrbNumber); | ||||
|             foreach (Lot lot in mrbLotInfo) { | ||||
| @ -497,10 +558,10 @@ public class MRBController : Controller { | ||||
|  | ||||
|         // SEND DATA to SPN | ||||
|  | ||||
|         StringBuilder output = new StringBuilder(); | ||||
|         StringBuilder output = new(); | ||||
|         try { | ||||
|             string c = Server.MapPath("/FTPBatch/"); | ||||
|             string userIdentityName = @User.Identity.Name; | ||||
|             string userIdentityName = GetUserIdentityName(); | ||||
|             string b = Server.MapPath("/FTPBatch/" + _AppSettings.FTPSPNBatchFileName); | ||||
|             string a = Server.MapPath("/FTPBatch/" + _AppSettings.FTPSPNBatchFileName_Test); | ||||
|             IEnumerable<string> data = mrbDMO.GetMRBHoldLots(mrbNumber); | ||||
| @ -530,33 +591,33 @@ public class MRBController : Controller { | ||||
|                         } | ||||
|                     } 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(); | ||||
|                         EventLogDMO.Add(new WinEventLog() { IssueID = -1, UserID = @User.Identity.Name, DocumentType = "MRB", OperationType = "Error", Comments = exceptionString }); | ||||
|                         return Json(new { Error = true, Message = e.Message }, JsonRequestBehavior.AllowGet); | ||||
|                         EventLogDMO.Add(new WinEventLog() { IssueID = -1, UserID = GetUserIdentityName(), DocumentType = "MRB", OperationType = "Error", Comments = exceptionString }); | ||||
|                         return GetJsonResult(new { Error = true, Message = e.Message }); | ||||
|                     } | ||||
|  | ||||
|                 } | ||||
|             } 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(); | ||||
|                 Functions.WriteEvent(_AppSettings, @User.Identity.Name + "\r\n Approve\r\n" + e.Message.ToString(), System.Diagnostics.EventLogEntryType.Error); | ||||
|                 EventLogDMO.Add(new WinEventLog() { IssueID = -1, UserID = @User.Identity.Name, DocumentType = "MRB", OperationType = "Error", Comments = exceptionString }); | ||||
|                 return Json(new { Error = true, Message = e.Message }, JsonRequestBehavior.AllowGet); | ||||
|                 Functions.WriteEvent(_AppSettings, GetUserIdentityName() + "\r\n Approve\r\n" + e.Message.ToString(), EventLogEntryType.Error); | ||||
|                 EventLogDMO.Add(new WinEventLog() { IssueID = -1, UserID = GetUserIdentityName(), DocumentType = "MRB", OperationType = "Error", Comments = exceptionString }); | ||||
|                 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) { | ||||
|             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); | ||||
|             EventLogDMO.Add(new WinEventLog() { IssueID = -1, UserID = @User.Identity.Name, DocumentType = "MRB", OperationType = "Error", Comments = exceptionString }); | ||||
|             return Json(new { Error = true, Message = e.Message }, JsonRequestBehavior.AllowGet); | ||||
|             Functions.WriteEvent(_AppSettings, GetUserIdentityName() + "\r\n Approve\r\n" + e.Message.ToString(), EventLogEntryType.Error); | ||||
|             EventLogDMO.Add(new WinEventLog() { IssueID = -1, UserID = GetUserIdentityName(), DocumentType = "MRB", OperationType = "Error", Comments = exceptionString }); | ||||
|             return GetJsonResult(new { Error = true, Message = e.Message }); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     public bool BatchFTP_Old(string sourceFile, string destFile) { | ||||
|         System.IO.FileInfo sourcefile = new System.IO.FileInfo(sourceFile); | ||||
|         System.IO.FileInfo sourcefile = new(sourceFile); | ||||
|         try { | ||||
|  | ||||
|             ProcessStartInfo psiFab1 = new ProcessStartInfo(); | ||||
|             ProcessStartInfo psiFab1 = new(); | ||||
|             if (GlobalVars.DBConnection.ToUpper() == "TEST" || GlobalVars.DBConnection.ToUpper() == "QUALITY") { | ||||
|                 psiFab1.FileName = Server.MapPath("/FTPBatch/" + _AppSettings.FTPSPNBatchFileName_Test); | ||||
|             } else { | ||||
| @ -565,24 +626,26 @@ public class MRBController : Controller { | ||||
|  | ||||
|             psiFab1.Arguments = sourcefile.FullName + " " + destFile; | ||||
|  | ||||
|             Process procFab1 = new Process(); | ||||
|             Process procFab1 = new(); | ||||
|             procFab1.StartInfo = psiFab1; | ||||
|             procFab1.Start(); | ||||
|             return true; | ||||
|         } 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; | ||||
|         } | ||||
|     } | ||||
|  | ||||
| #endif | ||||
|  | ||||
|     public FileResult DownloadFile(string attachmentID) { | ||||
|         var attachment = mrbDMO.GetMRBAttachment(Convert.ToInt32(attachmentID)); | ||||
|  | ||||
|         if (attachment == null) | ||||
|             throw new Exception("Invalid attachment ID"); | ||||
|  | ||||
|         String fileName = attachment.Path; | ||||
|         if (String.IsNullOrEmpty(fileName)) | ||||
|         string fileName = attachment.Path; | ||||
|         if (string.IsNullOrEmpty(fileName)) | ||||
|             fileName = attachment.FileName; | ||||
|  | ||||
|         var sDocument = System.IO.Path.Combine(_AppSettings.AttachmentFolder + "MRB", fileName); | ||||
| @ -601,7 +664,7 @@ public class MRBController : Controller { | ||||
|     } | ||||
|  | ||||
|     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"); | ||||
|         foreach (var report in mrbDMO.GetMRBHoldFlagReport(mrbNumber)) { | ||||
|             sb.AppendLine(MRB_DMO.FormCSV( | ||||
| @ -630,7 +693,7 @@ public class MRBController : Controller { | ||||
|     } | ||||
|  | ||||
|     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"); | ||||
|         foreach (var lot in mrbDMO.GetMRHoldFlagSentHistory(mrbNumber)) { | ||||
|             sb.AppendLine(MRB_DMO.FormCSV( | ||||
| @ -648,7 +711,7 @@ public class MRBController : Controller { | ||||
|     } | ||||
|  | ||||
|     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"); | ||||
|         foreach (var lot in mrbDMO.GetMRBLots(mrbNumber)) { | ||||
|             sb.AppendLine(MRB_DMO.FormCSV( | ||||
| @ -675,4 +738,33 @@ public class MRBController : Controller { | ||||
|         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; | ||||
| using System.Collections.Generic; | ||||
| using System.Linq; | ||||
| #if !NET8 | ||||
| using System.Web; | ||||
| using System.Web.Mvc; | ||||
| #endif | ||||
|  | ||||
| #if NET8 | ||||
| using Microsoft.AspNetCore.Mvc; | ||||
| using Microsoft.AspNetCore.Authorization; | ||||
| #endif | ||||
|  | ||||
| using Fab2ApprovalSystem.DMO; | ||||
| using Fab2ApprovalSystem.Misc; | ||||
|  | ||||
| #if !NET8 | ||||
| using System; | ||||
| using System.Collections.Generic; | ||||
| using System.Linq; | ||||
| using Fab2ApprovalSystem.Models; | ||||
| #endif | ||||
|  | ||||
| namespace Fab2ApprovalSystem.Controllers; | ||||
|  | ||||
| [Authorize] | ||||
| #if !NET8 | ||||
| [SessionExpireFilter] | ||||
| #endif | ||||
| #if NET8 | ||||
| [Route("[controller]")] | ||||
| #endif | ||||
| public class ManagerController : Controller { | ||||
|  | ||||
|     UserAccountDMO userDMO = new UserAccountDMO(); | ||||
|     AdminDMO adminDMO = new AdminDMO(); | ||||
|     TrainingDMO trainingDMO = new TrainingDMO(); | ||||
|     LotDispositionDMO ldDMO = new LotDispositionDMO(); | ||||
|     private readonly AppSettings _AppSettings = GlobalVars.AppSettings; | ||||
|     private readonly UserAccountDMO userDMO = new(); | ||||
|     private readonly AdminDMO adminDMO = new(); | ||||
|     private readonly TrainingDMO trainingDMO = new(); | ||||
|     private readonly LotDispositionDMO ldDMO = new(); | ||||
|  | ||||
|     public ActionResult Index() { | ||||
|         if ((bool)Session[GlobalVars.IS_MANAGER]) { | ||||
|         if (GlobalVars.IsManager(GetSession())) { | ||||
|             var model = userDMO.GetAllUsers(); | ||||
|             ViewBag.AllActiveUsers = userDMO.GetAllActiveUsers(); | ||||
|             return View(model); | ||||
|         } else | ||||
|             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; | ||||
|  | ||||
| } | ||||
							
								
								
									
										62
									
								
								Fab2ApprovalSystem/Controllers/PCRBController.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										62
									
								
								Fab2ApprovalSystem/Controllers/PCRBController.cs
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,62 @@ | ||||
| #if !NET8 | ||||
| using System; | ||||
| using System.Web.Mvc; | ||||
| #endif | ||||
|  | ||||
| #if NET8 | ||||
| using Microsoft.AspNetCore.Mvc; | ||||
| using Microsoft.AspNetCore.Authorization; | ||||
| #endif | ||||
|  | ||||
| using Fab2ApprovalSystem.Misc; | ||||
|  | ||||
| namespace Fab2ApprovalSystem.Controllers; | ||||
|  | ||||
| [Authorize] | ||||
| #if !NET8 | ||||
| [SessionExpireFilter] | ||||
| #endif | ||||
| #if NET8 | ||||
| [Route("[controller]")] | ||||
| #endif | ||||
| public class PCRBController : Controller { | ||||
|     public ActionResult Edit(int issueID) { | ||||
|         string jwt = GlobalVars.GetJWT(GetSession()); | ||||
|         string encodedJwt = System.Net.WebUtility.UrlEncode(jwt); | ||||
|         string refreshToken = GlobalVars.GetRefreshToken(GetSession()); | ||||
|         string encodedRefreshToken = System.Net.WebUtility.UrlEncode(refreshToken); | ||||
|         string mrbUrl = $"{GlobalVars.AppSettings.WasmClientUrl}/redirect?jwt={encodedJwt}&refreshToken={encodedRefreshToken}&redirectPath=/pcrb/{issueID}"; | ||||
|  | ||||
|         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.Collections.Generic; | ||||
| using System.Linq; | ||||
| #if !NET8 | ||||
| using System.Web; | ||||
| using System.Web.Mvc; | ||||
| #endif | ||||
|  | ||||
| #if NET8 | ||||
| using Microsoft.AspNetCore.Mvc; | ||||
| using Microsoft.AspNetCore.Authorization; | ||||
| #endif | ||||
|  | ||||
| using Fab2ApprovalSystem.DMO; | ||||
| using Fab2ApprovalSystem.Misc; | ||||
| using Fab2ApprovalSystem.Models; | ||||
|  | ||||
| #if !NET8 | ||||
| using Kendo.Mvc.Extensions; | ||||
| using Kendo.Mvc.UI; | ||||
| #endif | ||||
|  | ||||
| namespace Fab2ApprovalSystem.Controllers; | ||||
|  | ||||
| [Authorize] | ||||
| #if !NET8 | ||||
| [OutputCache(NoStore = true, Duration = 0, VaryByParam = "*")] | ||||
| [SessionExpireFilter] | ||||
| #endif | ||||
| #if NET8 | ||||
| [Route("[controller]")] | ||||
| #endif | ||||
| public class PartsRequestController : Controller { | ||||
|  | ||||
|  | ||||
|     const int WorkflowNumber = 1; | ||||
|     PartsRequestDMO prDMO = new PartsRequestDMO(); | ||||
|     UserAccountDMO userDMO = new UserAccountDMO(); | ||||
|     WorkflowDMO wfDMO = new WorkflowDMO(); | ||||
|     private readonly AppSettings _AppSettings = GlobalVars.AppSettings; | ||||
|     private const int WorkflowNumber = 1; | ||||
|     private readonly PartsRequestDMO prDMO = new(); | ||||
|     private readonly UserAccountDMO userDMO = new(); | ||||
|     private readonly WorkflowDMO wfDMO = new(); | ||||
|     private readonly AppSettings? _AppSettings = GlobalVars.AppSettings; | ||||
|  | ||||
|     public PartsRequestController() { | ||||
|         ViewBag.ShowReAssignApprovers = false; | ||||
| @ -42,13 +55,13 @@ public class PartsRequestController : Controller { | ||||
|     } | ||||
|  | ||||
|     protected void HandleException(int issueID, Exception ex, string additionalKeys = "") { | ||||
|         var st = new System.Diagnostics.StackTrace(); | ||||
|         var sf = st.GetFrame(1); | ||||
|         System.Diagnostics.StackTrace st = new(); | ||||
|         System.Diagnostics.StackFrame? sf = st.GetFrame(1); | ||||
|  | ||||
|         String controller = sf.GetMethod().DeclaringType.Name.Replace("Controller", ""); | ||||
|         String method = sf.GetMethod().Name; | ||||
|         string controller = sf.GetMethod().DeclaringType.Name.Replace("Controller", ""); | ||||
|         string method = sf.GetMethod().Name; | ||||
|  | ||||
|         string detailedException = String.Format( | ||||
|         string detailedException = string.Format( | ||||
|             "Exception for issue # {0}\r\n" + | ||||
|             "Controller: {1}, Method: {2}, User: {3}, Keys: {4}\r\n" + | ||||
|             "=====\r\n", | ||||
| @ -69,20 +82,19 @@ public class PartsRequestController : Controller { | ||||
|  | ||||
|         EventLogDMO.Add(new WinEventLog() { | ||||
|             IssueID = issueID, | ||||
|             UserID = @User.Identity.Name, | ||||
|             UserID = GetUserIdentityName(), | ||||
|             DocumentType = controller, | ||||
|             OperationType = "Error", | ||||
|             Comments = detailedException | ||||
|         }); | ||||
|     } | ||||
|  | ||||
|     // GET: PartsRequest | ||||
|     public ActionResult Index() { | ||||
|         return View(); | ||||
|     } | ||||
|  | ||||
|     public ActionResult Edit(int issueID) { | ||||
|         var pr = new PartsRequest(); | ||||
|         PartsRequest pr = new(); | ||||
|         try { | ||||
|             pr = prDMO.Get(issueID); | ||||
|  | ||||
| @ -95,8 +107,8 @@ public class PartsRequestController : Controller { | ||||
|             } else if (pr.CurrentStep >= 1) { | ||||
|                 return RedirectToAction("EditApproval", new { issueID = issueID }); | ||||
|             } else { | ||||
|                 if (pr.OriginatorID != (int)Session[GlobalVars.SESSION_USERID]) { | ||||
|                     if (Convert.ToBoolean(Session[GlobalVars.IS_ADMIN]) == false) { | ||||
|                 if (pr.OriginatorID != GlobalVars.GetUserId(GetSession())) { | ||||
|                     if (!GlobalVars.IsAdmin(GetSession())) { | ||||
|                         return RedirectToAction("ReadOnly", new { issueID = issueID }); | ||||
|                     } | ||||
|                 } | ||||
| @ -110,6 +122,8 @@ public class PartsRequestController : Controller { | ||||
|         } | ||||
|     } | ||||
|  | ||||
| #if !NET8 | ||||
|  | ||||
|     [HttpPost] | ||||
|     public ActionResult Edit(PartsRequest pr) { | ||||
|         try { | ||||
| @ -133,10 +147,12 @@ public class PartsRequestController : Controller { | ||||
|         } | ||||
|     } | ||||
|  | ||||
| #endif | ||||
|  | ||||
|     public ActionResult EditApproval(int issueID) { | ||||
|         var pr = new PartsRequest(); | ||||
|         PartsRequest pr = new(); | ||||
|         try { | ||||
|             int myUserID = (int)Session[GlobalVars.SESSION_USERID]; | ||||
|             int myUserID = GlobalVars.GetUserId(GetSession()); | ||||
|  | ||||
|             pr = prDMO.Get(issueID); | ||||
|  | ||||
| @ -156,15 +172,15 @@ public class PartsRequestController : Controller { | ||||
|  | ||||
|             if (ViewBag.IsApprover == false) { | ||||
|                 if (pr.OriginatorID != myUserID) { | ||||
|                     if (Convert.ToBoolean(Session[GlobalVars.IS_ADMIN]) == false) { | ||||
|                     if (!GlobalVars.IsAdmin(GetSession())) { | ||||
|                         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.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.ShowAddApprovers = ViewBag.IsAdmin || ViewBag.IsApprover || ViewBag.IsOriginator; | ||||
|             ViewBag.UserList = userDMO.GetAllUsers(); | ||||
| @ -176,9 +192,9 @@ public class PartsRequestController : Controller { | ||||
|     } | ||||
|  | ||||
|     public ActionResult ReadOnly(int issueID) { | ||||
|         var pr = new PartsRequest(); | ||||
|         PartsRequest pr = new(); | ||||
|         try { | ||||
|             int myUserID = (int)Session[GlobalVars.SESSION_USERID]; | ||||
|             int myUserID = GlobalVars.GetUserId(GetSession()); | ||||
|  | ||||
|             pr = prDMO.Get(issueID); | ||||
|  | ||||
| @ -191,7 +207,7 @@ public class PartsRequestController : Controller { | ||||
|                 return View("Error"); | ||||
|             } | ||||
|  | ||||
|             ViewBag.IsAdmin = Convert.ToBoolean(Session[GlobalVars.IS_ADMIN]); | ||||
|             ViewBag.IsAdmin = GlobalVars.IsAdmin(GetSession()); | ||||
|             ViewBag.IsOriginator = (pr.OriginatorID == myUserID); | ||||
|             ViewBag.UserList = userDMO.GetAllUsers(); | ||||
|             return View(pr); | ||||
| @ -202,11 +218,11 @@ public class PartsRequestController : Controller { | ||||
|     } | ||||
|  | ||||
|     public ActionResult Create() { | ||||
|         var pr = new PartsRequest(); | ||||
|         PartsRequest pr = new(); | ||||
|         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"); | ||||
|  | ||||
|             prDMO.Insert(pr); | ||||
| @ -218,8 +234,8 @@ public class PartsRequestController : Controller { | ||||
|     } | ||||
|  | ||||
|     public static bool CanCreatePartsRequest(int userID) { | ||||
|         var adminDMO = new AdminDMO(); | ||||
|         var role = adminDMO.GetSubRoles().Where(r => string.Equals(r.RoleName, "Parts Request", StringComparison.OrdinalIgnoreCase)).FirstOrDefault(); | ||||
|         AdminDMO adminDMO = new(); | ||||
|         Role? role = adminDMO.GetSubRoles().FirstOrDefault(r => string.Equals(r.RoleName, "Parts Request", StringComparison.OrdinalIgnoreCase)); | ||||
|         if (role != null) { | ||||
|             var subrole = role.SubRoles.FirstOrDefault(sr => string.Equals(sr.SubRoleCategoryItem, "Originator", StringComparison.OrdinalIgnoreCase)); | ||||
|             if (subrole != null) { | ||||
| @ -232,9 +248,11 @@ public class PartsRequestController : Controller { | ||||
|         return false; | ||||
|     } | ||||
|  | ||||
| #if !NET8 | ||||
|  | ||||
|     public ActionResult Attachment_Read([DataSourceRequest] DataSourceRequest request, int prNumber) { | ||||
|         try { | ||||
|             return Json(prDMO.GetAttachments(prNumber).ToDataSourceResult(request), JsonRequestBehavior.AllowGet); | ||||
|             return GetJsonResult(prDMO.GetAttachments(prNumber).ToDataSourceResult(request)); | ||||
|         } catch (Exception ex) { | ||||
|             return HandleAPIException(prNumber, ex); | ||||
|         } | ||||
| @ -244,7 +262,7 @@ public class PartsRequestController : Controller { | ||||
|     public ActionResult AttachSave(IEnumerable<HttpPostedFileBase> files, int prNumber) { | ||||
|         // The Name of the Upload component is "files" | ||||
|         if (files != null) { | ||||
|             int userId = (int)Session[GlobalVars.SESSION_USERID]; | ||||
|             int userId = GlobalVars.GetUserId(GetSession()); | ||||
|             foreach (var file in files) { | ||||
|                 PartsRequestHelper.AttachSave(_AppSettings, prDMO, prNumber, userId, file.FileName, file.InputStream); | ||||
|             } | ||||
| @ -253,6 +271,8 @@ public class PartsRequestController : Controller { | ||||
|         return Content(""); | ||||
|     } | ||||
|  | ||||
| #endif | ||||
|  | ||||
|     public FileResult DownloadFile(string attachmentID, string prNumber) { | ||||
|         string fileName = prDMO.GetFileName(attachmentID); | ||||
|  | ||||
| @ -289,17 +309,19 @@ public class PartsRequestController : Controller { | ||||
|         } | ||||
|     } | ||||
|  | ||||
| #if !NET8 | ||||
|  | ||||
|     [HttpPost] | ||||
|     public ActionResult Submit(int prNumber) { | ||||
|         try { | ||||
|             int myUserID = (int)Session[GlobalVars.SESSION_USERID]; | ||||
|             int myUserID = GlobalVars.GetUserId(GetSession()); | ||||
|  | ||||
|             var pr = prDMO.Get(prNumber); | ||||
|  | ||||
|             if (pr == null) | ||||
|                 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"); | ||||
|             if (pr.RequestorID <= 0) | ||||
|                 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) { | ||||
|                 // Auto-Approve if the user is an approver for workflow step 1 | ||||
|                 var c = Approve(prNumber, 1, "Auto-Approve"); | ||||
|                 if (c != null && c is ContentResult) { | ||||
|                     var result = ((ContentResult)c).Content; | ||||
|                     if (!String.Equals(result, "OK")) | ||||
|                 if (c != null && c is ContentResult contentResult) { | ||||
|                     var result = contentResult.Content; | ||||
|                     if (!string.Equals(result, "OK")) | ||||
|                         throw new Exception(result); | ||||
|                 } | ||||
|                 if (c != null && c is JsonResult) | ||||
| @ -325,7 +347,7 @@ public class PartsRequestController : Controller { | ||||
|                 NotifyApprovers(prNumber, 1); | ||||
|             } | ||||
|  | ||||
|             if (Request.IsAjaxRequest()) { | ||||
|             if (IsAjaxRequest()) { | ||||
|                 return Content("Redirect"); | ||||
|             } else { | ||||
|                 return Content("Invalid"); | ||||
| @ -348,16 +370,18 @@ public class PartsRequestController : Controller { | ||||
|         try { | ||||
|             UserAccountDMO userDMO = new UserAccountDMO(); | ||||
|             IEnumerable<LoginModel> userlist = userDMO.GetAllUsers(); | ||||
|             return Json(userlist, JsonRequestBehavior.AllowGet); | ||||
|             return GetJsonResult(userlist); | ||||
|         } catch (Exception e) { | ||||
|             return HandleAPIException(0, e); | ||||
|         } | ||||
|     } | ||||
|  | ||||
| #endif | ||||
|  | ||||
|     [HttpPost] | ||||
|     public ActionResult ReAssignApproval(int issueID, int fromUserID, int userIDs, byte step) { | ||||
|         try { | ||||
|             String email = wfDMO.ReAssignApproval( | ||||
|             string email = wfDMO.ReAssignApproval( | ||||
|                 issueID, fromUserID, userIDs, step, (int)GlobalVars.DocumentType.PartsRequest); | ||||
|  | ||||
|             NotifyReAssignment(issueID, email); | ||||
| @ -368,12 +392,14 @@ public class PartsRequestController : Controller { | ||||
|         } | ||||
|     } | ||||
|  | ||||
| #if !NET8 | ||||
|  | ||||
|     [HttpPost] | ||||
|     public ActionResult Approve(int prNumber, byte currentStep, string comments) { | ||||
|         try { | ||||
|             bool lastStep = false; | ||||
|             bool lastApproverInCurrentStep = false; | ||||
|             int myUserID = (int)Session[GlobalVars.SESSION_USERID]; | ||||
|             int myUserID = GlobalVars.GetUserId(GetSession()); | ||||
|  | ||||
|             var pr = prDMO.Get(prNumber); | ||||
|  | ||||
| @ -387,7 +413,7 @@ public class PartsRequestController : Controller { | ||||
|                     currentStep, | ||||
|                     comments, | ||||
|                     out lastStep, | ||||
|                     (int)Session[GlobalVars.SESSION_USERID], | ||||
|                     GlobalVars.GetUserId(GetSession()), | ||||
|                     (int)GlobalVars.DocumentType.PartsRequest, | ||||
|                     WorkflowNumber); | ||||
|  | ||||
| @ -417,22 +443,24 @@ public class PartsRequestController : Controller { | ||||
|         } | ||||
|     } | ||||
|  | ||||
| #endif | ||||
|  | ||||
|     protected void NotifyReAssignment(int prNumber, string email) { | ||||
|         var pr = prDMO.Get(prNumber); | ||||
|  | ||||
|         if (pr == null) | ||||
|             return; | ||||
|  | ||||
|         string username = Session[GlobalVars.SESSION_USERNAME].ToString(); | ||||
|         string username = GlobalVars.GetUserName(GetSession()); | ||||
|         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, | ||||
|             toEmail: email, | ||||
|             emailTemplate: "PRReAssigned.txt"); | ||||
|  | ||||
|         EventLogDMO.Add(new WinEventLog() { | ||||
|             IssueID = prNumber, | ||||
|             UserID = @User.Identity.Name, | ||||
|             UserID = GetUserIdentityName(), | ||||
|             DocumentType = "PR", | ||||
|             OperationType = "Email", | ||||
|             Comments = "ReAssigned Approver: " + email | ||||
| @ -446,17 +474,17 @@ public class PartsRequestController : Controller { | ||||
|             return; | ||||
|  | ||||
|         var u = userDMO.GetUserByID(pr.RequestorID); | ||||
|         if ((u != null) && (!String.IsNullOrWhiteSpace(u.Email))) { | ||||
|             string username = Session[GlobalVars.SESSION_USERNAME].ToString(); | ||||
|         if ((u != null) && (!string.IsNullOrWhiteSpace(u.Email))) { | ||||
|             string username = GlobalVars.GetUserName(GetSession()); | ||||
|             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, | ||||
|                   toEmail: u.Email, | ||||
|                   emailTemplate: "PRCompleted.txt"); | ||||
|  | ||||
|             EventLogDMO.Add(new WinEventLog() { | ||||
|                 IssueID = prNumber, | ||||
|                 UserID = @User.Identity.Name, | ||||
|                 UserID = GetUserIdentityName(), | ||||
|                 DocumentType = "PR", | ||||
|                 OperationType = "Email", | ||||
|                 Comments = "Completed: " + u.Email | ||||
| @ -471,17 +499,17 @@ public class PartsRequestController : Controller { | ||||
|             return; | ||||
|  | ||||
|         var u = userDMO.GetUserByID(pr.OriginatorID); | ||||
|         if ((u != null) && (!String.IsNullOrWhiteSpace(u.Email))) { | ||||
|             string username = Session[GlobalVars.SESSION_USERNAME].ToString(); | ||||
|         if ((u != null) && (!string.IsNullOrWhiteSpace(u.Email))) { | ||||
|             string username = GlobalVars.GetUserName(GetSession()); | ||||
|             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, | ||||
|                   toEmail: u.Email, | ||||
|                   emailTemplate: "PRReject.txt"); | ||||
|  | ||||
|             EventLogDMO.Add(new WinEventLog() { | ||||
|                 IssueID = prNumber, | ||||
|                 UserID = @User.Identity.Name, | ||||
|                 UserID = GetUserIdentityName(), | ||||
|                 DocumentType = "PR", | ||||
|                 OperationType = "Email", | ||||
|                 Comments = "Rejected: " + u.Email | ||||
| @ -503,9 +531,9 @@ public class PartsRequestController : Controller { | ||||
|  | ||||
|             foreach (string email in emailList) { | ||||
|                 try { | ||||
|                     string username = Session[GlobalVars.SESSION_USERNAME].ToString(); | ||||
|                     string username = GlobalVars.GetUserName(GetSession()); | ||||
|                     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, | ||||
|                                     toEmail: email, | ||||
|                                     emailTemplate: "PRAssigned.txt"); | ||||
| @ -519,7 +547,7 @@ public class PartsRequestController : Controller { | ||||
|             try { | ||||
|                 EventLogDMO.Add(new WinEventLog() { | ||||
|                     IssueID = prNumber, | ||||
|                     UserID = @User.Identity.Name, | ||||
|                     UserID = GetUserIdentityName(), | ||||
|                     DocumentType = "PR", | ||||
|                     OperationType = "Email", | ||||
|                     Comments = "Approvers for Step " + step.ToString() + ":" + emailSentList | ||||
| @ -533,8 +561,8 @@ public class PartsRequestController : Controller { | ||||
|     [HttpPost] | ||||
|     public ActionResult Reject(int prNumber, byte currentStep, string comments) { | ||||
|         try { | ||||
|             if (Session[GlobalVars.SESSION_USERID] != null) { | ||||
|                 wfDMO.Reject(prNumber, currentStep, comments, (int)Session[GlobalVars.SESSION_USERID], (int)GlobalVars.DocumentType.PartsRequest); | ||||
|             if (GlobalVars.IsUserIdValueNotNull(GetSession())) { | ||||
|                 wfDMO.Reject(prNumber, currentStep, comments, GlobalVars.GetUserId(GetSession()), (int)GlobalVars.DocumentType.PartsRequest); | ||||
|                 NotifyRejection(prNumber); | ||||
|             } else { | ||||
|                 Response.Redirect("~/Account/Login"); | ||||
| @ -546,26 +574,30 @@ public class PartsRequestController : Controller { | ||||
|         } | ||||
|     } | ||||
|  | ||||
| #if !NET8 | ||||
|  | ||||
|     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) { | ||||
|         var pr = prDMO.Get(prNumber); | ||||
|  | ||||
|         if (pr == null) | ||||
|             return; | ||||
|  | ||||
|         string username = Session[GlobalVars.SESSION_USERNAME].ToString(); | ||||
|         string username = GlobalVars.GetUserName(GetSession()); | ||||
|         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, | ||||
|             toEmail: email, | ||||
|             emailTemplate: "PRAssigned.txt"); | ||||
|  | ||||
|         EventLogDMO.Add(new WinEventLog() { | ||||
|             IssueID = prNumber, | ||||
|             UserID = @User.Identity.Name, | ||||
|             UserID = GetUserIdentityName(), | ||||
|             DocumentType = "PR", | ||||
|             OperationType = "Email", | ||||
|             Comments = "Assigned Approver: " + email | ||||
| @ -594,7 +626,7 @@ public class PartsRequestController : Controller { | ||||
|         try { | ||||
|             EventLogDMO.Add(new WinEventLog() { | ||||
|                 IssueID = issueID, | ||||
|                 UserID = @User.Identity.Name, | ||||
|                 UserID = GetUserIdentityName(), | ||||
|                 DocumentType = "PR", | ||||
|                 OperationType = "Email", | ||||
|                 Comments = "Additional Approver: " + emailSentList | ||||
| @ -602,4 +634,33 @@ public class PartsRequestController : Controller { | ||||
|         } 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.Collections.Generic; | ||||
| using System.Linq; | ||||
| #if !NET8 | ||||
| using System.Web; | ||||
| using System.Web.Mvc; | ||||
| #endif | ||||
|  | ||||
| #if NET8 | ||||
| using Microsoft.AspNetCore.Mvc; | ||||
| using Microsoft.AspNetCore.Authorization; | ||||
| #endif | ||||
|  | ||||
| using Fab2ApprovalSystem.DMO; | ||||
| using Fab2ApprovalSystem.Misc; | ||||
| using Fab2ApprovalSystem.Models; | ||||
|  | ||||
| #if !NET8 | ||||
| using System.Collections.Generic; | ||||
| using Fab2ApprovalSystem.ViewModels; | ||||
| #endif | ||||
|  | ||||
| namespace Fab2ApprovalSystem.Controllers; | ||||
|  | ||||
| [Authorize] | ||||
| #if !NET8 | ||||
| [SessionExpireFilter] | ||||
| #endif | ||||
| #if NET8 | ||||
| [Route("[controller]")] | ||||
| #endif | ||||
| public class ReportsController : Controller { | ||||
|  | ||||
|     public const String specialNullString = "~NULL~"; | ||||
|     private readonly AppSettings _AppSettings = GlobalVars.AppSettings; | ||||
|     public const string specialNullString = "~NULL~"; | ||||
|     private readonly AppSettings? _AppSettings = GlobalVars.AppSettings; | ||||
|  | ||||
|     // GET: Export | ||||
|     public ActionResult Index() { | ||||
|         UserAccountDMO userDMO = new UserAccountDMO(); | ||||
|         ViewBag.HasITARAccess = userDMO.GetITARAccess((int)Session[GlobalVars.SESSION_USERID]); | ||||
|         UserAccountDMO userDMO = new(); | ||||
|         ViewBag.HasITARAccess = userDMO.GetITARAccess(GlobalVars.GetUserId(GetSession())); | ||||
|  | ||||
|         return View(); | ||||
|     } | ||||
|  | ||||
|     public ActionResult Report(String id, String docType = "") { | ||||
|         if (String.IsNullOrEmpty(id)) | ||||
| #if !NET8 | ||||
|  | ||||
|     public ActionResult Report(string id, string docType = "") { | ||||
|         if (string.IsNullOrEmpty(id)) | ||||
|             return RedirectToAction("Index"); | ||||
|  | ||||
|         UserAccountDMO userDMO = new UserAccountDMO(); | ||||
|         if (!userDMO.GetITARAccess((int)Session[GlobalVars.SESSION_USERID])) | ||||
|         UserAccountDMO userDMO = new(); | ||||
|         if (!userDMO.GetITARAccess(GlobalVars.GetUserId(GetSession()))) | ||||
|             return View("UnAuthorizedAccess"); | ||||
|  | ||||
|         var m = new ReportViewModel<System.Web.Mvc.SelectListItem>(); | ||||
|         ReportViewModel<SelectListItem> m = new(); | ||||
|         var reports = GetReportList(docType); | ||||
|         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.ReportName = report.Name; | ||||
|                 m.Description = report.Description; | ||||
| @ -46,8 +63,8 @@ public class ReportsController : Controller { | ||||
|                 var c = SetupSSRSHelperClient(); | ||||
|  | ||||
|                 m.Parameters = c.GetReportParameters(report.FullPath).Select(parm => { | ||||
|                     var r = new ReportParameterViewModel<System.Web.Mvc.SelectListItem>(); | ||||
|                     r.Visible = (parm.PromptUser.HasValue == false || parm.PromptUser == true) && !String.IsNullOrEmpty(parm.Prompt); | ||||
|                     ReportParameterViewModel<SelectListItem> r = new(); | ||||
|                     r.Visible = (parm.PromptUser.HasValue == false || parm.PromptUser == true) && !string.IsNullOrEmpty(parm.Prompt); | ||||
|                     r.Prompt = parm.Prompt; | ||||
|                     r.Name = parm.Name; | ||||
|                     r.HtmlID = "parm_" + parm.Name; | ||||
| @ -87,7 +104,7 @@ public class ReportsController : Controller { | ||||
|  | ||||
|     public SSRSHelper.SSRSClient SetupSSRSHelperClient() { | ||||
|         var useCfgForBindings = false; | ||||
|         if (String.Equals(_AppSettings.SSRSBindingsByConfiguration, "true", StringComparison.OrdinalIgnoreCase)) | ||||
|         if (string.Equals(_AppSettings.SSRSBindingsByConfiguration, "true", StringComparison.OrdinalIgnoreCase)) | ||||
|             useCfgForBindings = true; | ||||
|  | ||||
|         var c = new SSRSHelper.SSRSClient( | ||||
| @ -112,27 +129,26 @@ public class ReportsController : Controller { | ||||
|         return c.ListReports(folderName); | ||||
|     } | ||||
|  | ||||
|     public ActionResult GetReports(String docType) { | ||||
|     public ActionResult GetReports(string docType) { | ||||
|         var reports = GetReportList(docType); | ||||
|  | ||||
|         return Json(new { | ||||
|         return GetJsonResult(new { | ||||
|             Data = | ||||
|                 reports.Select(r => new ReportViewModel<System.Web.Mvc.SelectListItem>() { | ||||
|                 reports.Select(r => new ReportViewModel<SelectListItem>() { | ||||
|                     ReportName = r.Name ?? "", | ||||
|                     Description = r.Description ?? "", | ||||
|                     ReportID = r.ReportID ?? "", | ||||
|                     DocType = docType | ||||
|                 }) | ||||
|         }, | ||||
|             JsonRequestBehavior.AllowGet); | ||||
|         }); | ||||
|     } | ||||
|  | ||||
|     [HttpPost] | ||||
|     public ActionResult ExportReport(String DocType, String ReportID) { | ||||
|     public ActionResult ExportReport(string DocType, string ReportID) { | ||||
|         var c = SetupSSRSHelperClient(); | ||||
|         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) | ||||
|             return Content("Invalid report ID"); | ||||
|  | ||||
| @ -140,16 +156,16 @@ public class ReportsController : Controller { | ||||
|  | ||||
|         var parms = new SSRSHelper.ReportParameterCollection(); | ||||
|         parms.Add("DocType", DocType); | ||||
|         parms.Add("UserID", Convert.ToString(Session[GlobalVars.SESSION_USERID])); | ||||
|         parms.Add("UserID", GlobalVars.GetUserIdValue(GetSession())); | ||||
|         parms.Add("BaseURL", GlobalVars.hostURL); | ||||
|  | ||||
|         foreach (var rp in reportParms) { | ||||
|             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); | ||||
|                 } | ||||
|             } else { | ||||
|                 String value = null; | ||||
|                 string value = null; | ||||
|  | ||||
|                 if (Request.Params.AllKeys.Contains("parm_" + rp.Name)) | ||||
|                     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 { | ||||
|             var b2 = c.FreezeExcelHeaders(b); | ||||
|             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"); | ||||
|     } | ||||
|  | ||||
|     protected String MakeFilename(String reportName) { | ||||
|         String r = ""; | ||||
| #endif | ||||
|  | ||||
|     protected string MakeFilename(string reportName) { | ||||
|         string r = ""; | ||||
|         char[] invalidChars = System.IO.Path.GetInvalidFileNameChars(); | ||||
|         foreach (char c in reportName) { | ||||
|             if (invalidChars.Contains(c)) | ||||
| @ -194,4 +212,33 @@ public class ReportsController : Controller { | ||||
|         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.Collections.Generic; | ||||
| using System.Configuration; | ||||
| using System.Linq; | ||||
| #if !NET8 | ||||
| using System.Web.Mvc; | ||||
| #endif | ||||
|  | ||||
| #if NET8 | ||||
| using Microsoft.AspNetCore.Mvc; | ||||
| using Microsoft.AspNetCore.Authorization; | ||||
| #endif | ||||
|  | ||||
| using Fab2ApprovalSystem.DMO; | ||||
| using Fab2ApprovalSystem.Misc; | ||||
| @ -10,19 +16,26 @@ using Fab2ApprovalSystem.Models; | ||||
| using Fab2ApprovalSystem.Utilities; | ||||
| using Fab2ApprovalSystem.ViewModels; | ||||
|  | ||||
| #if !NET8 | ||||
| using Kendo.Mvc.Extensions; | ||||
| #endif | ||||
|  | ||||
| namespace Fab2ApprovalSystem.Controllers; | ||||
|  | ||||
| [Authorize] | ||||
| #if !NET8 | ||||
| [SessionExpireFilter] | ||||
| #endif | ||||
| #if NET8 | ||||
| [Route("[controller]")] | ||||
| #endif | ||||
| public class TrainingController : Controller { | ||||
|  | ||||
|     UserAccountDMO userDMO = new UserAccountDMO(); | ||||
|     AdminDMO adminDMO = new AdminDMO(); | ||||
|     TrainingDMO trainingDMO = new TrainingDMO(); | ||||
|     ECN_DMO ecnDMO = new ECN_DMO(); | ||||
|     private readonly AppSettings _AppSettings = GlobalVars.AppSettings; | ||||
|     private readonly UserAccountDMO userDMO = new(); | ||||
|     private readonly AdminDMO adminDMO = new(); | ||||
|     private readonly TrainingDMO trainingDMO = new(); | ||||
|     private readonly ECN_DMO ecnDMO = new(); | ||||
|     private readonly AppSettings? _AppSettings = GlobalVars.AppSettings; | ||||
|  | ||||
|     // GET: Training | ||||
|     public ActionResult Index() { | ||||
| @ -30,19 +43,19 @@ public class TrainingController : Controller { | ||||
|     } | ||||
|  | ||||
|     public int Create(int ecnId) { | ||||
|         ECN_DMO ecnDMO = new ECN_DMO(); | ||||
|         ECN_DMO ecnDMO = new(); | ||||
|  | ||||
|         // Delete old training if exists | ||||
|         int oldTrainingId = trainingDMO.GetTrainingId(ecnId); | ||||
|         if (oldTrainingId != null && oldTrainingId != 0) { | ||||
|         if (oldTrainingId != 0) { | ||||
|             trainingDMO.DeleteTraining(oldTrainingId); | ||||
|         } | ||||
|  | ||||
|         int trainingId = trainingDMO.Create(ecnId); | ||||
|         List<int> TrainingGroups = new List<int>(); | ||||
|         List<int> TrainingGroups = new(); | ||||
|         TrainingGroups = trainingDMO.GetECNAssignedTrainingGroups(ecnId); | ||||
|         string ECNTitle = ecnDMO.GetECN(ecnId).Title; | ||||
|         List<int> Trainees = new List<int>(); | ||||
|         List<int> Trainees = new(); | ||||
|         foreach (int group in TrainingGroups) { | ||||
|             Trainees.AddRange(trainingDMO.GetTrainees(group)); | ||||
|         } | ||||
| @ -55,8 +68,9 @@ public class TrainingController : Controller { | ||||
|  | ||||
|         return trainingId; | ||||
|     } | ||||
|  | ||||
|     public ActionResult AddUserToTrainingAdHoc(int trainingId, int traineeId, int ecnId) { | ||||
|         if ((bool)Session[GlobalVars.IS_ADMIN]) { | ||||
|         if (GlobalVars.IsAdmin(GetSession())) { | ||||
|             // Get ECN | ||||
|             ECN ecn = ecnDMO.GetECN(ecnId); | ||||
|  | ||||
| @ -105,7 +119,7 @@ public class TrainingController : Controller { | ||||
|     } | ||||
|  | ||||
|     public ActionResult AddGroupToTrainingAdHoc(int trainingId, int groupId, int ecnId) { | ||||
|         if ((bool)Session[GlobalVars.IS_ADMIN]) { | ||||
|         if (GlobalVars.IsAdmin(GetSession())) { | ||||
|             ECN ecn = ecnDMO.GetECN(ecnId); | ||||
|             Training training = trainingDMO.GetTraining(trainingId); | ||||
|             TrainingGroup group = trainingDMO.GetTrainingGroupByID(groupId); | ||||
| @ -163,14 +177,14 @@ public class TrainingController : Controller { | ||||
|  | ||||
|     public ActionResult DeleteTrainingByECN(int ECNNumber) { | ||||
|         int trainingId = trainingDMO.GetTrainingId(ECNNumber); | ||||
|         if (trainingId != null && trainingId != 0) { | ||||
|         if (trainingId != 0) { | ||||
|             trainingDMO.DeleteTraining(trainingId); | ||||
|         } | ||||
|         return RedirectToAction("ViewTrainings"); | ||||
|     } | ||||
|  | ||||
|     public ActionResult DeleteTrainingByID(int trainingId) { | ||||
|         if (trainingId != null && trainingId != 0) { | ||||
|         if (trainingId != 0) { | ||||
|             trainingDMO.DeleteTraining(trainingId); | ||||
|         } | ||||
|         return RedirectToAction("ViewTrainings"); | ||||
| @ -254,7 +268,7 @@ public class TrainingController : Controller { | ||||
|         // Group Filter | ||||
|         if (filterType == 1 && filterValue != "") { | ||||
|             ViewBag.GroupFilter = filterValue; | ||||
|             List<Training> filteredTraining = new List<Training>(); | ||||
|             List<Training> filteredTraining = new(); | ||||
|             foreach (Training item in trainingList) { | ||||
|                 List<int> assignedTrainingGroups = trainingDMO.GetECNAssignedTrainingGroups(item.ECN); | ||||
|                 foreach (int id in assignedTrainingGroups) { | ||||
| @ -268,7 +282,7 @@ public class TrainingController : Controller { | ||||
|         } | ||||
|         // Status Filter | ||||
|         if (filterType == 2 && filterValue != "") { | ||||
|             List<Training> filteredTraining = new List<Training>(); | ||||
|             List<Training> filteredTraining = new(); | ||||
|             switch (filterValue) { | ||||
|                 case "1": | ||||
|                     // Completed | ||||
| @ -307,7 +321,7 @@ public class TrainingController : Controller { | ||||
|         float assignmentCount = (from a in trainingAssignments where a.Deleted != true select a).Count(); | ||||
|         float totalCompleted = 0; | ||||
|         foreach (TrainingAssignment assignment in trainingAssignments) { | ||||
|             if (assignment.status == true && assignment.Deleted != true) { | ||||
|             if (assignment.status && assignment.Deleted != true) { | ||||
|                 totalCompleted++; | ||||
|             } | ||||
|         } | ||||
| @ -316,7 +330,7 @@ public class TrainingController : Controller { | ||||
|  | ||||
|         if (groupFilter != "" && groupFilter != null) { | ||||
|             ViewBag.GroupFilter = groupFilter; | ||||
|             List<TrainingAssignment> groupFilteredTraining = new List<TrainingAssignment>(); | ||||
|             List<TrainingAssignment> groupFilteredTraining = new(); | ||||
|             List<int> groupMemberIds = trainingDMO.GetTrainees(Convert.ToInt32(groupFilter)); | ||||
|             foreach (TrainingAssignment assignment in trainingAssignments) { | ||||
|                 if (trainingDMO.isUserTrainingMember(Convert.ToInt32(groupFilter), assignment.UserID)) { | ||||
| @ -326,15 +340,15 @@ public class TrainingController : Controller { | ||||
|             trainingAssignments = groupFilteredTraining; | ||||
|         } | ||||
|         if (statusFilter != "" && statusFilter != null) { | ||||
|             List<TrainingAssignment> filteredTraining = new List<TrainingAssignment>(); | ||||
|             List<TrainingAssignment> filteredTraining = new(); | ||||
|             switch (statusFilter) { | ||||
|                 case "1": | ||||
|                     // 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; | ||||
|                 case "2": | ||||
|                     // 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; | ||||
|                 case "3": | ||||
|                     // Cancelled | ||||
| @ -369,9 +383,9 @@ public class TrainingController : Controller { | ||||
|     /// Method to return all the training assignments for a specified user | ||||
|     /// </summary> | ||||
|     public ActionResult ViewMyTrainingAssignments() { | ||||
|         int userID = (int)Session[GlobalVars.SESSION_USERID]; | ||||
|         int userID = GlobalVars.GetUserId(GetSession()); | ||||
|         List<TrainingAssignment> assignments = trainingDMO.GetTrainingAssignmentsByUserID(userID); | ||||
|         List<ECNTrainingAssignments> ViewData = new List<ECNTrainingAssignments>(); | ||||
|         List<ECNTrainingAssignments> ViewData = new(); | ||||
|         foreach (TrainingAssignment assignment in assignments) { | ||||
|             Training training = trainingDMO.GetTraining(assignment.TrainingID); | ||||
|             if (training != null && !assignment.status) { | ||||
| @ -407,7 +421,7 @@ public class TrainingController : Controller { | ||||
|         // Group Filter | ||||
|         if (filterType == 1 && filterValue != "") { | ||||
|             ViewBag.GroupFilter = filterValue; | ||||
|             List<Training> filteredTraining = new List<Training>(); | ||||
|             List<Training> filteredTraining = new(); | ||||
|             foreach (Training item in AllTrainings) { | ||||
|                 List<int> assignedTrainingGroups = trainingDMO.GetECNAssignedTrainingGroups(item.ECN); | ||||
|                 foreach (int id in assignedTrainingGroups) { | ||||
| @ -454,8 +468,8 @@ public class TrainingController : Controller { | ||||
|     } | ||||
|  | ||||
|     public ActionResult ManuallyExecuteECNTraining(int ecnId, int[] trainingGroupsIn) { | ||||
|         if ((bool)Session[GlobalVars.IS_ADMIN]) { | ||||
|             List<int> newTrainingGroupIds = new List<int>(trainingGroupsIn); | ||||
|         if (GlobalVars.IsAdmin(GetSession())) { | ||||
|             List<int> newTrainingGroupIds = new(trainingGroupsIn); | ||||
|             ECN ecn = ecnDMO.GetECN(ecnId); | ||||
|             if (ecn != null) { | ||||
|                 if (ecn.CloseDate != null) { | ||||
| @ -493,7 +507,7 @@ public class TrainingController : Controller { | ||||
|         if (ecn != null) { | ||||
|             if (ecn.CloseDate != null) { | ||||
|                 List<int> trainingGroupIds = trainingDMO.GetECNAssignedTrainingGroups(ecnId); | ||||
|                 List<TrainingGroup> assignedGroups = new List<TrainingGroup>(); | ||||
|                 List<TrainingGroup> assignedGroups = new(); | ||||
|                 foreach (int trainingGroupId in trainingGroupIds) { | ||||
|                     TrainingGroup trainingGroup = trainingDMO.GetTrainingGroupByID(trainingGroupId); | ||||
|                     assignedGroups.Add(trainingGroup); | ||||
| @ -517,7 +531,7 @@ public class TrainingController : Controller { | ||||
|             emailBody += "<style>table,th,td{border: 1px solid black;}</style>"; | ||||
|             // Get all users set up to receive the training report email. | ||||
|             List<TrainingReportUser> trainingReportUsers = adminDMO.GetTrainingReportUsers(); | ||||
|             List<string> emailList = new List<string>(); | ||||
|             List<string> emailList = new(); | ||||
|             foreach (TrainingReportUser user in trainingReportUsers) { | ||||
|                 string userEmail = userDMO.GetUserByID(user.UserId).Email; | ||||
|                 emailList.Add(userEmail); | ||||
| @ -564,4 +578,34 @@ public class TrainingController : Controller { | ||||
|         } | ||||
|         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.Linq; | ||||
| using System.Net; | ||||
| using System.Net.Http; | ||||
| #if !NET8 | ||||
| using System.Web.Http; | ||||
| #endif | ||||
|  | ||||
| #if NET8 | ||||
| using Microsoft.AspNetCore.Mvc; | ||||
| #endif | ||||
|  | ||||
| using Fab2ApprovalSystem.Misc; | ||||
| using Fab2ApprovalSystem.Models; | ||||
|  | ||||
| #if !NET8 | ||||
| using System; | ||||
| using System.Linq; | ||||
| using System.Net; | ||||
| using System.Net.Http; | ||||
| #endif | ||||
|  | ||||
| namespace Fab2ApprovalSystem.Controllers; | ||||
|  | ||||
| #if !NET8 | ||||
| public class WebAPIController : ApiController { | ||||
|     public TrainingController trainingFunctions = new TrainingController(); | ||||
|     public CorrectiveActionController carFunctions = new CorrectiveActionController(); | ||||
|     public AccountController accountFunctions = new AccountController(); | ||||
|     public HomeController homeFunctions = new HomeController(); | ||||
|     private readonly AppSettings _AppSettings = GlobalVars.AppSettings; | ||||
| #endif | ||||
|  | ||||
| #if NET8 | ||||
| [ApiController] | ||||
| [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() { | ||||
|         return "Welcome To Web API"; | ||||
|     } | ||||
|  | ||||
|     public List<string> Get(int Id) { | ||||
|         return new List<string> { | ||||
|                 "Data1", | ||||
|                 "Data2" | ||||
|             }; | ||||
|     } | ||||
|  | ||||
|     public void Post() { | ||||
|     } | ||||
|  | ||||
| #if !NET8 | ||||
|  | ||||
|     public HttpResponseMessage Post(HttpRequestMessage request, string action) { | ||||
|         switch (action) { | ||||
|             case "TrainingReport": | ||||
| @ -65,4 +87,7 @@ public class WebAPIController : ApiController { | ||||
|                 return request.CreateResponse(HttpStatusCode.InternalServerError, "Action Not Found"); | ||||
|         } | ||||
|     } | ||||
|  | ||||
| #endif | ||||
|  | ||||
| } | ||||
| @ -1,17 +1,30 @@ | ||||
| using System; | ||||
| using System.Collections.Generic; | ||||
| using System.Linq; | ||||
| #if !NET8 | ||||
| using System.Web; | ||||
| 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.Models; | ||||
| #endif | ||||
|  | ||||
| #if !NET8 | ||||
| using Kendo.Mvc.Extensions; | ||||
| using Kendo.Mvc.UI; | ||||
| #endif | ||||
|  | ||||
| namespace Fab2ApprovalSystem.Controllers; | ||||
|  | ||||
| #if NET8 | ||||
| [Route("[controller]")] | ||||
| #endif | ||||
| public class WorkflowController : Controller { | ||||
|  | ||||
|     // GET: /Workflow/Details/5 | ||||
| @ -24,6 +37,8 @@ public class WorkflowController : Controller { | ||||
|         return View(); | ||||
|     } | ||||
|  | ||||
| #if !NET8 | ||||
|  | ||||
|     // POST: /Workflow/Create | ||||
|     [HttpPost] | ||||
|     public ActionResult Create(FormCollection collection) { | ||||
| @ -36,11 +51,15 @@ public class WorkflowController : Controller { | ||||
|         } | ||||
|     } | ||||
|  | ||||
| #endif | ||||
|  | ||||
|     // GET: /Workflow/Edit/5 | ||||
|     public ActionResult Edit(int id) { | ||||
|         return View(); | ||||
|     } | ||||
|  | ||||
| #if !NET8 | ||||
|  | ||||
|     // POST: /Workflow/Edit/5 | ||||
|     [HttpPost] | ||||
|     public ActionResult Edit(int id, FormCollection collection) { | ||||
| @ -53,11 +72,15 @@ public class WorkflowController : Controller { | ||||
|         } | ||||
|     } | ||||
|  | ||||
| #endif | ||||
|  | ||||
|     // GET: /Workflow/Delete/5 | ||||
|     public ActionResult Delete(int id) { | ||||
|         return View(); | ||||
|     } | ||||
|  | ||||
| #if !NET8 | ||||
|  | ||||
|     // POST: /Workflow/Delete/5 | ||||
|     [HttpPost] | ||||
|     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; | ||||
|  | ||||
| } | ||||
| @ -37,7 +37,7 @@ public class AdminDMO { | ||||
|             foreach (SubRole sr in r.SubRoles) { | ||||
|                 if (sr.Inactive) { | ||||
|                     // hide inactive roles unless parameter says otherwise | ||||
|                     if (showInactiveRoles.Equals("true") == false) | ||||
|                     if (!showInactiveRoles.Equals("true")) | ||||
|                         continue; | ||||
|                 } | ||||
|  | ||||
| @ -130,13 +130,19 @@ public class AdminDMO { | ||||
|     } | ||||
|  | ||||
| #if !NET8 | ||||
|  | ||||
|     public List<TrainingReportUser> GetTrainingReportUsers() { | ||||
|         List<TrainingReportUser> CurrentReportUsers = (from a in FabApprovalDB.TrainingReportUsers select a).ToList(); | ||||
|         return CurrentReportUsers; | ||||
|     } | ||||
| #else | ||||
|  | ||||
| #endif | ||||
|  | ||||
| #if NET8 | ||||
|  | ||||
|     public List<TrainingReportUser> GetTrainingReportUsers() => | ||||
|         throw new NotImplementedException(); | ||||
|  | ||||
| #endif | ||||
|  | ||||
| #if !NET8 | ||||
| @ -179,14 +185,20 @@ public class AdminDMO { | ||||
|         return; | ||||
|     } | ||||
|  | ||||
| #if !NET8 | ||||
|     public List<TrainingGroup> GetTrainingGroups() { | ||||
| #if !NET8 | ||||
|         var TrainingGroups = from a in FabApprovalDB.TrainingGroups select a; | ||||
|         List<TrainingGroup> GroupsToReturn = TrainingGroups.ToList(); | ||||
|  | ||||
|         return GroupsToReturn; | ||||
| #endif | ||||
| #if NET8 | ||||
|     throw new NotImplementedException(); | ||||
| #endif | ||||
|     } | ||||
|  | ||||
| #if !NET8 | ||||
|  | ||||
|     public void AddNewTrainingGroup(string groupName) { | ||||
|         TrainingGroup existing = null; | ||||
|         // Check to see that the group name doesn't exist. | ||||
|  | ||||
| @ -401,7 +401,6 @@ public class AuditDMO { | ||||
|             result.Is8DQA = "true"; | ||||
|         } | ||||
|  | ||||
|         audit = GetAuditItem(issueID, userId); | ||||
|         // transform audit users from string to list, delimited by a comma. | ||||
|         if (audit.Auditees == null) { | ||||
|             result.AuditeeNames = new List<string>(); | ||||
| @ -414,7 +413,7 @@ public class AuditDMO { | ||||
|         if (audit.OriginatorID == userId) { | ||||
|             result.IsSubmitter = true; | ||||
|         } | ||||
|         if (isAdmin != true) { | ||||
|         if (!isAdmin) { | ||||
|             result.IsAdmin = false; | ||||
|         } else { | ||||
|             result.IsAdmin = true; | ||||
| @ -424,7 +423,7 @@ public class AuditDMO { | ||||
|         { | ||||
|             result.RedirectToAction = true; | ||||
|         } | ||||
|         if (result.IsAdmin == false && result.IsSubmitter == false) { | ||||
|         if (!result.IsAdmin && !result.IsSubmitter) { | ||||
|             result.RedirectToAction = true; | ||||
|         } else { | ||||
|             result.UserList = GetUserList(); | ||||
|  | ||||
| @ -90,6 +90,7 @@ public class CorrectiveActionDMO { | ||||
|                 parameters.Add("@EscapePoint", model.EscapePoint); | ||||
|                 parameters.Add("@FollowUpDate", model.FollowUpDate); | ||||
|                 parameters.Add("@CASubmitted", model.CASubmitted); | ||||
|                 parameters.Add("@CAStandardType", model.CAStandardType); | ||||
|  | ||||
|                 db.Execute("_8DUpdateCorrectiveAction", parameters, commandType: CommandType.StoredProcedure); | ||||
|                 EventLogDMO.Add(new WinEventLog { UserID = "System", Comments = "Saved Corrective Action", DocumentType = "9", IssueID = model.CANo, OperationType = "Status", SysDocumentID = 1 }); | ||||
| @ -323,7 +324,7 @@ public class CorrectiveActionDMO { | ||||
|         bool isAssignee = false; | ||||
|         int aiIndex = 0; | ||||
|         List<D5D6CorrectivetAction> actionItems = GetD5D6CorrectivetActions(caId).ToList(); | ||||
|         while (isAssignee == false && aiIndex < actionItems.Count) { | ||||
|         while (!isAssignee && aiIndex < actionItems.Count) { | ||||
|             D5D6CorrectivetAction actionItem = actionItems[aiIndex]; | ||||
|             if (actionItem.ResponsibilityOwnerID == userId && actionItem.ImplementedDate == null && actionItem.Approved) { | ||||
|                 isAssignee = true; | ||||
|  | ||||
| @ -15,6 +15,7 @@ using Fab2ApprovalSystem.ViewModels; | ||||
| namespace Fab2ApprovalSystem.DMO; | ||||
|  | ||||
| public class ECN_DMO { | ||||
|  | ||||
|     private readonly IDbConnection db = new SqlConnection(GlobalVars.DB_CONNECTION_STRING); | ||||
|     private readonly WorkflowDMO wfDMO = new(); | ||||
|  | ||||
| @ -41,6 +42,9 @@ public class ECN_DMO { | ||||
|             parameters.Add("@ExpirationDate", ecn.ExpirationDate); | ||||
|             parameters.Add("@ExtensionDate", ecn.ExtensionDate); | ||||
|             parameters.Add("@CancellationDate", ecn.CancellationDate); | ||||
|             parameters.Add("@CancellationApprovalDate", ecn.CancellationApprovalDate); | ||||
|             parameters.Add("@CancellationApproved", ecn.CancellationApproved); | ||||
|             parameters.Add("@Cancelled", ecn.Cancelled); | ||||
|             parameters.Add("@AcknowledgementRequired", ecn.AcknowledgementRequired); | ||||
|             parameters.Add("@TrainingRequired", ecn.TrainingRequired); | ||||
|             parameters.Add("@AreaID", ecn.AreaID); | ||||
| @ -352,14 +356,17 @@ public class ECN_DMO { | ||||
|             List<string> affectedAreas = multipleResultItems.Read<string>().ToList(); | ||||
|             List<string> affectedTechnologies = multipleResultItems.Read<string>().ToList(); | ||||
|             List<string> acknowledgementBy = multipleResultItems.Read<string>().ToList(); | ||||
|             List<string> trainingBy = multipleResultItems.Read<string>().ToList(); | ||||
|             List<int> trainingby = multipleResultItems.Read<int>().ToList(); | ||||
|             if (ecnItem != null && trainingby != null) { | ||||
|                 if (trainingby.Count > 0) | ||||
|                     ecnItem.TrainingByIDs.AddRange(trainingby); | ||||
|             } | ||||
|             List<string> productfamilies = multipleResultItems.Read<string>().ToList(); | ||||
|  | ||||
|             ecnItem.AffectedModules = string.Join(", ", modules); | ||||
|             ecnItem.AffectedDepartments = string.Join(", ", departments); | ||||
|             ecnItem.AffectedAreas = string.Join(",", affectedAreas); | ||||
|             ecnItem.AffectedTechnologies = string.Join(",", affectedTechnologies); | ||||
|             ecnItem.TrainingBy = string.Join(",", trainingBy); | ||||
|             ecnItem.AcknowledgementBy = string.Join(",", acknowledgementBy); | ||||
|             ecnItem.AffectedProductFamilies = string.Join(",", productfamilies); | ||||
|  | ||||
| @ -367,7 +374,7 @@ public class ECN_DMO { | ||||
|         return ecnItem; | ||||
|     } | ||||
|  | ||||
|     internal ECN GetECN(int ecnNumber) { | ||||
|     public ECN GetECN(int ecnNumber) { | ||||
|         ECN ecnItem = new(); | ||||
|         DynamicParameters parameters = new(); | ||||
|         parameters.Add("@ECNNumber", value: ecnNumber); | ||||
| @ -389,7 +396,7 @@ public class ECN_DMO { | ||||
|  | ||||
|     internal List<ECNCategory> GetCategories() { | ||||
|         List<ECNCategory> r = db.Query<ECNCategory>("ECNGetCategories", null, commandType: CommandType.StoredProcedure).ToList(); | ||||
|         return r; | ||||
|         return r.OrderBy(l => l.CategoryName).ToList(); | ||||
|     } | ||||
|  | ||||
|     internal List<ECNArea> GetECNAreas() { | ||||
| @ -710,4 +717,26 @@ public class ECN_DMO { | ||||
|         return r; | ||||
|     } | ||||
|  | ||||
|     internal string GetCategoryID(ECNPdf ecn) { | ||||
|         string result; | ||||
|         if (ecn.CategoryID is null) { | ||||
|             result = string.Empty; | ||||
|         } else { | ||||
|             List<ECNCategory> categories = GetCategories(); | ||||
|             result = (from l in categories where l.CategoryID == ecn.CategoryID.Value select l.CategoryName).FirstOrDefault(); | ||||
|         } | ||||
|         return result; | ||||
|     } | ||||
|  | ||||
|     internal string GetTrainingNotificationTo(ECNPdf ecn, TrainingDMO trainingDMO) { | ||||
|         string result; | ||||
|         if (ecn.TrainingByIDs is null) { | ||||
|             result = string.Empty; | ||||
|         } else { | ||||
|             List<TrainingGroup> trainingGroups = trainingDMO.GetTrainingGroups(); | ||||
|             result = string.Join(", ", (from l in trainingGroups where ecn.TrainingByIDs.Contains(l.TrainingGroupID) select l.TrainingGroupName).ToArray()); | ||||
|         } | ||||
|         return result; | ||||
|     } | ||||
|  | ||||
| } | ||||
| @ -266,9 +266,9 @@ public class MRB_DMO { | ||||
|         DateTime? issueStartDate = tempMRBInfo.IssueStartDate; | ||||
|         DateTime? issueEndDate = tempMRBInfo.IssueEndDate; | ||||
|  | ||||
|         if (issueStartDate.HasValue == false) | ||||
|         if (!issueStartDate.HasValue) | ||||
|             throw new Exception("MRB Issue Start Date cannot be blank"); | ||||
|         if (issueEndDate.HasValue == false) | ||||
|         if (!issueEndDate.HasValue) | ||||
|             throw new Exception("MRB Issue End Date cannot be blank"); | ||||
|  | ||||
|         MRB mrbData = new() { MRBNumber = mrbNumber, ToolCSV = tempMRBInfo.ToolCSV, IssueStartDate = tempMRBInfo.IssueStartDate, IssueEndDate = tempMRBInfo.IssueEndDate }; | ||||
|  | ||||
| @ -46,7 +46,9 @@ public class TrainingDMO { | ||||
|         IEnumerable<Training> allTrainings = (from a in db.Trainings select a).ToList(); | ||||
|  | ||||
|         return allTrainings; | ||||
| #else | ||||
| #endif | ||||
|  | ||||
| #if NET8 | ||||
|         throw new NotImplementedException(); | ||||
| #endif | ||||
|     } | ||||
| @ -57,7 +59,9 @@ public class TrainingDMO { | ||||
|         Training trainingRecord = new Training(); | ||||
|         trainingRecord = (from a in db.Trainings where a.TrainingID == trainingId select a).FirstOrDefault(); | ||||
|         return trainingRecord; | ||||
| #else | ||||
| #endif | ||||
|  | ||||
| #if NET8 | ||||
|         throw new NotImplementedException(); | ||||
| #endif | ||||
|     } | ||||
| @ -67,7 +71,9 @@ public class TrainingDMO { | ||||
|         FabApprovalTrainingEntities db = new FabApprovalTrainingEntities(); | ||||
|         TrainingAssignment assignmentRecord = (from a in db.TrainingAssignments where a.ID == assignmentId select a).FirstOrDefault(); | ||||
|         return assignmentRecord; | ||||
| #else | ||||
| #endif | ||||
|  | ||||
| #if NET8 | ||||
|         throw new NotImplementedException(); | ||||
| #endif | ||||
|     } | ||||
| @ -79,7 +85,9 @@ public class TrainingDMO { | ||||
|         int trainingId = (from a in db.Trainings where a.ECN == ECNId select a.TrainingID).FirstOrDefault(); | ||||
|  | ||||
|         return trainingId; | ||||
| #else | ||||
| #endif | ||||
|  | ||||
| #if NET8 | ||||
|         throw new NotImplementedException(); | ||||
| #endif | ||||
|     } | ||||
| @ -90,7 +98,9 @@ public class TrainingDMO { | ||||
|         var users = (from a in db.TrainingGroupMembers where a.TrainingGroupID == groupId select a.UserID).ToList(); | ||||
|  | ||||
|         return users; | ||||
| #else | ||||
| #endif | ||||
|  | ||||
| #if NET8 | ||||
|         throw new NotImplementedException(); | ||||
| #endif | ||||
|     } | ||||
| @ -105,7 +115,9 @@ public class TrainingDMO { | ||||
|         } else { | ||||
|             return true; | ||||
|         } | ||||
| #else | ||||
| #endif | ||||
|  | ||||
| #if NET8 | ||||
|         throw new NotImplementedException(); | ||||
| #endif | ||||
|     } | ||||
| @ -114,8 +126,11 @@ public class TrainingDMO { | ||||
| #if !NET8 | ||||
|         FabApprovalTrainingEntities db = new FabApprovalTrainingEntities(); | ||||
|         return (from a in db.TrainingGroups select a).ToList(); | ||||
| #else | ||||
|         throw new NotImplementedException(); | ||||
| #endif | ||||
|  | ||||
| #if NET8 | ||||
|         System.Text.StringBuilder query = new("SELECT TrainingGroupID, TrainingGroupName FROM TrainingGroups ORDER BY TrainingGroupID"); | ||||
|         return db.Query<TrainingGroup>(query.ToString()).ToList(); | ||||
| #endif | ||||
|     } | ||||
|  | ||||
| @ -124,7 +139,9 @@ public class TrainingDMO { | ||||
|         FabApprovalTrainingEntities db = new FabApprovalTrainingEntities(); | ||||
|         TrainingGroup groups = (from a in db.TrainingGroups where a.TrainingGroupID == groupId select a).FirstOrDefault(); | ||||
|         return groups; | ||||
| #else | ||||
| #endif | ||||
|  | ||||
| #if NET8 | ||||
|         throw new NotImplementedException(); | ||||
| #endif | ||||
|     } | ||||
| @ -134,7 +151,9 @@ public class TrainingDMO { | ||||
|         List<int> trainingGroups = (from a in FabApprovalDB.ECNTrainingBies where a.ECNNumber == ECNNumber select a.AcknowledgementTrainingByID).ToList(); | ||||
|  | ||||
|         return trainingGroups; | ||||
| #else | ||||
| #endif | ||||
|  | ||||
| #if NET8 | ||||
|         throw new NotImplementedException(); | ||||
| #endif | ||||
|     } | ||||
| @ -149,7 +168,9 @@ public class TrainingDMO { | ||||
|  | ||||
|         this.db.Execute("ECNInsertTrainingBy", parameters, commandType: CommandType.StoredProcedure); | ||||
|  | ||||
| #else | ||||
| #endif | ||||
|  | ||||
| #if NET8 | ||||
|         throw new NotImplementedException(); | ||||
| #endif | ||||
|     } | ||||
| @ -162,7 +183,9 @@ public class TrainingDMO { | ||||
|  | ||||
|         this.db.Execute("ECNSetTrainingFlag", parameters, commandType: CommandType.StoredProcedure); | ||||
|  | ||||
| #else | ||||
| #endif | ||||
|  | ||||
| #if NET8 | ||||
|         throw new NotImplementedException(); | ||||
| #endif | ||||
|     } | ||||
| @ -177,7 +200,9 @@ public class TrainingDMO { | ||||
|         TrainingData = from a in db.TrainingAssignments where a.TrainingID == TrainingID select a; | ||||
|  | ||||
|         return TrainingData.ToList(); | ||||
| #else | ||||
| #endif | ||||
|  | ||||
| #if NET8 | ||||
|         throw new NotImplementedException(); | ||||
| #endif | ||||
|     } | ||||
| @ -192,7 +217,9 @@ public class TrainingDMO { | ||||
|         TrainingData = from a in db.TrainingAssignments where a.TrainingID == TrainingID select a; | ||||
|  | ||||
|         return TrainingData.ToList(); | ||||
| #else | ||||
| #endif | ||||
|  | ||||
| #if NET8 | ||||
|         throw new NotImplementedException(); | ||||
| #endif | ||||
|     } | ||||
| @ -203,7 +230,9 @@ public class TrainingDMO { | ||||
|         var TrainingData = from a in db.TrainingAssignments where a.TrainingID == TrainingID && a.UserID == userID select a; | ||||
|  | ||||
|         return TrainingData.ToList(); | ||||
| #else | ||||
| #endif | ||||
|  | ||||
| #if NET8 | ||||
|         throw new NotImplementedException(); | ||||
| #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(); | ||||
|  | ||||
|         return docs; | ||||
| #else | ||||
| #endif | ||||
|  | ||||
| #if NET8 | ||||
|         throw new NotImplementedException(); | ||||
| #endif | ||||
|     } | ||||
| @ -240,7 +271,9 @@ public class TrainingDMO { | ||||
|                 Console.WriteLine(e); | ||||
|             } | ||||
|         } | ||||
| #else | ||||
| #endif | ||||
|  | ||||
| #if NET8 | ||||
|         throw new NotImplementedException(); | ||||
| #endif | ||||
|     } | ||||
| @ -251,7 +284,9 @@ public class TrainingDMO { | ||||
|         int trainingID = (from a in db.TrainingAssignments where a.ID == trainingAssignmentID select a.TrainingID).SingleOrDefault(); | ||||
|  | ||||
|         return trainingID; | ||||
| #else | ||||
| #endif | ||||
|  | ||||
| #if NET8 | ||||
|         throw new NotImplementedException(); | ||||
| #endif | ||||
|     } | ||||
| @ -272,7 +307,9 @@ public class TrainingDMO { | ||||
|                 Console.WriteLine(e); | ||||
|             } | ||||
|         } | ||||
| #else | ||||
| #endif | ||||
|  | ||||
| #if NET8 | ||||
|         throw new NotImplementedException(); | ||||
| #endif | ||||
|     } | ||||
| @ -293,7 +330,9 @@ public class TrainingDMO { | ||||
|                 Console.WriteLine(e); | ||||
|             } | ||||
|         } | ||||
| #else | ||||
| #endif | ||||
|  | ||||
| #if NET8 | ||||
|         throw new NotImplementedException(); | ||||
| #endif | ||||
|     } | ||||
| @ -311,7 +350,9 @@ public class TrainingDMO { | ||||
|             } | ||||
|         } | ||||
|         return isFinished; | ||||
| #else | ||||
| #endif | ||||
|  | ||||
| #if NET8 | ||||
|         throw new NotImplementedException(); | ||||
| #endif | ||||
|     } | ||||
| @ -331,7 +372,9 @@ public class TrainingDMO { | ||||
|         } | ||||
|  | ||||
|         return isFinished; | ||||
| #else | ||||
| #endif | ||||
|  | ||||
| #if NET8 | ||||
|         throw new NotImplementedException(); | ||||
| #endif | ||||
|     } | ||||
| @ -348,7 +391,9 @@ public class TrainingDMO { | ||||
|         } | ||||
|  | ||||
|         return userHasAssignment; | ||||
| #else | ||||
| #endif | ||||
|  | ||||
| #if NET8 | ||||
|         throw new NotImplementedException(); | ||||
| #endif | ||||
|     } | ||||
| @ -359,7 +404,9 @@ public class TrainingDMO { | ||||
|         var trainings = from a in db.Trainings select a; | ||||
|  | ||||
|         return trainings.ToList(); | ||||
| #else | ||||
| #endif | ||||
|  | ||||
| #if NET8 | ||||
|         throw new NotImplementedException(); | ||||
| #endif | ||||
|     } | ||||
| @ -370,7 +417,9 @@ public class TrainingDMO { | ||||
|         var trainingAssignments = from a in db.TrainingAssignments where a.UserID == userID && a.Deleted != true select a; | ||||
|  | ||||
|         return trainingAssignments.ToList(); | ||||
| #else | ||||
| #endif | ||||
|  | ||||
| #if NET8 | ||||
|         throw new NotImplementedException(); | ||||
| #endif | ||||
|     } | ||||
| @ -390,7 +439,9 @@ public class TrainingDMO { | ||||
|             string exception = e.ToString(); | ||||
|             Console.WriteLine(e); | ||||
|         } | ||||
| #else | ||||
| #endif | ||||
|  | ||||
| #if NET8 | ||||
|         throw new NotImplementedException(); | ||||
| #endif | ||||
|     } | ||||
| @ -410,7 +461,9 @@ public class TrainingDMO { | ||||
|             string exception = e.ToString(); | ||||
|             Console.WriteLine(e); | ||||
|         } | ||||
| #else | ||||
| #endif | ||||
|  | ||||
| #if NET8 | ||||
|         throw new NotImplementedException(); | ||||
| #endif | ||||
|     } | ||||
| @ -431,7 +484,9 @@ public class TrainingDMO { | ||||
|             DeleteTrainingAssignment(trainingAssignment.ID); | ||||
|             DeleteTrainingDocAck(trainingAssignment.ID); | ||||
|         } | ||||
| #else | ||||
| #endif | ||||
|  | ||||
| #if NET8 | ||||
|         throw new NotImplementedException(); | ||||
| #endif       | ||||
|     } | ||||
| @ -451,7 +506,9 @@ public class TrainingDMO { | ||||
|             } | ||||
|             DeleteTrainingAssignment(item.ID); | ||||
|         } | ||||
| #else | ||||
| #endif | ||||
|  | ||||
| #if NET8 | ||||
|         throw new NotImplementedException(); | ||||
| #endif | ||||
|     } | ||||
| @ -478,7 +535,9 @@ public class TrainingDMO { | ||||
|         } else { | ||||
|             return false; | ||||
|         } | ||||
| #else | ||||
| #endif | ||||
|  | ||||
| #if NET8 | ||||
|         throw new NotImplementedException(); | ||||
| #endif | ||||
|     } | ||||
| @ -488,7 +547,9 @@ public class TrainingDMO { | ||||
|         FabApprovalTrainingEntities db = new FabApprovalTrainingEntities(); | ||||
|         List<Training> openTrainings = (from a in db.Trainings where a.Status != true && a.Deleted != true select a).ToList(); | ||||
|         return openTrainings; | ||||
| #else | ||||
| #endif | ||||
|  | ||||
| #if NET8 | ||||
|         throw new NotImplementedException(); | ||||
| #endif | ||||
|     } | ||||
| @ -498,7 +559,9 @@ public class TrainingDMO { | ||||
|         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(); | ||||
|         return openAssignments; | ||||
| #else | ||||
| #endif | ||||
|  | ||||
| #if NET8 | ||||
|         throw new NotImplementedException(); | ||||
| #endif | ||||
|     } | ||||
|  | ||||
| @ -166,7 +166,7 @@ public class WorkflowDMO { | ||||
|             sqlString.Append("SELECT COUNT(*) FROM LotDisposition LD INNER JOIN Lot L  ON LD.IssueID = L.IssueID "); | ||||
|             sqlString.Append("WHERE (PERequired = 1 OR Location = 'QDB' OR Location = 'EDB' ) AND LD.IssueID = @IssueID "); | ||||
|             recordCount = db.Query<int>(sqlString.ToString(), new { IssueID = issueID }).Single(); | ||||
|             if ((recordCount > 0) && (allLotsAreScrap == false)) { | ||||
|             if ((recordCount > 0) && (!allLotsAreScrap)) { | ||||
|                 // check if there any IG Medical products | ||||
|                 if (recordCountForIG_MA > 0) { | ||||
|                     sqlString = new StringBuilder(); | ||||
|  | ||||
| @ -2,10 +2,12 @@ | ||||
| *****Please DO NOT reply to this email*****  | ||||
| <br/><br/> | ||||
| {3}# {0} has been Cancelled. Please remove posted TECN from point of use. The cancellation date is {4}  | ||||
| Please review the cancelled TECN form in the attachment. | ||||
| Please review comments below and ensure process has been returned to normal. | ||||
| <br/><br/> | ||||
| https://messa016ec.infineon.com/ECN/Edit?issueID={1} | ||||
| <br/><br/> | ||||
| Comments: {5} | ||||
| <br/><br/> | ||||
|  | ||||
| If you have any questions or trouble logging on please contact a site administrator. | ||||
| <br/><br/> | ||||
|  | ||||
							
								
								
									
										17
									
								
								Fab2ApprovalSystem/EmailTemplates/TECNReturnedToProcess.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										17
									
								
								Fab2ApprovalSystem/EmailTemplates/TECNReturnedToProcess.txt
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,17 @@ | ||||
| <font size="2" face="verdana"> | ||||
| *****Please DO NOT reply to this email*****  | ||||
| <br/><br/> | ||||
| {3}# {0} has been returned to process. Please remove posted TECN from point of use. The returned to process date is {4}  | ||||
| Please review comments below and ensure process has been returned to normal. | ||||
| <br/><br/> | ||||
| https://messa016ec.infineon.com/ECN/Edit?issueID={1} | ||||
| <br/><br/> | ||||
| Comments: {5} | ||||
| <br/><br/> | ||||
|  | ||||
| If you have any questions or trouble logging on please contact a site administrator. | ||||
| <br/><br/> | ||||
| Thank you!  | ||||
|  | ||||
|  | ||||
| </font> | ||||
| @ -255,6 +255,7 @@ | ||||
|     <Compile Include="Controllers\TrainingController.cs" /> | ||||
|     <Compile Include="Controllers\WebAPIController.cs" /> | ||||
|     <Compile Include="Controllers\WorkflowController.cs" /> | ||||
|     <Compile Include="Controllers\PCRBController.cs" /> | ||||
|     <Compile Include="DMO\AccountDMO.cs" /> | ||||
|     <Compile Include="DMO\AdminDMO.cs" /> | ||||
|     <Compile Include="DMO\ApprovalLogDMO.cs" /> | ||||
| @ -320,6 +321,7 @@ | ||||
|     <Compile Include="Models\PartsRequestModels.cs" /> | ||||
|     <Compile Include="Models\ProductViewModel.cs" /> | ||||
|     <Compile Include="Models\TestModels.cs" /> | ||||
|     <Compile Include="Models\User.cs" /> | ||||
|     <Compile Include="Models\UserSubRoles.cs" /> | ||||
|     <Compile Include="Models\WinEventLogModel.cs" /> | ||||
|     <Compile Include="Models\WorkFlowModels.cs" /> | ||||
| @ -387,8 +389,10 @@ | ||||
|     <Content Include="Views\CorrectiveAction\_D7PAAttachment.cshtml" /> | ||||
|     <Content Include="Views\CorrectiveAction\Edit.cshtml" /> | ||||
|     <Content Include="Views\CorrectiveAction\ReadOnlyCA.cshtml" /> | ||||
|     <Content Include="Views\ECN\_ECNCancel.cshtml" /> | ||||
|     <Content Include="Views\ECN\_ECNLayout.cshtml" /> | ||||
|     <Content Include="Views\ECN\_ECNReassignOriginator.cshtml" /> | ||||
|     <Content Include="Views\ECN\_ECNReturnToProcess.cshtml" /> | ||||
|     <Content Include="Views\ECN\Acknowledge.cshtml" /> | ||||
|     <Content Include="Views\ECN\ECNApprovalPdf.cshtml" /> | ||||
|     <Content Include="Views\ECN\ECNPdf.cshtml" /> | ||||
| @ -513,6 +517,7 @@ | ||||
|     <Content Include="EmailTemplates\TECNExpirationApproval.txt" /> | ||||
|     <Content Include="EmailTemplates\TECNExpired.txt" /> | ||||
|     <Content Include="EmailTemplates\TECNExtensionReject.txt" /> | ||||
|     <Content Include="EmailTemplates\TECNReturnedToProcess.txt" /> | ||||
|     <Content Include="EmailTemplates\WorkRequestApproval.txt" /> | ||||
|     <Content Include="EmailTemplates\WorkRequestAssigned.txt" /> | ||||
|     <Content Include="EmailTemplates\WorkRequestReAssigned.txt" /> | ||||
|  | ||||
| @ -5,7 +5,9 @@ using System.Linq; | ||||
| using System.Web; | ||||
| using System.Web.Hosting; | ||||
| using System.Web.Http; | ||||
| #if !NET8 | ||||
| using System.Web.Mvc; | ||||
| #endif | ||||
| using System.Web.Optimization; | ||||
| using System.Web.Routing; | ||||
| using System.Web.Security; | ||||
| @ -63,7 +65,7 @@ public class MvcApplication : System.Web.HttpApplication { | ||||
|     protected void Application_EndRequest() { | ||||
|         var context = new HttpContextWrapper(Context); | ||||
|  | ||||
|         // Do a direct 401 unauthorized | ||||
| #if !NET8 | ||||
|         if (Context.Response.StatusCode == 301 && context.Request.IsAjaxRequest()) { | ||||
|             Context.Response.Clear(); | ||||
|             Context.Response.StatusCode = 401; | ||||
| @ -72,18 +74,27 @@ public class MvcApplication : System.Web.HttpApplication { | ||||
|             context.Response.Clear(); | ||||
|             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) { | ||||
|         Session[GlobalVars.ECN_VIEW_OPTION] = "Pending Approvals"; | ||||
|         GlobalVars.SetECNViewOption(Session, "Pending Approvals"); | ||||
|     } | ||||
|  | ||||
|     protected void Session_End(object sender, EventArgs e) { | ||||
|         // FormsAuthentication.SignOut(); | ||||
|         try { | ||||
|             Session[GlobalVars.SESSION_USERNAME] = ""; | ||||
|             Session[GlobalVars.SESSION_USERID] = ""; | ||||
|             Session[GlobalVars.IS_ADMIN] = null; | ||||
|             GlobalVars.EndSession(Session); | ||||
|         } catch (Exception ex) { | ||||
|             Functions.WriteEvent(null, @User.Identity.Name + "\r\n Session Closed - \r\n" + ex.Message.ToString(), System.Diagnostics.EventLogEntryType.Error); | ||||
|         } | ||||
|  | ||||
| @ -126,7 +126,7 @@ public class ECNHelper { | ||||
|         return emailSentList; | ||||
|     } | ||||
|  | ||||
|     public static string NotifyTECNCancellation(AppSettings appSettings, UserAccountDMO userDMO, int ecnNumber, string ecnFolderPath, ECN ecn, List<int> notificationUserList) { | ||||
|     public static string NotifyTECNCancellation(AppSettings appSettings, UserAccountDMO userDMO, int ecnNumber, string ecnFolderPath, string comments, ECN ecn, List<int> notificationUserList) { | ||||
|         string emailSentList = ""; | ||||
|         List<string> emailIst = MiscDMO.GetTECNCancelledApprovalNotifyList(ecnNumber).Distinct().ToList(); | ||||
|         foreach (int userId in notificationUserList) { | ||||
| @ -135,23 +135,27 @@ public class ECNHelper { | ||||
|                 emailIst.Add(email); | ||||
|         } | ||||
|  | ||||
|         string subject = string.Empty; | ||||
|         string userEmail = string.Empty; | ||||
|         string emailTemplate = "TECNCancelled.txt"; | ||||
|         if (ecn.CancellationApprovalDate == null) { | ||||
|             subject = "TECN Cancellation Initiated  Notice - " + ecnNumber + " for " + ecn.Title + ", Cancellation Initiated on:" + DateTime.Now; | ||||
|         } else { | ||||
|             subject = "TECN Cancellation Approved Notice - " + ecnNumber + " for " + ecn.Title + ", Cancelled:" + ecn.CancellationApprovalDate; | ||||
|         } | ||||
|         string subject; | ||||
|         string emailTemplate; | ||||
|         string senderName = "ECN"; | ||||
|         string userEmail = string.Empty; | ||||
|         DateTime dateTime = ecn.CancellationApprovalDate is null ? DateTime.Now : ecn.CancellationApprovalDate.Value; | ||||
|         if (ecn.ExpirationDate > DateTime.Today || ecn.ExtensionDate > DateTime.Today) { | ||||
|             emailTemplate = "TECNCancelled.txt"; | ||||
|             subject = "TECN Cancellation Approved Notice - " + ecnNumber + " for " + ecn.Title + ", Cancelled:" + dateTime; | ||||
|         } else { | ||||
|             emailTemplate = "TECNReturnedToProcess.txt"; | ||||
|             subject = "TECN Return to Process Approved Notice - " + ecnNumber + " for " + ecn.Title + ", Returned:" + dateTime; | ||||
|         } | ||||
|  | ||||
|         EmailNotification en = new(appSettings, subject); | ||||
|         string[] emailparams = new string[5]; | ||||
|         string[] emailparams = new string[6]; | ||||
|         emailparams[0] = ecnNumber.ToString(); | ||||
|         emailparams[1] = ecnNumber.ToString(); | ||||
|         emailparams[2] = GlobalVars.hostURL; | ||||
|         emailparams[3] = "TECN"; | ||||
|         emailparams[4] = DateTime.Now.ToString(); | ||||
|         emailparams[5] = comments; | ||||
|  | ||||
| #if (DEBUG) | ||||
|         userEmail = GlobalVars.SENDER_EMAIL; | ||||
|  | ||||
| @ -1,53 +1,56 @@ | ||||
| #if !NET8 | ||||
| #if NET8 | ||||
|  | ||||
| using ExcelDataReader; | ||||
|  | ||||
| #endif | ||||
|  | ||||
| #if !NET8 | ||||
|  | ||||
| using Excel; | ||||
|  | ||||
| #endif | ||||
|  | ||||
| using System; | ||||
| using System.Collections.Generic; | ||||
| using System.Data; | ||||
| using System.IO; | ||||
| using System.Linq; | ||||
| using System.Web; | ||||
|  | ||||
| namespace Fab2ApprovalSystem.Misc { | ||||
| namespace Fab2ApprovalSystem.Misc; | ||||
|  | ||||
| public class ExcelData { | ||||
|  | ||||
|     private readonly string _Path; | ||||
|  | ||||
|     public class ExcelData { | ||||
|         string _path; | ||||
|     public ExcelData(string path) { | ||||
|             _path = path; | ||||
|         _Path = path; | ||||
|     } | ||||
|  | ||||
|     public IExcelDataReader getExcelReader() { | ||||
|             // ExcelDataReader works with the binary Excel file, so it needs a FileStream | ||||
|             // to get started. This is how we avoid dependencies on ACE or Interop: | ||||
|  | ||||
|             FileStream stream = File.Open(_path, FileMode.Open, FileAccess.Read); | ||||
|             // We return the interface, so that  | ||||
|         FileStream stream = File.Open(_Path, FileMode.Open, FileAccess.Read); | ||||
|         IExcelDataReader reader = null; | ||||
|  | ||||
|         try { | ||||
|                 if (_path.EndsWith(".xls")) { | ||||
|             if (_Path.EndsWith(".xls")) { | ||||
|                 reader = ExcelReaderFactory.CreateBinaryReader(stream); | ||||
|             } | ||||
|                 if (_path.EndsWith(".xlsx")) { | ||||
|             if (_Path.EndsWith(".xlsx")) { | ||||
|                 reader = ExcelReaderFactory.CreateOpenXmlReader(stream); | ||||
|             } | ||||
|             return reader; | ||||
|         } catch (Exception) { | ||||
|             throw; | ||||
|         } | ||||
|  | ||||
|     } | ||||
|  | ||||
|     public class ExcelLotInfo { | ||||
|             public string LotNo { get; set; } | ||||
|             public string LotDispo { get; set; } | ||||
|         public string? LotNo { get; set; } | ||||
|         public string? LotDispo { get; set; } | ||||
|     } | ||||
|  | ||||
|     public IEnumerable<ExcelLotInfo> ReadData() { | ||||
|             var r = new List<ExcelLotInfo>(); | ||||
|             var excelData = new ExcelData(_path); | ||||
|             var lots = excelData.getData().ToList(); | ||||
|         List<ExcelLotInfo> r = new(); | ||||
|         ExcelData excelData = new(_Path); | ||||
|         List<DataRow> lots = excelData.getData().ToList(); | ||||
|  | ||||
|         int lotDispoColumnIndex = -1; | ||||
|         foreach (DataColumn col in lots[0].Table.Columns) { | ||||
| @ -57,7 +60,7 @@ namespace Fab2ApprovalSystem.Misc { | ||||
|             } | ||||
|         } | ||||
|  | ||||
|             foreach (var row in lots) { | ||||
|         foreach (DataRow row in lots) { | ||||
|             string temValue = row[0].ToString(); | ||||
|             if (temValue.Trim().Length > 0 && temValue.Trim().Length <= 10) { | ||||
|                 r.Add(new ExcelLotInfo() { | ||||
| @ -71,11 +74,10 @@ namespace Fab2ApprovalSystem.Misc { | ||||
|     } | ||||
|  | ||||
|     public IEnumerable<string> ReadQDBFlagData() { | ||||
|             List<string> s = new List<string>(); | ||||
|             // We return the interface, so that          | ||||
|             var excelData = new ExcelData(_path); | ||||
|             var lotNos = excelData.getData(); | ||||
|             foreach (var row in lotNos) { | ||||
|         List<string> s = new(); | ||||
|         ExcelData excelData = new(_Path); | ||||
|         IEnumerable<DataRow> lotNos = excelData.getData(); | ||||
|         foreach (DataRow row in lotNos) { | ||||
|             string temValue = row[0].ToString(); | ||||
|             if (temValue.Trim().Length > 0 && temValue.Trim().Length == 9) { | ||||
|                 if (row[2].ToString().ToUpper() != "YES" && row[2].ToString().ToUpper() != "NO") { | ||||
| @ -89,16 +91,23 @@ namespace Fab2ApprovalSystem.Misc { | ||||
|         return s; | ||||
|     } | ||||
|  | ||||
| #if NET8 | ||||
|  | ||||
|     public IEnumerable<DataRow> getData(bool firstRowIsColumnNames = true) => | ||||
|         throw new NotImplementedException(); | ||||
|  | ||||
| #endif | ||||
|  | ||||
| #if !NET8 | ||||
|  | ||||
|     public IEnumerable<DataRow> getData(bool firstRowIsColumnNames = true) { | ||||
|             var reader = this.getExcelReader(); | ||||
|         IExcelDataReader reader = getExcelReader(); | ||||
|         reader.IsFirstRowAsColumnNames = firstRowIsColumnNames; | ||||
|         var workSheet = reader.AsDataSet().Tables[0]; | ||||
|         var rows = from DataRow a in workSheet.Rows select a; | ||||
|         return rows; | ||||
|  | ||||
|     } | ||||
|  | ||||
|     } | ||||
| } | ||||
|  | ||||
| #endif | ||||
|  | ||||
| } | ||||
| @ -6,10 +6,15 @@ namespace Fab2ApprovalSystem.Misc; | ||||
| public class GlobalVars { | ||||
|  | ||||
|     public int USER_ID; | ||||
| #else | ||||
|  | ||||
| #endif | ||||
|  | ||||
| #if NET8 | ||||
|  | ||||
| public static class GlobalVars { | ||||
|  | ||||
|     public static int USER_ID = 0; | ||||
|  | ||||
| #endif | ||||
|     public const string SESSION_USERNAME = "UserName"; | ||||
|     public const string ApplicationName = "LotDisposition"; | ||||
| @ -98,4 +103,268 @@ public static class GlobalVars { | ||||
|         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 | ||||
|  | ||||
| } | ||||
| @ -117,8 +117,8 @@ public class LotDispositionHelper { | ||||
|     public static void AttachSave(AppSettings appSettings, LotDispositionDMO lotDispositionDMO, int issueID, int userId, string fullFileName, Stream stream) { | ||||
|         // Some browsers send file names with full path. | ||||
|         // We are only interested in the file name. | ||||
|         var fileName = Path.GetFileName(fullFileName); | ||||
|         var physicalPath = Path.Combine(appSettings.AttachmentFolder + "LotDisposition", fileName); | ||||
|         string fileName = Path.GetFileName(fullFileName); | ||||
|         string physicalPath = Path.Combine(appSettings.AttachmentFolder + "LotDisposition", fileName); | ||||
|  | ||||
|         using (FileStream fileStream = new(physicalPath, FileMode.Create, FileAccess.Write)) { | ||||
|             stream.CopyTo(fileStream); | ||||
| @ -134,7 +134,7 @@ public class LotDispositionHelper { | ||||
|     public static string ExcelLotOpen(LotDispositionDMO lotDispositionDMO, int issueID, string userIdentityName, string lotTempPipeLine, string fullFileName, Stream stream) { | ||||
|         string physicalPath; | ||||
|  | ||||
|         var fileExtension = Path.GetExtension(fullFileName); | ||||
|         string fileExtension = Path.GetExtension(fullFileName); | ||||
|         string fName = userIdentityName + DateTime.Now.Hour.ToString() + DateTime.Now.Minute.ToString() + DateTime.Now.Second.ToString(); | ||||
|  | ||||
|         physicalPath = Path.Combine(lotTempPipeLine, fName + "." + fileExtension); | ||||
| @ -142,20 +142,18 @@ public class LotDispositionHelper { | ||||
|             stream.CopyTo(fileStream); | ||||
|         } | ||||
|  | ||||
| #if !NET8 | ||||
|         ExcelData x = new ExcelData(physicalPath); | ||||
|         var lotNumbers = x.ReadData(); | ||||
|         ExcelData x = new (physicalPath); | ||||
|         IEnumerable<ExcelData.ExcelLotInfo> lotNumbers = x.ReadData(); | ||||
|  | ||||
|         foreach (var lotInfo in lotNumbers) { | ||||
|             Lot l = new Lot(); | ||||
|             l.LotNumber = lotInfo.LotNo; | ||||
|         foreach (ExcelData.ExcelLotInfo lotInfo in lotNumbers) { | ||||
|             Lot l = new(); | ||||
|             l.LotNumber = lotInfo.LotNo ?? string.Empty; | ||||
|             l.IssueID = issueID; | ||||
|             if (l.LotStatusOptionID == 0) | ||||
|                 l.LotStatusOption.LotStatusOptionID = (int)GlobalVars.LotStatusOption.Release; | ||||
|  | ||||
|             lotDispositionDMO.InsertLot(l, true); | ||||
|         } | ||||
| #endif | ||||
|  | ||||
|         FileInfo f = new(physicalPath); | ||||
|         if (f.Exists) | ||||
|  | ||||
| @ -46,14 +46,12 @@ public class MRBHelper { | ||||
|             stream.CopyTo(fileStream); | ||||
|         } | ||||
|  | ||||
| #if !NET8 | ||||
|         ExcelData x = new ExcelData(physicalPath); | ||||
|         ExcelData x = new(physicalPath); | ||||
|         lotDataList = x.ReadQDBFlagData(); | ||||
|  | ||||
|         foreach (string lotData in lotDataList) { | ||||
|             mrbDMO.InsertMRB_QDB_HoldFlag(guid, lotData, operation); | ||||
|         } | ||||
| #endif | ||||
|  | ||||
|         FileInfo f = new(physicalPath); | ||||
|         if (f.Exists) | ||||
| @ -170,14 +168,12 @@ public class MRBHelper { | ||||
|             stream.CopyTo(fileStream); | ||||
|         } | ||||
|  | ||||
| #if !NET8 | ||||
|         ExcelData x = new ExcelData(physicalPath); | ||||
|         ExcelData x = new(physicalPath); | ||||
|         lotDataList = x.ReadQDBFlagData(); | ||||
|  | ||||
|         foreach (string lotData in lotDataList) { | ||||
|             mrbDMO.InsertMRB_QDB_HoldFlag(guid, lotData, operation); | ||||
|         } | ||||
| #endif | ||||
|  | ||||
|         FileInfo f = new(physicalPath); | ||||
|         if (f.Exists) | ||||
| @ -246,17 +242,16 @@ public class MRBHelper { | ||||
|         string fName = userIdentityName + DateTime.Now.Hour.ToString() + DateTime.Now.Minute.ToString() + DateTime.Now.Second.ToString(); | ||||
|         string physicalPath = Path.Combine(lotTempPipeLine, fName + "." + fileExtension); | ||||
|  | ||||
| #if !NET8 | ||||
|         IEnumerable<ExcelData.ExcelLotInfo> lotNumbers; | ||||
|  | ||||
|         try { | ||||
|             using (var fileStream = new FileStream(physicalPath, FileMode.Create, FileAccess.Write)) { | ||||
|             using (FileStream fileStream = new(physicalPath, FileMode.Create, FileAccess.Write)) { | ||||
|                 stream.CopyTo(fileStream); | ||||
|             } | ||||
|             ExcelData x = new ExcelData(physicalPath); | ||||
|             ExcelData x = new(physicalPath); | ||||
|             lotNumbers = x.ReadData(); | ||||
|         } catch (Exception ex) { | ||||
|             throw new Exception(String.Format("Invalid file format for {0}: {1}", fileName, ex.Message)); | ||||
|             throw new Exception(string.Format("Invalid file format for {0}: {1}", fileName, ex.Message)); | ||||
|         } | ||||
|  | ||||
|         // Get Tool, Issue Start and End Date | ||||
| @ -266,7 +261,7 @@ public class MRBHelper { | ||||
|         foreach (var lotInfo in lotNumbers) { | ||||
|             if (lotInfo.LotDispo.Length == 1) { | ||||
|                 if (dispos.Count(d => d.DispositionType.Trim().ToUpper() == lotInfo.LotDispo.Trim().ToUpper()) == 0) { | ||||
|                     throw new Exception(String.Format("Invalid lot disposition {0} for lot no {1}", | ||||
|                     throw new Exception(string.Format("Invalid lot disposition {0} for lot no {1}", | ||||
|                         lotInfo.LotDispo, lotInfo.LotNo)); | ||||
|                 } | ||||
|             } | ||||
| @ -276,8 +271,8 @@ public class MRBHelper { | ||||
|         if (!mrbInfo.ToolCSV.ToUpper().Equals("NA")) { | ||||
|             foreach (var lotInfo in lotNumbers) { | ||||
|                 bool existingLotUpdated; | ||||
|                 Lot l = new Lot(); | ||||
|                 l.LotNumber = lotInfo.LotNo; | ||||
|                 Lot l = new(); | ||||
|                 l.LotNumber = lotInfo.LotNo ?? string.Empty; | ||||
|                 if (lotInfo.LotDispo.Length == 1) { | ||||
|                     l.DispoType = lotInfo.LotDispo[0]; | ||||
|                 } | ||||
| @ -298,8 +293,8 @@ public class MRBHelper { | ||||
|             // Only find the child Splits when a Tool or a list of Tools is provided | ||||
|             foreach (var lotInfo in lotNumbers) { | ||||
|                 bool existingLotUpdated; | ||||
|                 Lot l = new Lot(); | ||||
|                 l.LotNumber = lotInfo.LotNo; | ||||
|                 Lot l = new(); | ||||
|                 l.LotNumber = lotInfo.LotNo ?? string.Empty; | ||||
|                 if (lotInfo.LotDispo.Length == 1) { | ||||
|                     l.DispoType = lotInfo.LotDispo[0]; | ||||
|                 } | ||||
| @ -308,7 +303,6 @@ public class MRBHelper { | ||||
|                 mrbDMO.InsertLot(l, true, out existingLotUpdated); | ||||
|             } | ||||
|         } | ||||
| #endif | ||||
|  | ||||
|         FileInfo f = new(physicalPath); | ||||
|         if (f.Exists) | ||||
|  | ||||
| @ -4,7 +4,9 @@ using System; | ||||
| using System.Collections.Generic; | ||||
| using System.Linq; | ||||
| using System.Web; | ||||
| #if !NET8 | ||||
| using System.Web.Mvc; | ||||
| #endif | ||||
|  | ||||
| namespace Fab2ApprovalSystem.Misc { | ||||
|  | ||||
| @ -16,7 +18,7 @@ namespace Fab2ApprovalSystem.Misc { | ||||
|  | ||||
|             // check if session is supported | ||||
|  | ||||
|             if (session[GlobalVars.SESSION_USERNAME] == null) { | ||||
|             if (GlobalVars.IsUserNameNull(session)) { | ||||
|                 // check if a new session id was generated | ||||
|  | ||||
|                 // this will force MVC to use the standard login redirect, enabling ReturnURL functionality | ||||
|  | ||||
| @ -8,7 +8,7 @@ namespace Fab2ApprovalSystem.Models; | ||||
| public class AppSettings { | ||||
|  | ||||
|     public AppSettings(string adminNotificationRecepient, | ||||
|                        string? apiBaseUrl, | ||||
|                        string apiBaseUrl, | ||||
|                        string attachmentFolder, | ||||
|                        string? attachmentUrl, | ||||
|                        string caBlankFormsLocation, | ||||
| @ -26,6 +26,9 @@ public class AppSettings { | ||||
|                        string ifxContainer, | ||||
|                        string ifxDomain, | ||||
|                        bool isInfineonDomain, | ||||
|                        string? jwtAudience, | ||||
|                        string? jwtIssuer, | ||||
|                        string? jwtKey, | ||||
|                        string lotTempPipeLine, | ||||
|                        string mesaTemplateFiles, | ||||
|                        string nDriveURL, | ||||
| @ -46,6 +49,7 @@ public class AppSettings { | ||||
|                        string urls, | ||||
|                        int userId, | ||||
|                        bool userIsAdmin, | ||||
|                        string wasmClientUrl, | ||||
|                        string wsr_URL, | ||||
|                        string? workingDirectoryName) { | ||||
|         AdminNotificationRecepient = adminNotificationRecepient; | ||||
| @ -67,6 +71,9 @@ public class AppSettings { | ||||
|         IFXContainer = ifxContainer; | ||||
|         IFXDomain = ifxDomain; | ||||
|         IsInfineonDomain = isInfineonDomain; | ||||
|         JwtAudience = jwtAudience; | ||||
|         JwtIssuer = jwtIssuer; | ||||
|         JwtKey = jwtKey; | ||||
|         LotTempPipeLine = lotTempPipeLine; | ||||
|         MesaTemplateFiles = mesaTemplateFiles; | ||||
|         NDriveURL = nDriveURL; | ||||
| @ -88,11 +95,12 @@ public class AppSettings { | ||||
|         UserId = userId; | ||||
|         UserIsAdmin = userIsAdmin; | ||||
|         WSR_URL = wsr_URL; | ||||
|         WasmClientUrl = wasmClientUrl; | ||||
|         WorkingDirectoryName = workingDirectoryName; | ||||
|     } | ||||
|  | ||||
|     public string AdminNotificationRecepient { get; } | ||||
|     public string? ApiBaseUrl { get; } | ||||
|     public string ApiBaseUrl { get; } | ||||
|     public string AttachmentFolder { get; } | ||||
|     public string? AttachmentUrl { get; } | ||||
|     public string CABlankFormsLocation { get; } | ||||
| @ -110,6 +118,9 @@ public class AppSettings { | ||||
|     public string IFXContainer { get; } | ||||
|     public string IFXDomain { get; } | ||||
|     public bool IsInfineonDomain { get; } | ||||
|     public string? JwtAudience { get; } | ||||
|     public string? JwtIssuer { get; } | ||||
|     public string? JwtKey { get; } | ||||
|     public string LotTempPipeLine { get; } | ||||
|     public string MesaTemplateFiles { get; } | ||||
|     public string NAContainer { get; } | ||||
| @ -130,6 +141,7 @@ public class AppSettings { | ||||
|     public string URLs { get; } | ||||
|     public int UserId { get; } | ||||
|     public bool UserIsAdmin { get; } | ||||
|     public string WasmClientUrl { get; } | ||||
|     public string WSR_URL { get; } | ||||
|     public string? WorkingDirectoryName { get; } | ||||
|  | ||||
| @ -211,12 +223,18 @@ public class AppSettings { | ||||
|                 throw new ArgumentNullException("SSRSPassword environment variable not found"); | ||||
|             string testEmailRecipients = ConfigurationManager.AppSettings["Test Email Recipients"] ?? | ||||
|                 throw new ArgumentNullException("Test Email Recipients environment variable not found"); | ||||
|             string? apiBaseUrl = ConfigurationManager.AppSettings["FabApprovalApiBaseUrl"]?.ToString(); | ||||
|             string apiBaseUrl = Environment.GetEnvironmentVariable("FabApprovalApiBaseUrl") ?? | ||||
|                 throw new ArgumentNullException("FabApprovalApiBaseUrl environment variable not found"); | ||||
|             string? attachmentUrl = ConfigurationManager.AppSettings["AttachmentUrl"]?.ToString(); | ||||
|             string? company = ConfigurationManager.AppSettings["Company"]?.ToString(); | ||||
|             string? smtpServer = ConfigurationManager.AppSettings["SMTP Server"]?.ToString(); | ||||
|             string? urls = ConfigurationManager.AppSettings["URLs"]?.ToString(); | ||||
|             string? workingDirectoryName = ConfigurationManager.AppSettings["WorkingDirectoryName"]?.ToString(); | ||||
|             string wasmClientUrl = Environment.GetEnvironmentVariable("FabApprovalWasmClientUrl") ?? | ||||
|                 "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, | ||||
|                          apiBaseUrl: apiBaseUrl, | ||||
|                          attachmentFolder: attachmentFolder, | ||||
| @ -236,6 +254,9 @@ public class AppSettings { | ||||
|                          ifxContainer: ifxContainer, | ||||
|                          ifxDomain: ifxDomain, | ||||
|                          isInfineonDomain: Misc.GlobalVars.IS_INFINEON_DOMAIN, | ||||
|                          jwtAudience: jwtAudience, | ||||
|                          jwtIssuer: jwtIssuer, | ||||
|                          jwtKey: jwtKey, | ||||
|                          lotTempPipeLine: lotTempPipeLine, | ||||
|                          mesaTemplateFiles: Misc.GlobalVars.MesaTemplateFiles, | ||||
|                          naContainer: naContainer, | ||||
| @ -256,6 +277,7 @@ public class AppSettings { | ||||
|                          urls: urls, | ||||
|                          userId: userId, | ||||
|                          userIsAdmin: Misc.GlobalVars.USER_ISADMIN, | ||||
|                          wasmClientUrl: wasmClientUrl, | ||||
|                          wsr_URL: Misc.GlobalVars.WSR_URL, | ||||
|                          workingDirectoryName: workingDirectoryName); | ||||
|             return result; | ||||
|  | ||||
| @ -231,6 +231,7 @@ public class CorrectiveAction { | ||||
|     public DateTime? NextDueDate { get; set; } | ||||
|     public DateTime? FollowUpDate { get; set; } | ||||
|     public bool CASubmitted { get; set; } | ||||
|     public string CAStandardType { get; set; } | ||||
|     public DateTime? ClosedDate { get; set; } | ||||
|     public CorrectiveAction() { | ||||
|         TeamMemberIDs = new List<int>(); | ||||
|  | ||||
							
								
								
									
										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 bool IsAuthenticated { get; set; } | ||||
|     public User User { 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,23 +1,26 @@ | ||||
| #if !NET8 | ||||
| using System.Web; | ||||
| using System.Web.Mvc; | ||||
| using System.Web.Security; | ||||
| #endif | ||||
|  | ||||
| // -------------------------------------------------------------------------------------------------------------------- | ||||
| // <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> | ||||
| // -------------------------------------------------------------------------------------------------------------------- | ||||
| #if NET8 | ||||
| using Microsoft.AspNetCore.Mvc; | ||||
| #endif | ||||
|  | ||||
| namespace Fab2ApprovalSystem.PdfGenerator { | ||||
|     using System.IO; | ||||
|     using System.Web; | ||||
|     using System.Web.Mvc; | ||||
| #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 | ||||
|  | ||||
|     /// <summary> | ||||
|     /// An ActionResult used to send binary data to the browser. | ||||
|     /// </summary> | ||||
|     public class BinaryContentResult : ActionResult { | ||||
| namespace Fab2ApprovalSystem.PdfGenerator; | ||||
|  | ||||
| public class BinaryContentResult : ActionResult { | ||||
|     private readonly string contentType; | ||||
|     private readonly byte[] contentBytes; | ||||
|  | ||||
| @ -26,18 +29,19 @@ namespace Fab2ApprovalSystem.PdfGenerator { | ||||
|         this.contentType = contentType; | ||||
|     } | ||||
|  | ||||
| #if !NET8 | ||||
|     public override void ExecuteResult(ControllerContext context) { | ||||
|         var response = context.HttpContext.Response; | ||||
|         response.Clear(); | ||||
|         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.Flush(); | ||||
|         } | ||||
|     } | ||||
|     } | ||||
| } | ||||
|  | ||||
| #endif | ||||
|  | ||||
| } | ||||
| @ -1,28 +1,36 @@ | ||||
| using System; | ||||
| using System.IO; | ||||
| using System.Threading.Tasks; | ||||
|  | ||||
| #if !NET8 | ||||
| using System.Web; | ||||
| using System.Web.Mvc; | ||||
| using System.Web.Security; | ||||
| #endif | ||||
|  | ||||
| // -------------------------------------------------------------------------------------------------------------------- | ||||
| // <copyright file="FakeView.cs" company="SemanticArchitecture"> | ||||
| //   http://www.SemanticArchitecture.net pkalkie@gmail.com | ||||
| // </copyright> | ||||
| // <summary> | ||||
| //   Defines the FakeView type. | ||||
| // </summary> | ||||
| // -------------------------------------------------------------------------------------------------------------------- | ||||
| #if NET8 | ||||
| using Microsoft.AspNetCore.Mvc.Rendering; | ||||
| using Microsoft.AspNetCore.Mvc.ViewEngines; | ||||
| #endif | ||||
|  | ||||
| namespace Fab2ApprovalSystem.PdfGenerator { | ||||
|     using System; | ||||
|     using System.IO; | ||||
|     using System.Web.Mvc; | ||||
| #if !NET8 | ||||
| using System.Collections.Generic; | ||||
| using System.Net; | ||||
| using System.Net.Http; | ||||
| using System.Security.Claims; | ||||
| #endif | ||||
|  | ||||
|     public class FakeView : IView { | ||||
|         #region IView Members | ||||
| namespace Fab2ApprovalSystem.PdfGenerator; | ||||
|  | ||||
| public class FakeView : IView { | ||||
|  | ||||
|     public void Render(ViewContext viewContext, TextWriter writer) { | ||||
|         throw new NotImplementedException(); | ||||
|     } | ||||
|  | ||||
|         #endregion | ||||
|     } | ||||
| } | ||||
|  | ||||
| #if NET8 | ||||
|     string IView.Path => throw new NotImplementedException(); | ||||
|     Task IView.RenderAsync(ViewContext context) => throw new NotImplementedException(); | ||||
| #endif | ||||
|  | ||||
| } | ||||
|  | ||||
| @ -1,49 +1,59 @@ | ||||
|  | ||||
| #if !NET8 | ||||
| using System.Web; | ||||
| using System.Web.Mvc; | ||||
| using System.Web.Mvc.Html; | ||||
| using System.Web.Security; | ||||
| #endif | ||||
|  | ||||
| // -------------------------------------------------------------------------------------------------------------------- | ||||
| // <copyright file="HtmlViewRenderer.cs" company="SemanticArchitecture"> | ||||
| //   http://www.SemanticArchitecture.net pkalkie@gmail.com | ||||
| // </copyright> | ||||
| // <summary> | ||||
| //   This class is responsible for rendering a HTML view to a string. | ||||
| // </summary> | ||||
| // -------------------------------------------------------------------------------------------------------------------- | ||||
| #if NET8 | ||||
| using Microsoft.AspNetCore.Mvc; | ||||
| #endif | ||||
|  | ||||
| namespace Fab2ApprovalSystem.PdfGenerator { | ||||
|     using System.IO; | ||||
|     using System.Text; | ||||
|     using System.Web; | ||||
|     using System.Web.Mvc; | ||||
|     using System.Web.Mvc.Html; | ||||
| #if !NET8 | ||||
| using System; | ||||
| using System.IO; | ||||
| using System.Collections.Generic; | ||||
| using System.Net; | ||||
| using System.Net.Http; | ||||
| using System.Security.Claims; | ||||
| using System.Threading.Tasks; | ||||
| #endif | ||||
|  | ||||
| using System.Text; | ||||
|  | ||||
| namespace Fab2ApprovalSystem.PdfGenerator; | ||||
|  | ||||
| public class HtmlViewRenderer { | ||||
|  | ||||
|     /// <summary> | ||||
|     /// This class is responsible for rendering a HTML view into a string.  | ||||
|     /// </summary> | ||||
|     public class HtmlViewRenderer { | ||||
|     public string RenderViewToString(Controller controller, string viewName, object viewData) { | ||||
|             var renderedView = new StringBuilder(); | ||||
|             using (var responseWriter = new StringWriter(renderedView)) { | ||||
|                 var fakeResponse = new HttpResponse(responseWriter); | ||||
|                 var fakeContext = new HttpContext(HttpContext.Current.Request, fakeResponse); | ||||
|                 var fakeControllerContext = new ControllerContext(new HttpContextWrapper(fakeContext), controller.ControllerContext.RouteData, controller.ControllerContext.Controller); | ||||
|         StringBuilder renderedView = new(); | ||||
| #if !NET8 | ||||
|         using (StringWriter responseWriter = new(renderedView)) { | ||||
|             HttpResponse fakeResponse = new(responseWriter); | ||||
|             HttpContext fakeContext = new(HttpContext.Current.Request, fakeResponse); | ||||
|             ControllerContext fakeControllerContext = new(new HttpContextWrapper(fakeContext), controller.ControllerContext.RouteData, controller.ControllerContext.Controller); | ||||
|  | ||||
|             var oldContext = HttpContext.Current; | ||||
|             HttpContext.Current = fakeContext; | ||||
|  | ||||
|             using (var viewPage = new ViewPage()) { | ||||
|                     var html = new HtmlHelper(CreateViewContext(responseWriter, fakeControllerContext), viewPage); | ||||
|                 HtmlHelper html = new HtmlHelper(CreateViewContext(responseWriter, fakeControllerContext), viewPage); | ||||
|                 html.RenderPartial(viewName, viewData); | ||||
|                 HttpContext.Current = oldContext; | ||||
|             } | ||||
|         } | ||||
| #endif | ||||
|  | ||||
|         return renderedView.ToString(); | ||||
|     } | ||||
|  | ||||
| #if !NET8 | ||||
|  | ||||
|     private static ViewContext CreateViewContext(TextWriter responseWriter, ControllerContext fakeControllerContext) { | ||||
|         return new ViewContext(fakeControllerContext, new FakeView(), new ViewDataDictionary(), new TempDataDictionary(), responseWriter); | ||||
|     } | ||||
|     } | ||||
| } | ||||
|  | ||||
| #endif | ||||
|  | ||||
| } | ||||
| @ -1,33 +1,36 @@ | ||||
| #if !NET8 | ||||
| using System.Web; | ||||
| using System.Web.Mvc; | ||||
| using System.Web.Security; | ||||
| #endif | ||||
|  | ||||
| // -------------------------------------------------------------------------------------------------------------------- | ||||
| // <copyright file="PdfViewController.cs" company="SemanticArchitecture"> | ||||
| //   http://www.SemanticArchitecture.net pkalkie@gmail.com | ||||
| // </copyright> | ||||
| // <summary> | ||||
| //   Extends the controller with functionality for rendering PDF views | ||||
| // </summary> | ||||
| // -------------------------------------------------------------------------------------------------------------------- | ||||
| #if !NET8 | ||||
| using System; | ||||
| using System.IO; | ||||
| using System.Collections.Generic; | ||||
| using System.Net; | ||||
| using System.Net.Http; | ||||
| using System.Security.Claims; | ||||
| using System.Threading.Tasks; | ||||
| #endif | ||||
|  | ||||
| namespace Fab2ApprovalSystem.PdfGenerator { | ||||
|     using System.Web.Mvc; | ||||
|     using System.IO; | ||||
| namespace Fab2ApprovalSystem.PdfGenerator; | ||||
|  | ||||
| #if !NET8 | ||||
|  | ||||
| public class PdfViewController : Controller { | ||||
|  | ||||
|     /// <summary> | ||||
|     /// Extends the controller with functionality for rendering PDF views | ||||
|     /// </summary> | ||||
|     public class PdfViewController : Controller { | ||||
|     private readonly HtmlViewRenderer htmlViewRenderer; | ||||
|     private readonly StandardPdfRenderer standardPdfRenderer; | ||||
|  | ||||
|     public PdfViewController() { | ||||
|             this.htmlViewRenderer = new HtmlViewRenderer(); | ||||
|             this.standardPdfRenderer = new StandardPdfRenderer(); | ||||
|         htmlViewRenderer = new HtmlViewRenderer(); | ||||
|         standardPdfRenderer = new StandardPdfRenderer(); | ||||
|     } | ||||
|  | ||||
|     protected ActionResult ViewPdf(string pageTitle, string viewName, object model) { | ||||
|         // Render the view html to a string. | ||||
|             string htmlText = this.htmlViewRenderer.RenderViewToString(this, viewName, model); | ||||
|         string htmlText = htmlViewRenderer.RenderViewToString(this, viewName, model); | ||||
|  | ||||
|         // Let the html be rendered into a PDF document through iTextSharp. | ||||
|         byte[] buffer = standardPdfRenderer.Render(htmlText, pageTitle); | ||||
| @ -38,17 +41,16 @@ namespace Fab2ApprovalSystem.PdfGenerator { | ||||
|  | ||||
|     protected void SavePdf(string fileName, string viewName, object model) { | ||||
|         // Render the view html to a string. | ||||
|             string htmlText = this.htmlViewRenderer.RenderViewToString(this, viewName, model); | ||||
|         string htmlText = htmlViewRenderer.RenderViewToString(this, viewName, model); | ||||
|  | ||||
|         // Let the html be rendered into a PDF document through iTextSharp. | ||||
|         byte[] buffer = standardPdfRenderer.Render(htmlText, ""); | ||||
|  | ||||
|             using (FileStream fs = new FileStream(fileName, FileMode.Create)) { | ||||
|         using (FileStream fs = new(fileName, FileMode.Create)) { | ||||
|             fs.Write(buffer, 0, buffer.Length); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|         } | ||||
|     } | ||||
| } | ||||
|  | ||||
| #endif | ||||
| @ -1,23 +1,45 @@ | ||||
| #if !NET8 | ||||
| using System.Web; | ||||
| using System.Web.Mvc; | ||||
| using System.Web.Security; | ||||
| #endif | ||||
|  | ||||
| #if !NET8 | ||||
| namespace Fab2ApprovalSystem.PdfGenerator { | ||||
|     using iTextSharp.text; | ||||
|     using iTextSharp.text.pdf; | ||||
| using iTextSharp.text; | ||||
| using iTextSharp.text.pdf; | ||||
| #endif | ||||
|  | ||||
|     using System; | ||||
| #if !NET8 | ||||
| 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 | ||||
|  | ||||
| public class PrintHeaderFooter : PdfPageEventHelper { | ||||
|  | ||||
|     /// <summary> | ||||
|     /// This class represents the standard header and footer for a PDF print. | ||||
|     /// application. | ||||
|     /// </summary> | ||||
|     public class PrintHeaderFooter : PdfPageEventHelper { | ||||
|     private PdfContentByte pdfContent; | ||||
|     private PdfTemplate pageNumberTemplate; | ||||
|     private BaseFont baseFont; | ||||
|     private DateTime printTime; | ||||
| #endif | ||||
|  | ||||
| #if NET8 | ||||
|  | ||||
| public class PrintHeaderFooter { | ||||
|  | ||||
| #endif | ||||
|  | ||||
|     public string Title { get; set; } | ||||
|  | ||||
| #if !NET8 | ||||
|  | ||||
|     public override void OnOpenDocument(PdfWriter writer, Document document) { | ||||
|         printTime = DateTime.Now; | ||||
|         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.EndText(); | ||||
|     } | ||||
|     } | ||||
| } | ||||
|  | ||||
| #endif | ||||
|  | ||||
| } | ||||
| @ -8,9 +8,6 @@ using System.IO; | ||||
|  | ||||
| namespace Fab2ApprovalSystem.PdfGenerator; | ||||
|  | ||||
| /// <summary> | ||||
| /// This class is responsible for rendering a html text string to a PDF document using the html renderer of iTextSharp. | ||||
| /// </summary> | ||||
| public class StandardPdfRenderer { | ||||
|     private const int HorizontalMargin = 40; | ||||
|     private const int VerticalMargin = 40; | ||||
|  | ||||
| @ -20,6 +20,7 @@ using System.Configuration; | ||||
| namespace Fab2ApprovalSystem.Utilities; | ||||
|  | ||||
| #if !NET8 | ||||
|  | ||||
| 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); | ||||
|         return (T)Convert.ChangeType(result, typeof(T)); | ||||
|     } | ||||
| #else | ||||
|  | ||||
| #endif | ||||
|  | ||||
| #if NET8 | ||||
|  | ||||
| public class FileUtilities<T> { | ||||
|  | ||||
| #endif | ||||
|  | ||||
|     public byte[] GetFile(string s) { | ||||
|  | ||||
| #if !NET8 | ||||
|         FileStream fs = System.IO.File.OpenRead(s); | ||||
| #else | ||||
| #endif | ||||
|  | ||||
| #if NET8 | ||||
|         FileStream fs = File.OpenRead(s); | ||||
| #endif | ||||
|         byte[] data = new byte[fs.Length]; | ||||
|  | ||||
| @ -30,7 +30,7 @@ public class ECNPdf { | ||||
|     public string AffectedDepartments { get; set; } | ||||
|     public string AffectedAreas { get; set; } | ||||
|     public string AffectedTechnologies { get; set; } | ||||
|     public string TrainingBy { get; set; } | ||||
|     public List<int> TrainingByIDs { get; set; } | ||||
|     public string AcknowledgementBy { get; set; } | ||||
|     public bool IsECN { get; set; } | ||||
|     public bool IsTECN { get; set; } | ||||
| @ -79,6 +79,7 @@ public class ECNPdf { | ||||
|     public int? ConvertedToNumber { get; set; } | ||||
|     public int? ConvertedFromNumber { get; set; } | ||||
|     public int WorkFlowNumber { get; set; } | ||||
|     public int? CategoryID { get; set; } | ||||
|     public bool FIChangeRequired { get; set; } | ||||
|     public string NumberOfLotsAffected { get; set; } | ||||
|     public string RecipeChange { get; set; } | ||||
| @ -87,6 +88,7 @@ public class ECNPdf { | ||||
|     public ECNPdf() { | ||||
|         Approvalog = new List<ECNApprovalLog>(); | ||||
|         Attachments = new List<string>(); | ||||
|         TrainingByIDs = new List<int>(); | ||||
|     } | ||||
|  | ||||
| } | ||||
|  | ||||
| @ -34,7 +34,7 @@ | ||||
|             </div> | ||||
|             <div class="navbar-collapse collapse"> | ||||
|                 <ul class="nav navbar-nav">             | ||||
|                     @if ((bool)@Session[GlobalVars.IS_ADMIN]) | ||||
|                     @if (@GlobalVars.IsAdmin(Session)) | ||||
|                     {  | ||||
|                         <li>@Html.ActionLink("Admin", "Index", "Admin")</li> | ||||
|                     } | ||||
|  | ||||
| @ -144,7 +144,7 @@ | ||||
|                             </div> | ||||
|                             <div class="col-sm-9"> | ||||
|                                 @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> | ||||
|                                 } | ||||
| @ -200,7 +200,7 @@ | ||||
|                                 <label class="control-label pull-right">Export Control:</label> | ||||
|                             </div> | ||||
|                             <div class="col-sm-9"> | ||||
|                                 @if (ViewBag.IsOriginator == "true" || ((bool)Session[GlobalVars.IS_ADMIN])) | ||||
|                                 @if (ViewBag.IsOriginator == "true" || (GlobalVars.IsAdmin(Session))) | ||||
|                                 { | ||||
|                                     @(Html.Kendo().DropDownList() | ||||
|                                                                     .Name("IsITAR") | ||||
|  | ||||
| @ -329,7 +329,7 @@ | ||||
|                     columns.Bound(a => a.Gating).Width("50px"); | ||||
|                     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.Destroy()).Width("40px"); | ||||
|  | ||||
| @ -128,7 +128,7 @@ | ||||
|                             </div> | ||||
|                             <div class="col-sm-9"> | ||||
|                                 @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> | ||||
|                                 } | ||||
|  | ||||
| @ -380,6 +380,43 @@ | ||||
|                             </div> | ||||
|                         </div> | ||||
|                     </div> | ||||
|  | ||||
|                     <div class="col-sm-3"> | ||||
|                         <div class="row"> | ||||
|                             <div class="col-sm-3"> | ||||
|                                 <label class="control-label pull-right">CA Standard Type:</label> | ||||
|                             </div> | ||||
|                             <div class="col-sm-9"> | ||||
|                                 @(Html.Kendo().DropDownList() | ||||
|                                     .Name("CAStandardTypeList") | ||||
|  | ||||
|                                     .DataTextField("Text") | ||||
|                                     .DataValueField("Value") | ||||
|                                         .BindTo(new List<SelectListItem>() | ||||
|                                         { | ||||
|                                             new SelectListItem() | ||||
|                                             { | ||||
|                                                 Text = "IATF16949", | ||||
|                                                 Value = "IATF16949" | ||||
|                                             }, | ||||
|                                             new SelectListItem() | ||||
|                                             { | ||||
|                                                 Text = "ISO14001", | ||||
|                                                 Value = "ISO14001" | ||||
|                                             }, | ||||
|                                             new SelectListItem() | ||||
|                                             { | ||||
|                                                 Text = "ISO45001", | ||||
|                                                 Value = "ISO45001" | ||||
|                                             } | ||||
|                                         } | ||||
|                                     ) | ||||
|                                     .OptionLabel("Select") | ||||
|                                     .Value(Model.CAStandardType) | ||||
|                                 ) | ||||
|                             </div> | ||||
|                         </div> | ||||
|                     </div> | ||||
|                 </div> | ||||
|                 <div class="row"> | ||||
|                     <div class="col-sm-3"> | ||||
| @ -1428,7 +1465,7 @@ | ||||
|                                 Additional Approvers | ||||
|                             </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"> | ||||
|                                 Additional Approvers | ||||
| @ -1438,7 +1475,7 @@ | ||||
|                     </div> | ||||
|                     <div class="panel-body bg-warning"> | ||||
|                         <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>() | ||||
|                                     .Name("ApproversList") | ||||
| @ -2143,7 +2180,7 @@ | ||||
|     var currentD5D6AttachmentLinks; | ||||
|     var currentD7AttachmentLinks; | ||||
|     var currentRejectingSection = ''; | ||||
|     var currentUserId = @((int)Session[GlobalVars.SESSION_USERID]) | ||||
|     var currentUserId = @(GlobalVars.GetUserId(Session)) | ||||
|     var currentRequestor = @(Model.RequestorID); | ||||
|  | ||||
|  | ||||
| @ -2176,6 +2213,7 @@ | ||||
|             $('#txtApprovedDate').attr("disabled", true); | ||||
|             $('#txtRelatedMRB').attr("disabled", true); | ||||
|             $('#CATypeList').data("kendoDropDownList").enable(false); | ||||
|             $('#CAStandardTypeList').data("kendoDropDownList").enable(false); | ||||
|             $('#d0Comments').attr("disabled", true); | ||||
|         } | ||||
|  | ||||
| @ -3689,6 +3727,7 @@ | ||||
|             TeamCaptainID: $("#TeamCaptainList").data("kendoDropDownList").value(), | ||||
|             CASponsorID: $("#CASponsorList").data("kendoDropDownList").value(), | ||||
|             CASubmitted: isCASubmitted, | ||||
|             CAStandardType : $("#CAStandardTypeList").data("kendoDropDownList").value(), | ||||
|  | ||||
|             //D0 | ||||
|             D0Comments : $("#d0Comments").val(), | ||||
|  | ||||
| @ -44,7 +44,7 @@ | ||||
|             <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="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()" /> | ||||
|                 } | ||||
| @ -325,6 +325,16 @@ | ||||
|                             </div> | ||||
|                         </div> | ||||
|                     </div> | ||||
|                     <div class="col-sm-3"> | ||||
|                         <div class="row"> | ||||
|                             <div class="col-sm-3"> | ||||
|                                 <label class="control-label pull-right">CA Standard Type:</label> | ||||
|                             </div> | ||||
|                             <div class="col-sm-9"> | ||||
|                                 @Html.TextBoxFor(model => model.CAStandardType, new { id = "txtCAStandardType", @class = "k-textbox", Readonly = "Readonly", style = "background-color:lightblue" }) | ||||
|                             </div> | ||||
|                         </div> | ||||
|                     </div> | ||||
|                 </div> | ||||
|                 <div class="row"> | ||||
|                     <div class="col-sm-3"> | ||||
|  | ||||
| @ -52,7 +52,7 @@ | ||||
|             } | ||||
|  | ||||
|             <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()" /> | ||||
|             } | ||||
| @ -137,7 +137,7 @@ | ||||
|                         <label class="control-label col-sm-4">Originator Name:</label> | ||||
|                         <div class="col-sm-8"> | ||||
|                             @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> | ||||
|                             } | ||||
| @ -210,10 +210,10 @@ | ||||
|                             @Html.TextBoxFor(model => model.Title, new { id = "txtTitle", @class = "k-textbox", style = "width:100%", disabled = "disabled" }) | ||||
|                         </div> | ||||
|                         <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 class="col-sm-6 col-sm-offset-4" style="color: red;"> | ||||
|                             Revision Y is followed by AA. YY is followed by AAA | ||||
|                             Revision Y is followed by AA-AY, AY is followed by BA-BY etc. YY is followed by AAA | ||||
|                         </div> | ||||
|                     </div> | ||||
|                     <div class="form-group"> | ||||
| @ -892,9 +892,9 @@ | ||||
|                 <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>() | ||||
|                         .Name("ApproversList") | ||||
|  | ||||
| @ -84,6 +84,16 @@ | ||||
|                                     </font> | ||||
|                                 </td> | ||||
|                             </tr> | ||||
|                             <tr> | ||||
|                                 <td> | ||||
|                                     <font size="2"> | ||||
|                                         Category:  | ||||
|                                     </font> | ||||
|                                     <font size="1"> | ||||
|                                         @(ViewBag.Category) | ||||
|                                     </font> | ||||
|                                 </td> | ||||
|                             </tr> | ||||
|                             <tr> | ||||
|                                 <td> | ||||
|                                     <font size="2"> | ||||
| @ -224,7 +234,7 @@ | ||||
|  | ||||
|     <tr> | ||||
|         <td> | ||||
|             <table border="1" > | ||||
|             <table border="1"> | ||||
|                 <tr bgcolor="#c4baba" color="#000000"> | ||||
|                     <td> Description of Change</td> | ||||
|                     <td> Reason for Change</td> | ||||
| @ -286,7 +296,7 @@ | ||||
|                             PCRB: | ||||
|                         </font> | ||||
|                         <font size="1"> | ||||
|                             @(Model.PCRBRequired ? "Yes": "No") | ||||
|                             @(Model.PCRBRequired ? "Yes" : "No") | ||||
|                         </font> | ||||
|                     </td> | ||||
|                     <td> | ||||
| @ -300,7 +310,7 @@ | ||||
|                             Metrology Change:    | ||||
|                         </font> | ||||
|                         <font size="1"> | ||||
|                             @(Model.MetrologyChangeRequired ? "Yes": "No") | ||||
|                             @(Model.MetrologyChangeRequired ? "Yes" : "No") | ||||
|                         </font> | ||||
|                     </td> | ||||
|                     <td> | ||||
| @ -308,7 +318,7 @@ | ||||
|                             SPC Change: | ||||
|                         </font> | ||||
|                         <font size="1"> | ||||
|                             @(Model.SPCChangeRequired ? "Yes": "No") | ||||
|                             @(Model.SPCChangeRequired ? "Yes" : "No") | ||||
|                         </font> | ||||
|                     </td> | ||||
|                     <td> | ||||
| @ -327,7 +337,35 @@ | ||||
|                             @(Model.SPNChangeRequired ? "Yes" : "No") | ||||
|                         </font> | ||||
|                     </td> | ||||
|                     <td></td> | ||||
|                 </tr> | ||||
|  | ||||
|             </table> | ||||
|  | ||||
|  | ||||
|         </td> | ||||
|     </tr> | ||||
|     <tr> | ||||
|         <td> | ||||
|  | ||||
|             <table border="1"> | ||||
|                 <tr bgcolor="#c4baba" color="#000000"> | ||||
|                     <td colspan="5">Training Notification</td> | ||||
|                 </tr> | ||||
|                 <tr style="display:block;"> | ||||
|                     <td> | ||||
|                         <font size="2"> | ||||
|                             Training: | ||||
|                         </font> | ||||
|                         <font size="1"> | ||||
|                             @(Model.TrainingRequired ? "Yes" : "No") | ||||
|                         </font> | ||||
|                     </td> | ||||
|                     <td> | ||||
|                         <font size="2"> | ||||
|                             Training Notification to:   | ||||
|                             @(ViewBag.TrainingNotificationTo) | ||||
|                         </font> | ||||
|                     </td> | ||||
|                 </tr> | ||||
|  | ||||
|             </table> | ||||
|  | ||||
| @ -31,7 +31,7 @@ | ||||
|                 <label class="control-label col-sm-4">Originator Name:</label> | ||||
|                 <div class="col-sm-8"> | ||||
|                     @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> | ||||
|                     } | ||||
|  | ||||
| @ -90,7 +90,7 @@ | ||||
|                         <label class="control-label col-sm-4">Originator Name:</label> | ||||
|                         <div class="col-sm-8"> | ||||
|                             @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> | ||||
|                             } | ||||
| @ -154,10 +154,10 @@ | ||||
|                             @Html.TextBoxFor(model => model.Title, new { id = "txtTitle", @class = "k-textbox", style = "width:100%" }) | ||||
|                         </div> | ||||
|                         <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 class="col-sm-6 col-sm-offset-4" style="color: red;"> | ||||
|                             Revision Y is followed by AA. YY is followed by AAA | ||||
|                             Revision Y is followed by AA-AY, AY is followed by BA-BY etc. YY is followed by AAA | ||||
|                         </div> | ||||
|                     </div> | ||||
|                     <div class="form-group"> | ||||
| @ -785,9 +785,9 @@ | ||||
|  | ||||
|             <div class="panel-body bg-warning"> | ||||
|                 <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>() | ||||
|                         .Name("ApproversList") | ||||
|  | ||||
| @ -86,30 +86,48 @@ | ||||
|  | ||||
|                 if (Model.IsTECN && !Model.CancellationInProgress && !Model.CancellationApproved && !Model.ExpirationInProgress | ||||
|                     && !Model.ExpirationProcessed && !Model.Converted | ||||
|                     && !Model.LockedForConversion | ||||
|                     && (Model.ExpirationDate > DateTime.Today || Model.ExtensionDate > DateTime.Today)) | ||||
|                     && !Model.LockedForConversion) | ||||
|                 { | ||||
|                     ViewBag.CanResubmit = "true"; | ||||
|                     <input type="button" value="Change Type" class="btn btn-primary btn-xs" id="ReSubmitDocument" disabled="disabled" /> | ||||
|                     if (Model.ExpirationDate > DateTime.Today || Model.ExtensionDate > DateTime.Today) | ||||
|                     { | ||||
|                         <input type="button" value="Cancel Document" class="btn btn-primary btn-xs" id="CancelDocument" /> | ||||
|                     } | ||||
|                     else | ||||
|                     { | ||||
|                         <input type="button" value="Return to Process" class="btn btn-primary btn-xs" id="ReturnToProcessDocument" /> | ||||
|                     } | ||||
|                 } | ||||
|  | ||||
|                 else if (Model.IsTECN && !Model.CancellationInProgress && !Model.CancellationApproved && !Model.ExpirationInProgress | ||||
|                     && !Model.ExpirationProcessed | ||||
|                     && Model.ConversionApprovalInProgress == false | ||||
|                     && (Model.ExpirationDate >= DateTime.Today || Model.ExtensionDate >= DateTime.Today)) | ||||
|                     && Model.ConversionApprovalInProgress == false) | ||||
|                 { | ||||
|                     if (Model.ExpirationDate > DateTime.Today || Model.ExtensionDate > DateTime.Today) | ||||
|                     { | ||||
|                         <input type="button" value="Cancel Document" class="btn btn-primary btn-xs" id="CancelDocument" /> | ||||
|                     } | ||||
|                     else | ||||
|                     { | ||||
|                         <input type="button" value="Return to Process" class="btn btn-primary btn-xs" id="ReturnToProcessDocument" /> | ||||
|                     } | ||||
|                 } | ||||
|  | ||||
|                 else if (Model.IsEmergencyTECN && !Model.CancellationInProgress && !Model.CancellationApproved && !Model.ExpirationInProgress | ||||
|                     && !Model.ExpirationProcessed && !Model.Converted | ||||
|                         && (Model.ExpirationDate > DateTime.Today || Model.ExtensionDate > DateTime.Today)) | ||||
|                     && !Model.ExpirationProcessed && !Model.Converted) | ||||
|                 { | ||||
|                     ViewBag.CanResubmit = "true"; | ||||
|                     <input type="button" value="Change Type" class="btn btn-primary btn-xs" id="ReSubmitDocument" disabled="disabled" /> | ||||
|                     if (Model.ExpirationDate > DateTime.Today || Model.ExtensionDate > DateTime.Today) | ||||
|                     { | ||||
|                         <input type="button" value="Cancel Document" class="btn btn-primary btn-xs" id="CancelDocument" /> | ||||
|                     } | ||||
|                     else | ||||
|                     { | ||||
|                         <input type="button" value="Return to Process" class="btn btn-primary btn-xs" id="ReturnToProcessDocument" /> | ||||
|                     } | ||||
|                 } | ||||
|             } | ||||
|  | ||||
|             <input type="button" value="PRINT PDF" class="btn btn-primary btn-xs" id="PrintPDF" /> | ||||
| @ -155,7 +173,7 @@ | ||||
|                         <label class="control-label col-sm-4">Originator Name:</label> | ||||
|                         <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" }) | ||||
|                             @if (Session[GlobalVars.IS_ADMIN] != null) | ||||
|                             @if (GlobalVars.IsAdminValueNotNull(Session)) | ||||
|                             { | ||||
|                                 <a href="javascript:undefined" id="lnkReassignOriginator" class="linkbutton edit" title="Re-assign Originator"></a> | ||||
|                             } | ||||
| @ -242,10 +260,10 @@ | ||||
|                             @Html.TextBoxFor(model => model.Title, new { id = "txtTitle", @class = "k-textbox", style = "width:100%", disabled = "disabled" }) | ||||
|                         </div> | ||||
|                         <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 class="col-sm-6 col-sm-offset-4" style="color: red;"> | ||||
|                             Revision Y is followed by AA. YY is followed by AAA | ||||
|                             Revision Y is followed by AA-AY, AY is followed by BA-BY etc. YY is followed by AAA | ||||
|                         </div> | ||||
|                     </div> | ||||
|                     <div class="form-group"> | ||||
| @ -349,7 +367,7 @@ | ||||
|                                 @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)) | ||||
|                                     || | ||||
|                                     (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) | ||||
| @ -962,7 +980,7 @@ | ||||
|                         Additional Approvers | ||||
|                     </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"> | ||||
|                         Additional Approvers | ||||
| @ -976,9 +994,9 @@ | ||||
|  | ||||
|             <div class="panel-body bg-warning"> | ||||
|                 <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>() | ||||
|                                 .Name("ApproversList") | ||||
| @ -1251,6 +1269,9 @@ | ||||
|     </div> | ||||
| </div> | ||||
|  | ||||
| @Html.Partial("_ECNCancel") | ||||
| @Html.Partial("_ECNReturnToProcess") | ||||
|  | ||||
| @Html.Partial("_ECNReassignOriginator") | ||||
|  | ||||
| <script type="text/javascript"> | ||||
| @ -2188,40 +2209,6 @@ | ||||
|         return false; | ||||
|     }); | ||||
|  | ||||
|     $('#CancelDocument').on('click', function () { | ||||
|         docType = 5; | ||||
|         if (confirm("Are you sure you want to Cancel this document?")) { | ||||
|             $.ajax({ | ||||
|                 url: "/ECN/CancelDocument", | ||||
|                 type: "GET", | ||||
|                 datatype: "json", | ||||
|                 data: { | ||||
|                     ecnNumber: $("#txtECNNumber").val(), | ||||
|                     currentStep: 1, | ||||
|                     documentType: docType, | ||||
|                     ecnTypeString: ecnTypeString | ||||
|                 }, | ||||
|                 success: function (data) { | ||||
|  | ||||
|                     if (data == 'Redirect') { | ||||
|                         var url = '@Url.Action("ReadOnly", "ECN", new { issueID = "__id__" })'; | ||||
|                         url = url.replace('amp;', ''); | ||||
|                         window.location.href = url.replace('__id__', $("#txtECNNumber").val()); | ||||
|  | ||||
|                     } | ||||
|                     else { | ||||
|                         // TODO alert an error message | ||||
|                     } | ||||
|                 }, | ||||
|                 error: function (result) { | ||||
|                     alert("Failed on Cancel" + result); | ||||
|                 } | ||||
|             }); | ||||
|         } | ||||
|  | ||||
|         return false; | ||||
|     }); | ||||
|  | ||||
|     var returnNoOfDays = function () { | ||||
|         //var start = new Date($('#txSubmitDate').val()); | ||||
|         var start = new Date(); | ||||
|  | ||||
| @ -52,7 +52,7 @@ | ||||
|             } | ||||
|  | ||||
|             <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()" /> | ||||
|             } | ||||
| @ -149,7 +149,7 @@ | ||||
|                         <label class="control-label col-sm-4">Originator Name:</label> | ||||
|                         <div class="col-sm-8"> | ||||
|                             @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> | ||||
|                             } | ||||
| @ -895,9 +895,9 @@ | ||||
|                 <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>() | ||||
|                         .Name("ApproversList") | ||||
| @ -999,7 +999,7 @@ | ||||
|                 @{ | ||||
|                     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)) }); | ||||
|                     } | ||||
|  | ||||
|  | ||||
|  | ||||
							
								
								
									
										75
									
								
								Fab2ApprovalSystem/Views/ECN/_ECNCancel.cshtml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										75
									
								
								Fab2ApprovalSystem/Views/ECN/_ECNCancel.cshtml
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,75 @@ | ||||
| <div class="modal fade" id="Cancel" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true" data-backdrop="static"> | ||||
|     <div class="modal-dialog"> | ||||
|         <div class="modal-content"> | ||||
|             <div class="modal-header"> | ||||
|                 <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button> | ||||
|                 <h4 class="modal-title" id="myModalLabel"><center>Has the process returned to the original state?</center></h4> | ||||
|  | ||||
|             </div> | ||||
|             <div class="modal-body"> | ||||
|                 <div class="control-group"> | ||||
|                     <div class="row"> | ||||
|                         <div class="col-sm-13"> | ||||
|                             <h4 class="modal-title">Comments (Required):</h4> | ||||
|                             <textarea class="form-control" rows="5" id="comments" style="resize: none;"></textarea> | ||||
|                         </div> | ||||
|                     </div> | ||||
|                 </div> | ||||
|             </div> | ||||
|             <div class="modal-footer"> | ||||
|                 <button type="button" class="btn btn-default" data-dismiss="modal">No</button> | ||||
|                 <button type="button" class="btn btn-primary" id="ConfirmCancel">Confirm Cancel (Yes)</button> | ||||
|             </div> | ||||
|         </div> | ||||
|     </div> | ||||
| </div> | ||||
| <script language="javascript" type="text/javascript"> | ||||
|  | ||||
|     $(document).ready(function () { | ||||
|  | ||||
|         $("#CancelDocument").click(function (e) { | ||||
|  | ||||
|             $("#comments").val(""); | ||||
|  | ||||
|             $("#Cancel").modal('show'); | ||||
|         }); | ||||
|  | ||||
|         $('#ConfirmCancel').on('click', function () { | ||||
|  | ||||
|             if ($("#comments").val() == "") { | ||||
|                 alert("Comments are required"); | ||||
|                 return; | ||||
|             } | ||||
|  | ||||
|             $('#ConfirmCancel').attr("disabled", true); | ||||
|  | ||||
|             $.ajax({ | ||||
|                 url: "/ECN/CancelDocument", | ||||
|                 type: "GET", | ||||
|                 datatype: "json", | ||||
|                 data: { | ||||
|                     ecnNumber: $("#txtECNNumber").val(), | ||||
|                     currentStep: 1, | ||||
|                     documentType: 5, | ||||
|                     ecnTypeString: ecnTypeString, | ||||
|                     comments: $("#comments").val(), | ||||
|                 }, | ||||
|                 success: function (data) { | ||||
|  | ||||
|                     $("#Cancel").modal('hide'); | ||||
|  | ||||
|                     var url = '@Url.Action("ReadOnly", "ECN", new { issueID = "__id__" })'; | ||||
|                     url = url.replace('amp;', ''); | ||||
|                     window.location.href = url.replace('__id__', $("#txtECNNumber").val()); | ||||
|  | ||||
|                 }, | ||||
|                 error: function (result) { | ||||
|                     $('#ConfirmCancel').attr("disabled", false); | ||||
|                     alert("Server error while canceling document"); | ||||
|                 } | ||||
|             }); | ||||
|  | ||||
|         }); | ||||
|  | ||||
|     }); | ||||
| </script> | ||||
							
								
								
									
										75
									
								
								Fab2ApprovalSystem/Views/ECN/_ECNReturnToProcess.cshtml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										75
									
								
								Fab2ApprovalSystem/Views/ECN/_ECNReturnToProcess.cshtml
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,75 @@ | ||||
| <div class="modal fade" id="ReturnToProcess" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true" data-backdrop="static"> | ||||
|     <div class="modal-dialog"> | ||||
|         <div class="modal-content"> | ||||
|             <div class="modal-header"> | ||||
|                 <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button> | ||||
|                 <h4 class="modal-title" id="myModalLabel"><center>Has the process returned to the original state?</center></h4> | ||||
|  | ||||
|             </div> | ||||
|             <div class="modal-body"> | ||||
|                 <div class="control-group"> | ||||
|                     <div class="row"> | ||||
|                         <div class="col-sm-13"> | ||||
|                             <h4 class="modal-title">Comments (Required):</h4> | ||||
|                             <textarea class="form-control" rows="5" id="ReturnToProcessComments" style="resize: none;"></textarea> | ||||
|                         </div> | ||||
|                     </div> | ||||
|                 </div> | ||||
|             </div> | ||||
|             <div class="modal-footer"> | ||||
|                 <button type="button" class="btn btn-default" data-dismiss="modal">No</button> | ||||
|                 <button type="button" class="btn btn-primary" id="ConfirmReturnToProcess">Confirm Return to Process (Yes)</button> | ||||
|             </div> | ||||
|         </div> | ||||
|     </div> | ||||
| </div> | ||||
| <script language="javascript" type="text/javascript"> | ||||
|  | ||||
|     $(document).ready(function () { | ||||
|  | ||||
|         $("#ReturnToProcessDocument").click(function (e) { | ||||
|  | ||||
|             $("#ReturnToProcessComments").val(""); | ||||
|  | ||||
|             $("#ReturnToProcess").modal('show'); | ||||
|         }); | ||||
|  | ||||
|         $('#ConfirmReturnToProcess').on('click', function () { | ||||
|  | ||||
|             if ($("#ReturnToProcessComments").val() == "") { | ||||
|                 alert("Comments are required"); | ||||
|                 return; | ||||
|             } | ||||
|  | ||||
|             $('#ConfirmReturnToProcess').attr("disabled", true); | ||||
|  | ||||
|             $.ajax({ | ||||
|                 url: "/ECN/CancelDocument", | ||||
|                 type: "GET", | ||||
|                 datatype: "json", | ||||
|                 data: { | ||||
|                     ecnNumber: $("#txtECNNumber").val(), | ||||
|                     currentStep: 1, | ||||
|                     documentType: 5, | ||||
|                     ecnTypeString: ecnTypeString, | ||||
|                     comments: $("#ReturnToProcessComments").val(), | ||||
|                 }, | ||||
|                 success: function (data) { | ||||
|  | ||||
|                     $("#ReturnToProcess").modal('hide'); | ||||
|  | ||||
|                     var url = '@Url.Action("ReadOnly", "ECN", new { issueID = "__id__" })'; | ||||
|                     url = url.replace('amp;', ''); | ||||
|                     window.location.href = url.replace('__id__', $("#txtECNNumber").val()); | ||||
|  | ||||
|                 }, | ||||
|                 error: function (result) { | ||||
|                     $('#ConfirmReturnToProcess').attr("disabled", false); | ||||
|                     alert("Server error while ReturnToProcessing document"); | ||||
|                 } | ||||
|             }); | ||||
|  | ||||
|         }); | ||||
|  | ||||
|     }); | ||||
| </script> | ||||
| @ -33,7 +33,7 @@ | ||||
|         </div> | ||||
|  | ||||
|         <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>() | ||||
|                         .Name("alltasklist") | ||||
|  | ||||
| @ -38,7 +38,7 @@ | ||||
|                             columns.Bound(l => l.D8DueDate).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}"); | ||||
|                             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>"); | ||||
|  | ||||
|                         }) | ||||
|  | ||||
| @ -33,7 +33,7 @@ | ||||
|         </div> | ||||
|  | ||||
|         <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>() | ||||
|                         .Name("ecnTasklist") | ||||
|  | ||||
| @ -26,7 +26,7 @@ | ||||
|         <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 = "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="file:////temirwfp001.irworld.irf.com/UserData/QA/CommonRO/Projects/AVI Tool/">AVI Tool</a></li>*@ | ||||
|             <li class="dropdown"> | ||||
| @ -44,7 +44,7 @@ | ||||
|             @*<div class="form-group"> | ||||
|                     <input type="text" class="form-control" placeholder="Search" style="font-size: 11px"> | ||||
|                 </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> | ||||
|             } | ||||
| @ -170,7 +170,7 @@ | ||||
|         </div> | ||||
|  | ||||
|         <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>() | ||||
|                         .Name("alltasklist") | ||||
| @ -427,7 +427,7 @@ | ||||
|     var issueID=""; | ||||
|     var docType = ""; | ||||
|     var submitdate = ""; | ||||
|     var userName =  "@Session[@GlobalVars.SESSION_USERNAME].ToString()"; | ||||
|     var userName =  '@GlobalVars.GetUserName(Session)'; | ||||
|  | ||||
|     $(document).ready(function () { | ||||
|     }) | ||||
| @ -450,7 +450,7 @@ | ||||
|         window.location.href = url.replace('__id__', issueID); | ||||
|     })*@ | ||||
|  | ||||
|     var userid = @Session[@GlobalVars.SESSION_USERID].ToString() | ||||
|     var userid = @GlobalVars.GetUserId(Session); | ||||
|  | ||||
|  | ||||
|     $("#IncludeAllDocuments").on("click", function () { | ||||
|  | ||||
| @ -34,7 +34,7 @@ | ||||
|         </div> | ||||
|  | ||||
|         <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>() | ||||
|                         .Name("LotDispoTasklist") | ||||
|  | ||||
| @ -32,7 +32,7 @@ | ||||
|                                 <table class="pull-right"> | ||||
|                                     <tr> | ||||
|                                         <td class="pull-right"> | ||||
|                                             @if ((bool)Session[GlobalVars.IS_ADMIN]) | ||||
|                                             @if (GlobalVars.IsAdmin(Session)) | ||||
|                                             { | ||||
|                                                 @(Html.Kendo().Upload() | ||||
|                                                         .Name("AddQDBFlag") | ||||
| @ -45,7 +45,7 @@ | ||||
|                                             } | ||||
|                                         </td> | ||||
|                                         <td class="pull-right"> | ||||
|                                             @if ((bool)Session[GlobalVars.IS_ADMIN]) | ||||
|                                             @if (GlobalVars.IsAdmin(Session)) | ||||
|                                             { | ||||
|                                                 @(Html.Kendo().Upload() | ||||
|                                                         .Name("RemoveQDBFlag") | ||||
| @ -72,7 +72,7 @@ | ||||
|             </div> | ||||
|  | ||||
|                                                 <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>() | ||||
|                         .Name("mrbTasklist") | ||||
|  | ||||
| @ -175,7 +175,7 @@ | ||||
|  | ||||
|         </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 /> | ||||
|             <div class="panel-heading" style="background-color:beige"> | ||||
|  | ||||
| @ -55,11 +55,11 @@ | ||||
|             <div class="navbar-collapse collapse"> | ||||
|                 <ul class="nav navbar-nav"> | ||||
|                     @*<li>@Html.ActionLink("Reports", "Index", "Reports")</li>*@ | ||||
|                     @if ((bool)@Session[GlobalVars.IS_ADMIN]) | ||||
|                     @if (@GlobalVars.IsAdmin(Session)) | ||||
|                     { | ||||
|                         <li>@Html.ActionLink("Admin", "Index", "Admin")</li> | ||||
|                     } | ||||
|                     @if ((bool)@Session[GlobalVars.IS_MANAGER]) | ||||
|                     @if (GlobalVars.IsManager(Session)) | ||||
|                     { | ||||
|                         <li>@Html.ActionLink("Manager", "Index", "Manager")</li> | ||||
|                     } | ||||
| @ -83,30 +83,30 @@ | ||||
|                         @*<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", "ECN")>Create ECN/TECN</a></li> | ||||
|                         @if (!string.IsNullOrWhiteSpace(Session["JWT"].ToString())) { | ||||
|                             string jwt = Session["JWT"].ToString(); | ||||
|                         @if (!string.IsNullOrWhiteSpace(GlobalVars.GetJWT(Session))) { | ||||
|                             string jwt = GlobalVars.GetJWT(Session); | ||||
|                             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 wasmClientUrl = Environment.GetEnvironmentVariable("FabApprovalWasmClientUrl") ?? | ||||
|                                 "https://localhost:7255"; | ||||
|                             string mrbUrl = wasmClientUrl + "/redirect?jwt=" + encodedJwt + "&refreshToken=" + encodedRefreshToken + "&redirectPath=/mrb/new"; | ||||
|                             string mrbUrl = wasmClientUrl + "/redirect?jwt=" + encodedJwt + "&refreshToken=" + encodedRefreshToken + "&redirectPath=mrb/new"; | ||||
|                             <li><a href="@mrbUrl">Create MRB</a></li> | ||||
|                             @*string pcrbUrl = wasmClientUrl + "/redirect?jwt=" + encodedJwt + "&refreshToken=" + encodedRefreshToken + "&redirectPath=/pcrb/new"; | ||||
|                             <li><a href="@pcrbUrl">Create PCRB</a></li>*@ | ||||
|                             string pcrbUrl = wasmClientUrl + "/redirect?jwt=" + encodedJwt + "&refreshToken=" + encodedRefreshToken + "&redirectPath=pcrb/new"; | ||||
|                             <li><a href="@pcrbUrl">Create PCRB</a></li> | ||||
|                         } else { | ||||
|                             string wasmClientUrl = Environment.GetEnvironmentVariable("FabApprovalWasmClientUrl") ?? | ||||
|                                                         "https://localhost:7255"; | ||||
|                             string mrbUrl = wasmClientUrl + "/redirect?redirectPath=/mrb/new"; | ||||
|                             string mrbUrl = wasmClientUrl + "/redirect?redirectPath=mrb/new"; | ||||
|                             <li><a href="@mrbUrl">Create MRB</a></li> | ||||
|                             @*string pcrbUrl = wasmClientUrl + "/redirect?redirectPath=/pcrb/new"; | ||||
|                             <li><a href="@pcrbUrl">Create PCRB</a></li>*@ | ||||
|                             string pcrbUrl = wasmClientUrl + "/redirect?redirectPath=pcrb/new"; | ||||
|                             <li><a href="@pcrbUrl">Create PCRB</a></li> | ||||
|                         } | ||||
|                         @*<li><a href=@Url.Action("CreateWorkRequest", "LotTraveler")>Create Special Work Request</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", "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> | ||||
|         }*@ | ||||
| @ -118,7 +118,7 @@ | ||||
|                 @*<div class="form-group"> | ||||
|                         <input type="text" class="form-control" placeholder="Search" style="font-size: 11px"> | ||||
|                     </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> | ||||
|                 } | ||||
| @ -144,16 +144,16 @@ | ||||
|             menu.Add().Text("My Training").Action("ViewMyTrainingAssignments", "Training"); | ||||
|             menu.Add().Text("Training Reports").Action("TrainingReports", "Training"); | ||||
|             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 refreshToken = Session["RefreshToken"].ToString(); | ||||
|             string refreshToken = GlobalVars.GetRefreshToken(Session); | ||||
|             string encodedRefreshToken = System.Net.WebUtility.UrlEncode(refreshToken); | ||||
|             string wasmClientUrl = Environment.GetEnvironmentVariable("FabApprovalWasmClientUrl") ?? | ||||
|                 "https://localhost:7255"; | ||||
|             string mrbUrl = wasmClientUrl + "/redirect?jwt=" + encodedJwt + "&refreshToken=" + encodedRefreshToken + "&redirectPath=/mrb/all"; | ||||
|             string mrbUrl = wasmClientUrl + "/redirect?jwt=" + encodedJwt + "&refreshToken=" + encodedRefreshToken + "&redirectPath=mrb/all"; | ||||
|             menu.Add().Text("MRB").Url(mrbUrl); | ||||
|             //string pcrbUrl = wasmClientUrl + "/redirect?jwt=" + encodedJwt + "&refreshToken=" + encodedRefreshToken + "&redirectPath=/pcrb/all"; | ||||
|             //menu.Add().Text("PCRB").Url(pcrbUrl); | ||||
|             string pcrbUrl = wasmClientUrl + "/redirect?jwt=" + encodedJwt + "&refreshToken=" + encodedRefreshToken + "&redirectPath=pcrb/all"; | ||||
|             menu.Add().Text("PCRB").Url(pcrbUrl); | ||||
|             //menu.Add().Text("Special Work Requests").Action("SpecialWorkRequestList", "Home"); | ||||
|             //menu.Add().Text("PCRB").Action("ChangeControlList", "Home"); | ||||
|             //menu.Add().Text("MRB").Action("MRBList", "Home"); | ||||
| @ -279,7 +279,7 @@ | ||||
|     var issueID=""; | ||||
|     var docType = ""; | ||||
|     var submitdate = ""; | ||||
|     var userName =  "@Session[@GlobalVars.SESSION_USERNAME].ToString()"; | ||||
|     var userName =  '@GlobalVars.GetUserName(Session)'; | ||||
|  | ||||
|     $(document).ready(function () { | ||||
|     }) | ||||
| @ -302,7 +302,7 @@ | ||||
|         window.location.href = url.replace('__id__', issueID); | ||||
|     })*@ | ||||
|  | ||||
|     var userid = @Session[@GlobalVars.SESSION_USERID].ToString() | ||||
|     var userid = @GlobalVars.GetUserId(Session); | ||||
|  | ||||
|  | ||||
|     $("#IncludeAllDocuments").on("click", function () { | ||||
|  | ||||
| @ -41,10 +41,10 @@ | ||||
|                         @(Html.Kendo().DropDownList() | ||||
|                         .Name("OriginatorID") | ||||
|                         .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> | ||||
|  | ||||
|  | ||||
| @ -478,9 +478,9 @@ | ||||
|  | ||||
|             <div class="panel-body bg-warning"> | ||||
|                 <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>() | ||||
|                         .Name("ApproversList") | ||||
|  | ||||
| @ -421,7 +421,7 @@ | ||||
|  | ||||
|             <div class="panel-body bg-warning"> | ||||
|                 <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>() | ||||
|                     .Name("ApproversList") | ||||
|  | ||||
| @ -133,7 +133,7 @@ | ||||
|                             </div> | ||||
|                             <div class="col-sm-9"> | ||||
|                                 @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> | ||||
|                                 } | ||||
| @ -901,9 +901,9 @@ | ||||
|  | ||||
|         <div class="panel-body bg-warning"> | ||||
|                 <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>() | ||||
|                         .Name("ApproversList") | ||||
|  | ||||
| @ -125,7 +125,7 @@ | ||||
|                             </div> | ||||
|                             <div class="col-sm-9"> | ||||
|                                 @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> | ||||
|                                 } | ||||
|  | ||||
| @ -166,7 +166,7 @@ | ||||
|                         </div> | ||||
|                         <div class="col-sm-9"> | ||||
|                             @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> | ||||
|                             } | ||||
|  | ||||
| @ -146,7 +146,7 @@ | ||||
|                             </div> | ||||
|                             <div class="col-sm-9"> | ||||
|                                 @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> | ||||
|                                 } | ||||
|  | ||||
| @ -152,7 +152,7 @@ | ||||
|                             </div> | ||||
|                             <div class="col-sm-9"> | ||||
|                                 @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> | ||||
|                                 } | ||||
| @ -818,7 +818,7 @@ | ||||
|  | ||||
|             </div> | ||||
|             <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"> | ||||
|                         Additional Approvers | ||||
| @ -839,9 +839,9 @@ | ||||
|             <div class="panel-body bg-warning"> | ||||
|                 <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>() | ||||
|                         .Name("ApproversList") | ||||
|  | ||||
| @ -196,7 +196,7 @@ | ||||
|                             </div> | ||||
|                             <div class="col-sm-9"> | ||||
|                                 @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> | ||||
|                                 } | ||||
|  | ||||
| @ -929,9 +929,9 @@ | ||||
|  | ||||
|             <div class="panel-body bg-warning"> | ||||
|                 <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>() | ||||
|                     .Name("ApproversList") | ||||
| @ -1711,7 +1711,7 @@ | ||||
|  | ||||
|         $("#UploadWRAttchmentRev").on('click', function (e) { | ||||
|             e.preventDefault(); | ||||
|             var model = "@Session["CreateNewRevision"]"; | ||||
|             var model = '@GlobalVars.GetCreateNewRevision(Session)'; | ||||
|             wrAttachmentOperation = "Add"; | ||||
|             if (model == "true") { | ||||
|                 $("#WinWorkReqAttRevComments").modal('show'); | ||||
| @ -1787,7 +1787,7 @@ | ||||
|             data.RevisionComments = $("#revisionWRAttachComments").val(); | ||||
|  | ||||
|  | ||||
|             var model = "@Session["CreateNewRevision"]"; | ||||
|             var model = '@GlobalVars.GetCreateNewRevision(Session)'; | ||||
|             if (model == "true") { | ||||
|                 var urlString = '/LotTraveler/UpdateWorkRequestAttachmentRevision'; | ||||
|                 $.ajax({ | ||||
| @ -1851,7 +1851,7 @@ | ||||
|  | ||||
|         function on_WorkReqAttachmentsGridSuccess() { | ||||
|  | ||||
|             var model = "@Session["CreateNewRevision"]"; | ||||
|             var model = '@GlobalVars.GetCreateNewRevision(Session)'; | ||||
|  | ||||
|             if (model == "true") { | ||||
|                 $.ajax({ | ||||
| @ -1887,7 +1887,7 @@ | ||||
|             var dataItem = this.dataItem($(e.currentTarget).closest("tr")); | ||||
|             currentWrkReqAttachID = dataItem.ID; | ||||
|  | ||||
|             var model = "@Session["CreateNewRevision"]"; | ||||
|             var model = '@GlobalVars.GetCreateNewRevision(Session)'; | ||||
|  | ||||
|             if (model == "true") { | ||||
|                 $("#WinWorkReqAttRevComments").modal('show'); | ||||
| @ -1910,7 +1910,7 @@ | ||||
|  | ||||
|             if (confirm("Do you really wish to delete the attachment record")) { | ||||
|  | ||||
|                 var model = "@Session["CreateNewRevision"]"; | ||||
|                 var model = '@GlobalVars.GetCreateNewRevision(Session)'; | ||||
|                 if (model == "true") { | ||||
|                     $("#WinWorkReqAttRevComments").modal('show'); | ||||
|                 } | ||||
| @ -2009,7 +2009,7 @@ | ||||
|  | ||||
|             if (confirm("Do you really wish to delete the record?")) { | ||||
|  | ||||
|                 var model = "@Session["CreateNewRevision"]"; | ||||
|                 var model = '@GlobalVars.GetCreateNewRevision(Session)'; | ||||
|                 if (model == "true") { | ||||
|                     $("#WinHoldStepRevisionComments").modal("show"); | ||||
|                 } | ||||
| @ -2180,7 +2180,7 @@ | ||||
|             else { | ||||
|                 // save | ||||
|                 $("#AddHoldStepForm").modal('hide'); | ||||
|                 var model = "@Session["CreateNewRevision"]"; | ||||
|                 var model = '@GlobalVars.GetCreateNewRevision(Session)'; | ||||
|                 if (model == "true") { | ||||
|                     $("#WinHoldStepRevisionComments").modal("show"); | ||||
|                 } | ||||
| @ -2451,7 +2451,7 @@ | ||||
|  | ||||
|             var dataItem = this.dataItem($(e.currentTarget).closest("tr")); | ||||
|             currentHoldStepID = dataItem.ID; | ||||
|             var model = "@Session["CreateNewRevision"]"; | ||||
|             var model = '@GlobalVars.GetCreateNewRevision(Session)'; | ||||
|  | ||||
|             if (model == "true") { | ||||
|                 $("#WinHoldStepAttRevComments").modal('show'); | ||||
| @ -2769,7 +2769,7 @@ | ||||
|                 return; | ||||
|             } | ||||
|  | ||||
|             var model = '@Session["CreateNewRevision"]'; | ||||
|             var model = '@GlobalVars.GetCreateNewRevision(Session)'; | ||||
|  | ||||
|             $('#submitRevisionComments').attr("disabled", false); | ||||
|  | ||||
| @ -2919,7 +2919,7 @@ | ||||
|  | ||||
|             if (confirm("Do you really wish to delete?")) { | ||||
|  | ||||
|                 var model = '@Session["CreateNewRevision"]'; | ||||
|                 var model = '@GlobalVars.GetCreateNewRevision(Session)'; | ||||
|                 if (model == "true") | ||||
|                     $("#WinEPIRevisionComments").modal('show'); | ||||
|                 else { | ||||
| @ -2968,7 +2968,7 @@ | ||||
|             var Quantity = $("#txtEPiQuantity").val(); | ||||
|  | ||||
|             $("#EPIForm").modal('hide'); | ||||
|             var model = '@Session["CreateNewRevision"]'; | ||||
|             var model = '@GlobalVars.GetCreateNewRevision(Session)'; | ||||
|  | ||||
|             if (model == "true") | ||||
|                 $("#WinEPIRevisionComments").modal('show'); | ||||
|  | ||||
Some files were not shown because too many files have changed in this diff Show More
		Reference in New Issue
	
	Block a user
	