Compare commits
68 Commits
f6ced73b9f
...
05-28-a
Author | SHA1 | Date | |
---|---|---|---|
bdf1a8060f | |||
54799f54ec | |||
7eba0fa25a | |||
65a433e9ab | |||
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 | |||
b99b721458 | |||
b1c6903c1c | |||
538b1f817e | |||
89790f4fc1 | |||
9b7e3ef897 | |||
ba8d92ea01 | |||
603052d7e5 | |||
c97ce37238 | |||
10dbd08cd2 | |||
1b7e482ad4 | |||
cbcd3ee53a | |||
fe981c4c04 | |||
3e6fc3fdb3 | |||
1b17cd75c2 | |||
5d701ded55 | |||
0289e62e9f | |||
d6af4b6ef9 | |||
4e04d4666d | |||
88af83cf96 | |||
e8ec36fe3e | |||
4b83a89cb0 | |||
ca651191c8 | |||
ffe6cd7c63 | |||
e1675fe9e9 | |||
a3053eadf6 | |||
7cc645c188 | |||
fbeb8b3cf7 | |||
27728bd0c4 | |||
7330647172 | |||
167db67027 | |||
9c5c938157 | |||
989d0f401e | |||
15c7a15b8e | |||
7e4a17845c | |||
1f96c01a5b |
@ -1,74 +0,0 @@
|
||||
# EditorConfig is awesome:http://EditorConfig.org
|
||||
|
||||
# top-most EditorConfig file
|
||||
root = true
|
||||
|
||||
[*]
|
||||
# Don't use tabs for indentation.
|
||||
# (Please don't specify an indent_size here; that has too many unintended consequences.)
|
||||
indent_style = space
|
||||
|
||||
charset = utf-8
|
||||
|
||||
# Where supported, trim trailing whitespace on all lines.
|
||||
trim_trailing_whitespace = true
|
||||
|
||||
# Where supported (e.g. in VS Code but not VS), add a final newline to files.
|
||||
insert_final_newline = true
|
||||
|
||||
# Code files
|
||||
[*.{cs,csx,vb,vbx}]
|
||||
indent_size = 4
|
||||
dotnet_sort_system_directives_first = true:warning
|
||||
|
||||
# Xml project files
|
||||
[*.{*proj,vcxproj.filters,projitems}]
|
||||
indent_size = 2
|
||||
|
||||
# Xml config files
|
||||
[*.{props,targets,ruleset,config,nuspec,resx,vsixmanifest,vsct,tasks,xml,yml}]
|
||||
indent_size = 2
|
||||
|
||||
# JSON files
|
||||
[*.json]
|
||||
indent_size = 2
|
||||
|
||||
# PowerShell
|
||||
[*.{ps1,psm1}]
|
||||
indent_size = 4
|
||||
|
||||
# Shell
|
||||
[*.sh]
|
||||
indent_size = 4
|
||||
end_of_line = lf
|
||||
|
||||
# Dotnet code style settings:
|
||||
[*.cs]
|
||||
# Sort using and Import directives with System.* appearing first
|
||||
dotnet_sort_system_directives_first = true
|
||||
|
||||
# Don't use this. qualifier
|
||||
dotnet_style_qualification_for_field = false:suggestion
|
||||
dotnet_style_qualification_for_property = false:suggestion
|
||||
|
||||
# use int x = .. over Int32
|
||||
dotnet_style_predefined_type_for_locals_parameters_members = true:suggestion
|
||||
|
||||
# use int.MaxValue over Int32.MaxValue
|
||||
dotnet_style_predefined_type_for_member_access = true:suggestion
|
||||
|
||||
# Require var all the time.
|
||||
csharp_style_var_for_built_in_types = false:suggestion
|
||||
csharp_style_var_when_type_is_apparent = false:suggestion
|
||||
csharp_style_var_elsewhere = false:suggestion
|
||||
|
||||
# Disallow throw expressions.
|
||||
csharp_style_throw_expression = false:suggestion
|
||||
|
||||
# Newline settings
|
||||
csharp_new_line_before_open_brace = all
|
||||
csharp_new_line_before_else = true
|
||||
csharp_new_line_before_catch = true
|
||||
csharp_new_line_before_finally = true
|
||||
csharp_new_line_before_members_in_object_initializers = true
|
||||
csharp_new_line_before_members_in_anonymous_types = true
|
||||
|
47
.gitignore
vendored
47
.gitignore
vendored
@ -337,3 +337,50 @@ ASALocalRun/
|
||||
!.vscode/tasks.json
|
||||
!.vscode/launch.json
|
||||
!.vscode/extensions.json
|
||||
|
||||
.env
|
||||
|
||||
/Fab2ApprovalMKLink/App_Start
|
||||
/Fab2ApprovalMKLink/Controllers
|
||||
/Fab2ApprovalMKLink/DMO
|
||||
/Fab2ApprovalMKLink/Jobs
|
||||
/Fab2ApprovalMKLink/JobSchedules
|
||||
/Fab2ApprovalMKLink/Misc
|
||||
/Fab2ApprovalMKLink/Models
|
||||
/Fab2ApprovalMKLink/PdfGenerator
|
||||
/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
|
83
.vscode/launch.json
vendored
Normal file
83
.vscode/launch.json
vendored
Normal file
@ -0,0 +1,83 @@
|
||||
{
|
||||
// Use IntelliSense to learn about possible attributes.
|
||||
// Hover to view descriptions of existing attributes.
|
||||
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
|
||||
"version": "0.2.0",
|
||||
"configurations": [
|
||||
{
|
||||
"name": ".NET Core Launch (console) - Fab2ApprovalSystem",
|
||||
"type": "coreclr",
|
||||
"request": "launch",
|
||||
"preLaunchTask": "Fab2ApprovalSystem-build",
|
||||
"program": "${workspaceFolder}/Fab2ApprovalSystem/bin/Debug/net8.0/win-x64/Fab2ApprovalSystem.dll",
|
||||
"args": [],
|
||||
"cwd": "${workspaceFolder}",
|
||||
"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",
|
||||
"request": "launch",
|
||||
"preLaunchTask": "MesaFabApproval.API-build",
|
||||
"program": "${workspaceFolder}/MesaFabApproval.API/bin/Debug/net8.0/MesaFabApproval.API.dll",
|
||||
"args": [],
|
||||
"cwd": "${workspaceFolder}",
|
||||
"console": "integratedTerminal",
|
||||
"stopAtEntry": false
|
||||
},
|
||||
{
|
||||
"name": ".NET Core Attach",
|
||||
"type": "coreclr",
|
||||
"request": "attach"
|
||||
},
|
||||
{
|
||||
"type": "node",
|
||||
"request": "launch",
|
||||
"name": "node Launch Current Opened File",
|
||||
"program": "${file}"
|
||||
}
|
||||
]
|
||||
}
|
425
.vscode/settings.json
vendored
Normal file
425
.vscode/settings.json
vendored
Normal file
@ -0,0 +1,425 @@
|
||||
{
|
||||
"[markdown]": {
|
||||
"editor.wordWrap": "off"
|
||||
},
|
||||
"files.exclude": {
|
||||
"**/.git": false,
|
||||
"**/node_modules": true
|
||||
},
|
||||
"files.watcherExclude": {
|
||||
"**/node_modules": true
|
||||
},
|
||||
"cSpell.words": [
|
||||
"abutton",
|
||||
"accessibilities",
|
||||
"accodingly",
|
||||
"acknowledgmentby",
|
||||
"Acks",
|
||||
"actionsheet",
|
||||
"Additonal",
|
||||
"Addtional",
|
||||
"againm",
|
||||
"agendaview",
|
||||
"Antlr",
|
||||
"Appover",
|
||||
"Appprrovers",
|
||||
"Approvalog",
|
||||
"Aprovers",
|
||||
"Aproverslist",
|
||||
"asax",
|
||||
"aspnetmvc",
|
||||
"Assignedto",
|
||||
"Atachments",
|
||||
"Attachemnt",
|
||||
"Attachemnts",
|
||||
"Attchment",
|
||||
"auditee",
|
||||
"Auditee",
|
||||
"Auditees",
|
||||
"automaically",
|
||||
"Autthorized",
|
||||
"beacuase",
|
||||
"beforeunload",
|
||||
"Belguim",
|
||||
"bfound",
|
||||
"bgcolor",
|
||||
"Bies",
|
||||
"binded",
|
||||
"blackbackground",
|
||||
"blackhover",
|
||||
"blackpressed",
|
||||
"blueenergy",
|
||||
"blueopal",
|
||||
"buttongroup",
|
||||
"BYMRB",
|
||||
"bytesgot",
|
||||
"CAID",
|
||||
"casection",
|
||||
"CAXXXX",
|
||||
"CCPCR",
|
||||
"CCPCRB",
|
||||
"cellspacing",
|
||||
"Cheeso's",
|
||||
"chkbx",
|
||||
"Clib",
|
||||
"colorpicker",
|
||||
"columnmenu",
|
||||
"columnsreorder",
|
||||
"columnsresize",
|
||||
"comming",
|
||||
"Containmen",
|
||||
"Copmments",
|
||||
"correctiv",
|
||||
"Correctivet",
|
||||
"Creat",
|
||||
"currentd",
|
||||
"Cyle",
|
||||
"dadada",
|
||||
"darkbluehover",
|
||||
"darkbluepressed",
|
||||
"darkred",
|
||||
"datafields",
|
||||
"datasource",
|
||||
"dataviz",
|
||||
"datepicker",
|
||||
"datetimepicker",
|
||||
"dayview",
|
||||
"Deletet",
|
||||
"Delgation",
|
||||
"DENITED",
|
||||
"Deparmtent",
|
||||
"departmentids",
|
||||
"Descirption",
|
||||
"devprog",
|
||||
"dfeffc",
|
||||
"Disp",
|
||||
"Dispo",
|
||||
"Dispoitio",
|
||||
"Dispos",
|
||||
"Dispositon",
|
||||
"Dispostion",
|
||||
"Dispostions",
|
||||
"dispotypevalidation",
|
||||
"Docbase",
|
||||
"Documentum",
|
||||
"Documetum",
|
||||
"dont",
|
||||
"downlaoded",
|
||||
"draganddrop",
|
||||
"dragcancel",
|
||||
"dropdownlist",
|
||||
"Eamils",
|
||||
"ECNPCRB",
|
||||
"Ecns",
|
||||
"edmx",
|
||||
"EECN",
|
||||
"emai",
|
||||
"emailparams",
|
||||
"Emergrncy",
|
||||
"energyblue",
|
||||
"Eran",
|
||||
"Esql",
|
||||
"ETECN",
|
||||
"EXCELOPENXML",
|
||||
"existinglocation",
|
||||
"Expando",
|
||||
"extrafield",
|
||||
"fadc",
|
||||
"fbec",
|
||||
"fcfdfd",
|
||||
"fdff",
|
||||
"fece",
|
||||
"feeebd",
|
||||
"ffdc",
|
||||
"ffdd",
|
||||
"fieldset",
|
||||
"FILIPE",
|
||||
"filtermenu",
|
||||
"Fldr",
|
||||
"flintstone",
|
||||
"FLOWLOCS",
|
||||
"FMEA",
|
||||
"ftplib",
|
||||
"FTPSPN",
|
||||
"GETDATE",
|
||||
"gitea",
|
||||
"globaldocudms",
|
||||
"glyphicons",
|
||||
"groupable",
|
||||
"Guids",
|
||||
"halflings",
|
||||
"Hexsize",
|
||||
"highcontrast",
|
||||
"Hmac",
|
||||
"holdsteps",
|
||||
"hostspecific",
|
||||
"icenium",
|
||||
"IECN",
|
||||
"imagebrowser",
|
||||
"IMRB",
|
||||
"Infineon",
|
||||
"Insertd",
|
||||
"inverseicons",
|
||||
"IPCRB",
|
||||
"ISADMIN",
|
||||
"islast",
|
||||
"ISNULL",
|
||||
"ITAR",
|
||||
"jquery",
|
||||
"jqueryval",
|
||||
"jqwidgets",
|
||||
"jqxbuttongroup",
|
||||
"jqxbuttons",
|
||||
"jqxcalendar",
|
||||
"jqxchart",
|
||||
"jqxcheckbox",
|
||||
"jqxcolorpicker",
|
||||
"jqxcombobox",
|
||||
"jqxcore",
|
||||
"jqxdata",
|
||||
"jqxdatatable",
|
||||
"jqxdatetimeinput",
|
||||
"jqxdocking",
|
||||
"jqxdockpanel",
|
||||
"jqxdragdrop",
|
||||
"jqxdropdownbutton",
|
||||
"jqxdropdownlist",
|
||||
"jqxexpander",
|
||||
"jqxgauge",
|
||||
"jqxgrid",
|
||||
"jqxinput",
|
||||
"jqxknockout",
|
||||
"jqxlistbox",
|
||||
"jqxlistmenu",
|
||||
"jqxmaskedinput",
|
||||
"jqxmenu",
|
||||
"jqxnavigationbar",
|
||||
"jqxnumberinput",
|
||||
"jqxpanel",
|
||||
"jqxpasswordinput",
|
||||
"jqxprogressbar",
|
||||
"jqxradiobutton",
|
||||
"jqxrangeselector",
|
||||
"jqxrating",
|
||||
"jqxresponse",
|
||||
"jqxscrollbar",
|
||||
"jqxscrollview",
|
||||
"jqxslider",
|
||||
"jqxsplitter",
|
||||
"jqxswitchbutton",
|
||||
"jqxtabs",
|
||||
"jqxtooltip",
|
||||
"jqxtouch",
|
||||
"jqxtree",
|
||||
"jqxtreegrid",
|
||||
"jqxtreemap",
|
||||
"jqxvalidator",
|
||||
"jqxwindow",
|
||||
"kendogridcustom",
|
||||
"kendoui",
|
||||
"labelelement",
|
||||
"labelledby",
|
||||
"Leanred",
|
||||
"lightgray",
|
||||
"linkbutton",
|
||||
"Linq",
|
||||
"Listdiv",
|
||||
"listview",
|
||||
"Lnks",
|
||||
"localfilename",
|
||||
"loclist",
|
||||
"logis",
|
||||
"logtext",
|
||||
"loopmis",
|
||||
"lotdispo",
|
||||
"LOTDISPSITION",
|
||||
"Lotfile",
|
||||
"lotlist",
|
||||
"lotstatusoption",
|
||||
"LTRIM",
|
||||
"MADUREIRA",
|
||||
"mailrelay",
|
||||
"MDTM",
|
||||
"meego",
|
||||
"meetingid",
|
||||
"menubutton",
|
||||
"mesafi",
|
||||
"metroblack",
|
||||
"metrodark",
|
||||
"miliseconds",
|
||||
"modalview",
|
||||
"modernizr",
|
||||
"Modernizr",
|
||||
"monthview",
|
||||
"MRBIs",
|
||||
"Mrbs",
|
||||
"msecs",
|
||||
"multipleextended",
|
||||
"Navigatable",
|
||||
"nbsp",
|
||||
"newbase",
|
||||
"newchange",
|
||||
"newdi",
|
||||
"newfilename",
|
||||
"newsource",
|
||||
"Newtonsoft",
|
||||
"notications",
|
||||
"Notifcation",
|
||||
"Notifyf",
|
||||
"NTLM",
|
||||
"Nullcc",
|
||||
"numerictextbox",
|
||||
"objdata",
|
||||
"OCAP",
|
||||
"occured",
|
||||
"odata",
|
||||
"oldfilename",
|
||||
"OLHOLD",
|
||||
"onclick",
|
||||
"onmousemove",
|
||||
"OPDESC",
|
||||
"OPENQUERY",
|
||||
"Oper",
|
||||
"operationslist",
|
||||
"Orginator",
|
||||
"Originatorname",
|
||||
"Ouellette",
|
||||
"Owin",
|
||||
"pageable",
|
||||
"Pageable",
|
||||
"panelbar",
|
||||
"parentid",
|
||||
"parminput",
|
||||
"parms",
|
||||
"Parms",
|
||||
"particula",
|
||||
"pasv",
|
||||
"PASV",
|
||||
"PATINDEX",
|
||||
"PCRB",
|
||||
"PCRBID",
|
||||
"pcrvalues",
|
||||
"pdbonly",
|
||||
"Preventitive",
|
||||
"preventivet",
|
||||
"Prevetative",
|
||||
"proces",
|
||||
"Processedl",
|
||||
"procs",
|
||||
"productfamilies",
|
||||
"progess",
|
||||
"progressbar",
|
||||
"qrcode",
|
||||
"Quanityt",
|
||||
"rangebar",
|
||||
"Recep",
|
||||
"Recepient",
|
||||
"recieved",
|
||||
"recordlock",
|
||||
"remotefilename",
|
||||
"reorderable",
|
||||
"reportform",
|
||||
"reportslist",
|
||||
"reportslistdiv",
|
||||
"Reqquired",
|
||||
"Reqs",
|
||||
"Requiest",
|
||||
"Responsibles",
|
||||
"RETR",
|
||||
"Revisioing",
|
||||
"Revisioned",
|
||||
"Revison",
|
||||
"rgba",
|
||||
"rkotian",
|
||||
"RNFR",
|
||||
"RNTO",
|
||||
"Roless",
|
||||
"roundbg",
|
||||
"RTRIM",
|
||||
"SAMDB",
|
||||
"scroller",
|
||||
"scrollview",
|
||||
"seleced",
|
||||
"selectionlog",
|
||||
"Selectpart",
|
||||
"sess",
|
||||
"Sfisharepoint",
|
||||
"shinyblack",
|
||||
"showpassword",
|
||||
"SIGNON",
|
||||
"simpleparser",
|
||||
"slddrw",
|
||||
"sldprt",
|
||||
"sortasc",
|
||||
"sortascbutton",
|
||||
"sortdesc",
|
||||
"sortdescbutton",
|
||||
"sortremove",
|
||||
"sparkline",
|
||||
"splitview",
|
||||
"SPNMRB",
|
||||
"SPNPDB",
|
||||
"SSRS",
|
||||
"Sssign",
|
||||
"Staus",
|
||||
"stylesheet",
|
||||
"Submited",
|
||||
"subrole",
|
||||
"subroles",
|
||||
"Succefully",
|
||||
"Succesfully",
|
||||
"sucessfully",
|
||||
"SURP",
|
||||
"Swashbuckle",
|
||||
"SWRN",
|
||||
"tabindex",
|
||||
"tabstrip",
|
||||
"Tahoma",
|
||||
"taskcompleted",
|
||||
"Tasklist",
|
||||
"Taveler",
|
||||
"TECN",
|
||||
"TECNs",
|
||||
"TEMIRWAP",
|
||||
"tempecd",
|
||||
"tempimplement",
|
||||
"templabel",
|
||||
"tempvalue",
|
||||
"TEMSA",
|
||||
"timepicker",
|
||||
"Tobe",
|
||||
"Toplevel",
|
||||
"Totrav",
|
||||
"trainingby",
|
||||
"Traininglist",
|
||||
"traininglistdiv",
|
||||
"transanction",
|
||||
"Trav",
|
||||
"Traveller",
|
||||
"Traverler",
|
||||
"TRAVLELER",
|
||||
"Travler",
|
||||
"TREEVIEW",
|
||||
"trigerred",
|
||||
"ttinclude",
|
||||
"Uhandled",
|
||||
"Updat",
|
||||
"Uplaod",
|
||||
"Upto",
|
||||
"userevents",
|
||||
"userids",
|
||||
"userlist",
|
||||
"Validatable",
|
||||
"valueelement",
|
||||
"Variabls",
|
||||
"Verdana",
|
||||
"vgrid",
|
||||
"viewmodel",
|
||||
"vsdoc",
|
||||
"whethere",
|
||||
"windowsphone",
|
||||
"Winsock",
|
||||
"worlflow"
|
||||
],
|
||||
"dotnet.preferCSharpExtension": true
|
||||
}
|
529
.vscode/tasks.json
vendored
Normal file
529
.vscode/tasks.json
vendored
Normal file
@ -0,0 +1,529 @@
|
||||
{
|
||||
"version": "2.0.0",
|
||||
"tasks": [
|
||||
{
|
||||
"label": "MSBuild-Debug",
|
||||
"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=Debug;TargetFrameworkVersion=v4.8",
|
||||
"Fab2ApprovalSystem/Fab2ApprovalSystem.csproj"
|
||||
],
|
||||
"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",
|
||||
"type": "process",
|
||||
"args": [
|
||||
"user-secrets",
|
||||
"-p",
|
||||
"${workspaceFolder}/Fab2ApprovalMKLink/Fab2ApprovalMKLink.csproj",
|
||||
"init"
|
||||
],
|
||||
"problemMatcher": "$msCompile"
|
||||
},
|
||||
{
|
||||
"label": "Fab2ApprovalMKLink-User Secrets Set",
|
||||
"command": "dotnet",
|
||||
"type": "process",
|
||||
"args": [
|
||||
"user-secrets",
|
||||
"-p",
|
||||
"${workspaceFolder}/Fab2ApprovalMKLink/Fab2ApprovalMKLink.csproj",
|
||||
"set",
|
||||
"_UserSecretsId",
|
||||
"f2da5035-aba9-4676-9f8d-d6689f84663d"
|
||||
],
|
||||
"problemMatcher": "$msCompile"
|
||||
},
|
||||
{
|
||||
"label": "Fab2ApprovalMKLink-Format",
|
||||
"command": "dotnet",
|
||||
"type": "process",
|
||||
"args": [
|
||||
"format",
|
||||
"${workspaceFolder}/Fab2ApprovalMKLink/Fab2ApprovalMKLink.csproj",
|
||||
"--report",
|
||||
".vscode",
|
||||
"--verbosity",
|
||||
"detailed",
|
||||
"--severity",
|
||||
"warn"
|
||||
],
|
||||
"problemMatcher": "$msCompile"
|
||||
},
|
||||
{
|
||||
"label": "Fab2ApprovalMKLink-Format-Whitespaces",
|
||||
"command": "dotnet",
|
||||
"type": "process",
|
||||
"args": [
|
||||
"format",
|
||||
"whitespace",
|
||||
"${workspaceFolder}/Fab2ApprovalMKLink/Fab2ApprovalMKLink.csproj"
|
||||
],
|
||||
"problemMatcher": "$msCompile"
|
||||
},
|
||||
{
|
||||
"label": "Fab2ApprovalMKLink-build",
|
||||
"command": "dotnet",
|
||||
"type": "process",
|
||||
"args": [
|
||||
"build",
|
||||
"${workspaceFolder}/Fab2ApprovalMKLink/Fab2ApprovalMKLink.csproj",
|
||||
"/property:GenerateFullPaths=true",
|
||||
"/consoleloggerparameters:NoSummary"
|
||||
],
|
||||
"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",
|
||||
"type": "process",
|
||||
"args": [
|
||||
"publish",
|
||||
"${workspaceFolder}/Fab2ApprovalMKLink/Fab2ApprovalMKLink.csproj",
|
||||
"/property:GenerateFullPaths=true",
|
||||
"/consoleloggerparameters:NoSummary"
|
||||
],
|
||||
"problemMatcher": "$msCompile"
|
||||
},
|
||||
{
|
||||
"label": "Fab2ApprovalMKLink-watch",
|
||||
"command": "dotnet",
|
||||
"type": "process",
|
||||
"args": [
|
||||
"watch",
|
||||
"run",
|
||||
"--project",
|
||||
"${workspaceFolder}/Fab2ApprovalMKLink/Fab2ApprovalMKLink.csproj"
|
||||
],
|
||||
"problemMatcher": "$msCompile"
|
||||
},
|
||||
{
|
||||
"label": "Fab2ApprovalMKLink-Publish AOT",
|
||||
"command": "dotnet",
|
||||
"type": "process",
|
||||
"args": [
|
||||
"publish",
|
||||
"-r",
|
||||
"win-x64",
|
||||
"-c",
|
||||
"Release",
|
||||
"-p:PublishAot=true",
|
||||
"${workspaceFolder}/Fab2ApprovalMKLink/Fab2ApprovalMKLink.csproj",
|
||||
"/property:GenerateFullPaths=true",
|
||||
"/consoleloggerparameters:NoSummary"
|
||||
],
|
||||
"problemMatcher": "$msCompile"
|
||||
},
|
||||
{
|
||||
"label": "Fab2ApprovalTests-User Secrets Init",
|
||||
"command": "dotnet",
|
||||
"type": "process",
|
||||
"args": [
|
||||
"user-secrets",
|
||||
"-p",
|
||||
"${workspaceFolder}/Fab2ApprovalTests/Fab2ApprovalTests.csproj",
|
||||
"init"
|
||||
],
|
||||
"problemMatcher": "$msCompile"
|
||||
},
|
||||
{
|
||||
"label": "Fab2ApprovalTests-User Secrets Set",
|
||||
"command": "dotnet",
|
||||
"type": "process",
|
||||
"args": [
|
||||
"user-secrets",
|
||||
"-p",
|
||||
"${workspaceFolder}/Fab2ApprovalTests/Fab2ApprovalTests.csproj",
|
||||
"set",
|
||||
"_UserSecretsId",
|
||||
"3942d1fb-d585-40ae-8985-d276d1b94b77"
|
||||
],
|
||||
"problemMatcher": "$msCompile"
|
||||
},
|
||||
{
|
||||
"label": "Fab2ApprovalTests-Format",
|
||||
"command": "dotnet",
|
||||
"type": "process",
|
||||
"args": [
|
||||
"format",
|
||||
"--report",
|
||||
".vscode",
|
||||
"--verbosity",
|
||||
"detailed",
|
||||
"--severity",
|
||||
"warn"
|
||||
],
|
||||
"problemMatcher": "$msCompile"
|
||||
},
|
||||
{
|
||||
"label": "Fab2ApprovalTests-Format-Whitespaces",
|
||||
"command": "dotnet",
|
||||
"type": "process",
|
||||
"args": [
|
||||
"format",
|
||||
"whitespace"
|
||||
],
|
||||
"problemMatcher": "$msCompile"
|
||||
},
|
||||
{
|
||||
"label": "Fab2ApprovalTests-build",
|
||||
"command": "dotnet",
|
||||
"type": "process",
|
||||
"args": [
|
||||
"build",
|
||||
"${workspaceFolder}/Fab2ApprovalTests/Fab2ApprovalTests.csproj",
|
||||
"/property:GenerateFullPaths=true",
|
||||
"/consoleloggerparameters:NoSummary"
|
||||
],
|
||||
"problemMatcher": "$msCompile"
|
||||
},
|
||||
{
|
||||
"label": "Fab2ApprovalTests-testDebug",
|
||||
"command": "dotnet",
|
||||
"type": "process",
|
||||
"args": [
|
||||
"test",
|
||||
"${workspaceFolder}/Fab2ApprovalTests/Fab2ApprovalTests.csproj",
|
||||
"/property:GenerateFullPaths=true",
|
||||
"/consoleloggerparameters:NoSummary"
|
||||
],
|
||||
"problemMatcher": "$msCompile"
|
||||
},
|
||||
{
|
||||
"label": "Fab2ApprovalTests-testRelease",
|
||||
"command": "dotnet",
|
||||
"type": "process",
|
||||
"args": [
|
||||
"test",
|
||||
"${workspaceFolder}/Fab2ApprovalTests/Fab2ApprovalTests.csproj",
|
||||
"/property:GenerateFullPaths=true",
|
||||
"/consoleloggerparameters:NoSummary",
|
||||
"-c",
|
||||
"Release"
|
||||
],
|
||||
"problemMatcher": "$msCompile"
|
||||
},
|
||||
{
|
||||
"label": "Fab2ApprovalTests-publish",
|
||||
"command": "dotnet",
|
||||
"type": "process",
|
||||
"args": [
|
||||
"publish",
|
||||
"${workspaceFolder}/Fab2ApprovalTests/Fab2ApprovalTests.csproj",
|
||||
"/property:GenerateFullPaths=true",
|
||||
"/consoleloggerparameters:NoSummary"
|
||||
],
|
||||
"problemMatcher": "$msCompile"
|
||||
},
|
||||
{
|
||||
"label": "Fab2ApprovalTests-watch",
|
||||
"command": "dotnet",
|
||||
"type": "process",
|
||||
"args": [
|
||||
"watch",
|
||||
"run",
|
||||
"--project",
|
||||
"${workspaceFolder}/Fab2ApprovalTests/Fab2ApprovalTests.csproj"
|
||||
],
|
||||
"problemMatcher": "$msCompile"
|
||||
},
|
||||
{
|
||||
"label": "Fab2ApprovalTests-Publish AOT",
|
||||
"command": "dotnet",
|
||||
"type": "process",
|
||||
"args": [
|
||||
"publish",
|
||||
"-r",
|
||||
"win-x64",
|
||||
"-c",
|
||||
"Release",
|
||||
"-p:PublishAot=true",
|
||||
"${workspaceFolder}/Fab2ApprovalTests/Fab2ApprovalTests.csproj",
|
||||
"/property:GenerateFullPaths=true",
|
||||
"/consoleloggerparameters:NoSummary"
|
||||
],
|
||||
"problemMatcher": "$msCompile"
|
||||
},
|
||||
{
|
||||
"label": "MesaFabApproval.API-User Secrets Init",
|
||||
"command": "dotnet",
|
||||
"type": "process",
|
||||
"args": [
|
||||
"user-secrets",
|
||||
"-p",
|
||||
"${workspaceFolder}/MesaFabApproval.API/MesaFabApproval.API.csproj",
|
||||
"init"
|
||||
],
|
||||
"problemMatcher": "$msCompile"
|
||||
},
|
||||
{
|
||||
"label": "MesaFabApproval.API-User Secrets Set",
|
||||
"command": "dotnet",
|
||||
"type": "process",
|
||||
"args": [
|
||||
"user-secrets",
|
||||
"-p",
|
||||
"${workspaceFolder}/MesaFabApproval.API/MesaFabApproval.API.csproj",
|
||||
"set",
|
||||
"_UserSecretsId",
|
||||
"0b98e1f2-95ed-4edd-8149-58cce51ca059"
|
||||
],
|
||||
"problemMatcher": "$msCompile"
|
||||
},
|
||||
{
|
||||
"label": "MesaFabApproval.API-Format",
|
||||
"command": "dotnet",
|
||||
"type": "process",
|
||||
"args": [
|
||||
"format",
|
||||
"--report",
|
||||
".vscode",
|
||||
"--verbosity",
|
||||
"detailed",
|
||||
"--severity",
|
||||
"warn"
|
||||
],
|
||||
"problemMatcher": "$msCompile"
|
||||
},
|
||||
{
|
||||
"label": "MesaFabApproval.API-Format-Whitespaces",
|
||||
"command": "dotnet",
|
||||
"type": "process",
|
||||
"args": [
|
||||
"format",
|
||||
"whitespace"
|
||||
],
|
||||
"problemMatcher": "$msCompile"
|
||||
},
|
||||
{
|
||||
"label": "MesaFabApproval.API-build",
|
||||
"command": "dotnet",
|
||||
"type": "process",
|
||||
"args": [
|
||||
"build",
|
||||
"${workspaceFolder}/MesaFabApproval.API/MesaFabApproval.API.csproj",
|
||||
"/property:GenerateFullPaths=true",
|
||||
"/consoleloggerparameters:NoSummary"
|
||||
],
|
||||
"problemMatcher": "$msCompile"
|
||||
},
|
||||
{
|
||||
"label": "MesaFabApproval.API-testDebug",
|
||||
"command": "dotnet",
|
||||
"type": "process",
|
||||
"args": [
|
||||
"test",
|
||||
"${workspaceFolder}/MesaFabApproval.API/MesaFabApproval.API.csproj",
|
||||
"/property:GenerateFullPaths=true",
|
||||
"/consoleloggerparameters:NoSummary"
|
||||
],
|
||||
"problemMatcher": "$msCompile"
|
||||
},
|
||||
{
|
||||
"label": "MesaFabApproval.API-testRelease",
|
||||
"command": "dotnet",
|
||||
"type": "process",
|
||||
"args": [
|
||||
"test",
|
||||
"${workspaceFolder}/MesaFabApproval.API/MesaFabApproval.API.csproj",
|
||||
"/property:GenerateFullPaths=true",
|
||||
"/consoleloggerparameters:NoSummary",
|
||||
"-c",
|
||||
"Release"
|
||||
],
|
||||
"problemMatcher": "$msCompile"
|
||||
},
|
||||
{
|
||||
"label": "MesaFabApproval.API-publish",
|
||||
"command": "dotnet",
|
||||
"type": "process",
|
||||
"args": [
|
||||
"publish",
|
||||
"${workspaceFolder}/MesaFabApproval.API/MesaFabApproval.API.csproj",
|
||||
"/property:GenerateFullPaths=true",
|
||||
"/consoleloggerparameters:NoSummary"
|
||||
],
|
||||
"problemMatcher": "$msCompile"
|
||||
},
|
||||
{
|
||||
"label": "MesaFabApproval.API-watch",
|
||||
"command": "dotnet",
|
||||
"type": "process",
|
||||
"args": [
|
||||
"watch",
|
||||
"run",
|
||||
"--project",
|
||||
"${workspaceFolder}/MesaFabApproval.API/MesaFabApproval.API.csproj"
|
||||
],
|
||||
"problemMatcher": "$msCompile"
|
||||
},
|
||||
{
|
||||
"label": "MesaFabApproval.API-Publish AOT",
|
||||
"command": "dotnet",
|
||||
"type": "process",
|
||||
"args": [
|
||||
"publish",
|
||||
"-r",
|
||||
"win-x64",
|
||||
"-c",
|
||||
"Release",
|
||||
"-p:PublishAot=true",
|
||||
"${workspaceFolder}/MesaFabApproval.API/MesaFabApproval.API.csproj",
|
||||
"/property:GenerateFullPaths=true",
|
||||
"/consoleloggerparameters:NoSummary"
|
||||
],
|
||||
"problemMatcher": "$msCompile"
|
||||
},
|
||||
{
|
||||
"label": "MesaFabApproval.Client-User Secrets Init",
|
||||
"command": "dotnet",
|
||||
"type": "process",
|
||||
"args": [
|
||||
"user-secrets",
|
||||
"-p",
|
||||
"${workspaceFolder}/MesaFabApproval.Client/MesaFabApproval.Client.csproj",
|
||||
"init"
|
||||
],
|
||||
"problemMatcher": "$msCompile"
|
||||
},
|
||||
{
|
||||
"label": "MesaFabApproval.Client-Format",
|
||||
"command": "dotnet",
|
||||
"type": "process",
|
||||
"args": [
|
||||
"format",
|
||||
"--report",
|
||||
".vscode",
|
||||
"--verbosity",
|
||||
"detailed",
|
||||
"--severity",
|
||||
"warn"
|
||||
],
|
||||
"problemMatcher": "$msCompile"
|
||||
},
|
||||
{
|
||||
"label": "MesaFabApproval.Client-Format-Whitespaces",
|
||||
"command": "dotnet",
|
||||
"type": "process",
|
||||
"args": [
|
||||
"format",
|
||||
"whitespace"
|
||||
],
|
||||
"problemMatcher": "$msCompile"
|
||||
},
|
||||
{
|
||||
"label": "MesaFabApproval.Client-build",
|
||||
"command": "dotnet",
|
||||
"type": "process",
|
||||
"args": [
|
||||
"build",
|
||||
"${workspaceFolder}/MesaFabApproval.Client/MesaFabApproval.Client.csproj",
|
||||
"/property:GenerateFullPaths=true",
|
||||
"/consoleloggerparameters:NoSummary"
|
||||
],
|
||||
"problemMatcher": "$msCompile"
|
||||
},
|
||||
{
|
||||
"label": "MesaFabApproval.Client-testDebug",
|
||||
"command": "dotnet",
|
||||
"type": "process",
|
||||
"args": [
|
||||
"test",
|
||||
"${workspaceFolder}/MesaFabApproval.Client/MesaFabApproval.Client.csproj",
|
||||
"/property:GenerateFullPaths=true",
|
||||
"/consoleloggerparameters:NoSummary"
|
||||
],
|
||||
"problemMatcher": "$msCompile"
|
||||
},
|
||||
{
|
||||
"label": "MesaFabApproval.Client-testRelease",
|
||||
"command": "dotnet",
|
||||
"type": "process",
|
||||
"args": [
|
||||
"test",
|
||||
"${workspaceFolder}/MesaFabApproval.Client/MesaFabApproval.Client.csproj",
|
||||
"/property:GenerateFullPaths=true",
|
||||
"/consoleloggerparameters:NoSummary",
|
||||
"-c",
|
||||
"Release"
|
||||
],
|
||||
"problemMatcher": "$msCompile"
|
||||
},
|
||||
{
|
||||
"label": "MesaFabApproval.Client-publish",
|
||||
"command": "dotnet",
|
||||
"type": "process",
|
||||
"args": [
|
||||
"publish",
|
||||
"${workspaceFolder}/MesaFabApproval.Client/MesaFabApproval.Client.csproj",
|
||||
"/property:GenerateFullPaths=true",
|
||||
"/consoleloggerparameters:NoSummary"
|
||||
],
|
||||
"problemMatcher": "$msCompile"
|
||||
},
|
||||
{
|
||||
"label": "MesaFabApproval.Client-watch",
|
||||
"command": "dotnet",
|
||||
"type": "process",
|
||||
"args": [
|
||||
"watch",
|
||||
"run",
|
||||
"--project",
|
||||
"${workspaceFolder}/MesaFabApproval.Client/MesaFabApproval.Client.csproj"
|
||||
],
|
||||
"problemMatcher": "$msCompile"
|
||||
},
|
||||
{
|
||||
"label": "MesaFabApproval.Client-Publish AOT",
|
||||
"command": "dotnet",
|
||||
"type": "process",
|
||||
"args": [
|
||||
"publish",
|
||||
"-r",
|
||||
"win-x64",
|
||||
"-c",
|
||||
"Release",
|
||||
"-p:PublishAot=true",
|
||||
"${workspaceFolder}/MesaFabApproval.Client/MesaFabApproval.Client.csproj",
|
||||
"/property:GenerateFullPaths=true",
|
||||
"/consoleloggerparameters:NoSummary"
|
||||
],
|
||||
"problemMatcher": "$msCompile"
|
||||
}
|
||||
]
|
||||
}
|
381
Fab2ApprovalMKLink/.editorconfig
Normal file
381
Fab2ApprovalMKLink/.editorconfig
Normal file
@ -0,0 +1,381 @@
|
||||
[*.md]
|
||||
end_of_line = crlf
|
||||
file_header_template = unset
|
||||
indent_size = 2
|
||||
indent_style = space
|
||||
insert_final_newline = false
|
||||
root = true
|
||||
tab_width = 2
|
||||
[*.csproj]
|
||||
end_of_line = crlf
|
||||
file_header_template = unset
|
||||
indent_size = 2
|
||||
indent_style = space
|
||||
insert_final_newline = false
|
||||
root = true
|
||||
tab_width = 2
|
||||
[*.cs]
|
||||
csharp_indent_block_contents = true
|
||||
csharp_indent_braces = false
|
||||
csharp_indent_case_contents = true
|
||||
csharp_indent_case_contents_when_block = true
|
||||
csharp_indent_labels = one_less_than_current
|
||||
csharp_indent_switch_labels = true
|
||||
csharp_new_line_before_catch = false
|
||||
csharp_new_line_before_else = false
|
||||
csharp_new_line_before_finally = false
|
||||
csharp_new_line_before_members_in_anonymous_types = true
|
||||
csharp_new_line_before_members_in_object_initializers = true
|
||||
csharp_new_line_before_open_brace = none
|
||||
csharp_new_line_between_query_expression_clauses = true
|
||||
csharp_prefer_braces = false
|
||||
csharp_prefer_qualified_reference = true:error
|
||||
csharp_prefer_simple_default_expression = true:warning
|
||||
csharp_prefer_simple_using_statement = true:warning
|
||||
csharp_prefer_static_local_function = true:warning
|
||||
csharp_preferred_modifier_order = public,private,protected,internal,static,extern,new,virtual,abstract,sealed,override,readonly,unsafe,volatile,async
|
||||
csharp_preserve_single_line_blocks = true
|
||||
csharp_preserve_single_line_statements = false
|
||||
csharp_space_after_cast = false
|
||||
csharp_space_after_colon_in_inheritance_clause = true
|
||||
csharp_space_after_comma = true
|
||||
csharp_space_after_dot = false
|
||||
csharp_space_after_keywords_in_control_flow_statements = true
|
||||
csharp_space_after_semicolon_in_for_statement = true
|
||||
csharp_space_around_binary_operators = before_and_after
|
||||
csharp_space_around_declaration_statements = false
|
||||
csharp_space_before_colon_in_inheritance_clause = true
|
||||
csharp_space_before_comma = false
|
||||
csharp_space_before_dot = false
|
||||
csharp_space_before_open_square_brackets = false
|
||||
csharp_space_before_semicolon_in_for_statement = false
|
||||
csharp_space_between_empty_square_brackets = false
|
||||
csharp_space_between_method_call_empty_parameter_list_parentheses = false
|
||||
csharp_space_between_method_call_name_and_opening_parenthesis = false
|
||||
csharp_space_between_method_call_parameter_list_parentheses = false
|
||||
csharp_space_between_method_declaration_empty_parameter_list_parentheses = false
|
||||
csharp_space_between_method_declaration_name_and_open_parenthesis = false
|
||||
csharp_space_between_method_declaration_parameter_list_parentheses = false
|
||||
csharp_space_between_parentheses = false
|
||||
csharp_space_between_square_brackets = false
|
||||
csharp_style_allow_blank_line_after_colon_in_constructor_initializer_experimental = true
|
||||
csharp_style_allow_blank_line_after_token_in_arrow_expression_clause_experimental = true
|
||||
csharp_style_allow_blank_line_after_token_in_conditional_expression_experimental = true
|
||||
csharp_style_allow_blank_lines_between_consecutive_braces_experimental = false
|
||||
csharp_style_allow_blank_lines_between_consecutive_braces_experimental = true
|
||||
csharp_style_allow_embedded_statements_on_same_line_experimental = true
|
||||
csharp_style_conditional_delegate_call = true
|
||||
csharp_style_deconstructed_variable_declaration = false
|
||||
csharp_style_expression_bodied_accessors = when_on_single_line:warning
|
||||
csharp_style_expression_bodied_constructors = when_on_single_line:warning
|
||||
csharp_style_expression_bodied_indexers = when_on_single_line:warning
|
||||
csharp_style_expression_bodied_lambdas = when_on_single_line:warning
|
||||
csharp_style_expression_bodied_local_functions = when_on_single_line:warning
|
||||
csharp_style_expression_bodied_methods = when_on_single_line:warning
|
||||
csharp_style_expression_bodied_operators = when_on_single_line:warning
|
||||
csharp_style_expression_bodied_properties = when_on_single_line:warning
|
||||
csharp_style_implicit_object_creation_when_type_is_apparent = true:warning
|
||||
csharp_style_inlined_variable_declaration = false
|
||||
csharp_style_namespace_declarations = file_scoped:warning
|
||||
csharp_style_pattern_local_over_anonymous_function = true:warning
|
||||
csharp_style_pattern_matching_over_as_with_null_check = true:warning
|
||||
csharp_style_pattern_matching_over_is_with_cast_check = true:warning
|
||||
csharp_style_prefer_index_operator = true:warning
|
||||
csharp_style_prefer_not_pattern = true:warning
|
||||
csharp_style_prefer_null_check_over_type_check = true
|
||||
csharp_style_prefer_pattern_matching = true:warning
|
||||
csharp_style_prefer_range_operator = true:warning
|
||||
csharp_style_prefer_switch_expression = true:warning
|
||||
csharp_style_throw_expression = true
|
||||
csharp_style_unused_value_assignment_preference = discard_variable:warning
|
||||
csharp_style_unused_value_expression_statement_preference = discard_variable:warning
|
||||
csharp_style_var_elsewhere = false:warning
|
||||
csharp_style_var_for_built_in_types = false:warning
|
||||
csharp_style_var_when_type_is_apparent = false:warning
|
||||
csharp_using_directive_placement = outside_namespace
|
||||
dotnet_analyzer_diagnostic.category-Design.severity = error
|
||||
dotnet_analyzer_diagnostic.category-Documentation.severity = error
|
||||
dotnet_analyzer_diagnostic.category-Globalization.severity = none
|
||||
dotnet_analyzer_diagnostic.category-Interoperability.severity = error
|
||||
dotnet_analyzer_diagnostic.category-Maintainability.severity = error
|
||||
dotnet_analyzer_diagnostic.category-Naming.severity = none
|
||||
dotnet_analyzer_diagnostic.category-Performance.severity = none
|
||||
dotnet_analyzer_diagnostic.category-Reliability.severity = error
|
||||
dotnet_analyzer_diagnostic.category-Security.severity = error
|
||||
dotnet_analyzer_diagnostic.category-SingleFile.severity = error
|
||||
dotnet_analyzer_diagnostic.category-Style.severity = error
|
||||
dotnet_analyzer_diagnostic.category-Usage.severity = error
|
||||
dotnet_code_quality_unused_parameters = all
|
||||
dotnet_code_quality_unused_parameters = non_public
|
||||
dotnet_code_quality.CAXXXX.api_surface = private, internal
|
||||
dotnet_diagnostic.CA1001.severity = error # CA1001: Types that own disposable fields should be disposable
|
||||
dotnet_diagnostic.CA1051.severity = error # CA1051: Do not declare visible instance fields
|
||||
dotnet_diagnostic.CA1511.severity = warning # CA1511: Use 'ArgumentException.ThrowIfNullOrEmpty' instead of explicitly throwing a new exception instance
|
||||
dotnet_diagnostic.CA1513.severity = warning # Use 'ObjectDisposedException.ThrowIf' instead of explicitly throwing a new exception instance
|
||||
dotnet_diagnostic.CA1825.severity = warning # CA1825: Avoid zero-length array allocations
|
||||
dotnet_diagnostic.CA1829.severity = error # CA1829: Use Length/Count property instead of Count() when available
|
||||
dotnet_diagnostic.CA1834.severity = warning # CA1834: Consider using 'StringBuilder.Append(char)' when applicable
|
||||
dotnet_diagnostic.CA1860.severity = error # CA1860: Prefer comparing 'Count' to 0 rather than using 'Any()', both for clarity and for performance
|
||||
dotnet_diagnostic.CA1862.severity = warning # CA1862: Prefer using 'string.Equals(string, StringComparison)' to perform a case-insensitive comparison, but keep in mind that this might cause subtle changes in behavior, so make sure to conduct thorough testing after applying the suggestion, or if culturally sensitive comparison is not required, consider using 'StringComparison.OrdinalIgnoreCase'
|
||||
dotnet_diagnostic.CA1869.severity = none # CA1869: Avoid creating a new 'JsonSerializerOptions' instance for every serialization operation. Cache and reuse instances instead.
|
||||
dotnet_diagnostic.CA2201.severity = none # CA2201: Exception type System.NullReferenceException is reserved by the runtime
|
||||
dotnet_diagnostic.CA2254.severity = none # CA2254: The logging message template should not vary between calls to 'LoggerExtensions.LogInformation(ILogger, string?, params object?[])'
|
||||
dotnet_diagnostic.IDE0001.severity = warning # IDE0001: Simplify name
|
||||
dotnet_diagnostic.IDE0002.severity = warning # Simplify (member access) - System.Version.Equals("1", "2"); Version.Equals("1", "2");
|
||||
dotnet_diagnostic.IDE0004.severity = warning # IDE0004: Cast is redundant.
|
||||
dotnet_diagnostic.IDE0005.severity = error # Using directive is unnecessary
|
||||
dotnet_diagnostic.IDE0010.severity = none # Add missing cases to switch statement (IDE0010)
|
||||
dotnet_diagnostic.IDE0028.severity = error # IDE0028: Collection initialization can be simplified
|
||||
dotnet_diagnostic.IDE0031.severity = warning # Use null propagation (IDE0031)
|
||||
dotnet_diagnostic.IDE0047.severity = warning # IDE0047: Parentheses can be removed
|
||||
dotnet_diagnostic.IDE0048.severity = none # Parentheses preferences (IDE0047 and IDE0048)
|
||||
dotnet_diagnostic.IDE0049.severity = warning # Use language keywords instead of framework type names for type references (IDE0049)
|
||||
dotnet_diagnostic.IDE0051.severity = error # Private member '' is unused [, ]
|
||||
dotnet_diagnostic.IDE0058.severity = error # IDE0058: Expression value is never used
|
||||
dotnet_diagnostic.IDE0060.severity = error # IDE0060: Remove unused parameter
|
||||
dotnet_diagnostic.IDE0074.severity = warning # IDE0074: Use compound assignment
|
||||
dotnet_diagnostic.IDE0130.severity = none # Namespace does not match folder structure (IDE0130)
|
||||
dotnet_diagnostic.IDE0270.severity = warning # IDE0270: Null check can be simplified
|
||||
dotnet_diagnostic.IDE0290.severity = none # Use primary constructor [Distance]csharp(IDE0290)
|
||||
dotnet_diagnostic.IDE0300.severity = error # IDE0300: Collection initialization can be simplified
|
||||
dotnet_diagnostic.IDE0301.severity = error #IDE0301: Collection initialization can be simplified
|
||||
dotnet_diagnostic.IDE0305.severity = none # IDE0305: Collection initialization can be simplified
|
||||
dotnet_diagnostic.IDE2000.severity = error # IDE2000: Allow multiple blank lines
|
||||
dotnet_naming_rule.abstract_method_should_be_pascal_case.severity = warning
|
||||
dotnet_naming_rule.abstract_method_should_be_pascal_case.style = pascal_case
|
||||
dotnet_naming_rule.abstract_method_should_be_pascal_case.symbols = abstract_method
|
||||
dotnet_naming_rule.class_should_be_pascal_case.severity = warning
|
||||
dotnet_naming_rule.class_should_be_pascal_case.style = pascal_case
|
||||
dotnet_naming_rule.class_should_be_pascal_case.symbols = class
|
||||
dotnet_naming_rule.delegate_should_be_pascal_case.severity = warning
|
||||
dotnet_naming_rule.delegate_should_be_pascal_case.style = pascal_case
|
||||
dotnet_naming_rule.delegate_should_be_pascal_case.symbols = delegate
|
||||
dotnet_naming_rule.enum_should_be_pascal_case.severity = warning
|
||||
dotnet_naming_rule.enum_should_be_pascal_case.style = pascal_case
|
||||
dotnet_naming_rule.enum_should_be_pascal_case.symbols = enum
|
||||
dotnet_naming_rule.event_should_be_pascal_case.severity = warning
|
||||
dotnet_naming_rule.event_should_be_pascal_case.style = pascal_case
|
||||
dotnet_naming_rule.event_should_be_pascal_case.symbols = event
|
||||
dotnet_naming_rule.interface_should_be_begins_with_i.severity = warning
|
||||
dotnet_naming_rule.interface_should_be_begins_with_i.style = begins_with_i
|
||||
dotnet_naming_rule.interface_should_be_begins_with_i.symbols = interface
|
||||
dotnet_naming_rule.method_should_be_pascal_case.severity = warning
|
||||
dotnet_naming_rule.method_should_be_pascal_case.style = pascal_case
|
||||
dotnet_naming_rule.method_should_be_pascal_case.symbols = method
|
||||
dotnet_naming_rule.non_field_members_should_be_pascal_case.severity = warning
|
||||
dotnet_naming_rule.non_field_members_should_be_pascal_case.style = pascal_case
|
||||
dotnet_naming_rule.non_field_members_should_be_pascal_case.symbols = non_field_members
|
||||
dotnet_naming_rule.private_method_should_be_pascal_case.severity = warning
|
||||
dotnet_naming_rule.private_method_should_be_pascal_case.style = pascal_case
|
||||
dotnet_naming_rule.private_method_should_be_pascal_case.symbols = private_method
|
||||
dotnet_naming_rule.private_or_internal_field_should_be_private_of_internal_field.severity = warning
|
||||
dotnet_naming_rule.private_or_internal_field_should_be_private_of_internal_field.style = private_of_internal_field
|
||||
dotnet_naming_rule.private_or_internal_field_should_be_private_of_internal_field.symbols = private_or_internal_field
|
||||
dotnet_naming_rule.private_or_internal_static_field_should_be_private_of_internal_field.severity = warning
|
||||
dotnet_naming_rule.private_or_internal_static_field_should_be_private_of_internal_field.style = private_of_internal_field
|
||||
dotnet_naming_rule.private_or_internal_static_field_should_be_private_of_internal_field.symbols = private_or_internal_static_field
|
||||
dotnet_naming_rule.property_should_be_pascal_case.severity = warning
|
||||
dotnet_naming_rule.property_should_be_pascal_case.style = pascal_case
|
||||
dotnet_naming_rule.property_should_be_pascal_case.symbols = property
|
||||
dotnet_naming_rule.public_or_protected_field_should_be_private_of_internal_field.severity = warning
|
||||
dotnet_naming_rule.public_or_protected_field_should_be_private_of_internal_field.style = private_of_internal_field
|
||||
dotnet_naming_rule.public_or_protected_field_should_be_private_of_internal_field.symbols = public_or_protected_field
|
||||
dotnet_naming_rule.static_field_should_be_pascal_case.severity = warning
|
||||
dotnet_naming_rule.static_field_should_be_pascal_case.style = pascal_case
|
||||
dotnet_naming_rule.static_field_should_be_pascal_case.symbols = static_field
|
||||
dotnet_naming_rule.static_method_should_be_pascal_case.severity = warning
|
||||
dotnet_naming_rule.static_method_should_be_pascal_case.style = pascal_case
|
||||
dotnet_naming_rule.static_method_should_be_pascal_case.symbols = static_method
|
||||
dotnet_naming_rule.struct_should_be_pascal_case.severity = warning
|
||||
dotnet_naming_rule.struct_should_be_pascal_case.style = pascal_case
|
||||
dotnet_naming_rule.struct_should_be_pascal_case.symbols = struct
|
||||
dotnet_naming_rule.types_should_be_pascal_case.severity = warning
|
||||
dotnet_naming_rule.types_should_be_pascal_case.style = pascal_case
|
||||
dotnet_naming_rule.types_should_be_pascal_case.symbols = types
|
||||
dotnet_naming_style.begins_with_i.capitalization = pascal_case
|
||||
dotnet_naming_style.begins_with_i.required_prefix = I
|
||||
dotnet_naming_style.begins_with_i.required_suffix =
|
||||
dotnet_naming_style.begins_with_i.word_separator =
|
||||
dotnet_naming_style.pascal_case.capitalization = pascal_case
|
||||
dotnet_naming_style.pascal_case.required_prefix =
|
||||
dotnet_naming_style.pascal_case.required_suffix =
|
||||
dotnet_naming_style.pascal_case.word_separator =
|
||||
dotnet_naming_style.private_of_internal_field.capitalization = pascal_case
|
||||
dotnet_naming_style.private_of_internal_field.required_prefix = _
|
||||
dotnet_naming_style.private_of_internal_field.required_suffix =
|
||||
dotnet_naming_style.private_of_internal_field.word_separator =
|
||||
dotnet_naming_symbols.abstract_method.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected
|
||||
dotnet_naming_symbols.abstract_method.applicable_kinds = method
|
||||
dotnet_naming_symbols.abstract_method.required_modifiers = abstract
|
||||
dotnet_naming_symbols.class.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected
|
||||
dotnet_naming_symbols.class.applicable_kinds = class
|
||||
dotnet_naming_symbols.class.required_modifiers =
|
||||
dotnet_naming_symbols.delegate.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected
|
||||
dotnet_naming_symbols.delegate.applicable_kinds = delegate
|
||||
dotnet_naming_symbols.delegate.required_modifiers =
|
||||
dotnet_naming_symbols.enum.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected
|
||||
dotnet_naming_symbols.enum.applicable_kinds = enum
|
||||
dotnet_naming_symbols.enum.required_modifiers =
|
||||
dotnet_naming_symbols.event.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected
|
||||
dotnet_naming_symbols.event.applicable_kinds = event
|
||||
dotnet_naming_symbols.event.required_modifiers =
|
||||
dotnet_naming_symbols.interface.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected
|
||||
dotnet_naming_symbols.interface.applicable_kinds = interface
|
||||
dotnet_naming_symbols.interface.required_modifiers =
|
||||
dotnet_naming_symbols.method.applicable_accessibilities = public
|
||||
dotnet_naming_symbols.method.applicable_kinds = method
|
||||
dotnet_naming_symbols.method.required_modifiers =
|
||||
dotnet_naming_symbols.non_field_members.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected
|
||||
dotnet_naming_symbols.non_field_members.applicable_kinds = property, event, method
|
||||
dotnet_naming_symbols.non_field_members.required_modifiers =
|
||||
dotnet_naming_symbols.private_method.applicable_accessibilities = private
|
||||
dotnet_naming_symbols.private_method.applicable_kinds = method
|
||||
dotnet_naming_symbols.private_method.required_modifiers =
|
||||
dotnet_naming_symbols.private_or_internal_field.applicable_accessibilities = internal, private, private_protected
|
||||
dotnet_naming_symbols.private_or_internal_field.applicable_kinds = field
|
||||
dotnet_naming_symbols.private_or_internal_field.required_modifiers =
|
||||
dotnet_naming_symbols.private_or_internal_static_field.applicable_accessibilities = internal, private, private_protected
|
||||
dotnet_naming_symbols.private_or_internal_static_field.applicable_kinds = field
|
||||
dotnet_naming_symbols.private_or_internal_static_field.required_modifiers = static
|
||||
dotnet_naming_symbols.property.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected
|
||||
dotnet_naming_symbols.property.applicable_kinds = property
|
||||
dotnet_naming_symbols.property.required_modifiers =
|
||||
dotnet_naming_symbols.public_or_protected_field.applicable_accessibilities = public, protected
|
||||
dotnet_naming_symbols.public_or_protected_field.applicable_kinds = field
|
||||
dotnet_naming_symbols.public_or_protected_field.required_modifiers =
|
||||
dotnet_naming_symbols.static_field.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected
|
||||
dotnet_naming_symbols.static_field.applicable_kinds = field
|
||||
dotnet_naming_symbols.static_field.required_modifiers = static
|
||||
dotnet_naming_symbols.static_method.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected
|
||||
dotnet_naming_symbols.static_method.applicable_kinds = method
|
||||
dotnet_naming_symbols.static_method.required_modifiers = static
|
||||
dotnet_naming_symbols.struct.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected
|
||||
dotnet_naming_symbols.struct.applicable_kinds = struct
|
||||
dotnet_naming_symbols.struct.required_modifiers =
|
||||
dotnet_naming_symbols.types.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected
|
||||
dotnet_naming_symbols.types.applicable_kinds = class, struct, interface, enum
|
||||
dotnet_naming_symbols.types.required_modifiers =
|
||||
dotnet_remove_unnecessary_suppression_exclusions = 0
|
||||
dotnet_separate_import_directive_groups = true
|
||||
dotnet_sort_system_directives_first = true
|
||||
dotnet_style_allow_multiple_blank_lines_experimental = false:warning
|
||||
dotnet_style_allow_statement_immediately_after_block_experimental = true
|
||||
dotnet_style_coalesce_expression = true
|
||||
dotnet_style_collection_initializer = true:warning
|
||||
dotnet_style_explicit_tuple_names = true:warning
|
||||
dotnet_style_namespace_match_folder = true
|
||||
dotnet_style_null_propagation = true:warning
|
||||
dotnet_style_object_initializer = true:warning
|
||||
dotnet_style_operator_placement_when_wrapping = beginning_of_line
|
||||
dotnet_style_parentheses_in_arithmetic_binary_operators = always_for_clarity
|
||||
dotnet_style_parentheses_in_other_binary_operators = always_for_clarity
|
||||
dotnet_style_parentheses_in_other_operators = never_if_unnecessary
|
||||
dotnet_style_parentheses_in_relational_binary_operators = always_for_clarity
|
||||
dotnet_style_predefined_type_for_locals_parameters_members = true
|
||||
dotnet_style_predefined_type_for_member_access = true:warning
|
||||
dotnet_style_prefer_auto_properties = true:warning
|
||||
dotnet_style_prefer_compound_assignment = true:warning
|
||||
dotnet_style_prefer_conditional_expression_over_assignment = false
|
||||
dotnet_style_prefer_conditional_expression_over_return = false
|
||||
dotnet_style_prefer_inferred_anonymous_type_member_names = true:warning
|
||||
dotnet_style_prefer_inferred_tuple_names = true:warning
|
||||
dotnet_style_prefer_is_null_check_over_reference_equality_method = true:warning
|
||||
dotnet_style_prefer_simplified_boolean_expressions = true:warning
|
||||
dotnet_style_prefer_simplified_interpolation = true
|
||||
dotnet_style_qualification_for_event = false:error
|
||||
dotnet_style_qualification_for_field = false
|
||||
dotnet_style_qualification_for_method = false:error
|
||||
dotnet_style_qualification_for_property = false:error
|
||||
dotnet_style_readonly_field = true:warning
|
||||
dotnet_style_require_accessibility_modifiers = for_non_interface_members
|
||||
end_of_line = crlf
|
||||
file_header_template = unset
|
||||
indent_size = 4
|
||||
indent_style = space
|
||||
insert_final_newline = false
|
||||
root = true
|
||||
tab_width = 4
|
||||
# https://docs.microsoft.com/en-us/dotnet/fundamentals/code-analysis/quality-rules/ca1822
|
||||
# https://github.com/dotnet/aspnetcore/blob/main/.editorconfig
|
||||
# https://github.com/dotnet/project-system/blob/main/.editorconfig
|
||||
|
||||
# Question
|
||||
csharp_prefer_simple_using_statement = false # Question
|
||||
csharp_style_expression_bodied_constructors = when_on_single_line:none # Question
|
||||
csharp_style_expression_bodied_properties = true # Question
|
||||
csharp_style_implicit_object_creation_when_type_is_apparent = true:warning # Question
|
||||
csharp_style_pattern_matching_over_as_with_null_check = false # Question
|
||||
csharp_style_prefer_pattern_matching = false # Question
|
||||
csharp_style_prefer_range_operator = false # Question
|
||||
csharp_style_prefer_switch_expression = false # Question
|
||||
csharp_style_unused_value_assignment_preference = unused_local_variable # Question
|
||||
csharp_style_unused_value_expression_statement_preference = false # Question
|
||||
csharp_style_var_elsewhere = false:none # Question
|
||||
csharp_style_var_for_built_in_types = false:none # Question
|
||||
csharp_style_var_when_type_is_apparent = false:warning # Question
|
||||
dotnet_diagnostic.CA1001.severity = none # Question - Types that own disposable fields should be disposable
|
||||
dotnet_diagnostic.CA1051.severity = none # Question - Do not declare visible instance fields
|
||||
dotnet_diagnostic.CA1416.severity = none # Question - This call site is reachable on all platforms.
|
||||
dotnet_diagnostic.CA1510.severity = none # Question - Use
|
||||
dotnet_diagnostic.CA1834.severity = none # CA1834: Consider using 'StringBuilder.Append(char)' when applicable
|
||||
dotnet_diagnostic.CA1860.severity = none # Question - Avoid using
|
||||
dotnet_diagnostic.CA1862.severity = none # Question - Prefer using
|
||||
dotnet_diagnostic.CA2208.severity = none # Question - Instantiate argument exceptions correctly
|
||||
dotnet_diagnostic.CA2211.severity = none # Question - Non-constant fields should not be visible
|
||||
dotnet_diagnostic.CA2249.severity = none # Question - Use
|
||||
dotnet_diagnostic.CA2253.severity = none # Question - Named placeholders should not be numeric values
|
||||
dotnet_diagnostic.CS0103.severity = none # Question - The name
|
||||
dotnet_diagnostic.CS0168.severity = none # Question - The variable
|
||||
dotnet_diagnostic.CS0219.severity = none # Question - The variable
|
||||
dotnet_diagnostic.CS0612.severity = none # Question - is obsolete
|
||||
dotnet_diagnostic.CS0618.severity = none # Question - Compiler Warning (level 2)
|
||||
dotnet_diagnostic.CS0659.severity = none # Question - Compiler Warning (level 3)
|
||||
dotnet_diagnostic.CS8019.severity = warning # Question - Unnecessary using directive.
|
||||
dotnet_diagnostic.CS8600.severity = none # Question - Converting null literal or possible null value to non-nullable type
|
||||
dotnet_diagnostic.CS8602.severity = none # Question - Dereference of a possibly null reference.
|
||||
dotnet_diagnostic.CS8603.severity = none # Question - Possible null reference return
|
||||
dotnet_diagnostic.CS8604.severity = none # Question - Possible null reference argument for parameter.
|
||||
dotnet_diagnostic.CS8618.severity = none # Question - Non-nullable variable must contain a non-null value when exiting constructor
|
||||
dotnet_diagnostic.CS8625.severity = none # Question - Cannot convert null literal to non-nullable reference type.
|
||||
dotnet_diagnostic.CS8629.severity = none # Question - Nullable value type may be null
|
||||
dotnet_diagnostic.CS8765.severity = none # Question - Nullability of type of parameter
|
||||
dotnet_diagnostic.IDE0005.severity = none # Question - Remove unnecessary using directives
|
||||
dotnet_diagnostic.IDE0008.severity = warning # Question - Use explicit type instead of
|
||||
dotnet_diagnostic.IDE0017.severity = none # Question - Object initialization can be simplified
|
||||
dotnet_diagnostic.IDE0019.severity = none # Question - Use pattern matching
|
||||
dotnet_diagnostic.IDE0021.severity = none # Question - Use expression body for constructor
|
||||
dotnet_diagnostic.IDE0022.severity = none # Question - Use expression body for method
|
||||
dotnet_diagnostic.IDE0025.severity = none # Question - Use expression body for property
|
||||
dotnet_diagnostic.IDE0027.severity = none # Question - Use expression body for accessor
|
||||
dotnet_diagnostic.IDE0028.severity = none # Question - Use collection initializers or expressions
|
||||
dotnet_diagnostic.IDE0031.severity = none # Question - Null check can be simplified
|
||||
dotnet_diagnostic.IDE0032.severity = none # Question - Use auto property
|
||||
dotnet_diagnostic.IDE0037.severity = none # Question - Member name can be simplified
|
||||
dotnet_diagnostic.IDE0041.severity = none # Question - Null check can be simplified
|
||||
dotnet_diagnostic.IDE0047.severity = none # Question - Parentheses preferences
|
||||
dotnet_diagnostic.IDE0049.severity = warning # Question - Name can be simplified
|
||||
dotnet_diagnostic.IDE0051.severity = none # Question - Remove unused private member
|
||||
dotnet_diagnostic.IDE0053.severity = none # Question - Use expression body for lambdas
|
||||
dotnet_diagnostic.IDE0054.severity = none # Question - Use compound assignment
|
||||
dotnet_diagnostic.IDE0055.severity = none # Question - Formatting rule
|
||||
dotnet_diagnostic.IDE0057.severity = none # Question - Substring can be simplified
|
||||
dotnet_diagnostic.IDE0058.severity = none # Question - Remove unnecessary expression value
|
||||
dotnet_diagnostic.IDE0059.severity = none # Question - Unnecessary assignment of a value to
|
||||
dotnet_diagnostic.IDE0060.severity = none # Question - Remove unused parameter
|
||||
dotnet_diagnostic.IDE0063.severity = none # Question - Use simple
|
||||
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
|
||||
dotnet_diagnostic.IDE0300.severity = none # Question - Collection initialization can be simplified
|
||||
dotnet_diagnostic.IDE1006.severity = none # Question - Use collection expression for builder dotnet_style_prefer_collection_expression
|
||||
dotnet_style_null_propagation = false # Question
|
||||
dotnet_style_object_initializer = false # Question
|
||||
dotnet_style_prefer_auto_properties = false # Question
|
||||
dotnet_style_allow_statement_immediately_after_block_experimental = true # Question
|
||||
dotnet_style_prefer_inferred_anonymous_type_member_names = false:warning # Question
|
||||
dotnet_style_prefer_is_null_check_over_reference_equality_method = false # Question
|
1
Fab2ApprovalMKLink/.vscode/format-report.json
vendored
Normal file
1
Fab2ApprovalMKLink/.vscode/format-report.json
vendored
Normal file
@ -0,0 +1 @@
|
||||
[]
|
33
Fab2ApprovalMKLink/.vscode/launch.json
vendored
Normal file
33
Fab2ApprovalMKLink/.vscode/launch.json
vendored
Normal file
@ -0,0 +1,33 @@
|
||||
{
|
||||
// Use IntelliSense to learn about possible attributes.
|
||||
// Hover to view descriptions of existing attributes.
|
||||
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
|
||||
"version": "0.2.0",
|
||||
"configurations": [
|
||||
{
|
||||
"name": ".NET Core Launch (console)",
|
||||
"type": "coreclr",
|
||||
"request": "launch",
|
||||
"preLaunchTask": "build",
|
||||
"program": "${workspaceFolder}/bin/Debug/net8.0/Fab2ApprovalMKLink.dll",
|
||||
"args": [
|
||||
"s",
|
||||
"test"
|
||||
],
|
||||
"cwd": "${workspaceFolder}",
|
||||
"console": "integratedTerminal",
|
||||
"stopAtEntry": false
|
||||
},
|
||||
{
|
||||
"name": ".NET Core Attach",
|
||||
"type": "coreclr",
|
||||
"request": "attach"
|
||||
},
|
||||
{
|
||||
"type": "node",
|
||||
"request": "launch",
|
||||
"name": "node Launch Current Opened File",
|
||||
"program": "${file}"
|
||||
}
|
||||
]
|
||||
}
|
71
Fab2ApprovalMKLink/.vscode/mklink.md
vendored
Normal file
71
Fab2ApprovalMKLink/.vscode/mklink.md
vendored
Normal file
@ -0,0 +1,71 @@
|
||||
# mklink
|
||||
|
||||
```bash 1731546128283 = 638671429282830000 = Wed Nov 13 2024 18:02:07 GMT-0700 (Mountain Standard Time)
|
||||
mklink /J "L:\DevOps\Mesa_FI\MesaFabApproval\Fab2ApprovalMKLink\App_Start" "L:\DevOps\Mesa_FI\MesaFabApproval\Fab2ApprovalSystem\App_Start"
|
||||
mklink /J "L:\DevOps\Mesa_FI\MesaFabApproval\Fab2ApprovalMKLink\bin" "L:\DevOps\Mesa_FI\MesaFabApproval\Fab2ApprovalSystem\bin"
|
||||
mklink /J "L:\DevOps\Mesa_FI\MesaFabApproval\Fab2ApprovalMKLink\Content" "L:\DevOps\Mesa_FI\MesaFabApproval\Fab2ApprovalSystem\Content"
|
||||
mklink /J "L:\DevOps\Mesa_FI\MesaFabApproval\Fab2ApprovalMKLink\Controllers" "L:\DevOps\Mesa_FI\MesaFabApproval\Fab2ApprovalSystem\Controllers"
|
||||
mklink /J "L:\DevOps\Mesa_FI\MesaFabApproval\Fab2ApprovalMKLink\DMO" "L:\DevOps\Mesa_FI\MesaFabApproval\Fab2ApprovalSystem\DMO"
|
||||
mklink /J "L:\DevOps\Mesa_FI\MesaFabApproval\Fab2ApprovalMKLink\EmailTemplates" "L:\DevOps\Mesa_FI\MesaFabApproval\Fab2ApprovalSystem\EmailTemplates"
|
||||
mklink /J "L:\DevOps\Mesa_FI\MesaFabApproval\Fab2ApprovalMKLink\fonts" "L:\DevOps\Mesa_FI\MesaFabApproval\Fab2ApprovalSystem\fonts"
|
||||
mklink /J "L:\DevOps\Mesa_FI\MesaFabApproval\Fab2ApprovalMKLink\FTPBatch" "L:\DevOps\Mesa_FI\MesaFabApproval\Fab2ApprovalSystem\FTPBatch"
|
||||
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"
|
||||
mklink /J "L:\DevOps\Mesa_FI\MesaFabApproval\Fab2ApprovalMKLink\Lib" "L:\DevOps\Mesa_FI\MesaFabApproval\Fab2ApprovalSystem\Lib"
|
||||
mklink /J "L:\DevOps\Mesa_FI\MesaFabApproval\Fab2ApprovalMKLink\Misc" "L:\DevOps\Mesa_FI\MesaFabApproval\Fab2ApprovalSystem\Misc"
|
||||
mklink /J "L:\DevOps\Mesa_FI\MesaFabApproval\Fab2ApprovalMKLink\Models" "L:\DevOps\Mesa_FI\MesaFabApproval\Fab2ApprovalSystem\Models"
|
||||
mklink /J "L:\DevOps\Mesa_FI\MesaFabApproval\Fab2ApprovalMKLink\obj" "L:\DevOps\Mesa_FI\MesaFabApproval\Fab2ApprovalSystem\obj"
|
||||
mklink /J "L:\DevOps\Mesa_FI\MesaFabApproval\Fab2ApprovalMKLink\PdfGenerator" "L:\DevOps\Mesa_FI\MesaFabApproval\Fab2ApprovalSystem\PdfGenerator"
|
||||
mklink /J "L:\DevOps\Mesa_FI\MesaFabApproval\Fab2ApprovalMKLink\Properties" "L:\DevOps\Mesa_FI\MesaFabApproval\Fab2ApprovalSystem\Properties"
|
||||
mklink /J "L:\DevOps\Mesa_FI\MesaFabApproval\Fab2ApprovalMKLink\SafeModels" "L:\DevOps\Mesa_FI\MesaFabApproval\Fab2ApprovalSystem\SafeModels"
|
||||
mklink /J "L:\DevOps\Mesa_FI\MesaFabApproval\Fab2ApprovalMKLink\Scripts" "L:\DevOps\Mesa_FI\MesaFabApproval\Fab2ApprovalSystem\Scripts"
|
||||
mklink /J "L:\DevOps\Mesa_FI\MesaFabApproval\Fab2ApprovalMKLink\Utilities" "L:\DevOps\Mesa_FI\MesaFabApproval\Fab2ApprovalSystem\Utilities"
|
||||
mklink /J "L:\DevOps\Mesa_FI\MesaFabApproval\Fab2ApprovalMKLink\View" "L:\DevOps\Mesa_FI\MesaFabApproval\Fab2ApprovalSystem\View"
|
||||
mklink /J "L:\DevOps\Mesa_FI\MesaFabApproval\Fab2ApprovalMKLink\ViewModels" "L:\DevOps\Mesa_FI\MesaFabApproval\Fab2ApprovalSystem\ViewModels"
|
||||
```
|
||||
|
||||
```bash 1731615429577 = 638672122295770000 = Thu Nov 14 2024 13:17:09 GMT-0700 (Mountain Standard Time)
|
||||
mklink /J "L:\DevOps\Mesa_FI\MesaFabApproval\Fab2ApprovalMKLink\.vscode\.UserSecrets" "C:\Users\phares\AppData\Roaming\Microsoft\UserSecrets\f2da5035-aba9-4676-9f8d-d6689f84663d"
|
||||
mklink /J "L:\DevOps\Mesa_FI\MesaFabApproval\Fab2ApprovalMKLink\ViewModels" "L:\DevOps\Mesa_FI\MesaFabApproval\Fab2ApprovalSystem\ViewModels"
|
||||
mklink /J "L:\DevOps\Mesa_FI\MesaFabApproval\Fab2ApprovalMKLink\Models" "L:\DevOps\Mesa_FI\MesaFabApproval\Fab2ApprovalSystem\Models"
|
||||
mklink /J "L:\DevOps\Mesa_FI\MesaFabApproval\Fab2ApprovalMKLink\Misc" "L:\DevOps\Mesa_FI\MesaFabApproval\Fab2ApprovalSystem\Misc"
|
||||
mklink /J "L:\DevOps\Mesa_FI\MesaFabApproval\Fab2ApprovalMKLink\DMO" "L:\DevOps\Mesa_FI\MesaFabApproval\Fab2ApprovalSystem\DMO"
|
||||
mklink /J "L:\DevOps\Mesa_FI\MesaFabApproval\Fab2ApprovalMKLink\Utilities" "L:\DevOps\Mesa_FI\MesaFabApproval\Fab2ApprovalSystem\Utilities"
|
||||
mklink /J "L:\DevOps\Mesa_FI\MesaFabApproval\Fab2ApprovalMKLink\PdfGenerator" "L:\DevOps\Mesa_FI\MesaFabApproval\Fab2ApprovalSystem\PdfGenerator"
|
||||
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"
|
||||
```
|
424
Fab2ApprovalMKLink/.vscode/settings.json
vendored
Normal file
424
Fab2ApprovalMKLink/.vscode/settings.json
vendored
Normal file
@ -0,0 +1,424 @@
|
||||
{
|
||||
"[markdown]": {
|
||||
"editor.wordWrap": "off"
|
||||
},
|
||||
"files.exclude": {
|
||||
"**/.git": false,
|
||||
"**/node_modules": true
|
||||
},
|
||||
"files.watcherExclude": {
|
||||
"**/node_modules": true
|
||||
},
|
||||
"cSpell.words": [
|
||||
"abutton",
|
||||
"accessibilities",
|
||||
"accodingly",
|
||||
"acknowledgmentby",
|
||||
"Acks",
|
||||
"actionsheet",
|
||||
"Additonal",
|
||||
"Addtional",
|
||||
"againm",
|
||||
"agendaview",
|
||||
"Antlr",
|
||||
"Appover",
|
||||
"Appprrovers",
|
||||
"Approvalog",
|
||||
"Aprovers",
|
||||
"Aproverslist",
|
||||
"asax",
|
||||
"aspnetmvc",
|
||||
"Assignedto",
|
||||
"Atachments",
|
||||
"Attachemnt",
|
||||
"Attachemnts",
|
||||
"Attchment",
|
||||
"auditee",
|
||||
"Auditee",
|
||||
"Auditees",
|
||||
"automaically",
|
||||
"Autthorized",
|
||||
"beacuase",
|
||||
"beforeunload",
|
||||
"Belguim",
|
||||
"bfound",
|
||||
"bgcolor",
|
||||
"Bies",
|
||||
"binded",
|
||||
"blackbackground",
|
||||
"blackhover",
|
||||
"blackpressed",
|
||||
"blueenergy",
|
||||
"blueopal",
|
||||
"buttongroup",
|
||||
"BYMRB",
|
||||
"bytesgot",
|
||||
"CAID",
|
||||
"casection",
|
||||
"CAXXXX",
|
||||
"CCPCR",
|
||||
"CCPCRB",
|
||||
"cellspacing",
|
||||
"Cheeso's",
|
||||
"chkbx",
|
||||
"Clib",
|
||||
"colorpicker",
|
||||
"columnmenu",
|
||||
"columnsreorder",
|
||||
"columnsresize",
|
||||
"comming",
|
||||
"Containmen",
|
||||
"Copmments",
|
||||
"correctiv",
|
||||
"Correctivet",
|
||||
"Creat",
|
||||
"currentd",
|
||||
"Cyle",
|
||||
"dadada",
|
||||
"darkbluehover",
|
||||
"darkbluepressed",
|
||||
"darkred",
|
||||
"datafields",
|
||||
"datasource",
|
||||
"dataviz",
|
||||
"datepicker",
|
||||
"datetimepicker",
|
||||
"dayview",
|
||||
"Deletet",
|
||||
"Delgation",
|
||||
"DENITED",
|
||||
"Deparmtent",
|
||||
"departmentids",
|
||||
"Descirption",
|
||||
"devprog",
|
||||
"dfeffc",
|
||||
"Disp",
|
||||
"Dispo",
|
||||
"Dispoitio",
|
||||
"Dispos",
|
||||
"Dispositon",
|
||||
"Dispostion",
|
||||
"Dispostions",
|
||||
"dispotypevalidation",
|
||||
"Docbase",
|
||||
"Documentum",
|
||||
"Documetum",
|
||||
"dont",
|
||||
"downlaoded",
|
||||
"draganddrop",
|
||||
"dragcancel",
|
||||
"dropdownlist",
|
||||
"Eamils",
|
||||
"ECNPCRB",
|
||||
"Ecns",
|
||||
"edmx",
|
||||
"EECN",
|
||||
"emai",
|
||||
"emailparams",
|
||||
"Emergrncy",
|
||||
"energyblue",
|
||||
"Eran",
|
||||
"Esql",
|
||||
"ETECN",
|
||||
"EXCELOPENXML",
|
||||
"existinglocation",
|
||||
"Expando",
|
||||
"extrafield",
|
||||
"fadc",
|
||||
"fbec",
|
||||
"fcfdfd",
|
||||
"fdff",
|
||||
"fece",
|
||||
"feeebd",
|
||||
"ffdc",
|
||||
"ffdd",
|
||||
"fieldset",
|
||||
"FILIPE",
|
||||
"filtermenu",
|
||||
"Fldr",
|
||||
"flintstone",
|
||||
"FLOWLOCS",
|
||||
"FMEA",
|
||||
"ftplib",
|
||||
"FTPSPN",
|
||||
"GETDATE",
|
||||
"gitea",
|
||||
"globaldocudms",
|
||||
"glyphicons",
|
||||
"groupable",
|
||||
"Guids",
|
||||
"halflings",
|
||||
"Hexsize",
|
||||
"highcontrast",
|
||||
"Hmac",
|
||||
"holdsteps",
|
||||
"hostspecific",
|
||||
"icenium",
|
||||
"IECN",
|
||||
"imagebrowser",
|
||||
"IMRB",
|
||||
"Infineon",
|
||||
"Insertd",
|
||||
"inverseicons",
|
||||
"IPCRB",
|
||||
"ISADMIN",
|
||||
"islast",
|
||||
"ISNULL",
|
||||
"ITAR",
|
||||
"jquery",
|
||||
"jqueryval",
|
||||
"jqwidgets",
|
||||
"jqxbuttongroup",
|
||||
"jqxbuttons",
|
||||
"jqxcalendar",
|
||||
"jqxchart",
|
||||
"jqxcheckbox",
|
||||
"jqxcolorpicker",
|
||||
"jqxcombobox",
|
||||
"jqxcore",
|
||||
"jqxdata",
|
||||
"jqxdatatable",
|
||||
"jqxdatetimeinput",
|
||||
"jqxdocking",
|
||||
"jqxdockpanel",
|
||||
"jqxdragdrop",
|
||||
"jqxdropdownbutton",
|
||||
"jqxdropdownlist",
|
||||
"jqxexpander",
|
||||
"jqxgauge",
|
||||
"jqxgrid",
|
||||
"jqxinput",
|
||||
"jqxknockout",
|
||||
"jqxlistbox",
|
||||
"jqxlistmenu",
|
||||
"jqxmaskedinput",
|
||||
"jqxmenu",
|
||||
"jqxnavigationbar",
|
||||
"jqxnumberinput",
|
||||
"jqxpanel",
|
||||
"jqxpasswordinput",
|
||||
"jqxprogressbar",
|
||||
"jqxradiobutton",
|
||||
"jqxrangeselector",
|
||||
"jqxrating",
|
||||
"jqxresponse",
|
||||
"jqxscrollbar",
|
||||
"jqxscrollview",
|
||||
"jqxslider",
|
||||
"jqxsplitter",
|
||||
"jqxswitchbutton",
|
||||
"jqxtabs",
|
||||
"jqxtooltip",
|
||||
"jqxtouch",
|
||||
"jqxtree",
|
||||
"jqxtreegrid",
|
||||
"jqxtreemap",
|
||||
"jqxvalidator",
|
||||
"jqxwindow",
|
||||
"kendogridcustom",
|
||||
"kendoui",
|
||||
"labelelement",
|
||||
"labelledby",
|
||||
"Leanred",
|
||||
"lightgray",
|
||||
"linkbutton",
|
||||
"Linq",
|
||||
"Listdiv",
|
||||
"listview",
|
||||
"Lnks",
|
||||
"localfilename",
|
||||
"loclist",
|
||||
"logis",
|
||||
"logtext",
|
||||
"loopmis",
|
||||
"lotdispo",
|
||||
"LOTDISPSITION",
|
||||
"Lotfile",
|
||||
"lotlist",
|
||||
"lotstatusoption",
|
||||
"LTRIM",
|
||||
"MADUREIRA",
|
||||
"mailrelay",
|
||||
"MDTM",
|
||||
"meego",
|
||||
"meetingid",
|
||||
"menubutton",
|
||||
"mesafi",
|
||||
"metroblack",
|
||||
"metrodark",
|
||||
"miliseconds",
|
||||
"modalview",
|
||||
"modernizr",
|
||||
"Modernizr",
|
||||
"monthview",
|
||||
"MRBIs",
|
||||
"Mrbs",
|
||||
"msecs",
|
||||
"multipleextended",
|
||||
"Navigatable",
|
||||
"nbsp",
|
||||
"newbase",
|
||||
"newchange",
|
||||
"newdi",
|
||||
"newfilename",
|
||||
"newsource",
|
||||
"Newtonsoft",
|
||||
"notications",
|
||||
"Notifcation",
|
||||
"Notifyf",
|
||||
"NTLM",
|
||||
"Nullcc",
|
||||
"numerictextbox",
|
||||
"objdata",
|
||||
"OCAP",
|
||||
"occured",
|
||||
"odata",
|
||||
"oldfilename",
|
||||
"OLHOLD",
|
||||
"onclick",
|
||||
"onmousemove",
|
||||
"OPDESC",
|
||||
"OPENQUERY",
|
||||
"Oper",
|
||||
"operationslist",
|
||||
"Orginator",
|
||||
"Originatorname",
|
||||
"Ouellette",
|
||||
"Owin",
|
||||
"pageable",
|
||||
"Pageable",
|
||||
"panelbar",
|
||||
"parentid",
|
||||
"parminput",
|
||||
"parms",
|
||||
"Parms",
|
||||
"particula",
|
||||
"pasv",
|
||||
"PASV",
|
||||
"PATINDEX",
|
||||
"PCRB",
|
||||
"PCRBID",
|
||||
"pcrvalues",
|
||||
"pdbonly",
|
||||
"Preventitive",
|
||||
"preventivet",
|
||||
"Prevetative",
|
||||
"proces",
|
||||
"Processedl",
|
||||
"procs",
|
||||
"productfamilies",
|
||||
"progess",
|
||||
"progressbar",
|
||||
"qrcode",
|
||||
"Quanityt",
|
||||
"rangebar",
|
||||
"Recep",
|
||||
"Recepient",
|
||||
"recieved",
|
||||
"recordlock",
|
||||
"remotefilename",
|
||||
"reorderable",
|
||||
"reportform",
|
||||
"reportslist",
|
||||
"reportslistdiv",
|
||||
"Reqquired",
|
||||
"Reqs",
|
||||
"Requiest",
|
||||
"Responsibles",
|
||||
"RETR",
|
||||
"Revisioing",
|
||||
"Revisioned",
|
||||
"Revison",
|
||||
"rgba",
|
||||
"rkotian",
|
||||
"RNFR",
|
||||
"RNTO",
|
||||
"Roless",
|
||||
"roundbg",
|
||||
"RTRIM",
|
||||
"SAMDB",
|
||||
"scroller",
|
||||
"scrollview",
|
||||
"seleced",
|
||||
"selectionlog",
|
||||
"Selectpart",
|
||||
"sess",
|
||||
"Sfisharepoint",
|
||||
"shinyblack",
|
||||
"showpassword",
|
||||
"SIGNON",
|
||||
"simpleparser",
|
||||
"slddrw",
|
||||
"sldprt",
|
||||
"sortasc",
|
||||
"sortascbutton",
|
||||
"sortdesc",
|
||||
"sortdescbutton",
|
||||
"sortremove",
|
||||
"sparkline",
|
||||
"splitview",
|
||||
"SPNMRB",
|
||||
"SPNPDB",
|
||||
"SSRS",
|
||||
"Sssign",
|
||||
"Staus",
|
||||
"stylesheet",
|
||||
"Submited",
|
||||
"subrole",
|
||||
"subroles",
|
||||
"Succefully",
|
||||
"Succesfully",
|
||||
"sucessfully",
|
||||
"SURP",
|
||||
"Swashbuckle",
|
||||
"SWRN",
|
||||
"tabindex",
|
||||
"tabstrip",
|
||||
"Tahoma",
|
||||
"taskcompleted",
|
||||
"Tasklist",
|
||||
"Taveler",
|
||||
"TECN",
|
||||
"TECNs",
|
||||
"TEMIRWAP",
|
||||
"tempecd",
|
||||
"tempimplement",
|
||||
"templabel",
|
||||
"tempvalue",
|
||||
"TEMSA",
|
||||
"timepicker",
|
||||
"Tobe",
|
||||
"Toplevel",
|
||||
"Totrav",
|
||||
"trainingby",
|
||||
"Traininglist",
|
||||
"traininglistdiv",
|
||||
"transanction",
|
||||
"Trav",
|
||||
"Traveller",
|
||||
"Traverler",
|
||||
"TRAVLELER",
|
||||
"Travler",
|
||||
"TREEVIEW",
|
||||
"trigerred",
|
||||
"ttinclude",
|
||||
"Uhandled",
|
||||
"Updat",
|
||||
"Uplaod",
|
||||
"Upto",
|
||||
"userevents",
|
||||
"userids",
|
||||
"userlist",
|
||||
"Validatable",
|
||||
"valueelement",
|
||||
"Variabls",
|
||||
"Verdana",
|
||||
"vgrid",
|
||||
"viewmodel",
|
||||
"vsdoc",
|
||||
"whethere",
|
||||
"windowsphone",
|
||||
"Winsock",
|
||||
"worlflow"
|
||||
]
|
||||
}
|
109
Fab2ApprovalMKLink/.vscode/tasks.json
vendored
Normal file
109
Fab2ApprovalMKLink/.vscode/tasks.json
vendored
Normal file
@ -0,0 +1,109 @@
|
||||
{
|
||||
"version": "2.0.0",
|
||||
"tasks": [
|
||||
{
|
||||
"label": "User Secrets Init",
|
||||
"command": "dotnet",
|
||||
"type": "process",
|
||||
"args": [
|
||||
"user-secrets",
|
||||
"-p",
|
||||
"${workspaceFolder}/Fab2ApprovalMKLink.csproj",
|
||||
"init"
|
||||
],
|
||||
"problemMatcher": "$msCompile"
|
||||
},
|
||||
{
|
||||
"label": "User Secrets Set",
|
||||
"command": "dotnet",
|
||||
"type": "process",
|
||||
"args": [
|
||||
"user-secrets",
|
||||
"-p",
|
||||
"${workspaceFolder}/Fab2ApprovalMKLink.csproj",
|
||||
"set",
|
||||
"_UserSecretsId",
|
||||
"f2da5035-aba9-4676-9f8d-d6689f84663d"
|
||||
],
|
||||
"problemMatcher": "$msCompile"
|
||||
},
|
||||
{
|
||||
"label": "Format",
|
||||
"command": "dotnet",
|
||||
"type": "process",
|
||||
"args": [
|
||||
"format",
|
||||
"--report",
|
||||
".vscode",
|
||||
"--verbosity",
|
||||
"detailed",
|
||||
"--severity",
|
||||
"warn"
|
||||
],
|
||||
"problemMatcher": "$msCompile"
|
||||
},
|
||||
{
|
||||
"label": "Format-Whitespaces",
|
||||
"command": "dotnet",
|
||||
"type": "process",
|
||||
"args": [
|
||||
"format",
|
||||
"whitespace"
|
||||
],
|
||||
"problemMatcher": "$msCompile"
|
||||
},
|
||||
{
|
||||
"label": "build",
|
||||
"command": "dotnet",
|
||||
"type": "process",
|
||||
"args": [
|
||||
"build",
|
||||
"${workspaceFolder}/Fab2ApprovalMKLink.csproj",
|
||||
"/property:GenerateFullPaths=true",
|
||||
"/consoleloggerparameters:NoSummary"
|
||||
],
|
||||
"problemMatcher": "$msCompile"
|
||||
},
|
||||
{
|
||||
"label": "publish",
|
||||
"command": "dotnet",
|
||||
"type": "process",
|
||||
"args": [
|
||||
"publish",
|
||||
"${workspaceFolder}/Fab2ApprovalMKLink.csproj",
|
||||
"/property:GenerateFullPaths=true",
|
||||
"/consoleloggerparameters:NoSummary"
|
||||
],
|
||||
"problemMatcher": "$msCompile"
|
||||
},
|
||||
{
|
||||
"label": "watch",
|
||||
"command": "dotnet",
|
||||
"type": "process",
|
||||
"args": [
|
||||
"watch",
|
||||
"run",
|
||||
"--project",
|
||||
"${workspaceFolder}/Fab2ApprovalMKLink.csproj"
|
||||
],
|
||||
"problemMatcher": "$msCompile"
|
||||
},
|
||||
{
|
||||
"label": "Publish AOT",
|
||||
"command": "dotnet",
|
||||
"type": "process",
|
||||
"args": [
|
||||
"publish",
|
||||
"-r",
|
||||
"win-x64",
|
||||
"-c",
|
||||
"Release",
|
||||
"-p:PublishAot=true",
|
||||
"${workspaceFolder}/Fab2ApprovalMKLink.csproj",
|
||||
"/property:GenerateFullPaths=true",
|
||||
"/consoleloggerparameters:NoSummary"
|
||||
],
|
||||
"problemMatcher": "$msCompile"
|
||||
}
|
||||
]
|
||||
}
|
58
Fab2ApprovalMKLink/Fab2ApprovalMKLink.csproj
Normal file
58
Fab2ApprovalMKLink/Fab2ApprovalMKLink.csproj
Normal file
@ -0,0 +1,58 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk.Web">
|
||||
<PropertyGroup Label="Globals">
|
||||
<SccProjectName>SAK</SccProjectName>
|
||||
<SccProvider>SAK</SccProvider>
|
||||
<SccAuxPath>SAK</SccAuxPath>
|
||||
<SccLocalPath>SAK</SccLocalPath>
|
||||
<UserSecretsId>f2da5035-aba9-4676-9f8d-d6689f84663d</UserSecretsId>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup>
|
||||
<EnforceCodeStyleInBuild>true</EnforceCodeStyleInBuild>
|
||||
<ImplicitUsings>disable</ImplicitUsings>
|
||||
<IsPackable>false</IsPackable>
|
||||
<Nullable>enable</Nullable>
|
||||
<OutputType>Exe</OutputType>
|
||||
<RuntimeIdentifiers>win-x64;linux-x64</RuntimeIdentifiers>
|
||||
<TargetFramework>net8.0</TargetFramework>
|
||||
</PropertyGroup>
|
||||
<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" />
|
||||
<PackageReference Include="Microsoft.Extensions.Caching.Memory" Version="8.0.1" />
|
||||
<PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="8.0.1" />
|
||||
<PackageReference Include="Microsoft.Extensions.Configuration.UserSecrets" Version="8.0.1" />
|
||||
<PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="8.0.1" />
|
||||
<PackageReference Include="Microsoft.Extensions.Hosting.WindowsServices" Version="8.0.1" />
|
||||
<PackageReference Include="Microsoft.Extensions.Hosting" Version="8.0.1" />
|
||||
<PackageReference Include="Microsoft.Extensions.Http" Version="8.0.0" />
|
||||
<PackageReference Include="Microsoft.Extensions.Logging.Console" Version="8.0.1" />
|
||||
<PackageReference Include="Microsoft.Extensions.Logging.EventLog" Version="8.0.1" />
|
||||
<PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
|
||||
<PackageReference Include="NLog.Extensions.Logging" Version="5.3.8" />
|
||||
<PackageReference Include="NLog" Version="5.2.8" />
|
||||
<PackageReference Include="Quartz.Extensions.Hosting" Version="3.8.1" />
|
||||
<PackageReference Include="Quartz" Version="3.8.1" />
|
||||
<PackageReference Include="SharpZipLib" Version="1.4.2" />
|
||||
<PackageReference Include="Swashbuckle.AspNetCore" Version="6.8.1" />
|
||||
<PackageReference Include="System.Data.SqlClient" Version="4.8.6" />
|
||||
<PackageReference Include="System.DirectoryServices.AccountManagement" Version="9.0.0" />
|
||||
<PackageReference Include="System.DirectoryServices" Version="9.0.0" />
|
||||
<PackageReference Include="System.Drawing.Common" Version="8.0.7" />
|
||||
</ItemGroup>
|
||||
</Project>
|
134
Fab2ApprovalMKLink/Program.cs
Normal file
134
Fab2ApprovalMKLink/Program.cs
Normal file
@ -0,0 +1,134 @@
|
||||
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;
|
||||
|
||||
public class Program {
|
||||
|
||||
public static int Main(string[] args) {
|
||||
ILogger<Program>? logger = null;
|
||||
WebApplicationBuilder webApplicationBuilder = WebApplication.CreateBuilder(args);
|
||||
_ = webApplicationBuilder.Configuration.AddUserSecrets<Program>();
|
||||
AppSettings appSettings = AppSettings.Get(webApplicationBuilder.Configuration);
|
||||
if (string.IsNullOrEmpty(appSettings.Company))
|
||||
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);
|
||||
sessionOptions.Cookie.HttpOnly = true;
|
||||
sessionOptions.Cookie.IsEssential = true;
|
||||
}
|
||||
);
|
||||
|
||||
_ = webApplicationBuilder.Services.AddAuthentication(options => {
|
||||
options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
|
||||
options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
|
||||
})
|
||||
.AddJwtBearer(options => {
|
||||
options.RequireHttpsMetadata = false;
|
||||
options.SaveToken = true;
|
||||
options.TokenValidationParameters = new TokenValidationParameters {
|
||||
ValidateIssuerSigningKey = true,
|
||||
ValidIssuer = appSettings.JwtIssuer,
|
||||
ValidateAudience = false,
|
||||
IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(appSettings.JwtKey)),
|
||||
ClockSkew = TimeSpan.Zero
|
||||
};
|
||||
});
|
||||
|
||||
_ = webApplicationBuilder.Services.AddAuthorization(options => {
|
||||
options.DefaultPolicy = new AuthorizationPolicyBuilder()
|
||||
.AddAuthenticationSchemes(JwtBearerDefaults.AuthenticationScheme)
|
||||
.RequireAuthenticatedUser()
|
||||
.Build();
|
||||
});
|
||||
if (WindowsServiceHelpers.IsWindowsService()) {
|
||||
_ = webApplicationBuilder.Services.AddSingleton<IHostLifetime, WindowsServiceLifetime>();
|
||||
_ = webApplicationBuilder.Logging.AddEventLog(settings => {
|
||||
#pragma warning disable CA1416
|
||||
if (string.IsNullOrEmpty(settings.SourceName))
|
||||
settings.SourceName = webApplicationBuilder.Environment.ApplicationName;
|
||||
#pragma warning restore
|
||||
});
|
||||
}
|
||||
WebApplication webApplication = webApplicationBuilder.Build();
|
||||
if (Debugger.IsAttached)
|
||||
webApplication.Services.GetRequiredService<AppSettings>();
|
||||
logger = webApplication.Services.GetRequiredService<ILogger<Program>>();
|
||||
_ = webApplication.UseCors(corsPolicyBuilder => corsPolicyBuilder.AllowAnyOrigin().AllowAnyHeader().AllowAnyMethod());
|
||||
if (!webApplicationBuilder.Environment.IsDevelopment()) {
|
||||
_ = webApplication.UseExceptionHandler("/Error");
|
||||
_ = webApplication.UseHttpsRedirection();
|
||||
_ = webApplication.UseHsts();
|
||||
} else {
|
||||
if (string.IsNullOrEmpty(appSettings.URLs)) {
|
||||
Environment.ExitCode = -1;
|
||||
webApplication.Lifetime.StopApplication();
|
||||
}
|
||||
_ = webApplication.UseSwagger();
|
||||
_ = webApplication.UseSwaggerUI(c => c.SwaggerEndpoint("/swagger/v1/swagger.json", "Server V1"));
|
||||
}
|
||||
_ = webApplication.UseSession();
|
||||
_ = webApplication.MapControllers();
|
||||
_ = webApplication.UseAuthentication();
|
||||
_ = webApplication.UseAuthorization();
|
||||
logger.LogInformation("Starting Web Application");
|
||||
webApplication.Run();
|
||||
return 0;
|
||||
} catch (Exception ex) {
|
||||
try { logger?.LogCritical(ex, "Host terminated unexpectedly"); } catch (Exception) { }
|
||||
throw;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
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
|
@ -1,20 +1,35 @@
|
||||
|
||||
Microsoft Visual Studio Solution File, Format Version 12.00
|
||||
# Visual Studio 15
|
||||
VisualStudioVersion = 15.0.27130.2020
|
||||
# Visual Studio Version 17
|
||||
VisualStudioVersion = 17.9.34616.47
|
||||
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
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MesaFabApproval.Client", "MesaFabApproval.Client\MesaFabApproval.Client.csproj", "{34D52F44-A81F-4247-8180-16E204824A07}"
|
||||
ProjectSection(ProjectDependencies) = postProject
|
||||
{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(TeamFoundationVersionControl) = preSolution
|
||||
SccNumberOfProjects = 2
|
||||
SccEnterpriseProvider = {4CA58AB2-18FA-4F8D-95D4-32DDF27D184C}
|
||||
SccTeamFoundationServer = http://tfs.intra.infineon.com:8080/tfs/manufacturingit
|
||||
SccLocalPath0 = .
|
||||
SccProjectUniqueName1 = Fab2ApprovalSystem\\Fab2ApprovalSystem.csproj
|
||||
SccProjectName1 = Fab2ApprovalSystem
|
||||
SccLocalPath1 = Fab2ApprovalSystem
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|Any CPU = Debug|Any CPU
|
||||
Release|Any CPU = Release|Any CPU
|
||||
@ -24,8 +39,31 @@ Global
|
||||
{AAE52608-4DD1-4732-92BD-CC8915DEC71E}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{AAE52608-4DD1-4732-92BD-CC8915DEC71E}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{AAE52608-4DD1-4732-92BD-CC8915DEC71E}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{852E528D-015A-43B5-999D-F281E3359E5E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{852E528D-015A-43B5-999D-F281E3359E5E}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{852E528D-015A-43B5-999D-F281E3359E5E}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{852E528D-015A-43B5-999D-F281E3359E5E}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{2C16014D-B04E-46AF-AB4C-D2691D44A339}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{2C16014D-B04E-46AF-AB4C-D2691D44A339}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{2C16014D-B04E-46AF-AB4C-D2691D44A339}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{2C16014D-B04E-46AF-AB4C-D2691D44A339}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{34D52F44-A81F-4247-8180-16E204824A07}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{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
|
||||
EndGlobalSection
|
||||
GlobalSection(ExtensibilityGlobals) = postSolution
|
||||
SolutionGuid = {A966A184-1FCD-4B6A-978C-5907CC12406B}
|
||||
EndGlobalSection
|
||||
EndGlobal
|
||||
|
380
Fab2ApprovalSystem/.editorconfig
Normal file
380
Fab2ApprovalSystem/.editorconfig
Normal file
@ -0,0 +1,380 @@
|
||||
[*.md]
|
||||
end_of_line = crlf
|
||||
file_header_template = unset
|
||||
indent_size = 2
|
||||
indent_style = space
|
||||
insert_final_newline = false
|
||||
root = true
|
||||
tab_width = 2
|
||||
[*.csproj]
|
||||
end_of_line = crlf
|
||||
file_header_template = unset
|
||||
indent_size = 2
|
||||
indent_style = space
|
||||
insert_final_newline = false
|
||||
root = true
|
||||
tab_width = 2
|
||||
[*.cs]
|
||||
csharp_indent_block_contents = true
|
||||
csharp_indent_braces = false
|
||||
csharp_indent_case_contents = true
|
||||
csharp_indent_case_contents_when_block = true
|
||||
csharp_indent_labels = one_less_than_current
|
||||
csharp_indent_switch_labels = true
|
||||
csharp_new_line_before_catch = false
|
||||
csharp_new_line_before_else = false
|
||||
csharp_new_line_before_finally = false
|
||||
csharp_new_line_before_members_in_anonymous_types = true
|
||||
csharp_new_line_before_members_in_object_initializers = true
|
||||
csharp_new_line_before_open_brace = none
|
||||
csharp_new_line_between_query_expression_clauses = true
|
||||
csharp_prefer_braces = false
|
||||
csharp_prefer_qualified_reference = true:error
|
||||
csharp_prefer_simple_default_expression = true:warning
|
||||
csharp_prefer_simple_using_statement = true:warning
|
||||
csharp_prefer_static_local_function = true:warning
|
||||
csharp_preferred_modifier_order = public,private,protected,internal,static,extern,new,virtual,abstract,sealed,override,readonly,unsafe,volatile,async
|
||||
csharp_preserve_single_line_blocks = true
|
||||
csharp_preserve_single_line_statements = false
|
||||
csharp_space_after_cast = false
|
||||
csharp_space_after_colon_in_inheritance_clause = true
|
||||
csharp_space_after_comma = true
|
||||
csharp_space_after_dot = false
|
||||
csharp_space_after_keywords_in_control_flow_statements = true
|
||||
csharp_space_after_semicolon_in_for_statement = true
|
||||
csharp_space_around_binary_operators = before_and_after
|
||||
csharp_space_around_declaration_statements = false
|
||||
csharp_space_before_colon_in_inheritance_clause = true
|
||||
csharp_space_before_comma = false
|
||||
csharp_space_before_dot = false
|
||||
csharp_space_before_open_square_brackets = false
|
||||
csharp_space_before_semicolon_in_for_statement = false
|
||||
csharp_space_between_empty_square_brackets = false
|
||||
csharp_space_between_method_call_empty_parameter_list_parentheses = false
|
||||
csharp_space_between_method_call_name_and_opening_parenthesis = false
|
||||
csharp_space_between_method_call_parameter_list_parentheses = false
|
||||
csharp_space_between_method_declaration_empty_parameter_list_parentheses = false
|
||||
csharp_space_between_method_declaration_name_and_open_parenthesis = false
|
||||
csharp_space_between_method_declaration_parameter_list_parentheses = false
|
||||
csharp_space_between_parentheses = false
|
||||
csharp_space_between_square_brackets = false
|
||||
csharp_style_allow_blank_line_after_colon_in_constructor_initializer_experimental = true
|
||||
csharp_style_allow_blank_line_after_token_in_arrow_expression_clause_experimental = true
|
||||
csharp_style_allow_blank_line_after_token_in_conditional_expression_experimental = true
|
||||
csharp_style_allow_blank_lines_between_consecutive_braces_experimental = false
|
||||
csharp_style_allow_blank_lines_between_consecutive_braces_experimental = true
|
||||
csharp_style_allow_embedded_statements_on_same_line_experimental = true
|
||||
csharp_style_conditional_delegate_call = true
|
||||
csharp_style_deconstructed_variable_declaration = false
|
||||
csharp_style_expression_bodied_accessors = when_on_single_line:warning
|
||||
csharp_style_expression_bodied_constructors = when_on_single_line:warning
|
||||
csharp_style_expression_bodied_indexers = when_on_single_line:warning
|
||||
csharp_style_expression_bodied_lambdas = when_on_single_line:warning
|
||||
csharp_style_expression_bodied_local_functions = when_on_single_line:warning
|
||||
csharp_style_expression_bodied_methods = when_on_single_line:warning
|
||||
csharp_style_expression_bodied_operators = when_on_single_line:warning
|
||||
csharp_style_expression_bodied_properties = when_on_single_line:warning
|
||||
csharp_style_implicit_object_creation_when_type_is_apparent = true:warning
|
||||
csharp_style_inlined_variable_declaration = false
|
||||
csharp_style_namespace_declarations = file_scoped:warning
|
||||
csharp_style_pattern_local_over_anonymous_function = true:warning
|
||||
csharp_style_pattern_matching_over_as_with_null_check = true:warning
|
||||
csharp_style_pattern_matching_over_is_with_cast_check = true:warning
|
||||
csharp_style_prefer_index_operator = true:warning
|
||||
csharp_style_prefer_not_pattern = true:warning
|
||||
csharp_style_prefer_null_check_over_type_check = true
|
||||
csharp_style_prefer_pattern_matching = true:warning
|
||||
csharp_style_prefer_range_operator = true:warning
|
||||
csharp_style_prefer_switch_expression = true:warning
|
||||
csharp_style_throw_expression = true
|
||||
csharp_style_unused_value_assignment_preference = discard_variable:warning
|
||||
csharp_style_unused_value_expression_statement_preference = discard_variable:warning
|
||||
csharp_style_var_elsewhere = false:warning
|
||||
csharp_style_var_for_built_in_types = false:warning
|
||||
csharp_style_var_when_type_is_apparent = false:warning
|
||||
csharp_using_directive_placement = outside_namespace
|
||||
dotnet_analyzer_diagnostic.category-Design.severity = error
|
||||
dotnet_analyzer_diagnostic.category-Documentation.severity = error
|
||||
dotnet_analyzer_diagnostic.category-Globalization.severity = none
|
||||
dotnet_analyzer_diagnostic.category-Interoperability.severity = error
|
||||
dotnet_analyzer_diagnostic.category-Maintainability.severity = error
|
||||
dotnet_analyzer_diagnostic.category-Naming.severity = none
|
||||
dotnet_analyzer_diagnostic.category-Performance.severity = none
|
||||
dotnet_analyzer_diagnostic.category-Reliability.severity = error
|
||||
dotnet_analyzer_diagnostic.category-Security.severity = error
|
||||
dotnet_analyzer_diagnostic.category-SingleFile.severity = error
|
||||
dotnet_analyzer_diagnostic.category-Style.severity = error
|
||||
dotnet_analyzer_diagnostic.category-Usage.severity = error
|
||||
dotnet_code_quality_unused_parameters = all
|
||||
dotnet_code_quality_unused_parameters = non_public
|
||||
dotnet_code_quality.CAXXXX.api_surface = private, internal
|
||||
dotnet_diagnostic.CA1001.severity = error # CA1001: Types that own disposable fields should be disposable
|
||||
dotnet_diagnostic.CA1051.severity = error # CA1051: Do not declare visible instance fields
|
||||
dotnet_diagnostic.CA1511.severity = warning # CA1511: Use 'ArgumentException.ThrowIfNullOrEmpty' instead of explicitly throwing a new exception instance
|
||||
dotnet_diagnostic.CA1513.severity = warning # Use 'ObjectDisposedException.ThrowIf' instead of explicitly throwing a new exception instance
|
||||
dotnet_diagnostic.CA1825.severity = warning # CA1825: Avoid zero-length array allocations
|
||||
dotnet_diagnostic.CA1829.severity = error # CA1829: Use Length/Count property instead of Count() when available
|
||||
dotnet_diagnostic.CA1834.severity = warning # CA1834: Consider using 'StringBuilder.Append(char)' when applicable
|
||||
dotnet_diagnostic.CA1860.severity = error # CA1860: Prefer comparing 'Count' to 0 rather than using 'Any()', both for clarity and for performance
|
||||
dotnet_diagnostic.CA1862.severity = warning # CA1862: Prefer using 'string.Equals(string, StringComparison)' to perform a case-insensitive comparison, but keep in mind that this might cause subtle changes in behavior, so make sure to conduct thorough testing after applying the suggestion, or if culturally sensitive comparison is not required, consider using 'StringComparison.OrdinalIgnoreCase'
|
||||
dotnet_diagnostic.CA1869.severity = none # CA1869: Avoid creating a new 'JsonSerializerOptions' instance for every serialization operation. Cache and reuse instances instead.
|
||||
dotnet_diagnostic.CA2201.severity = none # CA2201: Exception type System.NullReferenceException is reserved by the runtime
|
||||
dotnet_diagnostic.CA2254.severity = none # CA2254: The logging message template should not vary between calls to 'LoggerExtensions.LogInformation(ILogger, string?, params object?[])'
|
||||
dotnet_diagnostic.IDE0001.severity = warning # IDE0001: Simplify name
|
||||
dotnet_diagnostic.IDE0002.severity = warning # Simplify (member access) - System.Version.Equals("1", "2"); Version.Equals("1", "2");
|
||||
dotnet_diagnostic.IDE0004.severity = warning # IDE0004: Cast is redundant.
|
||||
dotnet_diagnostic.IDE0005.severity = error # Using directive is unnecessary
|
||||
dotnet_diagnostic.IDE0010.severity = none # Add missing cases to switch statement (IDE0010)
|
||||
dotnet_diagnostic.IDE0028.severity = error # IDE0028: Collection initialization can be simplified
|
||||
dotnet_diagnostic.IDE0031.severity = warning # Use null propagation (IDE0031)
|
||||
dotnet_diagnostic.IDE0047.severity = warning # IDE0047: Parentheses can be removed
|
||||
dotnet_diagnostic.IDE0048.severity = none # Parentheses preferences (IDE0047 and IDE0048)
|
||||
dotnet_diagnostic.IDE0049.severity = warning # Use language keywords instead of framework type names for type references (IDE0049)
|
||||
dotnet_diagnostic.IDE0051.severity = error # Private member '' is unused [, ]
|
||||
dotnet_diagnostic.IDE0058.severity = error # IDE0058: Expression value is never used
|
||||
dotnet_diagnostic.IDE0060.severity = error # IDE0060: Remove unused parameter
|
||||
dotnet_diagnostic.IDE0074.severity = warning # IDE0074: Use compound assignment
|
||||
dotnet_diagnostic.IDE0130.severity = none # Namespace does not match folder structure (IDE0130)
|
||||
dotnet_diagnostic.IDE0270.severity = warning # IDE0270: Null check can be simplified
|
||||
dotnet_diagnostic.IDE0290.severity = none # Use primary constructor [Distance]csharp(IDE0290)
|
||||
dotnet_diagnostic.IDE0300.severity = error # IDE0300: Collection initialization can be simplified
|
||||
dotnet_diagnostic.IDE0301.severity = error #IDE0301: Collection initialization can be simplified
|
||||
dotnet_diagnostic.IDE0305.severity = none # IDE0305: Collection initialization can be simplified
|
||||
dotnet_diagnostic.IDE2000.severity = error # IDE2000: Allow multiple blank lines
|
||||
dotnet_naming_rule.abstract_method_should_be_pascal_case.severity = warning
|
||||
dotnet_naming_rule.abstract_method_should_be_pascal_case.style = pascal_case
|
||||
dotnet_naming_rule.abstract_method_should_be_pascal_case.symbols = abstract_method
|
||||
dotnet_naming_rule.class_should_be_pascal_case.severity = warning
|
||||
dotnet_naming_rule.class_should_be_pascal_case.style = pascal_case
|
||||
dotnet_naming_rule.class_should_be_pascal_case.symbols = class
|
||||
dotnet_naming_rule.delegate_should_be_pascal_case.severity = warning
|
||||
dotnet_naming_rule.delegate_should_be_pascal_case.style = pascal_case
|
||||
dotnet_naming_rule.delegate_should_be_pascal_case.symbols = delegate
|
||||
dotnet_naming_rule.enum_should_be_pascal_case.severity = warning
|
||||
dotnet_naming_rule.enum_should_be_pascal_case.style = pascal_case
|
||||
dotnet_naming_rule.enum_should_be_pascal_case.symbols = enum
|
||||
dotnet_naming_rule.event_should_be_pascal_case.severity = warning
|
||||
dotnet_naming_rule.event_should_be_pascal_case.style = pascal_case
|
||||
dotnet_naming_rule.event_should_be_pascal_case.symbols = event
|
||||
dotnet_naming_rule.interface_should_be_begins_with_i.severity = warning
|
||||
dotnet_naming_rule.interface_should_be_begins_with_i.style = begins_with_i
|
||||
dotnet_naming_rule.interface_should_be_begins_with_i.symbols = interface
|
||||
dotnet_naming_rule.method_should_be_pascal_case.severity = warning
|
||||
dotnet_naming_rule.method_should_be_pascal_case.style = pascal_case
|
||||
dotnet_naming_rule.method_should_be_pascal_case.symbols = method
|
||||
dotnet_naming_rule.non_field_members_should_be_pascal_case.severity = warning
|
||||
dotnet_naming_rule.non_field_members_should_be_pascal_case.style = pascal_case
|
||||
dotnet_naming_rule.non_field_members_should_be_pascal_case.symbols = non_field_members
|
||||
dotnet_naming_rule.private_method_should_be_pascal_case.severity = warning
|
||||
dotnet_naming_rule.private_method_should_be_pascal_case.style = pascal_case
|
||||
dotnet_naming_rule.private_method_should_be_pascal_case.symbols = private_method
|
||||
dotnet_naming_rule.private_or_internal_field_should_be_private_of_internal_field.severity = warning
|
||||
dotnet_naming_rule.private_or_internal_field_should_be_private_of_internal_field.style = private_of_internal_field
|
||||
dotnet_naming_rule.private_or_internal_field_should_be_private_of_internal_field.symbols = private_or_internal_field
|
||||
dotnet_naming_rule.private_or_internal_static_field_should_be_private_of_internal_field.severity = warning
|
||||
dotnet_naming_rule.private_or_internal_static_field_should_be_private_of_internal_field.style = private_of_internal_field
|
||||
dotnet_naming_rule.private_or_internal_static_field_should_be_private_of_internal_field.symbols = private_or_internal_static_field
|
||||
dotnet_naming_rule.property_should_be_pascal_case.severity = warning
|
||||
dotnet_naming_rule.property_should_be_pascal_case.style = pascal_case
|
||||
dotnet_naming_rule.property_should_be_pascal_case.symbols = property
|
||||
dotnet_naming_rule.public_or_protected_field_should_be_private_of_internal_field.severity = warning
|
||||
dotnet_naming_rule.public_or_protected_field_should_be_private_of_internal_field.style = private_of_internal_field
|
||||
dotnet_naming_rule.public_or_protected_field_should_be_private_of_internal_field.symbols = public_or_protected_field
|
||||
dotnet_naming_rule.static_field_should_be_pascal_case.severity = warning
|
||||
dotnet_naming_rule.static_field_should_be_pascal_case.style = pascal_case
|
||||
dotnet_naming_rule.static_field_should_be_pascal_case.symbols = static_field
|
||||
dotnet_naming_rule.static_method_should_be_pascal_case.severity = warning
|
||||
dotnet_naming_rule.static_method_should_be_pascal_case.style = pascal_case
|
||||
dotnet_naming_rule.static_method_should_be_pascal_case.symbols = static_method
|
||||
dotnet_naming_rule.struct_should_be_pascal_case.severity = warning
|
||||
dotnet_naming_rule.struct_should_be_pascal_case.style = pascal_case
|
||||
dotnet_naming_rule.struct_should_be_pascal_case.symbols = struct
|
||||
dotnet_naming_rule.types_should_be_pascal_case.severity = warning
|
||||
dotnet_naming_rule.types_should_be_pascal_case.style = pascal_case
|
||||
dotnet_naming_rule.types_should_be_pascal_case.symbols = types
|
||||
dotnet_naming_style.begins_with_i.capitalization = pascal_case
|
||||
dotnet_naming_style.begins_with_i.required_prefix = I
|
||||
dotnet_naming_style.begins_with_i.required_suffix =
|
||||
dotnet_naming_style.begins_with_i.word_separator =
|
||||
dotnet_naming_style.pascal_case.capitalization = pascal_case
|
||||
dotnet_naming_style.pascal_case.required_prefix =
|
||||
dotnet_naming_style.pascal_case.required_suffix =
|
||||
dotnet_naming_style.pascal_case.word_separator =
|
||||
dotnet_naming_style.private_of_internal_field.capitalization = pascal_case
|
||||
dotnet_naming_style.private_of_internal_field.required_prefix = _
|
||||
dotnet_naming_style.private_of_internal_field.required_suffix =
|
||||
dotnet_naming_style.private_of_internal_field.word_separator =
|
||||
dotnet_naming_symbols.abstract_method.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected
|
||||
dotnet_naming_symbols.abstract_method.applicable_kinds = method
|
||||
dotnet_naming_symbols.abstract_method.required_modifiers = abstract
|
||||
dotnet_naming_symbols.class.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected
|
||||
dotnet_naming_symbols.class.applicable_kinds = class
|
||||
dotnet_naming_symbols.class.required_modifiers =
|
||||
dotnet_naming_symbols.delegate.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected
|
||||
dotnet_naming_symbols.delegate.applicable_kinds = delegate
|
||||
dotnet_naming_symbols.delegate.required_modifiers =
|
||||
dotnet_naming_symbols.enum.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected
|
||||
dotnet_naming_symbols.enum.applicable_kinds = enum
|
||||
dotnet_naming_symbols.enum.required_modifiers =
|
||||
dotnet_naming_symbols.event.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected
|
||||
dotnet_naming_symbols.event.applicable_kinds = event
|
||||
dotnet_naming_symbols.event.required_modifiers =
|
||||
dotnet_naming_symbols.interface.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected
|
||||
dotnet_naming_symbols.interface.applicable_kinds = interface
|
||||
dotnet_naming_symbols.interface.required_modifiers =
|
||||
dotnet_naming_symbols.method.applicable_accessibilities = public
|
||||
dotnet_naming_symbols.method.applicable_kinds = method
|
||||
dotnet_naming_symbols.method.required_modifiers =
|
||||
dotnet_naming_symbols.non_field_members.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected
|
||||
dotnet_naming_symbols.non_field_members.applicable_kinds = property, event, method
|
||||
dotnet_naming_symbols.non_field_members.required_modifiers =
|
||||
dotnet_naming_symbols.private_method.applicable_accessibilities = private
|
||||
dotnet_naming_symbols.private_method.applicable_kinds = method
|
||||
dotnet_naming_symbols.private_method.required_modifiers =
|
||||
dotnet_naming_symbols.private_or_internal_field.applicable_accessibilities = internal, private, private_protected
|
||||
dotnet_naming_symbols.private_or_internal_field.applicable_kinds = field
|
||||
dotnet_naming_symbols.private_or_internal_field.required_modifiers =
|
||||
dotnet_naming_symbols.private_or_internal_static_field.applicable_accessibilities = internal, private, private_protected
|
||||
dotnet_naming_symbols.private_or_internal_static_field.applicable_kinds = field
|
||||
dotnet_naming_symbols.private_or_internal_static_field.required_modifiers = static
|
||||
dotnet_naming_symbols.property.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected
|
||||
dotnet_naming_symbols.property.applicable_kinds = property
|
||||
dotnet_naming_symbols.property.required_modifiers =
|
||||
dotnet_naming_symbols.public_or_protected_field.applicable_accessibilities = public, protected
|
||||
dotnet_naming_symbols.public_or_protected_field.applicable_kinds = field
|
||||
dotnet_naming_symbols.public_or_protected_field.required_modifiers =
|
||||
dotnet_naming_symbols.static_field.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected
|
||||
dotnet_naming_symbols.static_field.applicable_kinds = field
|
||||
dotnet_naming_symbols.static_field.required_modifiers = static
|
||||
dotnet_naming_symbols.static_method.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected
|
||||
dotnet_naming_symbols.static_method.applicable_kinds = method
|
||||
dotnet_naming_symbols.static_method.required_modifiers = static
|
||||
dotnet_naming_symbols.struct.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected
|
||||
dotnet_naming_symbols.struct.applicable_kinds = struct
|
||||
dotnet_naming_symbols.struct.required_modifiers =
|
||||
dotnet_naming_symbols.types.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected
|
||||
dotnet_naming_symbols.types.applicable_kinds = class, struct, interface, enum
|
||||
dotnet_naming_symbols.types.required_modifiers =
|
||||
dotnet_remove_unnecessary_suppression_exclusions = 0
|
||||
dotnet_separate_import_directive_groups = true
|
||||
dotnet_sort_system_directives_first = true
|
||||
dotnet_style_allow_multiple_blank_lines_experimental = false:warning
|
||||
dotnet_style_allow_statement_immediately_after_block_experimental = true
|
||||
dotnet_style_coalesce_expression = true
|
||||
dotnet_style_collection_initializer = true:warning
|
||||
dotnet_style_explicit_tuple_names = true:warning
|
||||
dotnet_style_namespace_match_folder = true
|
||||
dotnet_style_null_propagation = true:warning
|
||||
dotnet_style_object_initializer = true:warning
|
||||
dotnet_style_operator_placement_when_wrapping = beginning_of_line
|
||||
dotnet_style_parentheses_in_arithmetic_binary_operators = always_for_clarity
|
||||
dotnet_style_parentheses_in_other_binary_operators = always_for_clarity
|
||||
dotnet_style_parentheses_in_other_operators = never_if_unnecessary
|
||||
dotnet_style_parentheses_in_relational_binary_operators = always_for_clarity
|
||||
dotnet_style_predefined_type_for_locals_parameters_members = true
|
||||
dotnet_style_predefined_type_for_member_access = true:warning
|
||||
dotnet_style_prefer_auto_properties = true:warning
|
||||
dotnet_style_prefer_compound_assignment = true:warning
|
||||
dotnet_style_prefer_conditional_expression_over_assignment = false
|
||||
dotnet_style_prefer_conditional_expression_over_return = false
|
||||
dotnet_style_prefer_inferred_anonymous_type_member_names = true:warning
|
||||
dotnet_style_prefer_inferred_tuple_names = true:warning
|
||||
dotnet_style_prefer_is_null_check_over_reference_equality_method = true:warning
|
||||
dotnet_style_prefer_simplified_boolean_expressions = true:warning
|
||||
dotnet_style_prefer_simplified_interpolation = true
|
||||
dotnet_style_qualification_for_event = false:error
|
||||
dotnet_style_qualification_for_field = false
|
||||
dotnet_style_qualification_for_method = false:error
|
||||
dotnet_style_qualification_for_property = false:error
|
||||
dotnet_style_readonly_field = true:warning
|
||||
dotnet_style_require_accessibility_modifiers = for_non_interface_members
|
||||
end_of_line = crlf
|
||||
file_header_template = unset
|
||||
indent_size = 4
|
||||
indent_style = space
|
||||
insert_final_newline = false
|
||||
root = true
|
||||
tab_width = 4
|
||||
# https://docs.microsoft.com/en-us/dotnet/fundamentals/code-analysis/quality-rules/ca1822
|
||||
# https://github.com/dotnet/aspnetcore/blob/main/.editorconfig
|
||||
# https://github.com/dotnet/project-system/blob/main/.editorconfig
|
||||
|
||||
# Question
|
||||
csharp_prefer_simple_using_statement = false # Question
|
||||
csharp_style_expression_bodied_constructors = when_on_single_line:none # Question
|
||||
csharp_style_expression_bodied_properties = true # Question
|
||||
csharp_style_implicit_object_creation_when_type_is_apparent = true:warning # Question
|
||||
csharp_style_pattern_matching_over_as_with_null_check = false # Question
|
||||
csharp_style_prefer_pattern_matching = false # Question
|
||||
csharp_style_prefer_range_operator = false # Question
|
||||
csharp_style_prefer_switch_expression = false # Question
|
||||
csharp_style_unused_value_assignment_preference = unused_local_variable # Question
|
||||
csharp_style_unused_value_expression_statement_preference = false # Question
|
||||
csharp_style_var_elsewhere = false:none # Question
|
||||
csharp_style_var_for_built_in_types = false:none # Question
|
||||
csharp_style_var_when_type_is_apparent = false:warning # Question
|
||||
dotnet_diagnostic.CA1001.severity = none # Question - Types that own disposable fields should be disposable
|
||||
dotnet_diagnostic.CA1051.severity = none # Question - Do not declare visible instance fields
|
||||
dotnet_diagnostic.CA1416.severity = none # Question - This call site is reachable on all platforms.
|
||||
dotnet_diagnostic.CA1510.severity = none # Question - Use
|
||||
dotnet_diagnostic.CA1834.severity = none # CA1834: Consider using 'StringBuilder.Append(char)' when applicable
|
||||
dotnet_diagnostic.CA1860.severity = none # Question - Avoid using
|
||||
dotnet_diagnostic.CA1862.severity = none # Question - Prefer using
|
||||
dotnet_diagnostic.CA2208.severity = none # Question - Instantiate argument exceptions correctly
|
||||
dotnet_diagnostic.CA2211.severity = none # Question - Non-constant fields should not be visible
|
||||
dotnet_diagnostic.CA2249.severity = none # Question - Use
|
||||
dotnet_diagnostic.CA2253.severity = none # Question - Named placeholders should not be numeric values
|
||||
dotnet_diagnostic.CS0103.severity = none # Question - The name
|
||||
dotnet_diagnostic.CS0168.severity = none # Question - The variable
|
||||
dotnet_diagnostic.CS0219.severity = none # Question - The variable
|
||||
dotnet_diagnostic.CS0612.severity = none # Question - is obsolete
|
||||
dotnet_diagnostic.CS0618.severity = none # Question - Compiler Warning (level 2)
|
||||
dotnet_diagnostic.CS0659.severity = none # Question - Compiler Warning (level 3)
|
||||
dotnet_diagnostic.CS8019.severity = warning # Question - Unnecessary using directive.
|
||||
dotnet_diagnostic.CS8600.severity = none # Question - Converting null literal or possible null value to non-nullable type
|
||||
dotnet_diagnostic.CS8602.severity = none # Question - Dereference of a possibly null reference.
|
||||
dotnet_diagnostic.CS8603.severity = none # Question - Possible null reference return
|
||||
dotnet_diagnostic.CS8604.severity = none # Question - Possible null reference argument for parameter.
|
||||
dotnet_diagnostic.CS8618.severity = none # Question - Non-nullable variable must contain a non-null value when exiting constructor
|
||||
dotnet_diagnostic.CS8625.severity = none # Question - Cannot convert null literal to non-nullable reference type.
|
||||
dotnet_diagnostic.CS8629.severity = none # Question - Nullable value type may be null
|
||||
dotnet_diagnostic.CS8765.severity = none # Question - Nullability of type of parameter
|
||||
dotnet_diagnostic.IDE0005.severity = none # Question - Remove unnecessary using directives
|
||||
dotnet_diagnostic.IDE0008.severity = warning # Question - Use explicit type instead of
|
||||
dotnet_diagnostic.IDE0017.severity = none # Question - Object initialization can be simplified
|
||||
dotnet_diagnostic.IDE0019.severity = none # Question - Use pattern matching
|
||||
dotnet_diagnostic.IDE0021.severity = none # Question - Use expression body for constructor
|
||||
dotnet_diagnostic.IDE0022.severity = none # Question - Use expression body for method
|
||||
dotnet_diagnostic.IDE0025.severity = none # Question - Use expression body for property
|
||||
dotnet_diagnostic.IDE0027.severity = none # Question - Use expression body for accessor
|
||||
dotnet_diagnostic.IDE0028.severity = none # Question - Use collection initializers or expressions
|
||||
dotnet_diagnostic.IDE0031.severity = none # Question - Null check can be simplified
|
||||
dotnet_diagnostic.IDE0032.severity = none # Question - Use auto property
|
||||
dotnet_diagnostic.IDE0037.severity = none # Question - Member name can be simplified
|
||||
dotnet_diagnostic.IDE0041.severity = none # Question - Null check can be simplified
|
||||
dotnet_diagnostic.IDE0047.severity = none # Question - Parentheses preferences
|
||||
dotnet_diagnostic.IDE0049.severity = warning # Question - Name can be simplified
|
||||
dotnet_diagnostic.IDE0051.severity = none # Question - Remove unused private member
|
||||
dotnet_diagnostic.IDE0053.severity = none # Question - Use expression body for lambdas
|
||||
dotnet_diagnostic.IDE0054.severity = none # Question - Use compound assignment
|
||||
dotnet_diagnostic.IDE0055.severity = none # Question - Formatting rule
|
||||
dotnet_diagnostic.IDE0057.severity = none # Question - Substring can be simplified
|
||||
dotnet_diagnostic.IDE0058.severity = none # Question - Remove unnecessary expression value
|
||||
dotnet_diagnostic.IDE0059.severity = none # Question - Unnecessary assignment of a value to
|
||||
dotnet_diagnostic.IDE0060.severity = none # Question - Remove unused parameter
|
||||
dotnet_diagnostic.IDE0063.severity = none # Question - Use simple
|
||||
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.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
|
||||
dotnet_diagnostic.IDE0300.severity = none # Question - Collection initialization can be simplified
|
||||
dotnet_diagnostic.IDE1006.severity = none # Question - Use collection expression for builder dotnet_style_prefer_collection_expression
|
||||
dotnet_style_null_propagation = false # Question
|
||||
dotnet_style_object_initializer = false # Question
|
||||
dotnet_style_prefer_auto_properties = false # Question
|
||||
dotnet_style_allow_statement_immediately_after_block_experimental = true # Question
|
||||
dotnet_style_prefer_is_null_check_over_reference_equality_method = false # Question
|
||||
dotnet_style_prefer_inferred_anonymous_type_member_names = false:warning # Question
|
1
Fab2ApprovalSystem/.vscode/format-report.json
vendored
Normal file
1
Fab2ApprovalSystem/.vscode/format-report.json
vendored
Normal file
@ -0,0 +1 @@
|
||||
[]
|
30
Fab2ApprovalSystem/.vscode/launch.json
vendored
Normal file
30
Fab2ApprovalSystem/.vscode/launch.json
vendored
Normal file
@ -0,0 +1,30 @@
|
||||
{
|
||||
// Use IntelliSense to learn about possible attributes.
|
||||
// Hover to view descriptions of existing attributes.
|
||||
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
|
||||
"version": "0.2.0",
|
||||
"configurations": [
|
||||
{
|
||||
"name": ".NET Core Launch (console)",
|
||||
"type": "coreclr",
|
||||
"request": "launch",
|
||||
"preLaunchTask": "build",
|
||||
"program": "${workspaceFolder}/bin/Debug/net8.0/win-x64/Fab2ApprovalSystem.dll",
|
||||
"args": [],
|
||||
"cwd": "${workspaceFolder}",
|
||||
"console": "integratedTerminal",
|
||||
"stopAtEntry": false
|
||||
},
|
||||
{
|
||||
"name": ".NET Core Attach",
|
||||
"type": "coreclr",
|
||||
"request": "attach"
|
||||
},
|
||||
{
|
||||
"type": "node",
|
||||
"request": "launch",
|
||||
"name": "node Launch Current Opened File",
|
||||
"program": "${file}"
|
||||
}
|
||||
]
|
||||
}
|
424
Fab2ApprovalSystem/.vscode/settings.json
vendored
Normal file
424
Fab2ApprovalSystem/.vscode/settings.json
vendored
Normal file
@ -0,0 +1,424 @@
|
||||
{
|
||||
"[markdown]": {
|
||||
"editor.wordWrap": "off"
|
||||
},
|
||||
"files.exclude": {
|
||||
"**/.git": false,
|
||||
"**/node_modules": true
|
||||
},
|
||||
"files.watcherExclude": {
|
||||
"**/node_modules": true
|
||||
},
|
||||
"cSpell.words": [
|
||||
"abutton",
|
||||
"accessibilities",
|
||||
"accodingly",
|
||||
"acknowledgmentby",
|
||||
"Acks",
|
||||
"actionsheet",
|
||||
"Additonal",
|
||||
"Addtional",
|
||||
"againm",
|
||||
"agendaview",
|
||||
"Antlr",
|
||||
"Appover",
|
||||
"Appprrovers",
|
||||
"Approvalog",
|
||||
"Aprovers",
|
||||
"Aproverslist",
|
||||
"asax",
|
||||
"aspnetmvc",
|
||||
"Assignedto",
|
||||
"Atachments",
|
||||
"Attachemnt",
|
||||
"Attachemnts",
|
||||
"Attchment",
|
||||
"auditee",
|
||||
"Auditee",
|
||||
"Auditees",
|
||||
"automaically",
|
||||
"Autthorized",
|
||||
"beacuase",
|
||||
"beforeunload",
|
||||
"Belguim",
|
||||
"bfound",
|
||||
"bgcolor",
|
||||
"Bies",
|
||||
"binded",
|
||||
"blackbackground",
|
||||
"blackhover",
|
||||
"blackpressed",
|
||||
"blueenergy",
|
||||
"blueopal",
|
||||
"buttongroup",
|
||||
"BYMRB",
|
||||
"bytesgot",
|
||||
"CAID",
|
||||
"casection",
|
||||
"CAXXXX",
|
||||
"CCPCR",
|
||||
"CCPCRB",
|
||||
"cellspacing",
|
||||
"Cheeso's",
|
||||
"chkbx",
|
||||
"Clib",
|
||||
"colorpicker",
|
||||
"columnmenu",
|
||||
"columnsreorder",
|
||||
"columnsresize",
|
||||
"comming",
|
||||
"Containmen",
|
||||
"Copmments",
|
||||
"correctiv",
|
||||
"Correctivet",
|
||||
"Creat",
|
||||
"currentd",
|
||||
"Cyle",
|
||||
"dadada",
|
||||
"darkbluehover",
|
||||
"darkbluepressed",
|
||||
"darkred",
|
||||
"datafields",
|
||||
"datasource",
|
||||
"dataviz",
|
||||
"datepicker",
|
||||
"datetimepicker",
|
||||
"dayview",
|
||||
"Deletet",
|
||||
"Delgation",
|
||||
"DENITED",
|
||||
"Deparmtent",
|
||||
"departmentids",
|
||||
"Descirption",
|
||||
"devprog",
|
||||
"dfeffc",
|
||||
"Disp",
|
||||
"Dispo",
|
||||
"Dispoitio",
|
||||
"Dispos",
|
||||
"Dispositon",
|
||||
"Dispostion",
|
||||
"Dispostions",
|
||||
"dispotypevalidation",
|
||||
"Docbase",
|
||||
"Documentum",
|
||||
"Documetum",
|
||||
"dont",
|
||||
"downlaoded",
|
||||
"draganddrop",
|
||||
"dragcancel",
|
||||
"dropdownlist",
|
||||
"Eamils",
|
||||
"ECNPCRB",
|
||||
"Ecns",
|
||||
"edmx",
|
||||
"EECN",
|
||||
"emai",
|
||||
"emailparams",
|
||||
"Emergrncy",
|
||||
"energyblue",
|
||||
"Eran",
|
||||
"Esql",
|
||||
"ETECN",
|
||||
"EXCELOPENXML",
|
||||
"existinglocation",
|
||||
"Expando",
|
||||
"extrafield",
|
||||
"fadc",
|
||||
"fbec",
|
||||
"fcfdfd",
|
||||
"fdff",
|
||||
"fece",
|
||||
"feeebd",
|
||||
"ffdc",
|
||||
"ffdd",
|
||||
"fieldset",
|
||||
"FILIPE",
|
||||
"filtermenu",
|
||||
"Fldr",
|
||||
"flintstone",
|
||||
"FLOWLOCS",
|
||||
"FMEA",
|
||||
"ftplib",
|
||||
"FTPSPN",
|
||||
"GETDATE",
|
||||
"gitea",
|
||||
"globaldocudms",
|
||||
"glyphicons",
|
||||
"groupable",
|
||||
"Guids",
|
||||
"halflings",
|
||||
"Hexsize",
|
||||
"highcontrast",
|
||||
"Hmac",
|
||||
"holdsteps",
|
||||
"hostspecific",
|
||||
"icenium",
|
||||
"IECN",
|
||||
"imagebrowser",
|
||||
"IMRB",
|
||||
"Infineon",
|
||||
"Insertd",
|
||||
"inverseicons",
|
||||
"IPCRB",
|
||||
"ISADMIN",
|
||||
"islast",
|
||||
"ISNULL",
|
||||
"ITAR",
|
||||
"jquery",
|
||||
"jqueryval",
|
||||
"jqwidgets",
|
||||
"jqxbuttongroup",
|
||||
"jqxbuttons",
|
||||
"jqxcalendar",
|
||||
"jqxchart",
|
||||
"jqxcheckbox",
|
||||
"jqxcolorpicker",
|
||||
"jqxcombobox",
|
||||
"jqxcore",
|
||||
"jqxdata",
|
||||
"jqxdatatable",
|
||||
"jqxdatetimeinput",
|
||||
"jqxdocking",
|
||||
"jqxdockpanel",
|
||||
"jqxdragdrop",
|
||||
"jqxdropdownbutton",
|
||||
"jqxdropdownlist",
|
||||
"jqxexpander",
|
||||
"jqxgauge",
|
||||
"jqxgrid",
|
||||
"jqxinput",
|
||||
"jqxknockout",
|
||||
"jqxlistbox",
|
||||
"jqxlistmenu",
|
||||
"jqxmaskedinput",
|
||||
"jqxmenu",
|
||||
"jqxnavigationbar",
|
||||
"jqxnumberinput",
|
||||
"jqxpanel",
|
||||
"jqxpasswordinput",
|
||||
"jqxprogressbar",
|
||||
"jqxradiobutton",
|
||||
"jqxrangeselector",
|
||||
"jqxrating",
|
||||
"jqxresponse",
|
||||
"jqxscrollbar",
|
||||
"jqxscrollview",
|
||||
"jqxslider",
|
||||
"jqxsplitter",
|
||||
"jqxswitchbutton",
|
||||
"jqxtabs",
|
||||
"jqxtooltip",
|
||||
"jqxtouch",
|
||||
"jqxtree",
|
||||
"jqxtreegrid",
|
||||
"jqxtreemap",
|
||||
"jqxvalidator",
|
||||
"jqxwindow",
|
||||
"kendogridcustom",
|
||||
"kendoui",
|
||||
"labelelement",
|
||||
"labelledby",
|
||||
"Leanred",
|
||||
"lightgray",
|
||||
"linkbutton",
|
||||
"Linq",
|
||||
"Listdiv",
|
||||
"listview",
|
||||
"Lnks",
|
||||
"localfilename",
|
||||
"loclist",
|
||||
"logis",
|
||||
"logtext",
|
||||
"loopmis",
|
||||
"lotdispo",
|
||||
"LOTDISPSITION",
|
||||
"Lotfile",
|
||||
"lotlist",
|
||||
"lotstatusoption",
|
||||
"LTRIM",
|
||||
"MADUREIRA",
|
||||
"mailrelay",
|
||||
"MDTM",
|
||||
"meego",
|
||||
"meetingid",
|
||||
"menubutton",
|
||||
"mesafi",
|
||||
"metroblack",
|
||||
"metrodark",
|
||||
"miliseconds",
|
||||
"modalview",
|
||||
"modernizr",
|
||||
"Modernizr",
|
||||
"monthview",
|
||||
"MRBIs",
|
||||
"Mrbs",
|
||||
"msecs",
|
||||
"multipleextended",
|
||||
"Navigatable",
|
||||
"nbsp",
|
||||
"newbase",
|
||||
"newchange",
|
||||
"newdi",
|
||||
"newfilename",
|
||||
"newsource",
|
||||
"Newtonsoft",
|
||||
"notications",
|
||||
"Notifcation",
|
||||
"Notifyf",
|
||||
"NTLM",
|
||||
"Nullcc",
|
||||
"numerictextbox",
|
||||
"objdata",
|
||||
"OCAP",
|
||||
"occured",
|
||||
"odata",
|
||||
"oldfilename",
|
||||
"OLHOLD",
|
||||
"onclick",
|
||||
"onmousemove",
|
||||
"OPDESC",
|
||||
"OPENQUERY",
|
||||
"Oper",
|
||||
"operationslist",
|
||||
"Orginator",
|
||||
"Originatorname",
|
||||
"Ouellette",
|
||||
"Owin",
|
||||
"pageable",
|
||||
"Pageable",
|
||||
"panelbar",
|
||||
"parentid",
|
||||
"parminput",
|
||||
"parms",
|
||||
"Parms",
|
||||
"particula",
|
||||
"pasv",
|
||||
"PASV",
|
||||
"PATINDEX",
|
||||
"PCRB",
|
||||
"PCRBID",
|
||||
"pcrvalues",
|
||||
"pdbonly",
|
||||
"Preventitive",
|
||||
"preventivet",
|
||||
"Prevetative",
|
||||
"proces",
|
||||
"Processedl",
|
||||
"procs",
|
||||
"productfamilies",
|
||||
"progess",
|
||||
"progressbar",
|
||||
"qrcode",
|
||||
"Quanityt",
|
||||
"rangebar",
|
||||
"Recep",
|
||||
"Recepient",
|
||||
"recieved",
|
||||
"recordlock",
|
||||
"remotefilename",
|
||||
"reorderable",
|
||||
"reportform",
|
||||
"reportslist",
|
||||
"reportslistdiv",
|
||||
"Reqquired",
|
||||
"Reqs",
|
||||
"Requiest",
|
||||
"Responsibles",
|
||||
"RETR",
|
||||
"Revisioing",
|
||||
"Revisioned",
|
||||
"Revison",
|
||||
"rgba",
|
||||
"rkotian",
|
||||
"RNFR",
|
||||
"RNTO",
|
||||
"Roless",
|
||||
"roundbg",
|
||||
"RTRIM",
|
||||
"SAMDB",
|
||||
"scroller",
|
||||
"scrollview",
|
||||
"seleced",
|
||||
"selectionlog",
|
||||
"Selectpart",
|
||||
"sess",
|
||||
"Sfisharepoint",
|
||||
"shinyblack",
|
||||
"showpassword",
|
||||
"SIGNON",
|
||||
"simpleparser",
|
||||
"slddrw",
|
||||
"sldprt",
|
||||
"sortasc",
|
||||
"sortascbutton",
|
||||
"sortdesc",
|
||||
"sortdescbutton",
|
||||
"sortremove",
|
||||
"sparkline",
|
||||
"splitview",
|
||||
"SPNMRB",
|
||||
"SPNPDB",
|
||||
"SSRS",
|
||||
"Sssign",
|
||||
"Staus",
|
||||
"stylesheet",
|
||||
"Submited",
|
||||
"subrole",
|
||||
"subroles",
|
||||
"Succefully",
|
||||
"Succesfully",
|
||||
"sucessfully",
|
||||
"SURP",
|
||||
"Swashbuckle",
|
||||
"SWRN",
|
||||
"tabindex",
|
||||
"tabstrip",
|
||||
"Tahoma",
|
||||
"taskcompleted",
|
||||
"Tasklist",
|
||||
"Taveler",
|
||||
"TECN",
|
||||
"TECNs",
|
||||
"TEMIRWAP",
|
||||
"tempecd",
|
||||
"tempimplement",
|
||||
"templabel",
|
||||
"tempvalue",
|
||||
"TEMSA",
|
||||
"timepicker",
|
||||
"Tobe",
|
||||
"Toplevel",
|
||||
"Totrav",
|
||||
"trainingby",
|
||||
"Traininglist",
|
||||
"traininglistdiv",
|
||||
"transanction",
|
||||
"Trav",
|
||||
"Traveller",
|
||||
"Traverler",
|
||||
"TRAVLELER",
|
||||
"Travler",
|
||||
"TREEVIEW",
|
||||
"trigerred",
|
||||
"ttinclude",
|
||||
"Uhandled",
|
||||
"Updat",
|
||||
"Uplaod",
|
||||
"Upto",
|
||||
"userevents",
|
||||
"userids",
|
||||
"userlist",
|
||||
"Validatable",
|
||||
"valueelement",
|
||||
"Variabls",
|
||||
"Verdana",
|
||||
"vgrid",
|
||||
"viewmodel",
|
||||
"vsdoc",
|
||||
"whethere",
|
||||
"windowsphone",
|
||||
"Winsock",
|
||||
"worlflow"
|
||||
]
|
||||
}
|
20
Fab2ApprovalSystem/.vscode/tasks.json
vendored
Normal file
20
Fab2ApprovalSystem/.vscode/tasks.json
vendored
Normal file
@ -0,0 +1,20 @@
|
||||
{
|
||||
"version": "2.0.0",
|
||||
"tasks": [
|
||||
{
|
||||
"label": "MSBuild",
|
||||
"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=Debug;TargetFrameworkVersion=v4.8",
|
||||
"Fab2ApprovalSystem.csproj"
|
||||
],
|
||||
"problemMatcher": "$msCompile"
|
||||
}
|
||||
]
|
||||
}
|
31
Fab2ApprovalSystem/App_Start/.editorconfig
Normal file
31
Fab2ApprovalSystem/App_Start/.editorconfig
Normal file
@ -0,0 +1,31 @@
|
||||
|
||||
#### .NET Coding Conventions ####
|
||||
|
||||
# Organize usings
|
||||
dotnet_separate_import_directive_groups = true
|
||||
dotnet_sort_system_directives_first = true
|
||||
|
||||
# New line preferences
|
||||
csharp_style_allow_blank_line_after_colon_in_constructor_initializer_experimental = true
|
||||
csharp_style_allow_blank_line_after_token_in_arrow_expression_clause_experimental = true
|
||||
csharp_style_allow_blank_line_after_token_in_conditional_expression_experimental = true
|
||||
csharp_style_allow_blank_lines_between_consecutive_braces_experimental = false
|
||||
csharp_style_allow_embedded_statements_on_same_line_experimental = true
|
||||
|
||||
#### C# Formatting Rules ####
|
||||
|
||||
# New line preferences
|
||||
csharp_new_line_before_catch = false
|
||||
csharp_new_line_before_else = false
|
||||
csharp_new_line_before_finally = false
|
||||
csharp_new_line_before_members_in_anonymous_types = true
|
||||
csharp_new_line_before_members_in_object_initializers = true
|
||||
csharp_new_line_before_open_brace = none
|
||||
csharp_new_line_between_query_expression_clauses = true
|
||||
|
||||
####
|
||||
|
||||
insert_final_newline = false
|
||||
csharp_style_namespace_declarations = file_scoped:warning
|
||||
dotnet_diagnostic.IDE0161.severity = warning # Question - Namespace declaration preferences
|
||||
dotnet_diagnostic.IDE2000.severity = error # IDE2000: Allow multiple blank lines
|
@ -1,13 +1,11 @@
|
||||
using System.Web;
|
||||
using System.Web.Optimization;
|
||||
|
||||
namespace Fab2ApprovalSystem
|
||||
{
|
||||
public class BundleConfig
|
||||
{
|
||||
namespace Fab2ApprovalSystem;
|
||||
|
||||
public class BundleConfig {
|
||||
// For more information on bundling, visit http://go.microsoft.com/fwlink/?LinkId=301862
|
||||
public static void RegisterBundles(BundleCollection bundles)
|
||||
{
|
||||
public static void RegisterBundles(BundleCollection bundles) {
|
||||
bundles.Add(new ScriptBundle("~/bundles/jquery").Include(
|
||||
"~/Scripts/jquery-{version}.js",
|
||||
"~/Scripts/jquery-ui-{version}.js")
|
||||
@ -30,7 +28,6 @@ namespace Fab2ApprovalSystem
|
||||
"~/Scripts/respond.min.js",
|
||||
"~/Scripts/common.js"));
|
||||
|
||||
|
||||
bundles.Add(new ScriptBundle("~/bundles/kendo").Include(
|
||||
"~/Scripts/kendo/kendo.all.min.js",
|
||||
"~/Scripts/kendo/kendo.aspnetmvc.min.js"));
|
||||
@ -45,7 +42,6 @@ namespace Fab2ApprovalSystem
|
||||
"~/Scripts/jqwidgets/styles/jqx.arctic.css",
|
||||
"~/Scripts/jqwidgets/styles/jqx.energyblue.css"));
|
||||
|
||||
|
||||
bundles.Add(new ScriptBundle("~/Content/jqw/jq").Include(
|
||||
"~/Scripts/jqwidgets/jqxcore.js",
|
||||
"~/Scripts/jqwidgets/jqxdata.js",
|
||||
@ -55,12 +51,8 @@ namespace Fab2ApprovalSystem
|
||||
"~/Scripts/jqwidgets/jqxpanel.js",
|
||||
"~/Scripts/jqwidgets/jqxtree.js"));
|
||||
|
||||
|
||||
|
||||
|
||||
bundles.Add(new StyleBundle("~/Content/css").Include("~/Content/bootstrap.min.css",
|
||||
"~/Content/site.css",
|
||||
"~/Content/jquery-ui.css"));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1,13 +1,12 @@
|
||||
using System.Web;
|
||||
#if !NET8
|
||||
using System.Web.Mvc;
|
||||
#endif
|
||||
|
||||
namespace Fab2ApprovalSystem
|
||||
{
|
||||
public class FilterConfig
|
||||
{
|
||||
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
|
||||
{
|
||||
namespace Fab2ApprovalSystem;
|
||||
|
||||
public class FilterConfig {
|
||||
public static void RegisterGlobalFilters(GlobalFilterCollection filters) {
|
||||
filters.Add(new HandleErrorAttribute());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -3,15 +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)
|
||||
{
|
||||
namespace Fab2ApprovalSystem;
|
||||
|
||||
public class RouteConfig {
|
||||
public static void RegisterRoutes(RouteCollection routes) {
|
||||
#if !NET8
|
||||
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
|
||||
|
||||
routes.MapRoute(
|
||||
@ -22,11 +23,6 @@ namespace Fab2ApprovalSystem
|
||||
// otherwise MVC generates the wrong form action url
|
||||
defaults: new { controller = "Home", action = "MyTasks", id = UrlParameter.Optional }
|
||||
);
|
||||
//routes.MapHttpRoute(
|
||||
// name: "ApiRoute",
|
||||
// routeTemplate: "api/{controller}/{id}",
|
||||
// defaults: new { id = RouteParameter.Optional }
|
||||
//);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
}
|
@ -1,38 +1,20 @@
|
||||
using Microsoft.AspNet.Identity;
|
||||
using Microsoft.Owin;
|
||||
using Microsoft.Owin.Security.Cookies;
|
||||
|
||||
using Owin;
|
||||
|
||||
namespace Fab2ApprovalSystem
|
||||
{
|
||||
public partial class Startup
|
||||
{
|
||||
namespace Fab2ApprovalSystem;
|
||||
|
||||
public partial class Startup {
|
||||
// For more information on configuring authentication, please visit http://go.microsoft.com/fwlink/?LinkId=301864
|
||||
public void ConfigureAuth(IAppBuilder app)
|
||||
{
|
||||
public void ConfigureAuth(IAppBuilder app) {
|
||||
// Enable the application to use a cookie to store information for the signed in user
|
||||
app.UseCookieAuthentication(new CookieAuthenticationOptions
|
||||
{
|
||||
app.UseCookieAuthentication(new CookieAuthenticationOptions {
|
||||
AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
|
||||
LoginPath = new PathString("/Account/Login")
|
||||
});
|
||||
// Use a cookie to temporarily store information about a user logging in with a third party login provider
|
||||
app.UseExternalSignInCookie(DefaultAuthenticationTypes.ExternalCookie);
|
||||
|
||||
// Uncomment the following lines to enable logging in with third party login providers
|
||||
//app.UseMicrosoftAccountAuthentication(
|
||||
// clientId: "",
|
||||
// clientSecret: "");
|
||||
|
||||
//app.UseTwitterAuthentication(
|
||||
// consumerKey: "",
|
||||
// consumerSecret: "");
|
||||
|
||||
//app.UseFacebookAuthentication(
|
||||
// appId: "",
|
||||
// appSecret: "");
|
||||
|
||||
//app.UseGoogleAuthentication();
|
||||
}
|
||||
// app.UseExternalSignInCookie(DefaultAuthenticationTypes.ExternalCookie);
|
||||
}
|
||||
}
|
@ -1,21 +1,17 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Web.Http;
|
||||
using System.Web.Http;
|
||||
|
||||
namespace Fab2ApprovalSystem
|
||||
{
|
||||
public static class WebApiConfig
|
||||
{
|
||||
public static void Register(HttpConfiguration config)
|
||||
{
|
||||
namespace Fab2ApprovalSystem;
|
||||
|
||||
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
|
||||
}
|
||||
}
|
@ -13,6 +13,7 @@
|
||||
padding: 0 2px;
|
||||
}
|
||||
}
|
||||
|
||||
body {
|
||||
padding-top: 50px;
|
||||
padding-bottom: 20px;
|
||||
@ -101,6 +102,21 @@ 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;
|
||||
}
|
||||
|
||||
.navbar-header-hidden {
|
||||
display: none;
|
||||
}
|
31
Fab2ApprovalSystem/Controllers/.editorconfig
Normal file
31
Fab2ApprovalSystem/Controllers/.editorconfig
Normal file
@ -0,0 +1,31 @@
|
||||
|
||||
#### .NET Coding Conventions ####
|
||||
|
||||
# Organize usings
|
||||
dotnet_separate_import_directive_groups = true
|
||||
dotnet_sort_system_directives_first = true
|
||||
|
||||
# New line preferences
|
||||
csharp_style_allow_blank_line_after_colon_in_constructor_initializer_experimental = true
|
||||
csharp_style_allow_blank_line_after_token_in_arrow_expression_clause_experimental = true
|
||||
csharp_style_allow_blank_line_after_token_in_conditional_expression_experimental = true
|
||||
csharp_style_allow_blank_lines_between_consecutive_braces_experimental = false
|
||||
csharp_style_allow_embedded_statements_on_same_line_experimental = true
|
||||
|
||||
#### C# Formatting Rules ####
|
||||
|
||||
# New line preferences
|
||||
csharp_new_line_before_catch = false
|
||||
csharp_new_line_before_else = false
|
||||
csharp_new_line_before_finally = false
|
||||
csharp_new_line_before_members_in_anonymous_types = true
|
||||
csharp_new_line_before_members_in_object_initializers = true
|
||||
csharp_new_line_before_open_brace = none
|
||||
csharp_new_line_between_query_expression_clauses = true
|
||||
|
||||
####
|
||||
|
||||
insert_final_newline = false
|
||||
csharp_style_namespace_declarations = file_scoped:warning
|
||||
dotnet_diagnostic.IDE0161.severity = warning # Question - Namespace declaration preferences
|
||||
dotnet_diagnostic.IDE2000.severity = error # IDE2000: Allow multiple blank lines
|
@ -1,62 +1,89 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Security.Claims;
|
||||
using System.Threading.Tasks;
|
||||
#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;
|
||||
using Fab2ApprovalSystem.Models;
|
||||
using System.Web.Security;
|
||||
using Fab2ApprovalSystem.Misc;
|
||||
using Fab2ApprovalSystem.DMO;
|
||||
#endif
|
||||
|
||||
#if !NET8
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Net;
|
||||
using System.Net.Http;
|
||||
using System.Security.Claims;
|
||||
using System.Threading.Tasks;
|
||||
using Newtonsoft.Json;
|
||||
#endif
|
||||
|
||||
namespace Fab2ApprovalSystem.Controllers;
|
||||
|
||||
namespace Fab2ApprovalSystem.Controllers
|
||||
{
|
||||
[Authorize]
|
||||
public class AccountController : Controller
|
||||
{
|
||||
#if NET8
|
||||
[Route("[controller]")]
|
||||
#endif
|
||||
public class AccountController : Controller {
|
||||
|
||||
#if !NET8
|
||||
|
||||
public AccountController()
|
||||
: this(new UserManager<ApplicationUser>(new UserStore<ApplicationUser>(new ApplicationDbContext())))
|
||||
{
|
||||
: this(new UserManager<ApplicationUser>(new UserStore<ApplicationUser>(new ApplicationDbContext()))) {
|
||||
}
|
||||
|
||||
|
||||
public AccountController(UserManager<ApplicationUser> userManager)
|
||||
{
|
||||
public AccountController(UserManager<ApplicationUser> userManager) {
|
||||
UserManager = userManager;
|
||||
}
|
||||
|
||||
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 = "*")]
|
||||
public ActionResult Login(string returnUrl)
|
||||
{
|
||||
#endif
|
||||
public ActionResult Login(string returnUrl) {
|
||||
ViewBag.ReturnUrl = returnUrl;
|
||||
return View();
|
||||
}
|
||||
|
||||
#if !NET8
|
||||
|
||||
private void SetSessionParameters(LoginResult loginResult, LoginModel user) {
|
||||
GlobalVars.SetSessionParameters(GetSession(), loginResult, user);
|
||||
|
||||
FormsAuthentication.SetAuthCookie(user.LoginID, true);
|
||||
}
|
||||
|
||||
[HttpPost]
|
||||
[AllowAnonymous]
|
||||
[ValidateAntiForgeryToken]
|
||||
public ActionResult Login(LoginModel model, string returnUrl)
|
||||
{
|
||||
try
|
||||
{
|
||||
//if (ModelState.IsValid && WebSecurity.Login(model.UserName, model.Password, persistCookie: model.RememberMe))
|
||||
//{
|
||||
// return RedirectToLocal(returnUrl);
|
||||
//}
|
||||
|
||||
UserAccountDMO userDMO = new UserAccountDMO();
|
||||
public async Task<ActionResult> Login(LoginModel model, string returnUrl) {
|
||||
try {
|
||||
bool isLoginValid;
|
||||
MembershipProvider domainProvider;
|
||||
|
||||
HttpClient httpClient = HttpClientFactory.Create();
|
||||
httpClient.BaseAddress = new Uri(GlobalVars.AppSettings.ApiBaseUrl);
|
||||
|
||||
LoginResult loginResult = await AccountDMO.LoginAsync(httpClient, model);
|
||||
|
||||
#if (DEBUG)
|
||||
isLoginValid = true;
|
||||
@ -65,449 +92,258 @@ namespace Fab2ApprovalSystem.Controllers
|
||||
#if (!DEBUG)
|
||||
|
||||
bool isIFX = false;
|
||||
//domainProvider = Membership.Providers["NA_ADMembershipProvider"];
|
||||
//isLoginValid = domainProvider.ValidateUser(model.LoginID, model.Password);
|
||||
|
||||
if (GlobalVars.DBConnection.ToUpper() == "TEST" || GlobalVars.DBConnection.ToUpper() == "QUALITY")
|
||||
if (GlobalVars.DBConnection.ToUpper() == "TEST" || GlobalVars.DBConnection.ToUpper() == "QUALITY") {
|
||||
isLoginValid = true;
|
||||
else
|
||||
{
|
||||
isLoginValid = Functions.NA_ADAuthenticate(model.LoginID, model.Password);
|
||||
if (!isLoginValid)
|
||||
{
|
||||
isLoginValid = Functions.IFX_ADAuthenticate(model.LoginID, model.Password);
|
||||
isIFX = true;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
} else {
|
||||
isLoginValid = loginResult.IsAuthenticated;
|
||||
if (isLoginValid)
|
||||
{
|
||||
//Check ITAR Permissions from AD group
|
||||
#if(!DEBUG)
|
||||
try
|
||||
{
|
||||
isIFX = true;
|
||||
|
||||
bool hasITARAccess = false;
|
||||
}
|
||||
|
||||
//========TEMP CODE - NEEDS TO BE DELETED
|
||||
//Functions.WriteEvent("Using DB for EC Auth for user " + model.LoginID, System.Diagnostics.EventLogEntryType.Information);
|
||||
//hasITARAccess = userDMO.GetEC_AD_Users(model.LoginID);
|
||||
//=============END OF TEMP CODE
|
||||
|
||||
|
||||
if (GlobalVars.DBConnection.ToUpper() == "TEST" || GlobalVars.DBConnection.ToUpper() == "QUALITY")
|
||||
{
|
||||
hasITARAccess = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
hasITARAccess = Functions.NA_HasITARAccess(model.LoginID, model.Password);
|
||||
if (!hasITARAccess) // check the IFX domain
|
||||
hasITARAccess = Functions.IFX_HasITARAccess(model.LoginID, model.Password);
|
||||
}
|
||||
userDMO.UpdateInsertITARAccess(model.LoginID, hasITARAccess ? "1" : "0");
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
ModelState.AddModelError("", "Not a member of the EC Domain" + ex.Message);
|
||||
return View(model);
|
||||
}
|
||||
#endif
|
||||
|
||||
if (isLoginValid) {
|
||||
UserAccountDMO userDMO = new UserAccountDMO();
|
||||
LoginModel user = userDMO.GetUser(model.LoginID);
|
||||
if (user != null)
|
||||
{
|
||||
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);
|
||||
if (user != null) {
|
||||
SetSessionParameters(loginResult, user);
|
||||
|
||||
FormsAuthentication.SetAuthCookie(user.LoginID, true);
|
||||
return RedirectToLocal(returnUrl);
|
||||
}
|
||||
else
|
||||
{
|
||||
} else {
|
||||
ModelState.AddModelError("", "The user name does not exist in the DB. Please contact the System Admin");
|
||||
}
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
} else {
|
||||
ModelState.AddModelError("", "The user name or password provided is incorrect.");
|
||||
}
|
||||
}
|
||||
|
||||
catch (Exception ex)
|
||||
{
|
||||
Functions.WriteEvent(@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 });
|
||||
} catch (Exception ex) {
|
||||
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 View(model);
|
||||
// If we got this far, something failed, redisplay form
|
||||
}
|
||||
|
||||
[HttpPost]
|
||||
[AllowAnonymous]
|
||||
public async Task<HttpResponseMessage> ExternalAuthSetup(AuthAttempt authAttempt) {
|
||||
try {
|
||||
bool isLoginValid;
|
||||
|
||||
HttpClient httpClient = HttpClientFactory.Create();
|
||||
httpClient.BaseAddress = new Uri(GlobalVars.AppSettings.ApiBaseUrl);
|
||||
|
||||
LoginResult loginResult = await AccountDMO.ExternalAuthSetupAsync(httpClient, authAttempt);
|
||||
|
||||
#if (DEBUG)
|
||||
isLoginValid = true;
|
||||
|
||||
#endif
|
||||
#if (!DEBUG)
|
||||
|
||||
bool isIFX = false;
|
||||
if (GlobalVars.DBConnection.ToUpper() == "TEST" || GlobalVars.DBConnection.ToUpper() == "QUALITY") {
|
||||
isLoginValid = true;
|
||||
} else {
|
||||
isLoginValid = loginResult.IsAuthenticated;
|
||||
if (isLoginValid)
|
||||
isIFX = true;
|
||||
|
||||
}
|
||||
|
||||
////
|
||||
//// POST: /Account/Login
|
||||
//[HttpPost]
|
||||
//[AllowAnonymous]
|
||||
//[ValidateAntiForgeryToken]
|
||||
//public async Task<ActionResult> Login(LoginViewModel model, string returnUrl)
|
||||
//{
|
||||
// if (ModelState.IsValid)
|
||||
// {
|
||||
// var user = await UserManager.FindAsync(model.UserName, model.Password);
|
||||
// if (user != null)
|
||||
// {
|
||||
// await SignInAsync(user, model.RememberMe);
|
||||
// return RedirectToLocal(returnUrl);
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
// ModelState.AddModelError("", "Invalid username or password.");
|
||||
// }
|
||||
// }
|
||||
#endif
|
||||
|
||||
// // If we got this far, something failed, redisplay form
|
||||
// return View(model);
|
||||
//}
|
||||
if (isLoginValid) {
|
||||
UserAccountDMO userDMO = new UserAccountDMO();
|
||||
LoginModel user = userDMO.GetUser(authAttempt.LoginID);
|
||||
if (user != null) {
|
||||
SetSessionParameters(loginResult, user);
|
||||
|
||||
return new HttpResponseMessage(HttpStatusCode.OK);
|
||||
} else {
|
||||
ModelState.AddModelError("", "The user name does not exist in the DB. Please contact the System Admin");
|
||||
|
||||
return new HttpResponseMessage(HttpStatusCode.NotFound);
|
||||
}
|
||||
} else {
|
||||
ModelState.AddModelError("", "The user name or password provided is incorrect.");
|
||||
|
||||
return new HttpResponseMessage(HttpStatusCode.Unauthorized);
|
||||
}
|
||||
} catch (Exception ex) {
|
||||
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()
|
||||
{
|
||||
public ActionResult Register() {
|
||||
return View();
|
||||
}
|
||||
|
||||
//
|
||||
// POST: /Account/Register
|
||||
//[HttpPost]
|
||||
//[AllowAnonymous]
|
||||
//[ValidateAntiForgeryToken]
|
||||
//public async Task<ActionResult> Register(RegisterViewModel model)
|
||||
//{
|
||||
// if (ModelState.IsValid)
|
||||
// {
|
||||
// var user = new ApplicationUser() { UserName = model.UserName };
|
||||
// var result = await UserManager.CreateAsync(user, model.Password);
|
||||
// if (result.Succeeded)
|
||||
// {
|
||||
// await SignInAsync(user, isPersistent: false);
|
||||
// return RedirectToAction("Index", "Home");
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
// AddErrors(result);
|
||||
// }
|
||||
// }
|
||||
#if !NET8
|
||||
|
||||
// // If we got this far, something failed, redisplay form
|
||||
// return View(model);
|
||||
//}
|
||||
|
||||
//
|
||||
// POST: /Account/Disassociate
|
||||
[HttpPost]
|
||||
[ValidateAntiForgeryToken]
|
||||
public async Task<ActionResult> Disassociate(string loginProvider, string providerKey)
|
||||
{
|
||||
public async Task<ActionResult> Disassociate(string loginProvider, string providerKey) {
|
||||
ManageMessageId? message = null;
|
||||
IdentityResult result = await UserManager.RemoveLoginAsync(User.Identity.GetUserId(), new UserLoginInfo(loginProvider, providerKey));
|
||||
if (result.Succeeded)
|
||||
{
|
||||
if (result.Succeeded) {
|
||||
message = ManageMessageId.RemoveLoginSuccess;
|
||||
}
|
||||
else
|
||||
{
|
||||
} else {
|
||||
message = ManageMessageId.Error;
|
||||
}
|
||||
return RedirectToAction("Manage", new { Message = message });
|
||||
}
|
||||
|
||||
//
|
||||
#endif
|
||||
|
||||
// GET: /Account/Manage
|
||||
public ActionResult Manage(ManageMessageId? message)
|
||||
{
|
||||
//ViewBag.StatusMessage =
|
||||
// message == ManageMessageId.ChangePasswordSuccess ? "Your password has been changed."
|
||||
// : message == ManageMessageId.SetPasswordSuccess ? "Your password has been set."
|
||||
// : message == ManageMessageId.RemoveLoginSuccess ? "The external login was removed."
|
||||
// : message == ManageMessageId.Error ? "An error has occurred."
|
||||
// : "";
|
||||
//ViewBag.HasLocalPassword = HasPassword();
|
||||
//ViewBag.ReturnUrl = Url.Action("Manage");
|
||||
#pragma warning disable IDE0060 // Remove unused parameter
|
||||
public ActionResult Manage(ManageMessageId? message) {
|
||||
return View();
|
||||
}
|
||||
#pragma warning restore IDE0060 // Remove unused parameter
|
||||
|
||||
////
|
||||
//// POST: /Account/Manage
|
||||
//[HttpPost]
|
||||
//[ValidateAntiForgeryToken]
|
||||
//public async Task<ActionResult> Manage(ManageUserViewModel model)
|
||||
//{
|
||||
// bool hasPassword = HasPassword();
|
||||
// ViewBag.HasLocalPassword = hasPassword;
|
||||
// ViewBag.ReturnUrl = Url.Action("Manage");
|
||||
// if (hasPassword)
|
||||
// {
|
||||
// if (ModelState.IsValid)
|
||||
// {
|
||||
// IdentityResult result = await UserManager.ChangePasswordAsync(User.Identity.GetUserId(), model.OldPassword, model.NewPassword);
|
||||
// if (result.Succeeded)
|
||||
// {
|
||||
// return RedirectToAction("Manage", new { Message = ManageMessageId.ChangePasswordSuccess });
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
// AddErrors(result);
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
// // User does not have a password so remove any validation errors caused by a missing OldPassword field
|
||||
// ModelState state = ModelState["OldPassword"];
|
||||
// if (state != null)
|
||||
// {
|
||||
// state.Errors.Clear();
|
||||
// }
|
||||
#if !NET8
|
||||
|
||||
// if (ModelState.IsValid)
|
||||
// {
|
||||
// IdentityResult result = await UserManager.AddPasswordAsync(User.Identity.GetUserId(), model.NewPassword);
|
||||
// if (result.Succeeded)
|
||||
// {
|
||||
// return RedirectToAction("Manage", new { Message = ManageMessageId.SetPasswordSuccess });
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
// AddErrors(result);
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
|
||||
// // If we got this far, something failed, redisplay form
|
||||
// return View(model);
|
||||
//}
|
||||
|
||||
//
|
||||
// POST: /Account/ExternalLogin
|
||||
[HttpPost]
|
||||
[AllowAnonymous]
|
||||
[ValidateAntiForgeryToken]
|
||||
public ActionResult ExternalLogin(string provider, string returnUrl)
|
||||
{
|
||||
public ActionResult ExternalLogin(string provider, string returnUrl) {
|
||||
// Request a redirect to the external login provider
|
||||
return new ChallengeResult(provider, Url.Action("ExternalLoginCallback", "Account", new { ReturnUrl = returnUrl }));
|
||||
}
|
||||
|
||||
////
|
||||
//// GET: /Account/ExternalLoginCallback
|
||||
//[AllowAnonymous]
|
||||
//public async Task<ActionResult> ExternalLoginCallback(string returnUrl)
|
||||
//{
|
||||
// var loginInfo = await AuthenticationManager.GetExternalLoginInfoAsync();
|
||||
// if (loginInfo == null)
|
||||
// {
|
||||
// return RedirectToAction("Login");
|
||||
// }
|
||||
|
||||
// // Sign in the user with this external login provider if the user already has a login
|
||||
// var user = await UserManager.FindAsync(loginInfo.Login);
|
||||
// if (user != null)
|
||||
// {
|
||||
// await SignInAsync(user, isPersistent: false);
|
||||
// return RedirectToLocal(returnUrl);
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
// // If the user does not have an account, then prompt the user to create an account
|
||||
// ViewBag.ReturnUrl = returnUrl;
|
||||
// ViewBag.LoginProvider = loginInfo.Login.LoginProvider;
|
||||
// return View("ExternalLoginConfirmation", new ExternalLoginConfirmationViewModel { UserName = loginInfo.DefaultUserName });
|
||||
// }
|
||||
//}
|
||||
|
||||
//
|
||||
// POST: /Account/LinkLogin
|
||||
[HttpPost]
|
||||
[ValidateAntiForgeryToken]
|
||||
public ActionResult LinkLogin(string provider)
|
||||
{
|
||||
public ActionResult LinkLogin(string provider) {
|
||||
// Request a redirect to the external login provider to link a login for the current user
|
||||
return new ChallengeResult(provider, Url.Action("LinkLoginCallback", "Account"), User.Identity.GetUserId());
|
||||
}
|
||||
|
||||
//
|
||||
// GET: /Account/LinkLoginCallback
|
||||
public async Task<ActionResult> LinkLoginCallback()
|
||||
{
|
||||
var loginInfo = await AuthenticationManager.GetExternalLoginInfoAsync(XsrfKey, User.Identity.GetUserId());
|
||||
if (loginInfo == null)
|
||||
{
|
||||
public async Task<ActionResult> LinkLoginCallback() {
|
||||
ExternalLoginInfo loginInfo = await AuthenticationManager.GetExternalLoginInfoAsync(XsrfKey, User.Identity.GetUserId());
|
||||
if (loginInfo == null) {
|
||||
return RedirectToAction("Manage", new { Message = ManageMessageId.Error });
|
||||
}
|
||||
var result = await UserManager.AddLoginAsync(User.Identity.GetUserId(), loginInfo.Login);
|
||||
if (result.Succeeded)
|
||||
{
|
||||
IdentityResult result = await UserManager.AddLoginAsync(User.Identity.GetUserId(), loginInfo.Login);
|
||||
if (result.Succeeded) {
|
||||
return RedirectToAction("Manage");
|
||||
}
|
||||
return RedirectToAction("Manage", new { Message = ManageMessageId.Error });
|
||||
}
|
||||
|
||||
//
|
||||
// POST: /Account/ExternalLoginConfirmation
|
||||
//[HttpPost]
|
||||
//[AllowAnonymous]
|
||||
//[ValidateAntiForgeryToken]
|
||||
//public async Task<ActionResult> ExternalLoginConfirmation(ExternalLoginConfirmationViewModel model, string returnUrl)
|
||||
//{
|
||||
// if (User.Identity.IsAuthenticated)
|
||||
// {
|
||||
// return RedirectToAction("Manage");
|
||||
// }
|
||||
|
||||
// if (ModelState.IsValid)
|
||||
// {
|
||||
// // Get the information about the user from the external login provider
|
||||
// var info = await AuthenticationManager.GetExternalLoginInfoAsync();
|
||||
// if (info == null)
|
||||
// {
|
||||
// return View("ExternalLoginFailure");
|
||||
// }
|
||||
// var user = new ApplicationUser() { UserName = model.UserName };
|
||||
// var result = await UserManager.CreateAsync(user);
|
||||
// if (result.Succeeded)
|
||||
// {
|
||||
// result = await UserManager.AddLoginAsync(user.Id, info.Login);
|
||||
// if (result.Succeeded)
|
||||
// {
|
||||
// await SignInAsync(user, isPersistent: false);
|
||||
// return RedirectToLocal(returnUrl);
|
||||
// }
|
||||
// }
|
||||
// AddErrors(result);
|
||||
// }
|
||||
|
||||
// ViewBag.ReturnUrl = returnUrl;
|
||||
// return View(model);
|
||||
//}
|
||||
|
||||
//
|
||||
// POST: /Account/LogOff
|
||||
[HttpPost]
|
||||
[ValidateAntiForgeryToken]
|
||||
public ActionResult LogOff()
|
||||
{
|
||||
//AuthenticationManager.SignOut(DefaultAuthenticationTypes.ExternalCookie);
|
||||
//AuthenticationManager.SignOut();
|
||||
public ActionResult LogOff() {
|
||||
FormsAuthentication.SignOut();
|
||||
return RedirectToAction("Login", "Account");
|
||||
}
|
||||
|
||||
//
|
||||
// GET: /Account/ExternalLoginFailure
|
||||
#endif
|
||||
|
||||
[AllowAnonymous]
|
||||
public ActionResult ExternalLoginFailure()
|
||||
{
|
||||
public ActionResult ExternalLoginFailure() {
|
||||
return View();
|
||||
}
|
||||
|
||||
#if !NET8
|
||||
|
||||
[ChildActionOnly]
|
||||
public ActionResult RemoveAccountList()
|
||||
{
|
||||
var linkedAccounts = UserManager.GetLogins(User.Identity.GetUserId());
|
||||
public ActionResult RemoveAccountList() {
|
||||
IList<UserLoginInfo> linkedAccounts = UserManager.GetLogins(User.Identity.GetUserId());
|
||||
ViewBag.ShowRemoveButton = HasPassword() || linkedAccounts.Count > 1;
|
||||
return (ActionResult)PartialView("_RemoveAccountPartial", linkedAccounts);
|
||||
}
|
||||
|
||||
protected override void Dispose(bool disposing)
|
||||
{
|
||||
if (disposing && UserManager != null)
|
||||
{
|
||||
protected override void Dispose(bool disposing) {
|
||||
if (disposing && UserManager != null) {
|
||||
UserManager.Dispose();
|
||||
UserManager = null;
|
||||
}
|
||||
base.Dispose(disposing);
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
#region Helpers
|
||||
// Used for XSRF protection when adding external logins
|
||||
private const string XsrfKey = "XsrfId";
|
||||
|
||||
private IAuthenticationManager AuthenticationManager
|
||||
{
|
||||
get
|
||||
{
|
||||
#if !NET8
|
||||
|
||||
private IAuthenticationManager AuthenticationManager {
|
||||
get {
|
||||
return HttpContext.GetOwinContext().Authentication;
|
||||
}
|
||||
}
|
||||
|
||||
private async Task SignInAsync(ApplicationUser user, bool isPersistent)
|
||||
{
|
||||
private async Task SignInAsync(ApplicationUser user, bool isPersistent) {
|
||||
AuthenticationManager.SignOut(DefaultAuthenticationTypes.ExternalCookie);
|
||||
var identity = await UserManager.CreateIdentityAsync(user, DefaultAuthenticationTypes.ApplicationCookie);
|
||||
ClaimsIdentity identity = await UserManager.CreateIdentityAsync(user, DefaultAuthenticationTypes.ApplicationCookie);
|
||||
AuthenticationManager.SignIn(new AuthenticationProperties() { IsPersistent = isPersistent }, identity);
|
||||
}
|
||||
|
||||
private void AddErrors(IdentityResult result)
|
||||
{
|
||||
foreach (var error in result.Errors)
|
||||
{
|
||||
private void AddErrors(IdentityResult result) {
|
||||
foreach (string error in result.Errors) {
|
||||
ModelState.AddModelError("", error);
|
||||
}
|
||||
}
|
||||
|
||||
private bool HasPassword()
|
||||
{
|
||||
var user = UserManager.FindById(User.Identity.GetUserId());
|
||||
if (user != null)
|
||||
{
|
||||
private bool HasPassword() {
|
||||
ApplicationUser user = UserManager.FindById(User.Identity.GetUserId());
|
||||
if (user != null) {
|
||||
return user.PasswordHash != null;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public enum ManageMessageId
|
||||
{
|
||||
#endif
|
||||
|
||||
public enum ManageMessageId {
|
||||
ChangePasswordSuccess,
|
||||
SetPasswordSuccess,
|
||||
RemoveLoginSuccess,
|
||||
Error
|
||||
}
|
||||
|
||||
private ActionResult RedirectToLocal(string returnUrl)
|
||||
{
|
||||
if (Url.IsLocalUrl(returnUrl))
|
||||
{
|
||||
private ActionResult RedirectToLocal(string returnUrl) {
|
||||
if (Url.IsLocalUrl(returnUrl)) {
|
||||
return Redirect(returnUrl);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
//return RedirectToAction("HierarchicalDataTest", "Home");
|
||||
|
||||
} else {
|
||||
return RedirectToAction("MyTasks", "Home");
|
||||
//return RedirectToAction("Index", "Home", new { tabName = "MyTasks"});
|
||||
}
|
||||
}
|
||||
|
||||
private class ChallengeResult : HttpUnauthorizedResult
|
||||
{
|
||||
public ChallengeResult(string provider, string redirectUri) : this(provider, redirectUri, null)
|
||||
{
|
||||
#if !NET8
|
||||
|
||||
private class ChallengeResult : HttpUnauthorizedResult {
|
||||
|
||||
#endif
|
||||
|
||||
#if NET8
|
||||
|
||||
private class ChallengeResult {
|
||||
|
||||
#endif
|
||||
|
||||
public ChallengeResult(string provider, string redirectUri) : this(provider, redirectUri, null) {
|
||||
}
|
||||
|
||||
public ChallengeResult(string provider, string redirectUri, string userId)
|
||||
{
|
||||
public ChallengeResult(string provider, string redirectUri, string userId) {
|
||||
LoginProvider = provider;
|
||||
RedirectUri = redirectUri;
|
||||
UserId = userId;
|
||||
@ -517,16 +353,49 @@ namespace Fab2ApprovalSystem.Controllers
|
||||
public string RedirectUri { get; set; }
|
||||
public string UserId { get; set; }
|
||||
|
||||
public override void ExecuteResult(ControllerContext context)
|
||||
{
|
||||
var properties = new AuthenticationProperties() { RedirectUri = RedirectUri };
|
||||
if (UserId != null)
|
||||
{
|
||||
#if !NET8
|
||||
|
||||
public override void ExecuteResult(ControllerContext context) {
|
||||
AuthenticationProperties properties = new AuthenticationProperties() { RedirectUri = RedirectUri };
|
||||
if (UserId != null) {
|
||||
properties.Dictionary[XsrfKey] = UserId;
|
||||
}
|
||||
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,178 +1,110 @@
|
||||
using Fab2ApprovalSystem.DMO;
|
||||
using Fab2ApprovalSystem.Models;
|
||||
using Kendo.Mvc.UI;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
#if !NET8
|
||||
using System.Web;
|
||||
using System.Web.Mvc;
|
||||
using Kendo.Mvc.Extensions;
|
||||
#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;
|
||||
|
||||
namespace Fab2ApprovalSystem.Controllers
|
||||
{
|
||||
[Authorize]
|
||||
#if !NET8
|
||||
[SessionExpireFilter]
|
||||
public class AdminController : Controller
|
||||
{
|
||||
#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 UserAccountDMO userDMO = new();
|
||||
private readonly AdminDMO adminDMO = new();
|
||||
private readonly TrainingDMO trainingDMO = new();
|
||||
private readonly LotDispositionDMO ldDMO = new();
|
||||
private readonly AppSettings? _AppSettings = GlobalVars.AppSettings;
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
public ActionResult Index()
|
||||
{
|
||||
|
||||
if ((bool)Session[GlobalVars.IS_ADMIN])
|
||||
{
|
||||
public ActionResult Index() {
|
||||
if (GlobalVars.IsAdmin(GetSession())) {
|
||||
var model = userDMO.GetAllUsers();
|
||||
ViewBag.AllActiveUsers = userDMO.GetAllActiveUsers();
|
||||
return View(model);
|
||||
}
|
||||
else
|
||||
} else
|
||||
return Content("Not Autthorized");
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
public ActionResult AssignRoles()
|
||||
{
|
||||
if ((bool)Session[GlobalVars.IS_ADMIN])
|
||||
{
|
||||
#if !NET8
|
||||
|
||||
public ActionResult AssignRoles() {
|
||||
if (GlobalVars.IsAdmin(GetSession())) {
|
||||
ViewBag.ToplevelNode = GetRoles_SubRolesList();
|
||||
return View();
|
||||
}
|
||||
else
|
||||
} else
|
||||
return Content("Not Autthorized");
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <param name="request"></param>
|
||||
/// <returns></returns>
|
||||
public ActionResult GetAllUserList([DataSourceRequest] DataSourceRequest request)
|
||||
{
|
||||
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>
|
||||
/// <param name="request"></param>
|
||||
/// <returns></returns>
|
||||
public ActionResult GetGridUserList([DataSourceRequest] DataSourceRequest request)
|
||||
{
|
||||
return Json(userDMO.GetAllUsers().ToDataSourceResult(request));
|
||||
public ActionResult GetGridUserList([DataSourceRequest] DataSourceRequest request) {
|
||||
return GetJsonResult(userDMO.GetAllUsers().ToDataSourceResult(request));
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <param name="subRole"></param>
|
||||
/// <returns></returns>
|
||||
public JsonResult GetAllUserListBySubRole(int subRole)
|
||||
{
|
||||
public JsonResult GetAllUserListBySubRole(int subRole) {
|
||||
IEnumerable<LoginModel> userlist = adminDMO.GetAllUsersBySubRole(subRole);
|
||||
return Json(userlist, JsonRequestBehavior.AllowGet);
|
||||
return GetJsonResult(userlist);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
public JsonResult AllSubRoles(string showInactiveRoles = "")
|
||||
{
|
||||
List<Role> roles = adminDMO.GetSubRoles();
|
||||
|
||||
ParentChildModel parent;
|
||||
ParentChildModel child = new ParentChildModel();
|
||||
|
||||
List<ParentChildModel> newRoles = new List<ParentChildModel>();
|
||||
foreach (Role r in roles)
|
||||
{
|
||||
parent = new ParentChildModel();
|
||||
parent.id = r.RoleID;
|
||||
parent.parentid = -1;
|
||||
parent.text = r.RoleName;
|
||||
parent.value = r.RoleID.ToString();
|
||||
|
||||
foreach (SubRole sr in r.SubRoles)
|
||||
{
|
||||
if (sr.Inactive)
|
||||
{
|
||||
// hide inactive roles unless parameter says otherwise
|
||||
if (showInactiveRoles.Equals("true") == false)
|
||||
continue;
|
||||
public JsonResult AllSubRoles(string showInactiveRoles = "") {
|
||||
List<ParentChildModel> newRoles = adminDMO.GetAllSubRoles(showInactiveRoles);
|
||||
return GetJsonResult(newRoles);
|
||||
}
|
||||
|
||||
child = new ParentChildModel();
|
||||
child.id = sr.SubRoleID;
|
||||
child.parentid = r.RoleID;
|
||||
child.text = sr.SubRoleCategoryItem + (sr.Inactive ? " (Inactive)" : "");
|
||||
child.value = sr.SubRoleID.ToString();
|
||||
newRoles.Add(child);
|
||||
}
|
||||
#if !NET8
|
||||
|
||||
newRoles.Add(parent);
|
||||
};
|
||||
|
||||
|
||||
return Json(newRoles, JsonRequestBehavior.AllowGet);
|
||||
|
||||
}
|
||||
|
||||
public ActionResult GetSubRoleListByUserId([DataSourceRequest] DataSourceRequest request, string userId)
|
||||
{
|
||||
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>
|
||||
/// <returns></returns>
|
||||
private IEnumerable<TreeViewItemModel> GetRoles_SubRolesList()
|
||||
{
|
||||
|
||||
private IEnumerable<TreeViewItemModel> GetRoles_SubRolesList() {
|
||||
List<Role> roles = adminDMO.GetSubRoles();
|
||||
|
||||
|
||||
List<TreeViewItemModel> ToplevelNode = new List<TreeViewItemModel>();
|
||||
List<TreeViewItemModel> parentList = new List<TreeViewItemModel>();
|
||||
List<TreeViewItemModel> childList = new List<TreeViewItemModel>();
|
||||
|
||||
|
||||
TreeViewItemModel parent = new TreeViewItemModel();
|
||||
TreeViewItemModel child = new TreeViewItemModel();
|
||||
|
||||
|
||||
foreach (Role r in roles)
|
||||
{
|
||||
foreach (Role r in roles) {
|
||||
parent = new TreeViewItemModel();
|
||||
parent.HasChildren = true;
|
||||
parent.Text = r.RoleName;
|
||||
parent.Id = r.RoleID.ToString();
|
||||
|
||||
|
||||
foreach (SubRole sr in r.SubRoles)
|
||||
{
|
||||
foreach (SubRole sr in r.SubRoles) {
|
||||
child = new TreeViewItemModel();
|
||||
child.Text = sr.SubRoleCategoryItem;
|
||||
child.Id = sr.SubRoleID.ToString();
|
||||
@ -183,468 +115,239 @@ namespace Fab2ApprovalSystem.Controllers
|
||||
ToplevelNode.Add(parent);
|
||||
};
|
||||
|
||||
|
||||
|
||||
return ToplevelNode;
|
||||
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <param name="subRole"></param>
|
||||
/// <param name="users"></param>
|
||||
/// <returns></returns>
|
||||
public ActionResult AddUserRoles(int subRole, string users)
|
||||
{
|
||||
|
||||
public ActionResult AddUserRoles(int subRole, string users) {
|
||||
adminDMO.AddUserRoles(subRole, users);
|
||||
return View();
|
||||
}
|
||||
public ActionResult ReplaceUserRoles(int subRole, string users)
|
||||
{
|
||||
|
||||
public ActionResult ReplaceUserRoles(int subRole, string users) {
|
||||
adminDMO.AddUserRoles(subRole, users);
|
||||
return Content("Success");
|
||||
}
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <param name="subRole"></param>
|
||||
/// <param name="users"></param>
|
||||
/// <returns></returns>
|
||||
public ActionResult DeleteUserRoles(int subRole, string users)
|
||||
{
|
||||
|
||||
public ActionResult DeleteUserRoles(int subRole, string users) {
|
||||
adminDMO.DeleteUserRoles(subRole, users);
|
||||
return Content("");
|
||||
}
|
||||
|
||||
|
||||
//
|
||||
// GET: /Workflow/Details/5
|
||||
public ActionResult Details(int id)
|
||||
{
|
||||
public ActionResult Details(int id) {
|
||||
return View();
|
||||
}
|
||||
|
||||
//
|
||||
// GET: /Workflow/Create
|
||||
public ActionResult Create()
|
||||
{
|
||||
public ActionResult Create() {
|
||||
return View();
|
||||
}
|
||||
|
||||
//
|
||||
#if !NET8
|
||||
|
||||
// POST: /Workflow/Create
|
||||
[HttpPost]
|
||||
public ActionResult Create(FormCollection collection)
|
||||
{
|
||||
try
|
||||
{
|
||||
public ActionResult Create(FormCollection collection) {
|
||||
try {
|
||||
// TODO: Add insert logic here
|
||||
|
||||
return RedirectToAction("Index");
|
||||
}
|
||||
catch
|
||||
{
|
||||
} catch {
|
||||
return View();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <param name="request"></param>
|
||||
/// <param name="model"></param>
|
||||
/// <returns></returns>
|
||||
[AcceptVerbs(HttpVerbs.Post)]
|
||||
public ActionResult BatchUpdateUser([DataSourceRequest] DataSourceRequest request, [Bind(Prefix = "models")]IEnumerable<LoginModel> model)
|
||||
{
|
||||
//if (model != null && ModelState.IsValid)
|
||||
//{
|
||||
// userDMO.UpdateUser(model);
|
||||
//}
|
||||
|
||||
|
||||
public ActionResult BatchUpdateUser([DataSourceRequest] DataSourceRequest request, [Bind(Prefix = "models")] IEnumerable<LoginModel> model) {
|
||||
return Json(new[] { model }.ToDataSourceResult(request, ModelState));
|
||||
}
|
||||
|
||||
|
||||
[AcceptVerbs(HttpVerbs.Post)]
|
||||
public ActionResult UpdateUser([DataSourceRequest] DataSourceRequest request, LoginModel model)
|
||||
{
|
||||
if (model != null && ModelState.IsValid)
|
||||
{
|
||||
public ActionResult UpdateUser([DataSourceRequest] DataSourceRequest request, LoginModel model) {
|
||||
if (model != null && ModelState.IsValid) {
|
||||
userDMO.UpdateUser(model);
|
||||
}
|
||||
|
||||
|
||||
return Json(new[] { model }.ToDataSourceResult(request, ModelState));
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
///// <summary>
|
||||
/////
|
||||
///// </summary>
|
||||
///// <param name="request"></param>
|
||||
///// <param name="model"></param>
|
||||
///// <returns></returns>
|
||||
//[AcceptVerbs(HttpVerbs.Post)]
|
||||
//public ActionResult DeleteUser([DataSourceRequest] DataSourceRequest request, LoginModel model)
|
||||
//{
|
||||
// if (model != null && ModelState.IsValid)
|
||||
// {
|
||||
// userDMO.DeleteUser(model);
|
||||
// //Remove open trainings
|
||||
// //Get a list of all user assigned trainings.
|
||||
// List<TrainingAssignment> trainingAssignments = trainingDMO.GetTrainingAssignmentsByUserID(model.UserID);
|
||||
|
||||
// //Go Through that list.
|
||||
// foreach(var trainingAssignment in trainingAssignments)
|
||||
// {
|
||||
// //Delete Any document acknowledgements.
|
||||
// trainingDMO.DeleteTrainingDocAck(trainingAssignment.ID);
|
||||
// //Delete the training assignment itself
|
||||
// trainingDMO.DeleteTrainingAssignment(trainingAssignment.ID);
|
||||
// //Check the parent Training task to set to to complete if applicable.
|
||||
// if (trainingDMO.CheckTrainingStatus(trainingAssignment.ID))
|
||||
// {
|
||||
|
||||
// int TrainingID = trainingDMO.GetTrainingIdByAssignment(trainingAssignment.TrainingID);
|
||||
// //Set Training status to complete
|
||||
// trainingDMO.UpdateTrainingStatus(TrainingID);
|
||||
// }
|
||||
|
||||
// }
|
||||
|
||||
// //Remove user from any Training Groups
|
||||
// adminDMO.DeleteUserFromAllTrainingGroups(model.UserID);
|
||||
|
||||
// //Remove User from training report notifications
|
||||
// adminDMO.TrainingReportDeleteUser(model.UserID);
|
||||
// //Remove user from TECN Expiration Notifications
|
||||
// adminDMO.TECNExpirationDeleteUser(model.UserID);
|
||||
// //Get user subroles
|
||||
// List<UserSubRoles> userSubRoles = adminDMO.GetUserSubRoles(model.UserID);
|
||||
// //Delete user from any subroles
|
||||
// foreach (var userSubRole in userSubRoles)
|
||||
// {
|
||||
// DeleteUserRoles(userSubRole.SubRoleID, model.UserID.ToString());
|
||||
// }
|
||||
|
||||
// }
|
||||
|
||||
|
||||
// return Json(new[] { model }.ToDataSourceResult(request, ModelState));
|
||||
//}
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <param name="request"></param>
|
||||
/// <param name="model"></param>
|
||||
/// <returns></returns>
|
||||
|
||||
public ActionResult DeleteUser(string userId)
|
||||
{
|
||||
LoginModel model = userDMO.GetUserByID(Convert.ToInt32(userId));
|
||||
if (model != null)
|
||||
{
|
||||
userDMO.DeleteUser(model);
|
||||
//Remove open trainings
|
||||
//Get a list of all user assigned trainings.
|
||||
List<TrainingAssignment> trainingAssignments = trainingDMO.GetTrainingAssignmentsByUserID(model.UserID);
|
||||
|
||||
//Go Through that list.
|
||||
foreach (var trainingAssignment in trainingAssignments)
|
||||
{
|
||||
//Delete Any document acknowledgements.
|
||||
trainingDMO.DeleteTrainingDocAck(trainingAssignment.ID);
|
||||
//Delete the training assignment itself
|
||||
trainingDMO.DeleteTrainingAssignment(trainingAssignment.ID);
|
||||
//Check the parent Training task to set to to complete if applicable.
|
||||
if (trainingDMO.CheckTrainingStatus(trainingAssignment.ID))
|
||||
{
|
||||
|
||||
int TrainingID = trainingAssignment.TrainingID;
|
||||
//Set Training status to complete
|
||||
trainingDMO.UpdateTrainingStatus(TrainingID);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
//Remove user from any Training Groups
|
||||
adminDMO.DeleteUserFromAllTrainingGroups(model.UserID);
|
||||
|
||||
//Remove User from training report notifications
|
||||
adminDMO.TrainingReportDeleteUser(model.UserID);
|
||||
//Remove user from TECN Expiration Notifications
|
||||
adminDMO.TECNExpirationDeleteUser(model.UserID);
|
||||
//Get user subroles
|
||||
List<UserSubRoles> userSubRoles = adminDMO.GetUserSubRoles(model.UserID);
|
||||
//Delete user from any subroles
|
||||
foreach (var userSubRole in userSubRoles)
|
||||
{
|
||||
DeleteUserRoles(userSubRole.SubRoleID, model.UserID.ToString());
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
public ActionResult DeleteUser(string userId) {
|
||||
LoginModel loginModel = userDMO.GetUserByID(Convert.ToInt32(userId));
|
||||
adminDMO.DeleteUser(userDMO, trainingDMO, loginModel);
|
||||
return Content("Success");
|
||||
}
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <param name="request"></param>
|
||||
/// <param name="model"></param>
|
||||
/// <returns></returns>
|
||||
[AcceptVerbs(HttpVerbs.Post)]
|
||||
public ActionResult InsertUser([DataSourceRequest] DataSourceRequest request, LoginModel model)
|
||||
{
|
||||
|
||||
try
|
||||
{
|
||||
if (model != null && ModelState.IsValid)
|
||||
{
|
||||
#if !NET8
|
||||
|
||||
[AcceptVerbs(HttpVerbs.Post)]
|
||||
public ActionResult InsertUser([DataSourceRequest] DataSourceRequest request, LoginModel model) {
|
||||
try {
|
||||
if (model != null && ModelState.IsValid) {
|
||||
userDMO.InsertUser(model);
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
} catch (Exception ex) {
|
||||
// TODO
|
||||
throw new Exception(ex.Message);
|
||||
}
|
||||
|
||||
return Json(new[] { model }.ToDataSourceResult(request, ModelState));
|
||||
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
public ActionResult EnableOOOStatus(int oooUserID, int delegatedTo, DateTime startDate, DateTime endDate)
|
||||
{
|
||||
public ActionResult EnableOOOStatus(int oooUserID, int delegatedTo, DateTime startDate, DateTime endDate) {
|
||||
int returnValue = MiscDMO.EnableOOOStatus(oooUserID, delegatedTo, startDate, endDate);
|
||||
if (returnValue == 3) // the delegator is already a delegator to someone else
|
||||
{
|
||||
return Content("3");
|
||||
}
|
||||
else
|
||||
} else
|
||||
return Content("");
|
||||
|
||||
// TODO - Send an email to the OOO person and to the Delegated person
|
||||
//return View();
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <param name="oooUserID"></param>
|
||||
public void ExpireOOOStatus(int oooUserID)
|
||||
{
|
||||
public void ExpireOOOStatus(int oooUserID) {
|
||||
MiscDMO.ExpireOOOStatus(oooUserID);
|
||||
// TODO - Does it need to send an email
|
||||
}
|
||||
public ActionResult ManageTrainingGroups()
|
||||
{
|
||||
//List<TrainingGroup> allGroups = GetTrainingGroups();
|
||||
//return View(allGroups);
|
||||
if ((bool)Session[GlobalVars.IS_ADMIN])
|
||||
{
|
||||
|
||||
public ActionResult ManageTrainingGroups() {
|
||||
if (GlobalVars.IsAdmin(GetSession())) {
|
||||
ViewBag.AllGroups = GetTrainingGroups();
|
||||
return View();
|
||||
}
|
||||
else
|
||||
} else
|
||||
return Content("Not Autthorized");
|
||||
}
|
||||
public void RefreshGroups()
|
||||
{
|
||||
|
||||
public void RefreshGroups() {
|
||||
ViewBag.AllGroups = GetTrainingGroups();
|
||||
}
|
||||
public ActionResult TrainingGroups()
|
||||
{
|
||||
|
||||
public ActionResult TrainingGroups() {
|
||||
List<TrainingGroup> trainingGroups = adminDMO.GetTrainingGroups();
|
||||
return PartialView(trainingGroups);
|
||||
}
|
||||
public List<TrainingGroup> GetTrainingGroups()
|
||||
{
|
||||
|
||||
public List<TrainingGroup> GetTrainingGroups() {
|
||||
List<TrainingGroup> TrainingGroups = adminDMO.GetTrainingGroups();
|
||||
|
||||
|
||||
//List<TreeViewItemModel> ToplevelNode = new List<TreeViewItemModel>();
|
||||
//List<TreeViewItemModel> parentList = new List<TreeViewItemModel>();
|
||||
//List<TreeViewItemModel> childList = new List<TreeViewItemModel>();
|
||||
|
||||
|
||||
//TreeViewItemModel parent = new TreeViewItemModel();
|
||||
//TreeViewItemModel child = new TreeViewItemModel();
|
||||
//parent = new TreeViewItemModel();
|
||||
//parent.HasChildren = true;
|
||||
//parent.Text = "Training Groups";
|
||||
|
||||
//foreach (TrainingGroup group in TrainingGroups)
|
||||
//{
|
||||
|
||||
|
||||
// child = new TreeViewItemModel();
|
||||
// child.Text = group.TrainingGroupName;
|
||||
// child.Id = group.TrainingGroupID.ToString();
|
||||
// parent.Items.Add(child);
|
||||
//}
|
||||
//ToplevelNode.Add(parent);
|
||||
////foreach (Role r in roles)
|
||||
////{
|
||||
//// parent = new TreeViewItemModel();
|
||||
//// parent.HasChildren = true;
|
||||
//// parent.Text = r.RoleName;
|
||||
//// parent.Id = r.RoleID.ToString();
|
||||
|
||||
|
||||
//// foreach (SubRole sr in r.SubRoles)
|
||||
//// {
|
||||
//// child = new TreeViewItemModel();
|
||||
//// child.Text = sr.SubRoleCategoryItem;
|
||||
//// child.Id = sr.SubRoleID.ToString();
|
||||
|
||||
//// parent.Items.Add(child);
|
||||
//// }
|
||||
|
||||
//// ToplevelNode.Add(parent);
|
||||
////};
|
||||
|
||||
|
||||
|
||||
return TrainingGroups;
|
||||
|
||||
}
|
||||
public ActionResult GetTaskListByUser([DataSourceRequest]DataSourceRequest request, string userId)
|
||||
{
|
||||
|
||||
#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);
|
||||
}
|
||||
public ActionResult GetOpenActionItemsByUser([DataSourceRequest]DataSourceRequest request, string userId)
|
||||
{
|
||||
IEnumerable<OpenActionItemViewModel> data = ldDMO.GetMyOpenActionItems(Convert.ToInt32(userId));
|
||||
return Json(data.ToDataSourceResult(request), JsonRequestBehavior.AllowGet);
|
||||
}
|
||||
public ActionResult AddNewTrainingGroup(string groupName)
|
||||
{
|
||||
try
|
||||
{
|
||||
adminDMO.AddNewTrainingGroup(groupName);
|
||||
return Json(new {test = "Succesfully saved" });
|
||||
}
|
||||
catch
|
||||
{
|
||||
return Content("Unable to Save Group", "application/json");
|
||||
return GetJsonResult(data.ToDataSourceResult(request));
|
||||
}
|
||||
|
||||
public ActionResult GetOpenActionItemsByUser([DataSourceRequest] DataSourceRequest request, string userId) {
|
||||
IEnumerable<OpenActionItemViewModel> data = ldDMO.GetMyOpenActionItems(Convert.ToInt32(userId));
|
||||
return GetJsonResult(data.ToDataSourceResult(request));
|
||||
}
|
||||
public ActionResult DeleteTrainingGroup(int groupID)
|
||||
{
|
||||
try
|
||||
{
|
||||
|
||||
public ActionResult AddNewTrainingGroup(string groupName) {
|
||||
try {
|
||||
adminDMO.AddNewTrainingGroup(groupName);
|
||||
return Json(new { test = "Succesfully saved" });
|
||||
} catch {
|
||||
return Content("Unable to Save Group", "application/json");
|
||||
}
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
public ActionResult DeleteTrainingGroup(int groupID) {
|
||||
try {
|
||||
adminDMO.DeleteTrainingGroup(groupID);
|
||||
return Json(new { response = "Successfully Deleted" });
|
||||
}
|
||||
catch
|
||||
{
|
||||
} catch {
|
||||
return Json(new { response = "Unsuccessfully Deleted" });
|
||||
}
|
||||
}
|
||||
public ActionResult ViewTrainingGroup(int TrainingGroupID)
|
||||
{
|
||||
|
||||
public ActionResult ViewTrainingGroup(int TrainingGroupID) {
|
||||
ViewBag.GroupID = TrainingGroupID;
|
||||
return View();
|
||||
}
|
||||
public ActionResult TrainingGroupPartial(int TrainingGroupID)
|
||||
{
|
||||
|
||||
#if !NET8
|
||||
|
||||
public ActionResult TrainingGroupPartial(int TrainingGroupID) {
|
||||
ViewBag.AllUsers = userDMO.GetAllActiveUsers();
|
||||
ViewBag.TrainingGroupId = TrainingGroupID;
|
||||
List<TrainingGroupMember> trainingGroupMembers = adminDMO.GetTrainingGroupMembers(TrainingGroupID);
|
||||
return PartialView(trainingGroupMembers);
|
||||
}
|
||||
public ActionResult AddToGroup(int userId, int groupId)
|
||||
{
|
||||
try
|
||||
{
|
||||
|
||||
public ActionResult AddToGroup(int userId, int groupId) {
|
||||
try {
|
||||
adminDMO.AddUserToGroup(userId, groupId);
|
||||
}
|
||||
catch(Exception e)
|
||||
{
|
||||
} catch (Exception e) {
|
||||
return Json(new { test = e.Message });
|
||||
}
|
||||
|
||||
return Json(new { test = "Succesfully saved" });
|
||||
}
|
||||
public ActionResult DeleteFromGroup(int userId, int groupId)
|
||||
{
|
||||
try
|
||||
{
|
||||
|
||||
#endif
|
||||
|
||||
public ActionResult DeleteFromGroup(int userId, int groupId) {
|
||||
try {
|
||||
adminDMO.DeleteFromGroup(userId, groupId);
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
} catch (Exception e) {
|
||||
return Json(new { test = e.Message });
|
||||
}
|
||||
|
||||
return Json(new { test = "Succesfully removed" });
|
||||
}
|
||||
public ActionResult JobSchedulerConfiguration()
|
||||
{
|
||||
if ((bool)Session[GlobalVars.IS_ADMIN])
|
||||
{
|
||||
|
||||
public ActionResult JobSchedulerConfiguration() {
|
||||
if (GlobalVars.IsAdmin(GetSession())) {
|
||||
return View();
|
||||
}
|
||||
else
|
||||
} else
|
||||
return Content("Not Autthorized");
|
||||
}
|
||||
public ActionResult TrainingReportConfig()
|
||||
{
|
||||
|
||||
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)
|
||||
{
|
||||
foreach (TrainingReportUser id in currentTrainingReportUsersIds) {
|
||||
currentTrainingReportUsers.Add(userDMO.GetUserByID(id.UserId));
|
||||
}
|
||||
ViewBag.CurrentReportUsers = currentTrainingReportUsers;
|
||||
return PartialView();
|
||||
}
|
||||
public ActionResult TECNNotificationConfig()
|
||||
{
|
||||
|
||||
#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)
|
||||
{
|
||||
foreach (TECNNotificationsUser id in currentTECNNotificationUsersIds) {
|
||||
currentTECNNotificationUsers.Add(userDMO.GetUserByID(id.UserId));
|
||||
}
|
||||
ViewBag.CurrentReportUsers = currentTECNNotificationUsers;
|
||||
return PartialView();
|
||||
}
|
||||
public ActionResult AddToTrainingReport(int userId)
|
||||
{
|
||||
if ((bool)Session[GlobalVars.IS_ADMIN])
|
||||
{
|
||||
|
||||
#endif
|
||||
|
||||
public ActionResult AddToTrainingReport(int userId) {
|
||||
if (GlobalVars.IsAdmin(GetSession())) {
|
||||
// Check to make sure user is not apart of the group already
|
||||
bool userExists = false;
|
||||
//bool userValid = true;
|
||||
List<TrainingReportUser> existingUsers = adminDMO.GetTrainingReportUsers();
|
||||
foreach (var item in existingUsers)
|
||||
{
|
||||
if (item.UserId == userId)
|
||||
{
|
||||
foreach (var item in existingUsers) {
|
||||
if (item.UserId == userId) {
|
||||
userExists = true;
|
||||
}
|
||||
}
|
||||
@ -652,33 +355,26 @@ namespace Fab2ApprovalSystem.Controllers
|
||||
var validUser = userDMO.GetUserByID(userId);
|
||||
|
||||
// Add to group
|
||||
if (!userExists && validUser != null)
|
||||
{
|
||||
if (!userExists && validUser != null) {
|
||||
adminDMO.TrainingReportAddUser(userId);
|
||||
return Json("Success Added");
|
||||
}
|
||||
else
|
||||
{
|
||||
} else {
|
||||
return Content("User either doesn't exist OR is already added");
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
} else {
|
||||
return Content("Not Autthorized");
|
||||
}
|
||||
}
|
||||
public ActionResult AddToTECNNotification(int userId)
|
||||
{
|
||||
if ((bool)Session[GlobalVars.IS_ADMIN])
|
||||
{
|
||||
|
||||
#if !NET8
|
||||
|
||||
public ActionResult AddToTECNNotification(int userId) {
|
||||
if (GlobalVars.IsAdmin(GetSession())) {
|
||||
// Check to make sure user is not apart of the group already
|
||||
bool userExists = false;
|
||||
//bool userValid = true;
|
||||
List<TECNNotificationsUser> existingUsers = adminDMO.GetTECNNotificationUsers();
|
||||
foreach (var item in existingUsers)
|
||||
{
|
||||
if (item.UserId == userId)
|
||||
{
|
||||
foreach (var item in existingUsers) {
|
||||
if (item.UserId == userId) {
|
||||
userExists = true;
|
||||
}
|
||||
}
|
||||
@ -686,73 +382,78 @@ namespace Fab2ApprovalSystem.Controllers
|
||||
var validUser = userDMO.GetUserByID(userId);
|
||||
|
||||
// Add to group
|
||||
if (!userExists && validUser != null)
|
||||
{
|
||||
try
|
||||
{
|
||||
if (!userExists && validUser != null) {
|
||||
try {
|
||||
adminDMO.TECNExpirationAddUser(userId);
|
||||
}
|
||||
|
||||
catch (Exception e)
|
||||
{
|
||||
} catch (Exception e) {
|
||||
string exception = e.Message;
|
||||
return Content(exception);
|
||||
}
|
||||
|
||||
|
||||
return Json("Success Added");
|
||||
}
|
||||
else
|
||||
{
|
||||
} else {
|
||||
return Content("User either doesn't exist OR is already added");
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
} else {
|
||||
return Content("Not Autthorized");
|
||||
}
|
||||
}
|
||||
public ActionResult DeleteFromTrainingReport(int userId)
|
||||
{
|
||||
if ((bool)Session[GlobalVars.IS_ADMIN])
|
||||
{
|
||||
try
|
||||
{
|
||||
|
||||
#endif
|
||||
|
||||
public ActionResult DeleteFromTrainingReport(int userId) {
|
||||
if (GlobalVars.IsAdmin(GetSession())) {
|
||||
try {
|
||||
adminDMO.TrainingReportDeleteUser(userId);
|
||||
return Content("Successfully Deleted");
|
||||
}
|
||||
catch
|
||||
{
|
||||
} catch {
|
||||
return Content("Error while trying to delete");
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
} else {
|
||||
return Content("Not Autthorized");
|
||||
}
|
||||
}
|
||||
public ActionResult DeleteFromTECNNotification(int userId)
|
||||
{
|
||||
if ((bool)Session[GlobalVars.IS_ADMIN])
|
||||
{
|
||||
try
|
||||
{
|
||||
|
||||
public ActionResult DeleteFromTECNNotification(int userId) {
|
||||
if (GlobalVars.IsAdmin(GetSession())) {
|
||||
try {
|
||||
adminDMO.TECNExpirationDeleteUser(userId);
|
||||
return Content("Successfully Deleted");
|
||||
}
|
||||
catch
|
||||
{
|
||||
} catch {
|
||||
return Content("Error while trying to delete");
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
} 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;
|
||||
|
||||
}
|
@ -1,472 +1,248 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
#if !NET8
|
||||
using System.Web;
|
||||
using System.Web.Mvc;
|
||||
using Kendo.Mvc.Extensions;
|
||||
using Kendo.Mvc.UI;
|
||||
using Fab2ApprovalSystem.Models;
|
||||
#endif
|
||||
|
||||
#if NET8
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
using Microsoft.AspNetCore.Authorization;
|
||||
#endif
|
||||
|
||||
using Fab2ApprovalSystem.DMO;
|
||||
using Fab2ApprovalSystem.Misc;
|
||||
using System.IO;
|
||||
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;
|
||||
|
||||
namespace Fab2ApprovalSystem.Controllers
|
||||
{
|
||||
[Authorize]
|
||||
#if !NET8
|
||||
[OutputCache(NoStore = true, Duration = 0, VaryByParam = "*")]
|
||||
[SessionExpireFilter]
|
||||
public class AuditController : Controller
|
||||
{
|
||||
AuditDMO auditDMO = new AuditDMO();
|
||||
CorrectiveActionDMO caDMO = new CorrectiveActionDMO();
|
||||
UserUtilities adUsers = new UserUtilities();
|
||||
#endif
|
||||
#if NET8
|
||||
[Route("[controller]")]
|
||||
#endif
|
||||
public class AuditController : Controller {
|
||||
|
||||
private readonly AuditDMO auditDMO = new(GlobalVars.AppSettings);
|
||||
private readonly CorrectiveActionDMO caDMO = new();
|
||||
private readonly AppSettings _AppSettings = GlobalVars.AppSettings;
|
||||
|
||||
// GET: Audit
|
||||
public ActionResult Index()
|
||||
{
|
||||
public ActionResult Index() {
|
||||
return View();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
public ActionResult Create()
|
||||
{
|
||||
|
||||
|
||||
Audit audit = new Audit();
|
||||
try
|
||||
{
|
||||
public ActionResult Create() {
|
||||
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)
|
||||
{
|
||||
} catch (Exception e) {
|
||||
string detailedException = "";
|
||||
try
|
||||
{
|
||||
try {
|
||||
detailedException = e.InnerException.ToString();
|
||||
}
|
||||
catch
|
||||
{
|
||||
} catch {
|
||||
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(@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);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <param name="issueID"></param>
|
||||
/// <returns></returns>
|
||||
public ActionResult Edit(int issueID)
|
||||
{
|
||||
public ActionResult Edit(int issueID) {
|
||||
int isITARCompliant = 1;
|
||||
Audit audit = new Audit();
|
||||
Audit audit = new();
|
||||
|
||||
try
|
||||
{
|
||||
List<int> userList = auditDMO.Get8DQA();
|
||||
ViewBag.MesaUsers = adUsers.GetMesaUsers();
|
||||
int QAs = userList.Find(delegate(int al) { return al == (int)Session[GlobalVars.SESSION_USERID]; });
|
||||
ViewBag.Is8DQA = "false";
|
||||
if (QAs != 0)
|
||||
{
|
||||
ViewBag.Is8DQA = "true";
|
||||
}
|
||||
|
||||
audit = auditDMO.GetAuditItem(issueID, (int)Session[GlobalVars.SESSION_USERID]);
|
||||
//transform audit users from string to list, delimited by a comma.
|
||||
if(audit.Auditees == null || !audit.Auditees.Contains(","))
|
||||
{
|
||||
ViewBag.AuditeeNames = audit.Auditees;
|
||||
}
|
||||
else
|
||||
{
|
||||
string[] auditeeNames = audit.Auditees.Split(',');
|
||||
ViewBag.AuditeeNames = auditeeNames.ToList();
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
ViewBag.IsSubmitter = false;
|
||||
if(audit.OriginatorID == (int)Session[GlobalVars.SESSION_USERID])
|
||||
{
|
||||
ViewBag.IsSubmitter = true;
|
||||
}
|
||||
if((bool)Session[GlobalVars.IS_ADMIN] != true)
|
||||
{
|
||||
ViewBag.IsAdmin = false;
|
||||
}
|
||||
else
|
||||
{
|
||||
ViewBag.IsAdmin = true;
|
||||
}
|
||||
if ((audit.RecordLockIndicator && audit.RecordLockedBy != (int)Session[GlobalVars.SESSION_USERID])
|
||||
|| audit.AuditStatus != 0 ) //open
|
||||
{
|
||||
try {
|
||||
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 });
|
||||
}
|
||||
if (ViewBag.IsAdmin == false && ViewBag.IsSubmitter == false)
|
||||
{
|
||||
return RedirectToAction("ReadOnlyAudit", new { auditNo = audit.AuditNo });
|
||||
}
|
||||
else
|
||||
{
|
||||
ViewBag.UserList = auditDMO.GetUserList();
|
||||
ViewBag.AuditTypeList = auditDMO.GetAuditTypeList();
|
||||
//ViewBag.AuditStandardList = auditDMO.GetAuditStandardList();
|
||||
ViewBag.AuditorList = auditDMO.GetAuditorList();
|
||||
ViewBag.AuditAreaList = auditDMO.GetAuditAreaList();
|
||||
ViewBag.AuditFindingCategoryList = auditDMO.GetAuditFindingCategories();
|
||||
ViewBag.CANoList = auditDMO.GetCorrectiveActionNoList();
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
ViewBag.AuditAreaList = auditEdit.AuditAreaList;
|
||||
ViewBag.AuditeeNames = auditEdit.AuditeeNames;
|
||||
ViewBag.AuditFindingCategoryList = auditEdit.AuditFindingCategoryList;
|
||||
ViewBag.AuditorList = auditEdit.AuditorList;
|
||||
ViewBag.AuditTypeList = auditEdit.AuditTypeList;
|
||||
ViewBag.CANoList = auditEdit.CANoList;
|
||||
ViewBag.Is8DQA = auditEdit.Is8DQA;
|
||||
ViewBag.IsAdmin = auditEdit.IsAdmin;
|
||||
ViewBag.IsSubmitter = auditEdit.IsSubmitter;
|
||||
ViewBag.MesaUsers = auditEdit.MesaUsers;
|
||||
ViewBag.UserList = auditEdit.UserList;
|
||||
} catch (Exception e) {
|
||||
string detailedException = "";
|
||||
try
|
||||
{
|
||||
try {
|
||||
detailedException = e.InnerException.ToString();
|
||||
}
|
||||
catch
|
||||
{
|
||||
} catch {
|
||||
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(@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);
|
||||
|
||||
}
|
||||
|
||||
|
||||
return View(audit);
|
||||
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <param name="model"></param>
|
||||
/// <returns></returns>
|
||||
[HttpPost]
|
||||
public ActionResult Edit(Audit model)
|
||||
{
|
||||
try
|
||||
{
|
||||
|
||||
public ActionResult Edit(Audit model) {
|
||||
try {
|
||||
var data = model;
|
||||
auditDMO.UpdateAudit(model, (int)Session[GlobalVars.SESSION_USERID]);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
auditDMO.UpdateAudit(model, GlobalVars.GetUserId(GetSession()));
|
||||
} catch (Exception ex) {
|
||||
return Content(ex.Message);
|
||||
}
|
||||
|
||||
return Content("Successfully Saved");
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <param name="auditNo"></param>
|
||||
/// <returns></returns>
|
||||
public ActionResult CheckCAStatus(int auditNo)
|
||||
{
|
||||
public ActionResult CheckCAStatus(int auditNo) {
|
||||
int dataCount = -1;
|
||||
try
|
||||
{
|
||||
try {
|
||||
dataCount = auditDMO.GetOpenCACountByAuditNo(auditNo);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
} catch (Exception ex) {
|
||||
throw;
|
||||
}
|
||||
|
||||
return Content(dataCount.ToString());
|
||||
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <param name="auditNo"></param>
|
||||
/// <returns></returns>
|
||||
public ActionResult ReadOnlyAudit(int auditNo)
|
||||
{
|
||||
Audit audit = new Audit();
|
||||
audit = auditDMO.GetAuditItemReadOnly(auditNo, (int)Session[GlobalVars.SESSION_USERID]);
|
||||
public ActionResult ReadOnlyAudit(int auditNo) {
|
||||
Audit audit = new();
|
||||
audit = auditDMO.GetAuditItemReadOnly(auditNo, GlobalVars.GetUserId(GetSession()));
|
||||
|
||||
ViewBag.AuditTypeList = auditDMO.GetAuditTypeList();
|
||||
ViewBag.AuditorList = auditDMO.GetAuditorList();
|
||||
ViewBag.AuditAreaList = auditDMO.GetAuditAreaList();
|
||||
ViewBag.AuditFindingCategoryList = auditDMO.GetAuditFindingCategories();
|
||||
|
||||
|
||||
return View(audit);
|
||||
}
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <param name="AuditReportFiles"></param>
|
||||
/// <param name="auditNo"></param>
|
||||
/// <returns></returns>
|
||||
public ActionResult AuditReportAttachSave(IEnumerable<HttpPostedFileBase> AuditReportFiles, int auditNo)
|
||||
{
|
||||
try
|
||||
{
|
||||
|
||||
#if !NET8
|
||||
|
||||
public ActionResult AuditReportAttachSave(IEnumerable<HttpPostedFileBase> AuditReportFiles, int auditNo) {
|
||||
try {
|
||||
// The Name of the Upload component is "files"
|
||||
if (AuditReportFiles != null)
|
||||
{
|
||||
foreach (var file in AuditReportFiles)
|
||||
{
|
||||
// Some browsers send file names with full path.
|
||||
// We are only interested in the file name.
|
||||
|
||||
|
||||
var fileName = Path.GetFileName(file.FileName);
|
||||
var fileExtension = Path.GetExtension(file.FileName);
|
||||
//var physicalPath = Path.Combine(Server.MapPath("~/UserUploads"), fileName);
|
||||
DirectoryInfo di;
|
||||
var ccPhysicalPath = Functions.GetAttachmentFolder() + @"Audit\" + auditNo;
|
||||
di = new DirectoryInfo(ccPhysicalPath);
|
||||
if (!di.Exists)
|
||||
di.Create();
|
||||
|
||||
|
||||
var guid = Guid.NewGuid().ToString();
|
||||
var physicalPath = Path.Combine(Functions.GetAttachmentFolder() + @"Audit\" + auditNo + @"\", guid + fileExtension);
|
||||
|
||||
|
||||
file.SaveAs(physicalPath);
|
||||
AuditReportAttachment attach = new AuditReportAttachment()
|
||||
{
|
||||
AuditNo = auditNo,
|
||||
FileGUID = guid,
|
||||
FileName = fileName,
|
||||
UploadedByID = (int)Session[GlobalVars.SESSION_USERID]
|
||||
|
||||
};
|
||||
|
||||
|
||||
//ccDMO.InsertCCAttachment(attach);
|
||||
auditDMO.InsertAuditReportAttachment(attach);
|
||||
if (AuditReportFiles != null) {
|
||||
int userId = GlobalVars.GetUserId(GetSession());
|
||||
foreach (var file in AuditReportFiles) {
|
||||
AuditHelper.AuditReportAttachSave(_AppSettings, auditDMO, auditNo, userId, file.FileName, file.InputStream);
|
||||
}
|
||||
}
|
||||
}
|
||||
catch
|
||||
{
|
||||
} catch {
|
||||
throw;
|
||||
}
|
||||
|
||||
|
||||
return Content("");
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <param name="request"></param>
|
||||
/// <param name="auditNo"></param>
|
||||
/// <returns></returns>
|
||||
public ActionResult AuditReportAttachment_Read([DataSourceRequest] DataSourceRequest request, int auditNo)
|
||||
{
|
||||
public ActionResult AuditReportAttachment_Read([DataSourceRequest] DataSourceRequest request, int auditNo) {
|
||||
|
||||
return Json(auditDMO.GetAuditReportAttachments(auditNo).ToDataSourceResult(request));
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <param name="attachID"></param>
|
||||
[HttpPost]
|
||||
public void DeleteAuditReportAttachment(int attachID)
|
||||
{
|
||||
public void DeleteAuditReportAttachment(int attachID) {
|
||||
auditDMO.DeleteAuditReportAttachment(attachID);
|
||||
|
||||
|
||||
}
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <param name="fileGuid"></param>
|
||||
/// <param name="auditNo"></param>
|
||||
/// <returns></returns>
|
||||
public FileResult DownloadAuditReportAttachment(string fileGuid, int auditNo)
|
||||
{
|
||||
try
|
||||
{
|
||||
string fileName = auditDMO.GetAuditReportAttachmentFileName(fileGuid);
|
||||
|
||||
string fileExtension = fileName.Substring(fileName.LastIndexOf("."), fileName.Length - fileName.LastIndexOf("."));
|
||||
|
||||
string ecnFolderPath = Functions.GetAttachmentFolder() + "Audit\\" + auditNo.ToString();
|
||||
var sDocument = Path.Combine(ecnFolderPath, fileGuid + fileExtension);
|
||||
|
||||
var FDir_AppData = Functions.GetAttachmentFolder();
|
||||
if (!sDocument.StartsWith(FDir_AppData))
|
||||
{
|
||||
public FileResult DownloadAuditReportAttachment(string fileGuid, int auditNo) {
|
||||
try {
|
||||
string fileName, sDocument;
|
||||
List<string> results = AuditHelper.GetFileNameAndDocument(_AppSettings, auditDMO, fileGuid, auditNo);
|
||||
fileName = results[0];
|
||||
sDocument = results[1];
|
||||
if (string.IsNullOrEmpty(sDocument)) {
|
||||
// Ensure that we are serving file only inside the Fab2ApprovalAttachments folder
|
||||
// and block requests outside like "../web.config"
|
||||
throw new HttpException(403, "Forbidden");
|
||||
}
|
||||
|
||||
if (!System.IO.File.Exists(sDocument))
|
||||
{
|
||||
if (!System.IO.File.Exists(sDocument)) {
|
||||
return null;
|
||||
//throw new Exception("File not found");
|
||||
}
|
||||
|
||||
return File(sDocument, System.Net.Mime.MediaTypeNames.Application.Octet, fileName);
|
||||
}
|
||||
|
||||
catch
|
||||
{
|
||||
} catch {
|
||||
// TODO - proces the error
|
||||
throw;
|
||||
}
|
||||
}
|
||||
|
||||
#if !NET8
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <param name="request"></param>
|
||||
/// <param name="auditNo"></param>
|
||||
/// <returns></returns>
|
||||
public ActionResult GetAuditFindingsList([DataSourceRequest] DataSourceRequest request, int auditNo)
|
||||
{
|
||||
|
||||
public ActionResult GetAuditFindingsList([DataSourceRequest] DataSourceRequest request, int auditNo) {
|
||||
return Json(auditDMO.GetAuditFindingsList(auditNo).ToDataSourceResult(request));
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <param name="data"></param>
|
||||
public ActionResult InsertAuditFindingsItem(AuditFindings data)
|
||||
{
|
||||
if ((data.FindingType == "Major" || data.FindingType == "Minor") && data.CANo == 0)
|
||||
{
|
||||
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 = GlobalVars.GetUserId(GetSession());
|
||||
Audit audit = auditDMO.InsertAndGetAudit(caDMO, data, userId);
|
||||
return GetJsonResult(audit);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
Audit audit = new Audit();
|
||||
auditDMO.InsertAuditFindingsItem(data);
|
||||
audit = auditDMO.GetAuditItem(data.AuditNo, (int)Session[GlobalVars.SESSION_USERID]);
|
||||
|
||||
//Transfer Finding Details to CA
|
||||
if(data.CANo != 0)
|
||||
{
|
||||
CorrectiveAction ca = caDMO.GetCAItem(data.CANo, (int)Session[GlobalVars.SESSION_USERID]);
|
||||
ca.CATitle = data.Title;
|
||||
ca.CASourceID = 1;//Audit
|
||||
caDMO.UpdateCorrectiveAction(ca);
|
||||
}
|
||||
|
||||
|
||||
return Json(audit, JsonRequestBehavior.AllowGet);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <param name="data"></param>
|
||||
public ActionResult UpdateAuditFindingsItem(AuditFindings data)
|
||||
{
|
||||
if ((data.FindingType == "Major" || data.FindingType == "Minor") && data.CANo == 0)
|
||||
{
|
||||
public ActionResult UpdateAuditFindingsItem(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
|
||||
{
|
||||
Audit audit = new Audit();
|
||||
auditDMO.UpdateAuditFindingsItem(data);
|
||||
audit = auditDMO.GetAuditItem(data.AuditNo, (int)Session[GlobalVars.SESSION_USERID]);
|
||||
|
||||
//Transfer Finding Details to CA
|
||||
if (data.CANo != 0)
|
||||
{
|
||||
CorrectiveAction ca = caDMO.GetCAItem(data.CANo, (int)Session[GlobalVars.SESSION_USERID]);
|
||||
ca.CATitle = data.Title;
|
||||
ca.CASourceID = 1;//Audit
|
||||
caDMO.UpdateCorrectiveAction(ca);
|
||||
}
|
||||
|
||||
return Json(audit, JsonRequestBehavior.AllowGet);
|
||||
} else {
|
||||
int userId = GlobalVars.GetUserId(GetSession());
|
||||
Audit audit = auditDMO.UpdateAndGetAudit(caDMO, data, userId);
|
||||
return GetJsonResult(audit);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public ActionResult DeleteAuditFindingsItem(int auditFindingsID)
|
||||
{
|
||||
var af = auditDMO.GetAuditFindingsByID(auditFindingsID);
|
||||
auditDMO.DeleteAuditFindingsItem(auditFindingsID);
|
||||
var audit = auditDMO.GetAuditItem(af.AuditNo, (int)Session[GlobalVars.SESSION_USERID]);
|
||||
return Json(audit, JsonRequestBehavior.AllowGet);
|
||||
public ActionResult DeleteAuditFindingsItem(int auditFindingsID) {
|
||||
int userId = GlobalVars.GetUserId(GetSession());
|
||||
Audit audit = auditDMO.DeleteAndGetAudit(auditFindingsID, userId);
|
||||
return GetJsonResult(audit);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <param name="issueID"></param>
|
||||
public void ReleaseLockOnDocument(int issueID)
|
||||
{
|
||||
try
|
||||
{
|
||||
auditDMO.ReleaseLockOnDocument((int)Session[GlobalVars.SESSION_USERID], issueID);
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
try
|
||||
{
|
||||
Functions.WriteEvent(@User.Identity.Name + "\r\n ReleaseLockOnDocument CA\r\n" + issueID.ToString() + "\r\n" + e.Message, System.Diagnostics.EventLogEntryType.Error);
|
||||
}
|
||||
catch { }
|
||||
public void ReleaseLockOnDocument(int issueID) {
|
||||
try {
|
||||
auditDMO.ReleaseLockOnDocument(GlobalVars.GetUserId(GetSession()), issueID);
|
||||
} catch (Exception e) {
|
||||
try {
|
||||
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);
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
// CA Findings ======================================================================================================================
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <param name="data"></param>
|
||||
/// <returns></returns>
|
||||
public ActionResult InsertCAFindingsItem(CAFindings data)
|
||||
{
|
||||
public ActionResult InsertCAFindingsItem(CAFindings data) {
|
||||
auditDMO.InsertCAFindings(data);
|
||||
if (data.ResponsibilityOwnerID != null)
|
||||
{
|
||||
if (data.ResponsibilityOwnerID != null) {
|
||||
// send an email notification
|
||||
NotifyActionItemOwner(data.AuditNo, data.ECD, data.ResponsibilityOwnerID);
|
||||
}
|
||||
@ -474,196 +250,111 @@ namespace Fab2ApprovalSystem.Controllers
|
||||
return Content("");
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <param name="data"></param>
|
||||
/// <returns></returns>
|
||||
public ActionResult UpdateCAFindingsItem(CAFindings data)
|
||||
{
|
||||
public ActionResult UpdateCAFindingsItem(CAFindings data) {
|
||||
auditDMO.UpdateCAFindings(data);
|
||||
if (data.ResponsibilityOwnerID != data.CurrentResponsibilityOwnerID)
|
||||
{
|
||||
if (data.ResponsibilityOwnerID != data.CurrentResponsibilityOwnerID) {
|
||||
NotifyActionItemOwner(data.AuditNo, data.ECD, data.ResponsibilityOwnerID);
|
||||
}
|
||||
|
||||
return Content("");
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <param name="request"></param>
|
||||
/// <param name="caNo"></param>
|
||||
/// <returns></returns>
|
||||
public ActionResult GetCAFindingsList([DataSourceRequest] DataSourceRequest request, int auditNo)
|
||||
{
|
||||
#if !NET8
|
||||
|
||||
public ActionResult GetCAFindingsList([DataSourceRequest] DataSourceRequest request, int auditNo) {
|
||||
return Json(auditDMO.GetCAFindingsList(auditNo).ToDataSourceResult(request));
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <param name="request"></param>
|
||||
/// <param name="d7PAID"></param>
|
||||
/// <returns></returns>
|
||||
public ActionResult GetCAFindingsItemAttachments([DataSourceRequest] DataSourceRequest request, int caFindingsID)
|
||||
{
|
||||
|
||||
public ActionResult GetCAFindingsItemAttachments([DataSourceRequest] DataSourceRequest request, int caFindingsID) {
|
||||
return Json(auditDMO.GetCAFindingsItemAttachments(caFindingsID).ToDataSourceResult(request));
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <param name="d7paID"></param>
|
||||
/// <returns></returns>
|
||||
public ActionResult GetCAFindingsItem(int caFindingsID)
|
||||
{
|
||||
var model = new CAFindings();
|
||||
public ActionResult GetCAFindingsItem(int caFindingsID) {
|
||||
CAFindings model = new();
|
||||
model = auditDMO.GetCAFindingsItem(caFindingsID);
|
||||
|
||||
return PartialView("_CAFindingsAttachment", model);
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <param name="caFindingsID"></param>
|
||||
[HttpPost]
|
||||
public void DeleteCAFindingsItem(int caFindingsID)
|
||||
{
|
||||
public void DeleteCAFindingsItem(int caFindingsID) {
|
||||
auditDMO.DeleteCAFindingsItem(caFindingsID);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <param name="D7PA_Attachemnt"></param>
|
||||
/// <param name="d7PAID"></param>
|
||||
/// <param name="caNo"></param>
|
||||
/// <returns></returns>
|
||||
public ActionResult SaveCAFindings_Attachemnt(IEnumerable<HttpPostedFileBase> CAFindings_Attachemnt, int caFindingsID, int auditNo)
|
||||
{
|
||||
try
|
||||
{
|
||||
#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)
|
||||
{
|
||||
foreach (var file in CAFindings_Attachemnt)
|
||||
{
|
||||
// Some browsers send file names with full path.
|
||||
// We are only interested in the file name.
|
||||
|
||||
|
||||
var fileName = Path.GetFileName(file.FileName);
|
||||
var fileExtension = Path.GetExtension(file.FileName);
|
||||
//var physicalPath = Path.Combine(Server.MapPath("~/UserUploads"), fileName);
|
||||
DirectoryInfo di;
|
||||
var ccPhysicalPath = Functions.GetAttachmentFolder() + @"Audit\" + auditNo;
|
||||
di = new DirectoryInfo(ccPhysicalPath);
|
||||
if (!di.Exists)
|
||||
di.Create();
|
||||
|
||||
|
||||
var guid = Guid.NewGuid().ToString();
|
||||
var physicalPath = Path.Combine(Functions.GetAttachmentFolder() + @"Audit\" + auditNo + @"\", guid + fileExtension);
|
||||
|
||||
|
||||
file.SaveAs(physicalPath);
|
||||
AuditReportAttachment attach = new AuditReportAttachment()
|
||||
{
|
||||
CAFindingsID = caFindingsID,
|
||||
AuditNo = auditNo,
|
||||
FileGUID = guid,
|
||||
FileName = fileName,
|
||||
UploadedByID = (int)Session[GlobalVars.SESSION_USERID]
|
||||
|
||||
};
|
||||
|
||||
|
||||
auditDMO.InsertAuditReportAttachment(attach);
|
||||
if (CAFindings_Attachemnt != null) {
|
||||
int userId = GlobalVars.GetUserId(GetSession());
|
||||
foreach (var file in CAFindings_Attachemnt) {
|
||||
AuditHelper.SaveAndInsert(_AppSettings, auditDMO, caFindingsID, auditNo, userId, file.FileName, file.InputStream);
|
||||
}
|
||||
}
|
||||
}
|
||||
catch
|
||||
{
|
||||
} catch {
|
||||
throw;
|
||||
}
|
||||
|
||||
|
||||
return Content("");
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <param name="issueID"></param>
|
||||
/// <param name="currentStep"></param>
|
||||
public void NotifyActionItemOwner(int issueID, DateTime? dueDate, int? responsibleOwnerID)
|
||||
{
|
||||
try
|
||||
{
|
||||
string emailSentList = "";
|
||||
public void NotifyActionItemOwner(int issueID, DateTime? dueDate, int? responsibleOwnerID) {
|
||||
try {
|
||||
string email = auditDMO.NotifyActionItemOwner(issueID, dueDate, responsibleOwnerID, _AppSettings.EmailTemplatesPath);
|
||||
|
||||
//List<string> emailIst = ldDMO.GetApproverEmailList(@issueID, currentStep).Distinct().ToList();
|
||||
string email = MiscDMO.GetEmail(responsibleOwnerID);
|
||||
|
||||
string emailTemplate = "CorrectiveActionFindingAssigned.txt";
|
||||
string userEmail = string.Empty;
|
||||
string subject = "5s/CA Findings";
|
||||
string senderName = "CorrectiveAction";
|
||||
|
||||
EmailNotification en = new EmailNotification(subject, ConfigurationManager.AppSettings["EmailTemplatesPath"]);
|
||||
string[] emailparams = new string[5];
|
||||
emailparams[0] = Functions.ReturnAuditNoStringFormat(issueID);
|
||||
emailparams[1] = dueDate.ToString();
|
||||
emailparams[2] = Functions.DocumentTypeMapper(GlobalVars.DocumentType.Audit);
|
||||
emailparams[3] = GlobalVars.hostURL;
|
||||
emailparams[4] = issueID.ToString();
|
||||
userEmail = email;
|
||||
|
||||
en.SendNotificationEmail(emailTemplate, GlobalVars.SENDER_EMAIL, senderName, userEmail, null, subject, emailparams);
|
||||
emailSentList += email + ",";
|
||||
|
||||
try
|
||||
{
|
||||
|
||||
EventLogDMO.Add(new WinEventLog() { IssueID = issueID, UserID = @User.Identity.Name, DocumentType = "Corrective Action", OperationType = "Email", Comments = "Task Assigned for 5S/CA Findings" + ":" + email });
|
||||
}
|
||||
catch { }
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
try {
|
||||
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 = "";
|
||||
try
|
||||
{
|
||||
try {
|
||||
detailedException = e.InnerException.ToString();
|
||||
}
|
||||
catch
|
||||
{
|
||||
} catch {
|
||||
detailedException = e.Message;
|
||||
}
|
||||
|
||||
string exceptionString = e.Message.ToString().Trim().Length > 500 ? "Issue=" + issueID.ToString() + " 5s/CAFindings:" + e.Message.ToString().Substring(0, 250) : e.Message.ToString();
|
||||
Functions.WriteEvent(@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 });
|
||||
//throw e;
|
||||
|
||||
|
||||
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 });
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
public ActionResult IsCAAssignedToAudit(int caNo, int auditNo)
|
||||
{
|
||||
public ActionResult IsCAAssignedToAudit(int caNo, int auditNo) {
|
||||
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;
|
||||
|
||||
}
|
||||
}
|
||||
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -1,37 +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;
|
||||
|
||||
namespace Fab2ApprovalSystem.Controllers
|
||||
{
|
||||
#if !NET8
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using Fab2ApprovalSystem.Models;
|
||||
#endif
|
||||
|
||||
namespace Fab2ApprovalSystem.Controllers;
|
||||
|
||||
[Authorize]
|
||||
#if !NET8
|
||||
[SessionExpireFilter]
|
||||
public class ManagerController : Controller
|
||||
{
|
||||
UserAccountDMO userDMO = new UserAccountDMO();
|
||||
AdminDMO adminDMO = new AdminDMO();
|
||||
TrainingDMO trainingDMO = new TrainingDMO();
|
||||
LotDispositionDMO ldDMO = new LotDispositionDMO();
|
||||
#endif
|
||||
#if NET8
|
||||
[Route("[controller]")]
|
||||
#endif
|
||||
public class ManagerController : Controller {
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
public ActionResult Index()
|
||||
{
|
||||
private readonly UserAccountDMO userDMO = new();
|
||||
private readonly AdminDMO adminDMO = new();
|
||||
private readonly TrainingDMO trainingDMO = new();
|
||||
private readonly LotDispositionDMO ldDMO = new();
|
||||
|
||||
if ((bool)Session[GlobalVars.IS_MANAGER])
|
||||
{
|
||||
public ActionResult Index() {
|
||||
if (GlobalVars.IsManager(GetSession())) {
|
||||
var model = userDMO.GetAllUsers();
|
||||
ViewBag.AllActiveUsers = userDMO.GetAllActiveUsers();
|
||||
return View(model);
|
||||
}
|
||||
else
|
||||
} 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,55 +1,67 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
#if !NET8
|
||||
using System.Web;
|
||||
using System.Web.Mvc;
|
||||
using Fab2ApprovalSystem.Models;
|
||||
#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;
|
||||
|
||||
namespace Fab2ApprovalSystem.Controllers
|
||||
{
|
||||
[Authorize]
|
||||
#if !NET8
|
||||
[OutputCache(NoStore = true, Duration = 0, VaryByParam = "*")]
|
||||
[SessionExpireFilter]
|
||||
public class PartsRequestController : Controller
|
||||
{
|
||||
PartsRequestDMO prDMO = new PartsRequestDMO();
|
||||
UserAccountDMO userDMO = new UserAccountDMO();
|
||||
WorkflowDMO wfDMO = new WorkflowDMO();
|
||||
#endif
|
||||
#if NET8
|
||||
[Route("[controller]")]
|
||||
#endif
|
||||
public class PartsRequestController : Controller {
|
||||
|
||||
const int WorkflowNumber = 1;
|
||||
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()
|
||||
{
|
||||
public PartsRequestController() {
|
||||
ViewBag.ShowReAssignApprovers = false;
|
||||
}
|
||||
|
||||
protected ActionResult HandleValidationError(string msg)
|
||||
{
|
||||
protected ActionResult HandleValidationError(string msg) {
|
||||
Response.StatusCode = (int)System.Net.HttpStatusCode.BadRequest;
|
||||
return Json(new { result = "Invalid", detail = msg });
|
||||
}
|
||||
|
||||
protected ActionResult HandleAPIException(int issueID, Exception ex, string additionalKeys = "")
|
||||
{
|
||||
protected ActionResult HandleAPIException(int issueID, Exception ex, string additionalKeys = "") {
|
||||
HandleException(issueID, ex, additionalKeys);
|
||||
|
||||
Response.StatusCode = (int)System.Net.HttpStatusCode.InternalServerError;
|
||||
return Json(new { result = "Error", issueID = issueID, detail = ex.Message });
|
||||
}
|
||||
|
||||
protected void HandleException(int issueID, Exception ex, string additionalKeys = "")
|
||||
{
|
||||
var st = new System.Diagnostics.StackTrace();
|
||||
var sf = st.GetFrame(1);
|
||||
protected void HandleException(int issueID, Exception ex, string additionalKeys = "") {
|
||||
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",
|
||||
@ -60,59 +72,43 @@ namespace Fab2ApprovalSystem.Controllers
|
||||
additionalKeys);
|
||||
|
||||
Exception x = ex;
|
||||
while (x != null)
|
||||
{
|
||||
while (x != null) {
|
||||
detailedException += x.ToString();
|
||||
detailedException += "\r\n=====\r\n";
|
||||
x = x.InnerException;
|
||||
}
|
||||
|
||||
Functions.WriteEvent(detailedException, System.Diagnostics.EventLogEntryType.Error);
|
||||
Functions.WriteEvent(_AppSettings, detailedException, System.Diagnostics.EventLogEntryType.Error);
|
||||
|
||||
EventLogDMO.Add(new WinEventLog()
|
||||
{
|
||||
EventLogDMO.Add(new WinEventLog() {
|
||||
IssueID = issueID,
|
||||
UserID = @User.Identity.Name,
|
||||
UserID = GetUserIdentityName(),
|
||||
DocumentType = controller,
|
||||
OperationType = "Error",
|
||||
Comments = detailedException
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
// GET: PartsRequest
|
||||
public ActionResult Index()
|
||||
{
|
||||
public ActionResult Index() {
|
||||
return View();
|
||||
}
|
||||
|
||||
public ActionResult Edit(int issueID)
|
||||
{
|
||||
var pr = new PartsRequest();
|
||||
try
|
||||
{
|
||||
public ActionResult Edit(int issueID) {
|
||||
PartsRequest pr = new();
|
||||
try {
|
||||
pr = prDMO.Get(issueID);
|
||||
|
||||
if (pr == null)
|
||||
{
|
||||
if (pr == null) {
|
||||
ViewBag.ErrorDescription = "Document does not exist";
|
||||
return View("Error");
|
||||
}
|
||||
else if (pr.CurrentStep < 0)
|
||||
{
|
||||
} else if (pr.CurrentStep < 0) {
|
||||
ViewBag.ErrorDescription = "Document is deleted";
|
||||
return View("Error");
|
||||
}
|
||||
else if (pr.CurrentStep >= 1)
|
||||
{
|
||||
} 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)
|
||||
{
|
||||
} else {
|
||||
if (pr.OriginatorID != GlobalVars.GetUserId(GetSession())) {
|
||||
if (!GlobalVars.IsAdmin(GetSession())) {
|
||||
return RedirectToAction("ReadOnly", new { issueID = issueID });
|
||||
}
|
||||
}
|
||||
@ -120,60 +116,51 @@ namespace Fab2ApprovalSystem.Controllers
|
||||
ViewBag.UserList = userDMO.GetAllUsers();
|
||||
return View(pr);
|
||||
}
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
} catch (Exception e) {
|
||||
HandleException(issueID, e);
|
||||
return View("Error");
|
||||
}
|
||||
}
|
||||
|
||||
#if !NET8
|
||||
|
||||
[HttpPost]
|
||||
public ActionResult Edit(PartsRequest pr)
|
||||
{
|
||||
try
|
||||
{
|
||||
public ActionResult Edit(PartsRequest pr) {
|
||||
try {
|
||||
var pr_srv = prDMO.Get(pr.PRNumber);
|
||||
|
||||
if (pr_srv == null)
|
||||
{
|
||||
if (pr_srv == null) {
|
||||
return new HttpStatusCodeResult(System.Net.HttpStatusCode.BadRequest, "Document does not exist");
|
||||
}
|
||||
if (pr_srv.CurrentStep < 0)
|
||||
{
|
||||
if (pr_srv.CurrentStep < 0) {
|
||||
return new HttpStatusCodeResult(System.Net.HttpStatusCode.BadRequest, "Document is deleted");
|
||||
}
|
||||
|
||||
if (pr_srv.CurrentStep >= 1)
|
||||
{
|
||||
if (pr_srv.CurrentStep >= 1) {
|
||||
return new HttpStatusCodeResult(System.Net.HttpStatusCode.BadRequest, "Parts Request is not editable");
|
||||
}
|
||||
|
||||
prDMO.Update(pr);
|
||||
return Content("");
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
} catch (Exception e) {
|
||||
return HandleAPIException(pr.PRNumber, e);
|
||||
}
|
||||
}
|
||||
|
||||
public ActionResult EditApproval(int issueID)
|
||||
{
|
||||
var pr = new PartsRequest();
|
||||
try
|
||||
{
|
||||
int myUserID = (int)Session[GlobalVars.SESSION_USERID];
|
||||
#endif
|
||||
|
||||
public ActionResult EditApproval(int issueID) {
|
||||
PartsRequest pr = new();
|
||||
try {
|
||||
int myUserID = GlobalVars.GetUserId(GetSession());
|
||||
|
||||
pr = prDMO.Get(issueID);
|
||||
|
||||
if (pr == null)
|
||||
{
|
||||
if (pr == null) {
|
||||
ViewBag.ErrorDescription = "Document does not exist";
|
||||
return View("Error");
|
||||
}
|
||||
if (pr.CurrentStep < 0)
|
||||
{
|
||||
if (pr.CurrentStep < 0) {
|
||||
ViewBag.ErrorDescription = "Document is deleted";
|
||||
return View("Error");
|
||||
}
|
||||
@ -183,96 +170,77 @@ namespace Fab2ApprovalSystem.Controllers
|
||||
var userList = MiscDMO.GetPendingApproversListByDocument(issueID, Convert.ToByte(pr.CurrentStep), (int)GlobalVars.DocumentType.PartsRequest);
|
||||
ViewBag.IsApprover = (userList.Count(u => u.UserID == myUserID) > 0);
|
||||
|
||||
if (ViewBag.IsApprover == false)
|
||||
{
|
||||
if (pr.OriginatorID != myUserID)
|
||||
{
|
||||
if (Convert.ToBoolean(Session[GlobalVars.IS_ADMIN]) == false)
|
||||
{
|
||||
if (ViewBag.IsApprover == false) {
|
||||
if (pr.OriginatorID != myUserID) {
|
||||
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();
|
||||
return View(pr);
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
} catch (Exception e) {
|
||||
HandleException(issueID, e);
|
||||
return View("Error");
|
||||
}
|
||||
}
|
||||
|
||||
public ActionResult ReadOnly(int issueID)
|
||||
{
|
||||
var pr = new PartsRequest();
|
||||
try
|
||||
{
|
||||
int myUserID = (int)Session[GlobalVars.SESSION_USERID];
|
||||
public ActionResult ReadOnly(int issueID) {
|
||||
PartsRequest pr = new();
|
||||
try {
|
||||
int myUserID = GlobalVars.GetUserId(GetSession());
|
||||
|
||||
pr = prDMO.Get(issueID);
|
||||
|
||||
if (pr == null)
|
||||
{
|
||||
if (pr == null) {
|
||||
ViewBag.ErrorDescription = "Document does not exist";
|
||||
return View("Error");
|
||||
}
|
||||
if (pr.CurrentStep < 0)
|
||||
{
|
||||
if (pr.CurrentStep < 0) {
|
||||
ViewBag.ErrorDescription = "Document is deleted";
|
||||
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);
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
} catch (Exception e) {
|
||||
HandleException(issueID, e);
|
||||
return View("Error");
|
||||
}
|
||||
}
|
||||
|
||||
public ActionResult Create()
|
||||
{
|
||||
var pr = new PartsRequest();
|
||||
try
|
||||
{
|
||||
pr.OriginatorID = (int)Session[GlobalVars.SESSION_USERID];
|
||||
public ActionResult Create() {
|
||||
PartsRequest pr = new();
|
||||
try {
|
||||
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);
|
||||
|
||||
return RedirectToAction("Edit", new { issueID = pr.PRNumber });
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
} catch (Exception e) {
|
||||
return HandleAPIException(pr.PRNumber, e);
|
||||
}
|
||||
}
|
||||
|
||||
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();
|
||||
if (role != null)
|
||||
{
|
||||
public static bool CanCreatePartsRequest(int userID) {
|
||||
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)
|
||||
{
|
||||
if (subrole != null) {
|
||||
var users = adminDMO.GetAllUsersBySubRole(subrole.SubRoleID);
|
||||
if (users.Count(u => u.UserID == userID) > 0)
|
||||
{
|
||||
if (users.Count(u => u.UserID == userID) > 0) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
@ -280,62 +248,39 @@ namespace Fab2ApprovalSystem.Controllers
|
||||
return false;
|
||||
}
|
||||
|
||||
public ActionResult Attachment_Read([DataSourceRequest]DataSourceRequest request, int prNumber)
|
||||
{
|
||||
try
|
||||
{
|
||||
return Json(prDMO.GetAttachments(prNumber).ToDataSourceResult(request), JsonRequestBehavior.AllowGet);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
#if !NET8
|
||||
|
||||
public ActionResult Attachment_Read([DataSourceRequest] DataSourceRequest request, int prNumber) {
|
||||
try {
|
||||
return GetJsonResult(prDMO.GetAttachments(prNumber).ToDataSourceResult(request));
|
||||
} catch (Exception ex) {
|
||||
return HandleAPIException(prNumber, ex);
|
||||
}
|
||||
}
|
||||
|
||||
[HttpPost]
|
||||
public ActionResult AttachSave(IEnumerable<HttpPostedFileBase> files, int prNumber)
|
||||
{
|
||||
public ActionResult AttachSave(IEnumerable<HttpPostedFileBase> files, int prNumber) {
|
||||
// The Name of the Upload component is "files"
|
||||
if (files != null)
|
||||
{
|
||||
foreach (var file in files)
|
||||
{
|
||||
// Some browsers send file names with full path.
|
||||
// We are only interested in the file name.
|
||||
var fileName = System.IO.Path.GetFileName(file.FileName);
|
||||
|
||||
string prFolderPath = Functions.GetAttachmentFolder() + "PartsRequest\\" + prNumber.ToString();
|
||||
|
||||
var di = new System.IO.DirectoryInfo(prFolderPath);
|
||||
if (!di.Exists)
|
||||
di.Create();
|
||||
|
||||
var physicalPath = System.IO.Path.Combine(prFolderPath, fileName);
|
||||
|
||||
file.SaveAs(physicalPath);
|
||||
var attach = new PartsRequestAttachment()
|
||||
{
|
||||
PRNumber = prNumber,
|
||||
FileName = fileName,
|
||||
UserID = (int)Session[GlobalVars.SESSION_USERID],
|
||||
};
|
||||
prDMO.InsertAttachment(attach);
|
||||
if (files != null) {
|
||||
int userId = GlobalVars.GetUserId(GetSession());
|
||||
foreach (var file in files) {
|
||||
PartsRequestHelper.AttachSave(_AppSettings, prDMO, prNumber, userId, file.FileName, file.InputStream);
|
||||
}
|
||||
}
|
||||
|
||||
return Content("");
|
||||
}
|
||||
|
||||
public FileResult DownloadFile(string attachmentID, string prNumber)
|
||||
{
|
||||
#endif
|
||||
|
||||
public FileResult DownloadFile(string attachmentID, string prNumber) {
|
||||
string fileName = prDMO.GetFileName(attachmentID);
|
||||
|
||||
string folderPath = Functions.GetAttachmentFolder() + "PartsRequest\\" + prNumber.ToString();
|
||||
string folderPath = _AppSettings.AttachmentFolder + "PartsRequest\\" + prNumber.ToString();
|
||||
var sDocument = System.IO.Path.Combine(folderPath, fileName);
|
||||
|
||||
var FDir_AppData = Functions.GetAttachmentFolder();
|
||||
if (!sDocument.StartsWith(FDir_AppData))
|
||||
{
|
||||
var FDir_AppData = _AppSettings.AttachmentFolder;
|
||||
if (!sDocument.StartsWith(FDir_AppData)) {
|
||||
// Ensure that we are serving file only inside the Fab2ApprovalAttachments folder
|
||||
// and block requests outside like "../web.config"
|
||||
throw new HttpException(403, "Forbidden");
|
||||
@ -348,41 +293,35 @@ namespace Fab2ApprovalSystem.Controllers
|
||||
}
|
||||
|
||||
[HttpPost]
|
||||
public ActionResult DeleteAttachment(int attachmentID, string fileName, int prNumber)
|
||||
{
|
||||
try
|
||||
{
|
||||
if (ModelState.IsValid)
|
||||
{
|
||||
public ActionResult DeleteAttachment(int attachmentID, string fileName, int prNumber) {
|
||||
try {
|
||||
if (ModelState.IsValid) {
|
||||
prDMO.DeleteAttachment(attachmentID);
|
||||
var physicalPath = System.IO.Path.Combine(Functions.GetAttachmentFolder() + @"PartsRequest\" + prNumber.ToString(), fileName);
|
||||
var physicalPath = System.IO.Path.Combine(_AppSettings.AttachmentFolder + @"PartsRequest\" + prNumber.ToString(), fileName);
|
||||
|
||||
if (System.IO.File.Exists(physicalPath))
|
||||
{
|
||||
if (System.IO.File.Exists(physicalPath)) {
|
||||
System.IO.File.Delete(physicalPath);
|
||||
}
|
||||
}
|
||||
return Content("");
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
} catch (Exception e) {
|
||||
return HandleAPIException(prNumber, e, "AttachmentID=" + attachmentID.ToString());
|
||||
}
|
||||
}
|
||||
|
||||
#if !NET8
|
||||
|
||||
[HttpPost]
|
||||
public ActionResult Submit(int prNumber)
|
||||
{
|
||||
try
|
||||
{
|
||||
int myUserID = (int)Session[GlobalVars.SESSION_USERID];
|
||||
public ActionResult Submit(int prNumber) {
|
||||
try {
|
||||
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");
|
||||
@ -393,111 +332,94 @@ namespace Fab2ApprovalSystem.Controllers
|
||||
|
||||
var approvers = MiscDMO.GetApprovalsByDocument(prNumber, (int)GlobalVars.DocumentType.PartsRequest);
|
||||
|
||||
if (approvers.Count(a => a.Step.HasValue && a.Step.Value == 1 && a.UserID == myUserID) > 0)
|
||||
{
|
||||
if (approvers.Count(a => a.Step.HasValue && a.Step.Value == 1 && a.UserID == myUserID) > 0) {
|
||||
// Auto-Approve if the user is an approver for workflow step 1
|
||||
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)
|
||||
return c;
|
||||
}
|
||||
else
|
||||
{
|
||||
} else {
|
||||
// Do step 1 notification
|
||||
NotifyApprovers(prNumber, 1);
|
||||
}
|
||||
|
||||
if (Request.IsAjaxRequest())
|
||||
{
|
||||
if (IsAjaxRequest()) {
|
||||
return Content("Redirect");
|
||||
}
|
||||
else
|
||||
{
|
||||
} else {
|
||||
return Content("Invalid");
|
||||
}
|
||||
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
} catch (Exception e) {
|
||||
return HandleAPIException(prNumber, e);
|
||||
}
|
||||
}
|
||||
|
||||
public ActionResult GetApproversList([DataSourceRequest]DataSourceRequest request, int issueID, byte step)
|
||||
{
|
||||
try
|
||||
{
|
||||
public ActionResult GetApproversList([DataSourceRequest] DataSourceRequest request, int issueID, byte step) {
|
||||
try {
|
||||
return Json(MiscDMO.GetApproversListByDocument(issueID, step, (int)GlobalVars.DocumentType.PartsRequest).ToDataSourceResult(request));
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
} catch (Exception e) {
|
||||
return HandleAPIException(issueID, e, "Step=" + step.ToString());
|
||||
}
|
||||
}
|
||||
|
||||
public ActionResult GetAllUsersList()
|
||||
{
|
||||
try
|
||||
{
|
||||
public ActionResult GetAllUsersList() {
|
||||
try {
|
||||
UserAccountDMO userDMO = new UserAccountDMO();
|
||||
IEnumerable<LoginModel> userlist = userDMO.GetAllUsers();
|
||||
return Json(userlist, JsonRequestBehavior.AllowGet);
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
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(
|
||||
public ActionResult ReAssignApproval(int issueID, int fromUserID, int userIDs, byte step) {
|
||||
try {
|
||||
string email = wfDMO.ReAssignApproval(
|
||||
issueID, fromUserID, userIDs, step, (int)GlobalVars.DocumentType.PartsRequest);
|
||||
|
||||
NotifyReAssignment(issueID, email);
|
||||
|
||||
return Content("OK");
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
} catch (Exception e) {
|
||||
return HandleAPIException(issueID, e);
|
||||
}
|
||||
}
|
||||
|
||||
#if !NET8
|
||||
|
||||
[HttpPost]
|
||||
public ActionResult Approve(int prNumber, byte currentStep, string comments)
|
||||
{
|
||||
try
|
||||
{
|
||||
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);
|
||||
|
||||
if (pr == null)
|
||||
return new HttpStatusCodeResult(System.Net.HttpStatusCode.BadRequest, "Document does not exist");
|
||||
|
||||
while (true)
|
||||
{
|
||||
|
||||
while (true) {
|
||||
lastApproverInCurrentStep = wfDMO.Approve(
|
||||
prNumber, currentStep, comments, out lastStep,
|
||||
(int)Session[GlobalVars.SESSION_USERID],
|
||||
_AppSettings,
|
||||
prNumber,
|
||||
currentStep,
|
||||
comments,
|
||||
out lastStep,
|
||||
GlobalVars.GetUserId(GetSession()),
|
||||
(int)GlobalVars.DocumentType.PartsRequest,
|
||||
WorkflowNumber);
|
||||
|
||||
if (!lastApproverInCurrentStep) break;
|
||||
if (lastStep)
|
||||
{
|
||||
if (!lastApproverInCurrentStep)
|
||||
break;
|
||||
if (lastStep) {
|
||||
NotifyCompletion(prNumber);
|
||||
break;
|
||||
}
|
||||
@ -509,82 +431,60 @@ namespace Fab2ApprovalSystem.Controllers
|
||||
return Content("No approvers found for next step, contact support!");
|
||||
|
||||
// only continue with approving if the next step has me as an approver also
|
||||
if (approvers.Count(a => a.Step.HasValue && a.Step.Value == currentStep && a.UserID == myUserID) == 0)
|
||||
{
|
||||
if (approvers.Count(a => a.Step.HasValue && a.Step.Value == currentStep && a.UserID == myUserID) == 0) {
|
||||
NotifyApprovers(prNumber, currentStep);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return Content("OK");
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
} catch (Exception e) {
|
||||
return HandleAPIException(prNumber, e);
|
||||
}
|
||||
}
|
||||
|
||||
protected void SendEmailNotification(String subject, int prNumber, string toEmail, string emailTemplate)
|
||||
{
|
||||
#endif
|
||||
|
||||
string senderName = "Parts Request";
|
||||
|
||||
EmailNotification en = new EmailNotification(subject, System.Configuration.ConfigurationManager.AppSettings["EmailTemplatesPath"]);
|
||||
string[] emailparams = new string[5];
|
||||
emailparams[0] = prNumber.ToString();
|
||||
emailparams[1] = prNumber.ToString();
|
||||
emailparams[2] = GlobalVars.hostURL;
|
||||
emailparams[3] = "Parts Request";
|
||||
emailparams[4] = Session[GlobalVars.SESSION_USERNAME].ToString();
|
||||
String userEmail = toEmail;
|
||||
|
||||
en.SendNotificationEmail(emailTemplate, GlobalVars.SENDER_EMAIL, senderName, userEmail, null, subject, emailparams);
|
||||
|
||||
}
|
||||
|
||||
protected void NotifyReAssignment(int prNumber, string email)
|
||||
{
|
||||
protected void NotifyReAssignment(int prNumber, string email) {
|
||||
var pr = prDMO.Get(prNumber);
|
||||
|
||||
if (pr == null)
|
||||
return;
|
||||
|
||||
SendEmailNotification(
|
||||
subject: String.Format("Parts Request Re-Assignment notice for # {0} - {1}", pr.PRNumber, pr.Title),
|
||||
string username = GlobalVars.GetUserName(GetSession());
|
||||
PartsRequestHelper.SendEmailNotification(_AppSettings, username,
|
||||
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()
|
||||
{
|
||||
EventLogDMO.Add(new WinEventLog() {
|
||||
IssueID = prNumber,
|
||||
UserID = @User.Identity.Name,
|
||||
UserID = GetUserIdentityName(),
|
||||
DocumentType = "PR",
|
||||
OperationType = "Email",
|
||||
Comments = "ReAssigned Approver: " + email
|
||||
});
|
||||
}
|
||||
|
||||
protected void NotifyCompletion(int prNumber)
|
||||
{
|
||||
protected void NotifyCompletion(int prNumber) {
|
||||
var pr = prDMO.Get(prNumber);
|
||||
|
||||
if (pr == null)
|
||||
return;
|
||||
|
||||
var u = userDMO.GetUserByID(pr.RequestorID);
|
||||
if ((u != null) && (!String.IsNullOrWhiteSpace(u.Email)))
|
||||
{
|
||||
SendEmailNotification(
|
||||
subject: String.Format("Parts Request Completion notice for # {0} - {1}", pr.PRNumber, pr.Title),
|
||||
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),
|
||||
prNumber: prNumber,
|
||||
toEmail: u.Email,
|
||||
emailTemplate: "PRCompleted.txt");
|
||||
|
||||
EventLogDMO.Add(new WinEventLog()
|
||||
{
|
||||
EventLogDMO.Add(new WinEventLog() {
|
||||
IssueID = prNumber,
|
||||
UserID = @User.Identity.Name,
|
||||
UserID = GetUserIdentityName(),
|
||||
DocumentType = "PR",
|
||||
OperationType = "Email",
|
||||
Comments = "Completed: " + u.Email
|
||||
@ -592,26 +492,24 @@ namespace Fab2ApprovalSystem.Controllers
|
||||
}
|
||||
}
|
||||
|
||||
public void NotifyRejection(int prNumber)
|
||||
{
|
||||
public void NotifyRejection(int prNumber) {
|
||||
var pr = prDMO.Get(prNumber);
|
||||
|
||||
if (pr == null)
|
||||
return;
|
||||
|
||||
var u = userDMO.GetUserByID(pr.OriginatorID);
|
||||
if ((u != null) && (!String.IsNullOrWhiteSpace(u.Email)))
|
||||
{
|
||||
SendEmailNotification(
|
||||
subject: String.Format("Parts Request Rejection notice for # {0} - {1}", pr.PRNumber, pr.Title),
|
||||
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),
|
||||
prNumber: prNumber,
|
||||
toEmail: u.Email,
|
||||
emailTemplate: "PRReject.txt");
|
||||
|
||||
EventLogDMO.Add(new WinEventLog()
|
||||
{
|
||||
EventLogDMO.Add(new WinEventLog() {
|
||||
IssueID = prNumber,
|
||||
UserID = @User.Identity.Name,
|
||||
UserID = GetUserIdentityName(),
|
||||
DocumentType = "PR",
|
||||
OperationType = "Email",
|
||||
Comments = "Rejected: " + u.Email
|
||||
@ -619,10 +517,8 @@ namespace Fab2ApprovalSystem.Controllers
|
||||
}
|
||||
}
|
||||
|
||||
protected void NotifyApprovers(int prNumber, byte step)
|
||||
{
|
||||
try
|
||||
{
|
||||
protected void NotifyApprovers(int prNumber, byte step) {
|
||||
try {
|
||||
string emailSentList = "";
|
||||
|
||||
var pr = prDMO.Get(prNumber);
|
||||
@ -633,83 +529,75 @@ namespace Fab2ApprovalSystem.Controllers
|
||||
List<string> emailList = MiscDMO.GetApproverEmailListByDocument(
|
||||
prNumber, step, (int)GlobalVars.DocumentType.PartsRequest).Distinct().ToList();
|
||||
|
||||
foreach (string email in emailList)
|
||||
{
|
||||
try
|
||||
{
|
||||
SendEmailNotification(
|
||||
subject: String.Format("Parts Request Assignment notice for # {0} - {1}", pr.PRNumber, pr.Title),
|
||||
foreach (string email in emailList) {
|
||||
try {
|
||||
string username = GlobalVars.GetUserName(GetSession());
|
||||
PartsRequestHelper.SendEmailNotification(_AppSettings, username,
|
||||
subject: string.Format("Parts Request Assignment notice for # {0} - {1}", pr.PRNumber, pr.Title),
|
||||
prNumber: prNumber,
|
||||
toEmail: email,
|
||||
emailTemplate: "PRAssigned.txt");
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
} catch (Exception ex) {
|
||||
HandleException(prNumber, ex, "email=" + email);
|
||||
}
|
||||
|
||||
emailSentList += email + ",";
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
try {
|
||||
EventLogDMO.Add(new WinEventLog() {
|
||||
IssueID = prNumber, UserID = @User.Identity.Name, DocumentType = "PR", OperationType = "Email",
|
||||
Comments = "Approvers for Step " + step.ToString() + ":" + emailSentList });
|
||||
}
|
||||
catch { }
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
IssueID = prNumber,
|
||||
UserID = GetUserIdentityName(),
|
||||
DocumentType = "PR",
|
||||
OperationType = "Email",
|
||||
Comments = "Approvers for Step " + step.ToString() + ":" + emailSentList
|
||||
});
|
||||
} catch { }
|
||||
} catch (Exception e) {
|
||||
HandleException(prNumber, e, "Step=" + step.ToString());
|
||||
}
|
||||
}
|
||||
|
||||
[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);
|
||||
public ActionResult Reject(int prNumber, byte currentStep, string comments) {
|
||||
try {
|
||||
if (GlobalVars.IsUserIdValueNotNull(GetSession())) {
|
||||
wfDMO.Reject(prNumber, currentStep, comments, GlobalVars.GetUserId(GetSession()), (int)GlobalVars.DocumentType.PartsRequest);
|
||||
NotifyRejection(prNumber);
|
||||
}
|
||||
else
|
||||
{
|
||||
} else {
|
||||
Response.Redirect("~/Account/Login");
|
||||
}
|
||||
|
||||
return Content("OK");
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
} catch (Exception e) {
|
||||
return HandleAPIException(prNumber, e);
|
||||
}
|
||||
}
|
||||
|
||||
public ActionResult ApprovalLogHistory_Read([DataSourceRequest] DataSourceRequest request, int prNumber)
|
||||
{
|
||||
return Json(prDMO.GetApprovalLogHistory(prNumber).ToDataSourceResult(request), JsonRequestBehavior.AllowGet);
|
||||
#if !NET8
|
||||
|
||||
public ActionResult ApprovalLogHistory_Read([DataSourceRequest] DataSourceRequest request, int prNumber) {
|
||||
return GetJsonResult(prDMO.GetApprovalLogHistory(prNumber).ToDataSourceResult(request));
|
||||
}
|
||||
|
||||
protected void NotifyAssignment(int prNumber, string email)
|
||||
{
|
||||
#endif
|
||||
|
||||
protected void NotifyAssignment(int prNumber, string email) {
|
||||
var pr = prDMO.Get(prNumber);
|
||||
|
||||
if (pr == null)
|
||||
return;
|
||||
|
||||
SendEmailNotification(
|
||||
subject: String.Format("Parts Request Assignment notice for # {0} - {1}", pr.PRNumber, pr.Title),
|
||||
string username = GlobalVars.GetUserName(GetSession());
|
||||
PartsRequestHelper.SendEmailNotification(_AppSettings, username,
|
||||
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()
|
||||
{
|
||||
EventLogDMO.Add(new WinEventLog() {
|
||||
IssueID = prNumber,
|
||||
UserID = @User.Identity.Name,
|
||||
UserID = GetUserIdentityName(),
|
||||
DocumentType = "PR",
|
||||
OperationType = "Email",
|
||||
Comments = "Assigned Approver: " + email
|
||||
@ -717,37 +605,62 @@ namespace Fab2ApprovalSystem.Controllers
|
||||
}
|
||||
|
||||
[HttpPost]
|
||||
public void AddAdditionalApproval(int issueID, byte step, string userIDs)
|
||||
{
|
||||
public void AddAdditionalApproval(int issueID, byte step, string userIDs) {
|
||||
var emailArray = "";
|
||||
try
|
||||
{
|
||||
try {
|
||||
emailArray = wfDMO.AddAdditionalApproval(issueID, userIDs, step, (int)GlobalVars.DocumentType.PartsRequest);
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
} catch (Exception e) {
|
||||
HandleAPIException(issueID, e);
|
||||
}
|
||||
|
||||
string emailSentList = "";
|
||||
string[] emaiList = emailArray.Split(new char[] { '~' });
|
||||
foreach (string email in emaiList)
|
||||
{
|
||||
if (email.Length > 0)
|
||||
{
|
||||
foreach (string email in emaiList) {
|
||||
if (email.Length > 0) {
|
||||
NotifyAssignment(issueID, email);
|
||||
emailSentList += email + ",";
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
EventLogDMO.Add(new WinEventLog() { IssueID = issueID, UserID = @User.Identity.Name, DocumentType = "PR",
|
||||
OperationType = "Email", Comments = "Additional Approver: " + emailSentList });
|
||||
}
|
||||
catch { }
|
||||
try {
|
||||
EventLogDMO.Add(new WinEventLog() {
|
||||
IssueID = issueID,
|
||||
UserID = GetUserIdentityName(),
|
||||
DocumentType = "PR",
|
||||
OperationType = "Email",
|
||||
Comments = "Additional Approver: " + emailSentList
|
||||
});
|
||||
} 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,45 +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.ViewModels;
|
||||
using Fab2ApprovalSystem.Models;
|
||||
|
||||
#if !NET8
|
||||
using System.Collections.Generic;
|
||||
using Fab2ApprovalSystem.ViewModels;
|
||||
#endif
|
||||
|
||||
namespace Fab2ApprovalSystem.Controllers;
|
||||
|
||||
namespace Fab2ApprovalSystem.Controllers
|
||||
{
|
||||
[Authorize]
|
||||
#if !NET8
|
||||
[SessionExpireFilter]
|
||||
public class ReportsController : Controller
|
||||
{
|
||||
public const String specialNullString = "~NULL~";
|
||||
#endif
|
||||
#if NET8
|
||||
[Route("[controller]")]
|
||||
#endif
|
||||
public class ReportsController : Controller {
|
||||
|
||||
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]);
|
||||
public ActionResult Index() {
|
||||
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();
|
||||
ReportViewModel<SelectListItem> m = new();
|
||||
var reports = GetReportList(docType);
|
||||
foreach (var report in reports)
|
||||
{
|
||||
if (String.Equals(report.ReportID, id, StringComparison.OrdinalIgnoreCase))
|
||||
{
|
||||
foreach (var report in reports) {
|
||||
if (string.Equals(report.ReportID, id, StringComparison.OrdinalIgnoreCase)) {
|
||||
m.ReportID = report.ReportID;
|
||||
m.ReportName = report.Name;
|
||||
m.Description = report.Description;
|
||||
@ -47,10 +62,9 @@ namespace Fab2ApprovalSystem.Controllers
|
||||
|
||||
var c = SetupSSRSHelperClient();
|
||||
|
||||
m.Parameters = c.GetReportParameters(report.FullPath).Select(parm =>
|
||||
{
|
||||
var r = new ReportParameterViewModel();
|
||||
r.Visible = (parm.PromptUser.HasValue == false || parm.PromptUser == true) && !String.IsNullOrEmpty(parm.Prompt);
|
||||
m.Parameters = c.GetReportParameters(report.FullPath).Select(parm => {
|
||||
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;
|
||||
@ -65,11 +79,9 @@ namespace Fab2ApprovalSystem.Controllers
|
||||
r.ControlType = ParameterControlTypes.Textbox;
|
||||
|
||||
r.SelectList = null;
|
||||
if (parm.ValidValues != null)
|
||||
{
|
||||
if (parm.ValidValues != null) {
|
||||
r.SelectList = parm.ValidValues.Select(vv => {
|
||||
return new SelectListItem()
|
||||
{
|
||||
return new SelectListItem() {
|
||||
Text = vv.Value,
|
||||
Value = (vv.Key == null ? specialNullString : vv.Key),
|
||||
Selected = (parm.DefaultValues != null && parm.DefaultValues.Contains(vv.Key))
|
||||
@ -90,26 +102,24 @@ namespace Fab2ApprovalSystem.Controllers
|
||||
return View(m);
|
||||
}
|
||||
|
||||
public SSRSHelper.SSRSClient SetupSSRSHelperClient()
|
||||
{
|
||||
public SSRSHelper.SSRSClient SetupSSRSHelperClient() {
|
||||
var useCfgForBindings = false;
|
||||
if (String.Equals(System.Configuration.ConfigurationManager.AppSettings["SSRSBindingsByConfiguration"], "true", StringComparison.OrdinalIgnoreCase))
|
||||
if (string.Equals(_AppSettings.SSRSBindingsByConfiguration, "true", StringComparison.OrdinalIgnoreCase))
|
||||
useCfgForBindings = true;
|
||||
|
||||
var c = new SSRSHelper.SSRSClient(
|
||||
Convert.ToString(System.Configuration.ConfigurationManager.AppSettings["SSRSBaseURL"]),
|
||||
Convert.ToString(System.Configuration.ConfigurationManager.AppSettings["SSRSDomain"]),
|
||||
Convert.ToString(System.Configuration.ConfigurationManager.AppSettings["SSRSUsername"]),
|
||||
Convert.ToString(System.Configuration.ConfigurationManager.AppSettings["SSRSPassword"]),
|
||||
Convert.ToString(_AppSettings.SSRSBaseURL),
|
||||
Convert.ToString(_AppSettings.SSRSDomain),
|
||||
Convert.ToString(_AppSettings.SSRSUsername),
|
||||
Convert.ToString(_AppSettings.SSRSPassword),
|
||||
useCfgForBindings);
|
||||
c.Initialize();
|
||||
|
||||
return c;
|
||||
}
|
||||
|
||||
private IEnumerable<SSRSHelper.ReportInfo> GetReportList(String docType)
|
||||
{
|
||||
String folderName = Convert.ToString(System.Configuration.ConfigurationManager.AppSettings["SSRSFolder"]);
|
||||
private IEnumerable<SSRSHelper.ReportInfo> GetReportList(String docType) {
|
||||
String folderName = Convert.ToString(_AppSettings.SSRSFolder);
|
||||
if (folderName.EndsWith("/"))
|
||||
folderName = folderName.TrimEnd('/');
|
||||
if (!String.IsNullOrWhiteSpace(docType))
|
||||
@ -119,29 +129,26 @@ namespace Fab2ApprovalSystem.Controllers
|
||||
return c.ListReports(folderName);
|
||||
}
|
||||
|
||||
public ActionResult GetReports(String docType)
|
||||
{
|
||||
public ActionResult GetReports(string docType) {
|
||||
var reports = GetReportList(docType);
|
||||
|
||||
return Json(new { Data =
|
||||
reports.Select(r => new ReportViewModel()
|
||||
{
|
||||
return GetJsonResult(new {
|
||||
Data =
|
||||
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");
|
||||
|
||||
@ -149,21 +156,16 @@ namespace Fab2ApprovalSystem.Controllers
|
||||
|
||||
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 (var rp in reportParms) {
|
||||
if (rp.MultiValue.HasValue && rp.MultiValue.Value) {
|
||||
foreach (string v in Request.Params.GetValues("parm_" + rp.Name)) {
|
||||
parms.Add(rp.Name, v);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
String value = null;
|
||||
} else {
|
||||
string value = null;
|
||||
|
||||
if (Request.Params.AllKeys.Contains("parm_" + rp.Name))
|
||||
value = Request.Params.GetValues("parm_" + rp.Name).FirstOrDefault();
|
||||
@ -174,10 +176,8 @@ namespace Fab2ApprovalSystem.Controllers
|
||||
if ((rp.AllowBlank.HasValue == false || rp.AllowBlank.Value == false) && value == "")
|
||||
value = null;
|
||||
|
||||
if (value == null)
|
||||
{
|
||||
if (rp.Nullable.HasValue == false || rp.Nullable.Value == false)
|
||||
{
|
||||
if (value == null) {
|
||||
if (rp.Nullable.HasValue == false || rp.Nullable.Value == false) {
|
||||
if (rp.DefaultValues != null && rp.DefaultValues.Length > 0)
|
||||
value = rp.DefaultValues[0];
|
||||
if (value == null)
|
||||
@ -189,26 +189,21 @@ namespace Fab2ApprovalSystem.Controllers
|
||||
}
|
||||
}
|
||||
|
||||
var b = c.ExportReport(report.FullPath, @User.Identity.Name, parms, "EXCELOPENXML");
|
||||
try
|
||||
{
|
||||
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");
|
||||
}
|
||||
catch
|
||||
{
|
||||
|
||||
} catch {
|
||||
}
|
||||
return File(b, "application/octet-stream", MakeFilename(report.Name) + ".xlsx");
|
||||
|
||||
}
|
||||
|
||||
protected String MakeFilename(String reportName)
|
||||
{
|
||||
String r = "";
|
||||
var invalidChars = System.IO.Path.GetInvalidFileNameChars();
|
||||
foreach (char c in reportName)
|
||||
{
|
||||
#endif
|
||||
|
||||
protected string MakeFilename(string reportName) {
|
||||
string r = "";
|
||||
char[] invalidChars = System.IO.Path.GetInvalidFileNameChars();
|
||||
foreach (char c in reportName) {
|
||||
if (invalidChars.Contains(c))
|
||||
r += '_';
|
||||
else
|
||||
@ -217,5 +212,33 @@ namespace Fab2ApprovalSystem.Controllers
|
||||
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;
|
||||
|
||||
}
|
File diff suppressed because it is too large
Load Diff
@ -1,100 +1,93 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
#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;
|
||||
using System.Web.Http;
|
||||
#endif
|
||||
|
||||
namespace Fab2ApprovalSystem.Controllers;
|
||||
|
||||
namespace Fab2ApprovalSystem.Controllers
|
||||
{
|
||||
#if !NET8
|
||||
public class WebAPIController : ApiController {
|
||||
#endif
|
||||
|
||||
public class WebAPIController : ApiController
|
||||
{
|
||||
public TrainingController trainingFunctions = new TrainingController();
|
||||
public CorrectiveActionController carFunctions = new CorrectiveActionController();
|
||||
public AccountController accountFunctions = new AccountController();
|
||||
public HomeController homeFunctions = new HomeController();
|
||||
public string Get()
|
||||
{
|
||||
#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)
|
||||
{
|
||||
|
||||
public List<string> Get(int Id) {
|
||||
return new List<string> {
|
||||
"Data1",
|
||||
"Data2"
|
||||
};
|
||||
}
|
||||
public void Post()
|
||||
{
|
||||
|
||||
public void Post() {
|
||||
}
|
||||
|
||||
public HttpResponseMessage Post(HttpRequestMessage request, string action)
|
||||
{
|
||||
#if !NET8
|
||||
|
||||
switch (action)
|
||||
{
|
||||
public HttpResponseMessage Post(HttpRequestMessage request, string action) {
|
||||
switch (action) {
|
||||
case "TrainingReport":
|
||||
if (trainingFunctions.RunTrainingReport())
|
||||
{
|
||||
if (trainingFunctions.RunTrainingReport()) {
|
||||
return request.CreateResponse(HttpStatusCode.OK);
|
||||
}
|
||||
else
|
||||
{
|
||||
return request.CreateResponse(HttpStatusCode.InternalServerError);
|
||||
}
|
||||
case "TrainingReportOOO":
|
||||
if (trainingFunctions.RunOOOTrainingReport())
|
||||
{
|
||||
return request.CreateResponse(HttpStatusCode.OK);
|
||||
}
|
||||
else
|
||||
{
|
||||
} else {
|
||||
return request.CreateResponse(HttpStatusCode.InternalServerError);
|
||||
}
|
||||
case "CARDueDates":
|
||||
if (carFunctions.ProcessCARDueDates())
|
||||
{
|
||||
if (carFunctions.ProcessCARDueDates()) {
|
||||
return request.CreateResponse(HttpStatusCode.OK);
|
||||
}
|
||||
else
|
||||
{
|
||||
} else {
|
||||
return request.CreateResponse(HttpStatusCode.InternalServerError);
|
||||
}
|
||||
case "ProcessOoO":
|
||||
if (homeFunctions.ProcessOoO())
|
||||
{
|
||||
if (homeFunctions.ProcessOoO()) {
|
||||
return request.CreateResponse(HttpStatusCode.OK);
|
||||
}
|
||||
else
|
||||
{
|
||||
} else {
|
||||
return request.CreateResponse(HttpStatusCode.InternalServerError);
|
||||
}
|
||||
case "ExpireOoO":
|
||||
if (homeFunctions.ExpireOoO())
|
||||
{
|
||||
if (homeFunctions.ExpireOoO()) {
|
||||
return request.CreateResponse(HttpStatusCode.OK);
|
||||
}
|
||||
else
|
||||
{
|
||||
} else {
|
||||
return request.CreateResponse(HttpStatusCode.InternalServerError);
|
||||
}
|
||||
case "ApprovalReminders":
|
||||
if (homeFunctions.ApprovalsReminderNotifications())
|
||||
{
|
||||
if (homeFunctions.ApprovalsReminderNotifications()) {
|
||||
return request.CreateResponse(HttpStatusCode.OK);
|
||||
}
|
||||
else
|
||||
{
|
||||
} else {
|
||||
return request.CreateResponse(HttpStatusCode.InternalServerError);
|
||||
}
|
||||
default:
|
||||
return request.CreateResponse(HttpStatusCode.InternalServerError, "Action Not Found");
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
}
|
@ -1,99 +1,127 @@
|
||||
using Fab2ApprovalSystem.DMO;
|
||||
using Fab2ApprovalSystem.Models;
|
||||
using Kendo.Mvc.UI;
|
||||
#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 System.Web;
|
||||
using System.Web.Mvc;
|
||||
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 {
|
||||
|
||||
namespace Fab2ApprovalSystem.Controllers
|
||||
{
|
||||
public class WorkflowController : Controller
|
||||
{
|
||||
//
|
||||
|
||||
//
|
||||
// GET: /Workflow/Details/5
|
||||
public ActionResult Details(int id)
|
||||
{
|
||||
public ActionResult Details(int id) {
|
||||
return View();
|
||||
}
|
||||
|
||||
//
|
||||
// GET: /Workflow/Create
|
||||
public ActionResult Create()
|
||||
{
|
||||
public ActionResult Create() {
|
||||
return View();
|
||||
}
|
||||
|
||||
//
|
||||
#if !NET8
|
||||
|
||||
// POST: /Workflow/Create
|
||||
[HttpPost]
|
||||
public ActionResult Create(FormCollection collection)
|
||||
{
|
||||
try
|
||||
{
|
||||
public ActionResult Create(FormCollection collection) {
|
||||
try {
|
||||
// TODO: Add insert logic here
|
||||
|
||||
return RedirectToAction("Index");
|
||||
}
|
||||
catch
|
||||
{
|
||||
} catch {
|
||||
return View();
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
#endif
|
||||
|
||||
// GET: /Workflow/Edit/5
|
||||
public ActionResult Edit(int id)
|
||||
{
|
||||
public ActionResult Edit(int id) {
|
||||
return View();
|
||||
}
|
||||
|
||||
//
|
||||
#if !NET8
|
||||
|
||||
// POST: /Workflow/Edit/5
|
||||
[HttpPost]
|
||||
public ActionResult Edit(int id, FormCollection collection)
|
||||
{
|
||||
try
|
||||
{
|
||||
public ActionResult Edit(int id, FormCollection collection) {
|
||||
try {
|
||||
// TODO: Add update logic here
|
||||
|
||||
return RedirectToAction("Index");
|
||||
}
|
||||
catch
|
||||
{
|
||||
} catch {
|
||||
return View();
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
#endif
|
||||
|
||||
// GET: /Workflow/Delete/5
|
||||
public ActionResult Delete(int id)
|
||||
{
|
||||
public ActionResult Delete(int id) {
|
||||
return View();
|
||||
}
|
||||
|
||||
//
|
||||
#if !NET8
|
||||
|
||||
// POST: /Workflow/Delete/5
|
||||
[HttpPost]
|
||||
public ActionResult Delete(int id, FormCollection collection)
|
||||
{
|
||||
try
|
||||
{
|
||||
public ActionResult Delete(int id, FormCollection collection) {
|
||||
try {
|
||||
// TODO: Add delete logic here
|
||||
|
||||
return RedirectToAction("Index");
|
||||
}
|
||||
catch
|
||||
{
|
||||
} catch {
|
||||
return View();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
#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;
|
||||
|
||||
}
|
59
Fab2ApprovalSystem/DMO/AccountDMO.cs
Normal file
59
Fab2ApprovalSystem/DMO/AccountDMO.cs
Normal file
@ -0,0 +1,59 @@
|
||||
using System;
|
||||
using System.Net.Http;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
using Fab2ApprovalSystem.Models;
|
||||
|
||||
using Newtonsoft.Json;
|
||||
|
||||
namespace Fab2ApprovalSystem.DMO;
|
||||
|
||||
public class AccountDMO {
|
||||
|
||||
public static async Task<LoginResult> LoginAsync(HttpClient httpClient, LoginModel loginModel) {
|
||||
LoginResult result;
|
||||
|
||||
HttpRequestMessage request = new(HttpMethod.Post, "auth/login");
|
||||
|
||||
AuthAttempt authAttempt = loginModel is null ? null : new AuthAttempt() {
|
||||
LoginID = loginModel.LoginID,
|
||||
Password = loginModel.Password
|
||||
};
|
||||
|
||||
string json = authAttempt is null ? "{}" : JsonConvert.SerializeObject(authAttempt);
|
||||
|
||||
request.Content = new StringContent(json, Encoding.UTF8, "application/json");
|
||||
|
||||
HttpResponseMessage httpResponseMessage = await httpClient.SendAsync(request);
|
||||
|
||||
if (!httpResponseMessage.IsSuccessStatusCode)
|
||||
throw new Exception($"The authentication API failed, because {httpResponseMessage.ReasonPhrase}");
|
||||
|
||||
string responseContent = await httpResponseMessage.Content.ReadAsStringAsync();
|
||||
|
||||
result = JsonConvert.DeserializeObject<LoginResult>(responseContent);
|
||||
return result;
|
||||
}
|
||||
|
||||
public static async Task<LoginResult> ExternalAuthSetupAsync(HttpClient httpClient, AuthAttempt authAttempt) {
|
||||
LoginResult result;
|
||||
|
||||
HttpRequestMessage request = new(HttpMethod.Post, "auth/refresh");
|
||||
|
||||
string json = authAttempt is null ? "{}" : JsonConvert.SerializeObject(authAttempt);
|
||||
|
||||
request.Content = new StringContent(json, Encoding.UTF8, "application/json");
|
||||
|
||||
HttpResponseMessage httpResponseMessage = await httpClient.SendAsync(request);
|
||||
|
||||
if (!httpResponseMessage.IsSuccessStatusCode)
|
||||
throw new Exception($"The authentication API failed, because {httpResponseMessage.ReasonPhrase}");
|
||||
|
||||
string responseContent = await httpResponseMessage.Content.ReadAsStringAsync();
|
||||
|
||||
result = JsonConvert.DeserializeObject<LoginResult>(responseContent);
|
||||
return result;
|
||||
}
|
||||
|
||||
}
|
@ -1,28 +1,62 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Configuration;
|
||||
using System.Data;
|
||||
using System.Data.SqlClient;
|
||||
using System.Linq;
|
||||
using System.Web;
|
||||
using Dapper;
|
||||
using Fab2ApprovalSystem.Models;
|
||||
using System.Text;
|
||||
|
||||
namespace Fab2ApprovalSystem.DMO
|
||||
{
|
||||
public class AdminDMO
|
||||
{
|
||||
private IDbConnection db = new SqlConnection(ConfigurationManager.ConnectionStrings["FabApprovalConnection"].ConnectionString);
|
||||
private static FabApprovalTrainingEntities FabApprovalDB = new FabApprovalTrainingEntities();
|
||||
using Dapper;
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
public List<Role> GetSubRoles()
|
||||
{
|
||||
StringBuilder sql = new StringBuilder();
|
||||
using Fab2ApprovalSystem.Misc;
|
||||
using Fab2ApprovalSystem.Models;
|
||||
|
||||
namespace Fab2ApprovalSystem.DMO;
|
||||
|
||||
public class AdminDMO {
|
||||
private readonly IDbConnection db = new SqlConnection(GlobalVars.DB_CONNECTION_STRING);
|
||||
#if !NET8
|
||||
private static FabApprovalTrainingEntities FabApprovalDB = new FabApprovalTrainingEntities();
|
||||
#endif
|
||||
|
||||
public List<ParentChildModel> GetAllSubRoles(string showInactiveRoles = "") {
|
||||
List<ParentChildModel> results = new();
|
||||
|
||||
List<Role> roles = GetSubRoles();
|
||||
|
||||
ParentChildModel child;
|
||||
ParentChildModel parent;
|
||||
|
||||
foreach (Role r in roles) {
|
||||
parent = new ParentChildModel {
|
||||
id = r.RoleID,
|
||||
parentid = -1,
|
||||
text = r.RoleName,
|
||||
value = r.RoleID.ToString()
|
||||
};
|
||||
|
||||
foreach (SubRole sr in r.SubRoles) {
|
||||
if (sr.Inactive) {
|
||||
// hide inactive roles unless parameter says otherwise
|
||||
if (!showInactiveRoles.Equals("true"))
|
||||
continue;
|
||||
}
|
||||
|
||||
child = new ParentChildModel {
|
||||
id = sr.SubRoleID,
|
||||
parentid = r.RoleID,
|
||||
text = sr.SubRoleCategoryItem + (sr.Inactive ? " (Inactive)" : ""),
|
||||
value = sr.SubRoleID.ToString()
|
||||
};
|
||||
results.Add(child);
|
||||
}
|
||||
|
||||
results.Add(parent);
|
||||
};
|
||||
return results;
|
||||
}
|
||||
|
||||
public List<Role> GetSubRoles() {
|
||||
StringBuilder sql = new();
|
||||
sql.Append(
|
||||
"SELECT R.RoleID, R.RoleName, SubRoleID, SubRoleCategoryItem, SR.RoleID, SR.Inactive " +
|
||||
"FROM vSubRoles SR " +
|
||||
@ -30,233 +64,188 @@ namespace Fab2ApprovalSystem.DMO
|
||||
"ORDER BY R.RoleID, SubRoleCategoryItem ");
|
||||
|
||||
db.Open();
|
||||
var lookup = new Dictionary<int, Role>();
|
||||
List<Role> data = this.db.Query<Role, SubRole, Role>(sql.ToString(),
|
||||
(parent, child) =>
|
||||
{
|
||||
Dictionary<int, Role> lookup = new();
|
||||
List<Role> data = db.Query<Role, SubRole, Role>(sql.ToString(),
|
||||
(parent, child) => {
|
||||
Role role;
|
||||
if (!lookup.TryGetValue(parent.RoleID, out role))
|
||||
{
|
||||
if (!lookup.TryGetValue(parent.RoleID, out role)) {
|
||||
lookup.Add(parent.RoleID, role = parent);
|
||||
}
|
||||
//if (role.RoleID == null)
|
||||
// role.SubRoles = new List<SubRole>();
|
||||
role.SubRoles.Add(child);
|
||||
return role;
|
||||
},
|
||||
splitOn: "SubRoleID").Distinct().ToList();
|
||||
|
||||
|
||||
return data;
|
||||
}
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// /// <param name="userId"></param>
|
||||
/// <returns></returns>
|
||||
public List<UserSubRoles> GetUserSubRoles(int userId)
|
||||
{
|
||||
var parameters = new DynamicParameters();
|
||||
|
||||
public List<UserSubRoles> GetUserSubRoles(int userId) {
|
||||
DynamicParameters parameters = new();
|
||||
parameters.Add("@UserId", userId);
|
||||
var userSubRoleList = this.db.Query<UserSubRoles>("GetSubRolesByUserId", parameters, commandType: CommandType.StoredProcedure).ToList();
|
||||
List<UserSubRoles> userSubRoleList = db.Query<UserSubRoles>("GetSubRolesByUserId", parameters, commandType: CommandType.StoredProcedure).ToList();
|
||||
return userSubRoleList;
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <param name="subRole"></param>
|
||||
/// <returns></returns>
|
||||
public IEnumerable<LoginModel> GetAllUsersBySubRole(int subRole)
|
||||
{
|
||||
StringBuilder sql = new StringBuilder();
|
||||
public IEnumerable<LoginModel> GetAllUsersBySubRole(int subRole) {
|
||||
StringBuilder sql = new();
|
||||
sql.Append("SELECT FirstName + ' ' + LastName AS FullName , LoginID, FirstName, LastName, U.UserID, SubRoleID ");
|
||||
sql.Append("FROM UserSubRole UR ");
|
||||
sql.Append("INNER JOIN Users U ON UR.UserID = U.UserID ");
|
||||
sql.Append("WHERE UR.SubRoleID = " + subRole.ToString() + " ");
|
||||
sql.Append("ORDER BY FirstName");
|
||||
|
||||
return this.db.Query<LoginModel>(sql.ToString()).ToList();
|
||||
return db.Query<LoginModel>(sql.ToString()).ToList();
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <param name="subRole"></param>
|
||||
/// <param name="userids"></param>
|
||||
public void AddUserRoles(int subRole, string userids)
|
||||
{
|
||||
public void AddUserRoles(int subRole, string userids) {
|
||||
string sql;
|
||||
|
||||
string[] arrayOfUsers = userids.Split(new char[] { '~' });
|
||||
|
||||
for (int i = 0; i < arrayOfUsers.Length; i++)
|
||||
{
|
||||
for (int i = 0; i < arrayOfUsers.Length; i++) {
|
||||
sql = "INSERT INTO UserSubRole (UserID, SubRoleID) VALUES (" + arrayOfUsers[i] + ", " + subRole + " )";
|
||||
this.db.Execute(sql);
|
||||
db.Execute(sql);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public void DeleteUserFromAllTrainingGroups(int userId)
|
||||
{
|
||||
public void DeleteUserFromAllTrainingGroups(int userId) {
|
||||
string sql = "DELETE FROM TrainingGroupMembers WHERE UserId = " + userId;
|
||||
|
||||
|
||||
this.db.Open();
|
||||
this.db.Execute(sql);
|
||||
db.Open();
|
||||
db.Execute(sql);
|
||||
return;
|
||||
|
||||
}
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <param name="subRole"></param>
|
||||
/// <param name="userids"></param>
|
||||
public void DeleteUserRoles(int subRole, string userids)
|
||||
{
|
||||
|
||||
public void DeleteUserRoles(int subRole, string userids) {
|
||||
string sql;
|
||||
|
||||
string[] arrayOfUsers = userids.Split(new char[] { '~' });
|
||||
|
||||
for (int i = 0; i < arrayOfUsers.Length; i++)
|
||||
{
|
||||
for (int i = 0; i < arrayOfUsers.Length; i++) {
|
||||
sql = "DELETE FROM UserSubRole WHERE UserID = " + arrayOfUsers[i] + " AND SubRoleID = " + subRole;
|
||||
this.db.Execute(sql);
|
||||
db.Execute(sql);
|
||||
}
|
||||
|
||||
}
|
||||
public List<TrainingReportUser> GetTrainingReportUsers()
|
||||
{
|
||||
|
||||
#if !NET8
|
||||
|
||||
public List<TrainingReportUser> GetTrainingReportUsers() {
|
||||
List<TrainingReportUser> CurrentReportUsers = (from a in FabApprovalDB.TrainingReportUsers select a).ToList();
|
||||
return CurrentReportUsers;
|
||||
}
|
||||
public List<TECNNotificationsUser> GetTECNNotificationUsers()
|
||||
{
|
||||
|
||||
#endif
|
||||
|
||||
#if NET8
|
||||
|
||||
public List<TrainingReportUser> GetTrainingReportUsers() =>
|
||||
throw new NotImplementedException();
|
||||
|
||||
#endif
|
||||
|
||||
#if !NET8
|
||||
public List<TECNNotificationsUser> GetTECNNotificationUsers() {
|
||||
List<TECNNotificationsUser> currentTECNNotificationUsers = (from a in FabApprovalDB.TECNNotificationsUsers select a).ToList();
|
||||
return currentTECNNotificationUsers;
|
||||
}
|
||||
#endif
|
||||
|
||||
public void TrainingReportAddUser(int userId)
|
||||
{
|
||||
public void TrainingReportAddUser(int userId) {
|
||||
string sql = "INSERT INTO TrainingReportUsers (UserId) " + "VALUES ('" + userId + "') ";
|
||||
|
||||
|
||||
this.db.Open();
|
||||
this.db.Execute(sql);
|
||||
db.Open();
|
||||
db.Execute(sql);
|
||||
return;
|
||||
}
|
||||
public void TECNExpirationAddUser(int userId)
|
||||
{
|
||||
|
||||
public void TECNExpirationAddUser(int userId) {
|
||||
string sql = "INSERT INTO TECNNotificationsUsers (UserId) " + "VALUES ('" + userId + "') ";
|
||||
|
||||
this.db.Open();
|
||||
this.db.Execute(sql);
|
||||
|
||||
|
||||
db.Open();
|
||||
db.Execute(sql);
|
||||
|
||||
return;
|
||||
}
|
||||
public void TrainingReportDeleteUser(int userId)
|
||||
{
|
||||
var parameters = new DynamicParameters();
|
||||
|
||||
parameters = new DynamicParameters();
|
||||
public void TrainingReportDeleteUser(int userId) {
|
||||
DynamicParameters parameters = new();
|
||||
parameters.Add("@UserID", userId);
|
||||
|
||||
this.db.Execute("DeleteUserFromTrainingReport", parameters, commandType: CommandType.StoredProcedure);
|
||||
db.Execute("DeleteUserFromTrainingReport", parameters, commandType: CommandType.StoredProcedure);
|
||||
return;
|
||||
}
|
||||
public void TECNExpirationDeleteUser(int userId)
|
||||
{
|
||||
var parameters = new DynamicParameters();
|
||||
|
||||
parameters = new DynamicParameters();
|
||||
public void TECNExpirationDeleteUser(int userId) {
|
||||
DynamicParameters parameters = new();
|
||||
parameters.Add("@UserID", userId);
|
||||
|
||||
this.db.Execute("DeleteUserFromTECNReport", parameters, commandType: CommandType.StoredProcedure);
|
||||
db.Execute("DeleteUserFromTECNReport", parameters, commandType: CommandType.StoredProcedure);
|
||||
return;
|
||||
}
|
||||
public List<TrainingGroup> GetTrainingGroups()
|
||||
{
|
||||
//StringBuilder sql = new StringBuilder();
|
||||
//sql.Append(
|
||||
// "SELECT 'TrainingGroupID', TrainingGroupName " +
|
||||
// "FROM TrainingGroups " +
|
||||
// "ORDER BY TrainingGroupID ");
|
||||
|
||||
//db.Open();
|
||||
//var lookup = new Dictionary<int, TrainingGroup>();
|
||||
////List<TrainingGroup> data = this.db.Query<TrainingGroup>(sql.ToString()
|
||||
//return this.db.Query<TrainingGroup>(sql.ToString()).ToList();
|
||||
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
|
||||
}
|
||||
public void AddNewTrainingGroup(string groupName)
|
||||
{
|
||||
|
||||
#if !NET8
|
||||
|
||||
public void AddNewTrainingGroup(string groupName) {
|
||||
TrainingGroup existing = null;
|
||||
// Check to see that the group name doesn't exist.
|
||||
try
|
||||
{
|
||||
try {
|
||||
existing = (from a in FabApprovalDB.TrainingGroups where a.TrainingGroupName == groupName select a).FirstOrDefault();
|
||||
}
|
||||
catch
|
||||
{
|
||||
// string test = "";
|
||||
} catch {
|
||||
}
|
||||
|
||||
|
||||
if (existing == null)
|
||||
{
|
||||
//string sql = new StringBuilder();
|
||||
if (existing == null) {
|
||||
string sql = "INSERT INTO TrainingGroups (TrainingGroupName) " + "VALUES ('" + groupName + "') ";
|
||||
|
||||
|
||||
this.db.Open();
|
||||
this.db.Execute(sql);
|
||||
return;
|
||||
}
|
||||
else
|
||||
{
|
||||
} else {
|
||||
return;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
public void DeleteTrainingGroup(int groupID)
|
||||
{
|
||||
try
|
||||
{
|
||||
public void DeleteTrainingGroup(int groupID) {
|
||||
try {
|
||||
string sql = "DELETE FROM TrainingGroups WHERE TrainingGroupID = " + groupID;
|
||||
this.db.Open();
|
||||
this.db.Execute(sql);
|
||||
db.Open();
|
||||
db.Execute(sql);
|
||||
|
||||
sql = "DELETE FROM TrainingGroupMembers WHERE TrainingGroupID = " + groupID;
|
||||
this.db.Execute(sql);
|
||||
db.Execute(sql);
|
||||
return;
|
||||
} catch {
|
||||
}
|
||||
}
|
||||
catch
|
||||
{
|
||||
|
||||
}
|
||||
}
|
||||
public List<TrainingGroupMember> GetTrainingGroupMembers(int GroupID)
|
||||
{
|
||||
#if !NET8
|
||||
public List<TrainingGroupMember> GetTrainingGroupMembers(int GroupID) {
|
||||
return (from a in FabApprovalDB.TrainingGroupMembers where a.TrainingGroupID == GroupID select a).ToList();
|
||||
}
|
||||
public void AddUserToGroup(int userId, int groupId)
|
||||
{
|
||||
|
||||
public void AddUserToGroup(int userId, int groupId) {
|
||||
UserAccountDMO userDB = new UserAccountDMO();
|
||||
string userFullName = userDB.GetUserByID(userId).FullName;
|
||||
|
||||
TrainingGroupMember existing = null;
|
||||
|
||||
existing = (from a in FabApprovalDB.TrainingGroupMembers where a.TrainingGroupID == groupId && a.UserID == userId select a).FirstOrDefault();
|
||||
if (existing == null)
|
||||
{
|
||||
if (existing == null) {
|
||||
var parameters = new DynamicParameters();
|
||||
|
||||
parameters = new DynamicParameters();
|
||||
@ -265,46 +254,58 @@ namespace Fab2ApprovalSystem.DMO
|
||||
parameters.Add("@UserFullName", userFullName);
|
||||
|
||||
this.db.Execute("AddUserToTrainingGroup", parameters, commandType: CommandType.StoredProcedure);
|
||||
}
|
||||
else
|
||||
{
|
||||
} else {
|
||||
throw new Exception("The user already exists in this training group.");
|
||||
}
|
||||
|
||||
|
||||
//if (existing == null)
|
||||
//{
|
||||
// //string sql = new StringBuilder();
|
||||
|
||||
// string sql = "INSERT INTO TrainingGroupMembers (TrainingGroupID, UserID, FullName) " + "VALUES ('" + groupId + "','" + userId + "','" + userFullName + "') ";
|
||||
|
||||
// try
|
||||
// {
|
||||
// this.db.Open();
|
||||
// this.db.Execute(sql);
|
||||
// }
|
||||
// catch(Exception e)
|
||||
// {
|
||||
// return;
|
||||
// }
|
||||
// return;
|
||||
//}
|
||||
//else
|
||||
//{
|
||||
// return;
|
||||
|
||||
}
|
||||
public void DeleteFromGroup(int userId, int groupId)
|
||||
{
|
||||
var parameters = new DynamicParameters();
|
||||
|
||||
parameters = new DynamicParameters();
|
||||
#endif
|
||||
public void DeleteFromGroup(int userId, int groupId) {
|
||||
DynamicParameters parameters = new();
|
||||
parameters.Add("@GroupID", groupId);
|
||||
parameters.Add("@UserID", userId);
|
||||
|
||||
this.db.Execute("DeleteUserFromTrainingGroup", parameters, commandType: CommandType.StoredProcedure);
|
||||
db.Execute("DeleteUserFromTrainingGroup", parameters, commandType: CommandType.StoredProcedure);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
public void DeleteUser(UserAccountDMO userDMO, TrainingDMO trainingDMO, LoginModel loginModel) {
|
||||
if (loginModel != null) {
|
||||
userDMO.DeleteUser(loginModel);
|
||||
// Remove open trainings
|
||||
// Get a list of all user assigned trainings.
|
||||
List<TrainingAssignment> trainingAssignments = trainingDMO.GetTrainingAssignmentsByUserID(loginModel.UserID);
|
||||
|
||||
// Go Through that list.
|
||||
foreach (var trainingAssignment in trainingAssignments) {
|
||||
// Delete Any document acknowledgements.
|
||||
trainingDMO.DeleteTrainingDocAck(trainingAssignment.ID);
|
||||
// Delete the training assignment itself
|
||||
trainingDMO.DeleteTrainingAssignment(trainingAssignment.ID);
|
||||
// Check the parent Training task to set to to complete if applicable.
|
||||
if (trainingDMO.CheckTrainingStatus(trainingAssignment.ID)) {
|
||||
int TrainingID = trainingAssignment.TrainingID;
|
||||
// Set Training status to complete
|
||||
trainingDMO.UpdateTrainingStatus(TrainingID);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// Remove user from any Training Groups
|
||||
DeleteUserFromAllTrainingGroups(loginModel.UserID);
|
||||
|
||||
// Remove User from training report notifications
|
||||
TrainingReportDeleteUser(loginModel.UserID);
|
||||
// Remove user from TECN Expiration Notifications
|
||||
TECNExpirationDeleteUser(loginModel.UserID);
|
||||
// Get user subroles
|
||||
List<UserSubRoles> userSubRoles = GetUserSubRoles(loginModel.UserID);
|
||||
// Delete user from any subroles
|
||||
foreach (var userSubRole in userSubRoles) {
|
||||
DeleteUserRoles(userSubRole.SubRoleID, loginModel.UserID.ToString());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
@ -1,23 +1,19 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Web;
|
||||
using System.Data;
|
||||
using System.Data.SqlClient;
|
||||
using Fab2ApprovalSystem.Models;
|
||||
|
||||
using Dapper;
|
||||
using System.Configuration;
|
||||
|
||||
namespace Fab2ApprovalSystem.DMO
|
||||
{
|
||||
public static class ApprovalLogDMO
|
||||
{
|
||||
using Fab2ApprovalSystem.Misc;
|
||||
using Fab2ApprovalSystem.Models;
|
||||
|
||||
private static IDbConnection db = new SqlConnection(ConfigurationManager.ConnectionStrings["FabApprovalConnection"].ConnectionString);
|
||||
namespace Fab2ApprovalSystem.DMO;
|
||||
|
||||
public static void Add(ApprovalLog appLog)
|
||||
{
|
||||
var parameters = new DynamicParameters();
|
||||
public static class ApprovalLogDMO {
|
||||
|
||||
private static readonly IDbConnection db = new SqlConnection(GlobalVars.DB_CONNECTION_STRING);
|
||||
|
||||
public static void Add(ApprovalLog appLog) {
|
||||
DynamicParameters parameters = new();
|
||||
parameters.Add("@IssueID", appLog.IssueID);
|
||||
parameters.Add("@UserID", appLog.UserID);
|
||||
parameters.Add("@OperationType", appLog.OperationType);
|
||||
@ -26,7 +22,5 @@ namespace Fab2ApprovalSystem.DMO
|
||||
parameters.Add("@DocumentTypeID", appLog.DocumentTypeID);
|
||||
|
||||
db.Execute("InsertApprovalLogByDocument", parameters, commandType: CommandType.StoredProcedure);
|
||||
|
||||
}
|
||||
}
|
||||
}
|
@ -1,148 +1,102 @@
|
||||
using Dapper;
|
||||
|
||||
using Fab2ApprovalSystem.Models;
|
||||
using Fab2ApprovalSystem.ViewModels;
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Configuration;
|
||||
using System.Data;
|
||||
using System.Data.SqlClient;
|
||||
|
||||
#if !NET8
|
||||
using System.Data.Linq;
|
||||
#endif
|
||||
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Transactions;
|
||||
using System.Web;
|
||||
|
||||
namespace Fab2ApprovalSystem.DMO
|
||||
{
|
||||
public class AuditDMO
|
||||
{
|
||||
private IDbConnection db = new SqlConnection(ConfigurationManager.ConnectionStrings["FabApprovalConnection"].ConnectionString);
|
||||
WorkflowDMO wfDMO = new WorkflowDMO();
|
||||
using Fab2ApprovalSystem.Misc;
|
||||
using Fab2ApprovalSystem.Utilities;
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <param name="audit"></param>
|
||||
/// <returns></returns>
|
||||
public Audit InsertAudit(Audit audit)
|
||||
{
|
||||
var parameters = new DynamicParameters();
|
||||
namespace Fab2ApprovalSystem.DMO;
|
||||
|
||||
parameters = new DynamicParameters();
|
||||
public class AuditDMO {
|
||||
|
||||
private readonly AppSettings _AppSettings;
|
||||
private readonly IDbConnection db = new SqlConnection(GlobalVars.DB_CONNECTION_STRING);
|
||||
|
||||
public AuditDMO(AppSettings appSettings) =>
|
||||
_AppSettings = appSettings;
|
||||
|
||||
public Audit InsertAudit(Audit audit) {
|
||||
DynamicParameters parameters = new();
|
||||
parameters.Add("@AuditNo", value: audit.AuditNo, dbType: DbType.Int32, direction: ParameterDirection.InputOutput);
|
||||
parameters.Add("@OriginatorID", audit.OriginatorID);
|
||||
|
||||
this.db.Execute("_8DInsertAuditItem", parameters, commandType: CommandType.StoredProcedure);
|
||||
db.Execute("_8DInsertAuditItem", parameters, commandType: CommandType.StoredProcedure);
|
||||
audit.AuditNo = parameters.Get<int>("@AuditNo");
|
||||
|
||||
return audit;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <param name="auditNo"></param>
|
||||
/// <param name="isITAR"></param>
|
||||
/// <param name="userID"></param>
|
||||
/// <returns></returns>
|
||||
public Audit GetAuditItem(int auditNo, int userID)
|
||||
{
|
||||
Audit audit = new Audit();
|
||||
public Audit GetAuditItem(int auditNo, int userID) {
|
||||
Audit audit = new();
|
||||
|
||||
// isITAR = 2;
|
||||
|
||||
var parameters = new DynamicParameters();
|
||||
DynamicParameters parameters = new();
|
||||
parameters.Add("@AuditNo", value: auditNo);
|
||||
parameters.Add("@UserID", userID);
|
||||
//parameters.Add("@IsITAR", value: isITAR, dbType: DbType.Int32, direction: ParameterDirection.InputOutput);
|
||||
|
||||
//audit = this.db.Query<Audit>("_8DGetAuditItem", parameters, commandType: CommandType.StoredProcedure).Single();
|
||||
|
||||
|
||||
|
||||
using (var multipleResultItems = this.db.QueryMultiple("_8DGetAuditItem", parameters, commandType: CommandType.StoredProcedure))
|
||||
{
|
||||
using (var multipleResultItems = db.QueryMultiple("_8DGetAuditItem", parameters, commandType: CommandType.StoredProcedure)) {
|
||||
audit = multipleResultItems.Read<Audit>().SingleOrDefault();
|
||||
|
||||
var auditors = multipleResultItems.Read<int>().ToList();
|
||||
List<int> auditors = multipleResultItems.Read<int>().ToList();
|
||||
|
||||
|
||||
if (audit != null && auditors != null)
|
||||
{
|
||||
if (audit != null && auditors != null) {
|
||||
if (auditors.Count > 0)
|
||||
audit.AuditorIDs.AddRange(auditors);
|
||||
}
|
||||
|
||||
var auditorTypes = multipleResultItems.Read<int>().ToList();
|
||||
if (audit != null && auditorTypes != null)
|
||||
{
|
||||
List<int> auditorTypes = multipleResultItems.Read<int>().ToList();
|
||||
if (audit != null && auditorTypes != null) {
|
||||
if (auditorTypes.Count > 0)
|
||||
audit.AuditTypeIDs.AddRange(auditorTypes);
|
||||
}
|
||||
|
||||
var auditorAreas = multipleResultItems.Read<int>().ToList();
|
||||
if (audit != null && auditorAreas != null)
|
||||
{
|
||||
List<int> auditorAreas = multipleResultItems.Read<int>().ToList();
|
||||
if (audit != null && auditorAreas != null) {
|
||||
if (auditorAreas.Count > 0)
|
||||
audit.AuditedAreaIDs.AddRange(auditorAreas);
|
||||
}
|
||||
}
|
||||
//FabApprovalSystemEntitiesAll auditDb = new FabApprovalSystemEntitiesAll();
|
||||
|
||||
//var auditedStandardIDs = (from a in auditDb.C_8DAuditedStandardByAudit where a.AuditNo == audit.AuditNo select a.AuditedStandardID).ToList();
|
||||
|
||||
//foreach (var id in auditedStandardIDs)
|
||||
//{
|
||||
// audit.AuditedStandardIDs.Add(id);
|
||||
//}
|
||||
|
||||
return audit;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <param name="auditNo"></param>
|
||||
/// <param name="userID"></param>
|
||||
/// <returns></returns>
|
||||
public Audit GetAuditItemReadOnly(int auditNo, int userID)
|
||||
{
|
||||
Audit audit = new Audit();
|
||||
public Audit GetAuditItemReadOnly(int auditNo, int userID) {
|
||||
Audit audit = new();
|
||||
|
||||
//isITAR = 2;
|
||||
|
||||
var parameters = new DynamicParameters();
|
||||
DynamicParameters parameters = new();
|
||||
parameters.Add("@AuditNo", value: auditNo);
|
||||
parameters.Add("@UserID", userID);
|
||||
//parameters.Add("@IsITAR", value: isITAR, dbType: DbType.Int32, direction: ParameterDirection.InputOutput);
|
||||
|
||||
//audit = this.db.Query<Audit>("_8DGetAuditItem", parameters, commandType: CommandType.StoredProcedure).Single();
|
||||
|
||||
|
||||
|
||||
using (var multipleResultItems = this.db.QueryMultiple("_8DGetAuditItemReadOnly", parameters, commandType: CommandType.StoredProcedure))
|
||||
{
|
||||
using (var multipleResultItems = db.QueryMultiple("_8DGetAuditItemReadOnly", parameters, commandType: CommandType.StoredProcedure)) {
|
||||
audit = multipleResultItems.Read<Audit>().SingleOrDefault();
|
||||
|
||||
var auditors = multipleResultItems.Read<int>().ToList();
|
||||
List<int> auditors = multipleResultItems.Read<int>().ToList();
|
||||
|
||||
|
||||
if (audit != null && auditors != null)
|
||||
{
|
||||
if (audit != null && auditors != null) {
|
||||
if (auditors.Count > 0)
|
||||
audit.AuditorIDs.AddRange(auditors);
|
||||
}
|
||||
|
||||
var auditorTypes = multipleResultItems.Read<int>().ToList();
|
||||
if (audit != null && auditorTypes != null)
|
||||
{
|
||||
List<int> auditorTypes = multipleResultItems.Read<int>().ToList();
|
||||
if (audit != null && auditorTypes != null) {
|
||||
if (auditorTypes.Count > 0)
|
||||
audit.AuditTypeIDs.AddRange(auditorTypes);
|
||||
}
|
||||
|
||||
var auditorAreas = multipleResultItems.Read<int>().ToList();
|
||||
if (audit != null && auditorAreas != null)
|
||||
{
|
||||
List<int> auditorAreas = multipleResultItems.Read<int>().ToList();
|
||||
if (audit != null && auditorAreas != null) {
|
||||
if (auditorAreas.Count > 0)
|
||||
audit.AuditedAreaIDs.AddRange(auditorAreas);
|
||||
}
|
||||
@ -151,290 +105,165 @@ namespace Fab2ApprovalSystem.DMO
|
||||
return audit;
|
||||
}
|
||||
|
||||
public IEnumerable<AuditType> GetAuditTypeList() {
|
||||
DynamicParameters parameters = new();
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
public IEnumerable<AuditType> GetAuditTypeList()
|
||||
{
|
||||
var parameters = new DynamicParameters();
|
||||
|
||||
|
||||
var auditTypeList = this.db.Query<AuditType>("_8DGetAuditTypeList", parameters, commandType: CommandType.StoredProcedure).ToList();
|
||||
List<AuditType> auditTypeList = db.Query<AuditType>("_8DGetAuditTypeList", parameters, commandType: CommandType.StoredProcedure).ToList();
|
||||
return auditTypeList;
|
||||
|
||||
}
|
||||
|
||||
public IEnumerable<C_8DAuditedStandard> GetAuditStandardList()
|
||||
{
|
||||
|
||||
#if !NET8
|
||||
public IEnumerable<C_8DAuditedStandard> GetAuditStandardList() {
|
||||
FabApprovalSystemEntitiesAll db = new FabApprovalSystemEntitiesAll();
|
||||
|
||||
var auditStandardList = from a in db.C_8DAuditedStandard select a;
|
||||
|
||||
return auditStandardList;
|
||||
|
||||
}
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
public IEnumerable<Auditor> GetAuditorList()
|
||||
{
|
||||
var parameters = new DynamicParameters();
|
||||
#endif
|
||||
public IEnumerable<Auditor> GetAuditorList() {
|
||||
DynamicParameters parameters = new();
|
||||
|
||||
|
||||
var auditorList = this.db.Query<Auditor>("_8DGetAuditorList", parameters, commandType: CommandType.StoredProcedure).ToList();
|
||||
List<Auditor> auditorList = db.Query<Auditor>("_8DGetAuditorList", parameters, commandType: CommandType.StoredProcedure).ToList();
|
||||
return auditorList;
|
||||
|
||||
}
|
||||
|
||||
public IEnumerable<AuditedArea> GetAuditAreaList() {
|
||||
DynamicParameters parameters = new();
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
public IEnumerable<AuditedArea> GetAuditAreaList()
|
||||
{
|
||||
var parameters = new DynamicParameters();
|
||||
|
||||
var auditAreaList = this.db.Query<AuditedArea>("_8DGetAuditAreaList", parameters, commandType: CommandType.StoredProcedure).ToList();
|
||||
List<AuditedArea> auditAreaList = db.Query<AuditedArea>("_8DGetAuditAreaList", parameters, commandType: CommandType.StoredProcedure).ToList();
|
||||
return auditAreaList;
|
||||
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <param name="audit"></param>
|
||||
public void UpdateAudit(Audit audit, int userID)
|
||||
{
|
||||
public void UpdateAudit(Audit audit, int userID) {
|
||||
int result = 0;
|
||||
var parameters = new DynamicParameters();
|
||||
DynamicParameters parameters = new();
|
||||
|
||||
using(var transaction = new TransactionScope())
|
||||
{
|
||||
try
|
||||
{
|
||||
using (TransactionScope transaction = new()) {
|
||||
try {
|
||||
parameters.Add("AuditNo", audit.AuditNo);
|
||||
parameters.Add("Title", audit.AuditTitle);
|
||||
//parameters.Add("AuditTypeID", audit.AuditTypeID);
|
||||
parameters.Add("AuditDate", audit.AuditDate);
|
||||
parameters.Add("AuditStatus", audit.AuditStatus);
|
||||
parameters.Add("AuditScore", audit.AuditScore);
|
||||
//parameters.Add("AuditedAreaID", audit.AuditedAreaID);
|
||||
parameters.Add("Auditees", audit.Auditees);
|
||||
this.db.Execute("_8DUpdateAudit", param: parameters, commandType: CommandType.StoredProcedure);
|
||||
db.Execute("_8DUpdateAudit", param: parameters, commandType: CommandType.StoredProcedure);
|
||||
|
||||
parameters = new DynamicParameters();
|
||||
parameters.Add("@AuditNo", audit.AuditNo);
|
||||
this.db.Execute("_8DDeleteAuditors", parameters, commandType: CommandType.StoredProcedure);
|
||||
db.Execute("_8DDeleteAuditors", parameters, commandType: CommandType.StoredProcedure);
|
||||
List<int> auditors = audit.AuditorIDs;
|
||||
if (auditors != null)
|
||||
{
|
||||
foreach (int auditorID in auditors)
|
||||
{
|
||||
if (auditors != null) {
|
||||
foreach (int auditorID in auditors) {
|
||||
parameters = new DynamicParameters();
|
||||
parameters.Add("@AuditNo", audit.AuditNo);
|
||||
parameters.Add("@AuditorID", auditorID);
|
||||
this.db.Execute("_8DInsertAuditor", parameters, commandType: CommandType.StoredProcedure);
|
||||
db.Execute("_8DInsertAuditor", parameters, commandType: CommandType.StoredProcedure);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
parameters = new DynamicParameters();
|
||||
parameters.Add("@AuditNo", audit.AuditNo);
|
||||
this.db.Execute("_8DDeleteAuditTypes", parameters, commandType: CommandType.StoredProcedure);
|
||||
db.Execute("_8DDeleteAuditTypes", parameters, commandType: CommandType.StoredProcedure);
|
||||
List<int> auditTypes = audit.AuditTypeIDs;
|
||||
if (auditTypes != null)
|
||||
{
|
||||
foreach (int auditTypeID in auditTypes)
|
||||
{
|
||||
if (auditTypes != null) {
|
||||
foreach (int auditTypeID in auditTypes) {
|
||||
parameters = new DynamicParameters();
|
||||
parameters.Add("@AuditNo", audit.AuditNo);
|
||||
parameters.Add("@AuditTypeID", auditTypeID);
|
||||
this.db.Execute("_8DInsertAuditType", parameters, commandType: CommandType.StoredProcedure);
|
||||
db.Execute("_8DInsertAuditType", parameters, commandType: CommandType.StoredProcedure);
|
||||
}
|
||||
}
|
||||
|
||||
parameters = new DynamicParameters();
|
||||
parameters.Add("@AuditNo", audit.AuditNo);
|
||||
this.db.Execute("_8DDeleteAuditedAreas", parameters, commandType: CommandType.StoredProcedure);
|
||||
db.Execute("_8DDeleteAuditedAreas", parameters, commandType: CommandType.StoredProcedure);
|
||||
List<int> auditedAreas = audit.AuditedAreaIDs;
|
||||
if (auditedAreas != null)
|
||||
{
|
||||
foreach (int auditedAreaID in auditedAreas)
|
||||
{
|
||||
if (auditedAreas != null) {
|
||||
foreach (int auditedAreaID in auditedAreas) {
|
||||
parameters = new DynamicParameters();
|
||||
parameters.Add("@AuditNo", audit.AuditNo);
|
||||
parameters.Add("@AuditedAreaID", auditedAreaID);
|
||||
this.db.Execute("_8DInsertAuditedArea", parameters, commandType: CommandType.StoredProcedure);
|
||||
db.Execute("_8DInsertAuditedArea", parameters, commandType: CommandType.StoredProcedure);
|
||||
}
|
||||
}
|
||||
|
||||
transaction.Complete();
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
catch (Exception ex)
|
||||
{
|
||||
} catch (Exception ex) {
|
||||
transaction.Dispose();
|
||||
throw new Exception(ex.Message + " " + ex.InnerException);
|
||||
}
|
||||
}
|
||||
//FabApprovalSystemEntitiesAll auditDb = new FabApprovalSystemEntitiesAll();
|
||||
|
||||
//List<int> auditedStandards = audit.AuditedStandardIDs;
|
||||
//if (auditedStandards != null)
|
||||
//{
|
||||
// foreach (int auditedStandard in auditedStandards)
|
||||
// {
|
||||
// var auditStandardExists = (from a in auditDb.C_8DAuditedStandardByAudit where a.AuditNo == audit.AuditNo && a.AuditedStandardID == auditedStandard select a).ToList();
|
||||
// if (auditStandardExists.Count() <= 0)
|
||||
// {
|
||||
// C_8DAuditedStandardByAudit standard = new C_8DAuditedStandardByAudit
|
||||
// {
|
||||
// AuditNo = audit.AuditNo,
|
||||
// AuditedStandardID = auditedStandard
|
||||
// };
|
||||
// auditDb.C_8DAuditedStandardByAudit.Add(standard);
|
||||
// auditDb.SaveChanges();
|
||||
// }
|
||||
|
||||
// }
|
||||
//}
|
||||
|
||||
//parameters = new DynamicParameters();
|
||||
//parameters.Add("AuditNo", audit.AuditNo);
|
||||
//this.db.Execute("_8DUpdateAuditScore", parameters, commandType: CommandType.StoredProcedure);
|
||||
}
|
||||
|
||||
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <param name="issueID"></param>
|
||||
/// <returns></returns>
|
||||
public IEnumerable<AuditReportAttachment> GetAuditReportAttachments(int auditNo)
|
||||
{
|
||||
var parameters = new DynamicParameters();
|
||||
public IEnumerable<AuditReportAttachment> GetAuditReportAttachments(int auditNo) {
|
||||
DynamicParameters parameters = new();
|
||||
parameters.Add("@AuditNo", auditNo);
|
||||
var data = this.db.Query<AuditReportAttachment>("_8DGetAuditReportAttachments", parameters, commandType: CommandType.StoredProcedure).ToList();
|
||||
List<AuditReportAttachment> data = db.Query<AuditReportAttachment>("_8DGetAuditReportAttachments", parameters, commandType: CommandType.StoredProcedure).ToList();
|
||||
return data;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <param name="auditNo"></param>
|
||||
/// <returns></returns>
|
||||
public IEnumerable<AuditReportAttachment> GetCAFindingsItemAttachments(int caFindingsID)
|
||||
{
|
||||
var parameters = new DynamicParameters();
|
||||
public IEnumerable<AuditReportAttachment> GetCAFindingsItemAttachments(int caFindingsID) {
|
||||
DynamicParameters parameters = new();
|
||||
parameters.Add("@CAFindingsID", caFindingsID);
|
||||
var data = this.db.Query<AuditReportAttachment>("_8DGetCAFindingsItemAttachments", parameters, commandType: CommandType.StoredProcedure).ToList();
|
||||
List<AuditReportAttachment> data = db.Query<AuditReportAttachment>("_8DGetCAFindingsItemAttachments", parameters, commandType: CommandType.StoredProcedure).ToList();
|
||||
return data;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
public IEnumerable<CAUserList> GetUserList()
|
||||
{
|
||||
var parameters = new DynamicParameters();
|
||||
var userList = this.db.Query<CAUserList>("_8DGetUserList", parameters, commandType: CommandType.StoredProcedure).ToList();
|
||||
public IEnumerable<CAUserList> GetUserList() {
|
||||
DynamicParameters parameters = new();
|
||||
List<CAUserList> userList = db.Query<CAUserList>("_8DGetUserList", parameters, commandType: CommandType.StoredProcedure).ToList();
|
||||
return userList;
|
||||
}
|
||||
|
||||
public AuditFindings GetAuditFindingsByID(int auditFindingsID)
|
||||
{
|
||||
var parameters = new DynamicParameters();
|
||||
public AuditFindings GetAuditFindingsByID(int auditFindingsID) {
|
||||
DynamicParameters parameters = new();
|
||||
parameters.Add("@AuditFindingsID", auditFindingsID);
|
||||
var data = this.db.Query<AuditFindings>("SELECT * FROM _8DAuditFinding WHERE ID = @AuditFindingsID", parameters).SingleOrDefault();
|
||||
var data = db.Query<AuditFindings>("SELECT * FROM _8DAuditFinding WHERE ID = @AuditFindingsID", parameters).SingleOrDefault();
|
||||
return data;
|
||||
}
|
||||
public IEnumerable<int> GetAuditFindingCategoryIdsByFindingId(int auditFindingsID)
|
||||
{
|
||||
var parameters = new DynamicParameters();
|
||||
|
||||
public IEnumerable<int> GetAuditFindingCategoryIdsByFindingId(int auditFindingsID) {
|
||||
DynamicParameters parameters = new();
|
||||
parameters.Add("@AuditFindingID", auditFindingsID);
|
||||
var data = this.db.Query<int>("SELECT CategoryID FROM _8DAuditFindingCategoryByAuditFinding WHERE AuditFindingID = @AuditFindingID", parameters).ToList();
|
||||
List<int> data = db.Query<int>("SELECT CategoryID FROM _8DAuditFindingCategoryByAuditFinding WHERE AuditFindingID = @AuditFindingID", parameters).ToList();
|
||||
return data;
|
||||
}
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <param name="auditNo"></param>
|
||||
/// <returns></returns>
|
||||
public IEnumerable<AuditFindings> GetAuditFindingsList(int auditNo)
|
||||
{
|
||||
var parameters = new DynamicParameters();
|
||||
|
||||
public IEnumerable<AuditFindings> GetAuditFindingsList(int auditNo) {
|
||||
DynamicParameters parameters = new();
|
||||
parameters.Add("@AuditNo", auditNo);
|
||||
var data = this.db.Query<AuditFindings>("_8DGetAuditFindingsList", parameters, commandType: CommandType.StoredProcedure).ToList();
|
||||
List<AuditFindings> data = db.Query<AuditFindings>("_8DGetAuditFindingsList", parameters, commandType: CommandType.StoredProcedure).ToList();
|
||||
return data;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <param name="attachmentID"></param>
|
||||
public void DeleteAuditReportAttachment(int attachmentID)
|
||||
{
|
||||
var parameters = new DynamicParameters();
|
||||
public void DeleteAuditReportAttachment(int attachmentID) {
|
||||
DynamicParameters parameters = new();
|
||||
parameters.Add("@AttachmentID", attachmentID);
|
||||
this.db.Execute("_8DDeleteAuditReportAttachments", parameters, commandType: CommandType.StoredProcedure);
|
||||
db.Execute("_8DDeleteAuditReportAttachments", parameters, commandType: CommandType.StoredProcedure);
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <param name="attach"></param>
|
||||
public void InsertAuditReportAttachment(AuditReportAttachment attach)
|
||||
{
|
||||
var parameters = new DynamicParameters();
|
||||
public void InsertAuditReportAttachment(AuditReportAttachment attach) {
|
||||
DynamicParameters parameters = new();
|
||||
parameters.Add("@AuditNo", attach.AuditNo);
|
||||
parameters.Add("@CAFindingsID", attach.CAFindingsID);
|
||||
parameters.Add("@UploadedByID", attach.UploadedByID);
|
||||
parameters.Add("@FileName", attach.FileName);
|
||||
parameters.Add("@FileGUID", attach.FileGUID);
|
||||
|
||||
this.db.Execute("_8DInsertAuditReportAttachment", parameters, commandType: CommandType.StoredProcedure);
|
||||
|
||||
|
||||
db.Execute("_8DInsertAuditReportAttachment", parameters, commandType: CommandType.StoredProcedure);
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <param name="fileGUID"></param>
|
||||
/// <returns></returns>
|
||||
internal string GetAuditReportAttachmentFileName(string fileGUID)
|
||||
{
|
||||
var parameters = new DynamicParameters();
|
||||
internal string GetAuditReportAttachmentFileName(string fileGUID) {
|
||||
DynamicParameters parameters = new();
|
||||
parameters.Add("@FileGUID", fileGUID);
|
||||
var fileName = this.db.Query<string>("_8DGetAuditReportAttachmentFileName", parameters, commandType: CommandType.StoredProcedure).Single();
|
||||
var fileName = db.Query<string>("_8DGetAuditReportAttachmentFileName", parameters, commandType: CommandType.StoredProcedure).Single();
|
||||
return fileName;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <param name="data"></param>
|
||||
internal void InsertAuditFindingsItem(AuditFindings data)
|
||||
{
|
||||
var parameters = new DynamicParameters();
|
||||
internal void InsertAuditFindingsItem(AuditFindings data) {
|
||||
DynamicParameters parameters = new();
|
||||
parameters.Add("@AuditNo", data.AuditNo);
|
||||
parameters.Add("@Findings", data.Findings);
|
||||
parameters.Add("@ViolatedClause", data.ViolatedClause);
|
||||
@ -443,18 +272,11 @@ namespace Fab2ApprovalSystem.DMO
|
||||
parameters.Add("@CANo", data.CANo);
|
||||
parameters.Add("@Title", data.Title);
|
||||
|
||||
|
||||
this.db.Execute("_8DInsertAuditFinding", parameters, commandType: CommandType.StoredProcedure);
|
||||
db.Execute("_8DInsertAuditFinding", parameters, commandType: CommandType.StoredProcedure);
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <param name="data"></param>
|
||||
internal void UpdateAuditFindingsItem(AuditFindings data)
|
||||
{
|
||||
var parameters = new DynamicParameters();
|
||||
internal void UpdateAuditFindingsItem(AuditFindings data) {
|
||||
DynamicParameters parameters = new();
|
||||
parameters.Add("@AuditFindingsID", data.ID);
|
||||
parameters.Add("@Findings", data.Findings);
|
||||
parameters.Add("@ViolatedClause", data.ViolatedClause);
|
||||
@ -463,104 +285,53 @@ namespace Fab2ApprovalSystem.DMO
|
||||
parameters.Add("@CANo", data.CANo);
|
||||
parameters.Add("@Title", data.Title);
|
||||
|
||||
|
||||
|
||||
this.db.Execute("_8DUpdateAuditFinding", parameters, commandType: CommandType.StoredProcedure);
|
||||
db.Execute("_8DUpdateAuditFinding", parameters, commandType: CommandType.StoredProcedure);
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <param name="auditFindingsID"></param>
|
||||
internal void DeleteAuditFindingsItem(int auditFindingsID )
|
||||
{
|
||||
var parameters = new DynamicParameters();
|
||||
internal void DeleteAuditFindingsItem(int auditFindingsID) {
|
||||
DynamicParameters parameters = new();
|
||||
parameters.Add("@AuditFindingsID", auditFindingsID);
|
||||
|
||||
this.db.Execute("_8DDeleteAuditFinding", parameters, commandType: CommandType.StoredProcedure);
|
||||
db.Execute("_8DDeleteAuditFinding", parameters, commandType: CommandType.StoredProcedure);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
internal List<AuditFindingCategory> GetAuditFindingCategories()
|
||||
{
|
||||
var parameters = new DynamicParameters();
|
||||
return this.db.Query<AuditFindingCategory>("_8DGetAuditFindingCategories", commandType: CommandType.StoredProcedure).ToList();
|
||||
internal List<AuditFindingCategory> GetAuditFindingCategories() {
|
||||
DynamicParameters parameters = new();
|
||||
return db.Query<AuditFindingCategory>("_8DGetAuditFindingCategories", commandType: CommandType.StoredProcedure).ToList();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <param name="userID"></param>
|
||||
/// <param name="issueID"></param>
|
||||
public void ReleaseLockOnDocument(int userID, int issueID)
|
||||
{
|
||||
var parameters = new DynamicParameters();
|
||||
public void ReleaseLockOnDocument(int userID, int issueID) {
|
||||
DynamicParameters parameters = new();
|
||||
parameters.Add("@AuditNo", issueID);
|
||||
parameters.Add("@UserID", userID);
|
||||
this.db.Execute("_8DReleaseLockOnAuditDocuments", parameters, commandType: CommandType.StoredProcedure);
|
||||
db.Execute("_8DReleaseLockOnAuditDocuments", parameters, commandType: CommandType.StoredProcedure);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
public IEnumerable<CANoList> GetCorrectiveActionNoList()
|
||||
{
|
||||
var parameters = new DynamicParameters();
|
||||
var dataList = this.db.Query<CANoList>("_8DGetCorrectiveActionNoList", parameters, commandType: CommandType.StoredProcedure).ToList();
|
||||
public IEnumerable<CANoList> GetCorrectiveActionNoList() {
|
||||
DynamicParameters parameters = new();
|
||||
List<CANoList> dataList = db.Query<CANoList>("_8DGetCorrectiveActionNoList", parameters, commandType: CommandType.StoredProcedure).ToList();
|
||||
return dataList;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <param name="subRoleCategoryID"></param>
|
||||
/// <returns></returns>
|
||||
public List<int> Get8DQA()
|
||||
{
|
||||
List<int> users = new List<int>();
|
||||
var parameters = new DynamicParameters();
|
||||
users = this.db.Query<int>("_8DGet8DQA", parameters, commandType: CommandType.StoredProcedure).ToList();
|
||||
public List<int> Get8DQA() {
|
||||
List<int> users = new();
|
||||
DynamicParameters parameters = new();
|
||||
users = db.Query<int>("_8DGet8DQA", parameters, commandType: CommandType.StoredProcedure).ToList();
|
||||
return users;
|
||||
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <param name="auditNo"></param>
|
||||
/// <returns></returns>
|
||||
public int GetOpenCACountByAuditNo(int auditNo)
|
||||
{
|
||||
|
||||
public int GetOpenCACountByAuditNo(int auditNo) {
|
||||
int rowCount = 0;
|
||||
var parameters = new DynamicParameters();
|
||||
DynamicParameters parameters = new();
|
||||
parameters.Add("@AuditNo", auditNo);
|
||||
rowCount = this.db.Query<int>("_8DGetOpenCACountByAuditNo", parameters, commandType: CommandType.StoredProcedure).Single();
|
||||
rowCount = db.Query<int>("_8DGetOpenCACountByAuditNo", parameters, commandType: CommandType.StoredProcedure).Single();
|
||||
return rowCount;
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
// CA Findings ====================================================================================================================================
|
||||
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <param name="model"></param>
|
||||
public void InsertCAFindings(CAFindings model)
|
||||
{
|
||||
|
||||
var parameters = new DynamicParameters();
|
||||
public void InsertCAFindings(CAFindings model) {
|
||||
DynamicParameters parameters = new();
|
||||
parameters.Add("@AuditNo", model.AuditNo);
|
||||
parameters.Add("@CAFinding", model.CAFinding);
|
||||
parameters.Add("@CorrectiveAction", model.CorrectiveAction);
|
||||
@ -569,18 +340,11 @@ namespace Fab2ApprovalSystem.DMO
|
||||
parameters.Add("@ECD", model.ECD);
|
||||
parameters.Add("@ImplementedDate", model.ImplementedDate);
|
||||
|
||||
this.db.Execute("_8DInsertCAFindings", parameters, commandType: CommandType.StoredProcedure);
|
||||
|
||||
db.Execute("_8DInsertCAFindings", parameters, commandType: CommandType.StoredProcedure);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <param name="model"></param>
|
||||
public void UpdateCAFindings(CAFindings model)
|
||||
{
|
||||
|
||||
var parameters = new DynamicParameters();
|
||||
public void UpdateCAFindings(CAFindings model) {
|
||||
DynamicParameters parameters = new();
|
||||
parameters.Add("@CAFindingsID", model.ID);
|
||||
parameters.Add("@CAFinding", model.CAFinding);
|
||||
parameters.Add("@CorrectiveAction", model.CorrectiveAction);
|
||||
@ -589,70 +353,154 @@ namespace Fab2ApprovalSystem.DMO
|
||||
parameters.Add("@ECD", model.ECD);
|
||||
parameters.Add("@ImplementedDate", model.ImplementedDate);
|
||||
|
||||
this.db.Execute("_8DUpdateCAFindings", parameters, commandType: CommandType.StoredProcedure);
|
||||
|
||||
db.Execute("_8DUpdateCAFindings", parameters, commandType: CommandType.StoredProcedure);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <param name="caFindingsID"></param>
|
||||
public void DeleteCAFindingsItem(int caFindingsID)
|
||||
{
|
||||
var parameters = new DynamicParameters();
|
||||
public void DeleteCAFindingsItem(int caFindingsID) {
|
||||
DynamicParameters parameters = new();
|
||||
parameters.Add("@CAFindingsID", caFindingsID);
|
||||
|
||||
this.db.Execute("_8DDeleteCAFindingsItem", parameters, commandType: CommandType.StoredProcedure);
|
||||
|
||||
db.Execute("_8DDeleteCAFindingsItem", parameters, commandType: CommandType.StoredProcedure);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <param name="caFindingsID"></param>
|
||||
/// <returns></returns>
|
||||
public CAFindings GetCAFindingsItem(int caFindingsID)
|
||||
{
|
||||
var model = new CAFindings();
|
||||
var parameters = new DynamicParameters();
|
||||
public CAFindings GetCAFindingsItem(int caFindingsID) {
|
||||
CAFindings model = new();
|
||||
DynamicParameters parameters = new();
|
||||
parameters.Add("@CAFindingsID", caFindingsID);
|
||||
var data = this.db.Query<CAFindings>("_8DGetCAFindings", parameters, commandType: CommandType.StoredProcedure).Single();
|
||||
var data = db.Query<CAFindings>("_8DGetCAFindings", parameters, commandType: CommandType.StoredProcedure).Single();
|
||||
return data;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <param name="caNo"></param>
|
||||
/// <returns></returns>
|
||||
public IEnumerable<CAFindings> GetCAFindingsList(int auditNo)
|
||||
{
|
||||
|
||||
var parameters = new DynamicParameters();
|
||||
public IEnumerable<CAFindings> GetCAFindingsList(int auditNo) {
|
||||
DynamicParameters parameters = new();
|
||||
parameters.Add("@AuditNo", auditNo);
|
||||
var dataList = this.db.Query<CAFindings>("_8DGetCAFindingsList", parameters, commandType: CommandType.StoredProcedure).ToList();
|
||||
List<CAFindings> dataList = db.Query<CAFindings>("_8DGetCAFindingsList", parameters, commandType: CommandType.StoredProcedure).ToList();
|
||||
return dataList;
|
||||
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <param name="CANo"></param>
|
||||
/// <returns></returns>
|
||||
public int IsCAAssignedToAudit(int CANo, int auditNo)
|
||||
{
|
||||
var parameters = new DynamicParameters();
|
||||
public int IsCAAssignedToAudit(int CANo, int auditNo) {
|
||||
DynamicParameters parameters = new();
|
||||
int returnValue = 1;
|
||||
parameters.Add("@CANo", CANo);
|
||||
parameters.Add("@AuditNo", auditNo);
|
||||
parameters.Add("@IsCAAssignedToAudit", returnValue, direction: ParameterDirection.Output);
|
||||
|
||||
this.db.Execute("_8DIsCAAssignedtoAudit", parameters, commandType: CommandType.StoredProcedure);
|
||||
db.Execute("_8DIsCAAssignedtoAudit", parameters, commandType: CommandType.StoredProcedure);
|
||||
|
||||
returnValue = parameters.Get<int>("IsCAAssignedToAudit");
|
||||
return returnValue;
|
||||
}
|
||||
|
||||
public AuditEdit GetAuditEdit(int issueID, Audit audit, bool isAdmin, int userId) {
|
||||
AuditEdit result = new();
|
||||
List<int> userList = Get8DQA();
|
||||
result.MesaUsers = UserUtilities.GetMesaUsers();
|
||||
int QAs = userList.Find(delegate (int al) { return al == userId; });
|
||||
result.Is8DQA = "false";
|
||||
if (QAs != 0) {
|
||||
result.Is8DQA = "true";
|
||||
}
|
||||
|
||||
// transform audit users from string to list, delimited by a comma.
|
||||
if (audit.Auditees == null) {
|
||||
result.AuditeeNames = new List<string>();
|
||||
} else {
|
||||
string[] auditeeNames = audit.Auditees.Split(',');
|
||||
result.AuditeeNames = auditeeNames.ToList();
|
||||
}
|
||||
|
||||
result.IsSubmitter = false;
|
||||
if (audit.OriginatorID == userId) {
|
||||
result.IsSubmitter = true;
|
||||
}
|
||||
if (!isAdmin) {
|
||||
result.IsAdmin = false;
|
||||
} else {
|
||||
result.IsAdmin = true;
|
||||
}
|
||||
if ((audit.RecordLockIndicator && audit.RecordLockedBy != userId)
|
||||
|| audit.AuditStatus != 0) // open
|
||||
{
|
||||
result.RedirectToAction = true;
|
||||
}
|
||||
if (!result.IsAdmin && !result.IsSubmitter) {
|
||||
result.RedirectToAction = true;
|
||||
} else {
|
||||
result.UserList = GetUserList();
|
||||
result.AuditTypeList = GetAuditTypeList();
|
||||
// result.AuditStandardList = GetAuditStandardList();
|
||||
result.AuditorList = GetAuditorList();
|
||||
result.AuditAreaList = GetAuditAreaList();
|
||||
result.AuditFindingCategoryList = GetAuditFindingCategories();
|
||||
result.CANoList = GetCorrectiveActionNoList();
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
public Audit InsertAndGetAudit(CorrectiveActionDMO caDMO, AuditFindings data, int userID) {
|
||||
Audit audit = new();
|
||||
InsertAuditFindingsItem(data);
|
||||
audit = GetAuditItem(data.AuditNo, userID);
|
||||
|
||||
// Transfer Finding Details to CA
|
||||
if (data.CANo != 0) {
|
||||
CorrectiveAction ca = caDMO.GetCAItem(data.CANo, userID);
|
||||
ca.CATitle = data.Title;
|
||||
ca.CASourceID = 1; // Audit
|
||||
caDMO.UpdateCorrectiveAction(ca);
|
||||
}
|
||||
|
||||
return audit;
|
||||
}
|
||||
|
||||
public Audit UpdateAndGetAudit(CorrectiveActionDMO caDMO, AuditFindings data, int userID) {
|
||||
Audit audit = new();
|
||||
UpdateAuditFindingsItem(data);
|
||||
audit = GetAuditItem(data.AuditNo, userID);
|
||||
|
||||
// Transfer Finding Details to CA
|
||||
if (data.CANo != 0) {
|
||||
CorrectiveAction ca = caDMO.GetCAItem(data.CANo, userID);
|
||||
ca.CATitle = data.Title;
|
||||
ca.CASourceID = 1; // Audit
|
||||
caDMO.UpdateCorrectiveAction(ca);
|
||||
}
|
||||
|
||||
return audit;
|
||||
}
|
||||
|
||||
public Audit DeleteAndGetAudit(int auditFindingsID, int userID) {
|
||||
var af = GetAuditFindingsByID(auditFindingsID);
|
||||
DeleteAuditFindingsItem(auditFindingsID);
|
||||
var audit = GetAuditItem(af.AuditNo, userID);
|
||||
return audit;
|
||||
}
|
||||
|
||||
public string NotifyActionItemOwner(int issueID, DateTime? dueDate, int? responsibleOwnerID, string emailTemplatesPath) {
|
||||
string emailSentList = "";
|
||||
|
||||
string email = MiscDMO.GetEmail(responsibleOwnerID);
|
||||
|
||||
string emailTemplate = "CorrectiveActionFindingAssigned.txt";
|
||||
string userEmail = string.Empty;
|
||||
string subject = "5s/CA Findings";
|
||||
string senderName = "CorrectiveAction";
|
||||
|
||||
EmailNotification en = new(_AppSettings, subject, emailTemplatesPath);
|
||||
string[] emailparams = new string[5];
|
||||
emailparams[0] = Functions.ReturnAuditNoStringFormat(issueID);
|
||||
if (dueDate is null)
|
||||
emailparams[1] = string.Empty;
|
||||
else
|
||||
emailparams[1] = dueDate.Value.ToString();
|
||||
emailparams[2] = Functions.DocumentTypeMapper(GlobalVars.DocumentType.Audit);
|
||||
emailparams[3] = GlobalVars.hostURL;
|
||||
emailparams[4] = issueID.ToString();
|
||||
userEmail = email;
|
||||
|
||||
en.SendNotificationEmail(emailTemplate, GlobalVars.SENDER_EMAIL, senderName, userEmail, null, subject, emailparams);
|
||||
emailSentList += email + ",";
|
||||
return email;
|
||||
}
|
||||
|
||||
}
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -1,30 +1,18 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Web;
|
||||
using System.Data;
|
||||
using System.Data.SqlClient;
|
||||
using Fab2ApprovalSystem.Models;
|
||||
|
||||
using Dapper;
|
||||
using System.Configuration;
|
||||
|
||||
namespace Fab2ApprovalSystem.DMO
|
||||
{
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
public static class ECNTypeChangeLogDMO
|
||||
{
|
||||
private static IDbConnection db = new SqlConnection(ConfigurationManager.ConnectionStrings["FabApprovalConnection"].ConnectionString);
|
||||
using Fab2ApprovalSystem.Misc;
|
||||
using Fab2ApprovalSystem.Models;
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <param name="changeLog"></param>
|
||||
public static void Add(ECNTypeChangeLog changeLog)
|
||||
{
|
||||
namespace Fab2ApprovalSystem.DMO;
|
||||
|
||||
var parameters = new DynamicParameters();
|
||||
public static class ECNTypeChangeLogDMO {
|
||||
private static readonly IDbConnection db = new SqlConnection(GlobalVars.DB_CONNECTION_STRING);
|
||||
|
||||
public static void Add(ECNTypeChangeLog changeLog) {
|
||||
DynamicParameters parameters = new();
|
||||
parameters.Add("@ECNNumber", changeLog.ECNNumber);
|
||||
parameters.Add("@UserID", changeLog.UserID);
|
||||
parameters.Add("@ECNTypeFrom", changeLog.ECNTypeFrom);
|
||||
@ -34,7 +22,3 @@ namespace Fab2ApprovalSystem.DMO
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
File diff suppressed because it is too large
Load Diff
@ -1,41 +1,18 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Configuration;
|
||||
using System.Data;
|
||||
using System.Data.SqlClient;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Web;
|
||||
using Fab2ApprovalSystem.Models;
|
||||
|
||||
using Dapper;
|
||||
using System.Transactions;
|
||||
using Fab2ApprovalSystem.ViewModels;
|
||||
using System.Reflection;
|
||||
|
||||
using Fab2ApprovalSystem.Misc;
|
||||
using Fab2ApprovalSystem.Models;
|
||||
|
||||
namespace Fab2ApprovalSystem.DMO
|
||||
{
|
||||
namespace Fab2ApprovalSystem.DMO;
|
||||
|
||||
public static class EventLogDMO
|
||||
{
|
||||
private static IDbConnection db = new SqlConnection(ConfigurationManager.ConnectionStrings["FabApprovalConnection"].ConnectionString);
|
||||
public static class EventLogDMO {
|
||||
private static readonly IDbConnection db = new SqlConnection(GlobalVars.DB_CONNECTION_STRING);
|
||||
|
||||
//public static void Add(WinEventLog eventLog)
|
||||
//{
|
||||
// var parameters = new DynamicParameters();
|
||||
// parameters.Add("@IssueID", eventLog.IssueID);
|
||||
// parameters.Add("@UserID", eventLog.UserID);
|
||||
// parameters.Add("@OperationType", eventLog.OperationType);
|
||||
// parameters.Add("@Comments", eventLog.Comments);
|
||||
|
||||
// db.Execute("InsertEventLog", parameters, commandType: CommandType.StoredProcedure);
|
||||
|
||||
//}
|
||||
|
||||
|
||||
public static void Add(WinEventLog eventLog)
|
||||
{
|
||||
var parameters = new DynamicParameters();
|
||||
public static void Add(WinEventLog eventLog) {
|
||||
DynamicParameters parameters = new();
|
||||
parameters.Add("@IssueID", eventLog.IssueID);
|
||||
parameters.Add("@UserID", eventLog.UserID);
|
||||
parameters.Add("@DocumentType", eventLog.DocumentType);
|
||||
@ -43,9 +20,6 @@ namespace Fab2ApprovalSystem.DMO
|
||||
parameters.Add("@Comments", eventLog.Comments);
|
||||
|
||||
db.Execute("InsertEventLogByDocument", parameters, commandType: CommandType.StoredProcedure);
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -1,62 +1,48 @@
|
||||
using Fab2ApprovalSystem.Models;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Web;
|
||||
using Dapper;
|
||||
using System.Data;
|
||||
using System.Data.SqlClient;
|
||||
using System.Configuration;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
|
||||
using Dapper;
|
||||
|
||||
using Fab2ApprovalSystem.Misc;
|
||||
using Fab2ApprovalSystem.Models;
|
||||
using Fab2ApprovalSystem.ViewModels;
|
||||
|
||||
namespace Fab2ApprovalSystem.DMO
|
||||
{
|
||||
public class MiscDMO
|
||||
{
|
||||
namespace Fab2ApprovalSystem.DMO;
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <param name="searchText"></param>
|
||||
/// <returns></returns>
|
||||
public static IEnumerable<Lot> SearchLots(string searchText, string searchBy)
|
||||
{
|
||||
IDbConnection db = new SqlConnection(ConfigurationManager.ConnectionStrings["FabApprovalConnection"].ConnectionString);
|
||||
public class MiscDMO {
|
||||
|
||||
public static IEnumerable<Lot> SearchLots(string searchText, string searchBy) {
|
||||
IDbConnection db = new SqlConnection(GlobalVars.DB_CONNECTION_STRING);
|
||||
IEnumerable<Lot> lotList;
|
||||
|
||||
string sql = "";
|
||||
if (GlobalVars.DBConnection.ToUpper() == "TEST" || GlobalVars.DBConnection.ToUpper() == "QUALITY")
|
||||
{
|
||||
if (GlobalVars.DBConnection.ToUpper() == "TEST" || GlobalVars.DBConnection.ToUpper() == "QUALITY") {
|
||||
if (searchBy == GlobalVars.LOT_NO)
|
||||
//sql = "SELECT WP_LOT_NO + '/' + ISNULL(WP_LOT_NO,'') AS LotNumber FROM WP_RECORD_MJ WHERE WP_LOT_NO LIKE '%" + searchText + "%' ";
|
||||
sql = "SELECT WP_LOT_NO + '/' + ISNULL(WP_LOT_NO,'') AS LotNumber FROM SPNLot WHERE WP_LOT_NO LIKE '%" + searchText + "%' ";
|
||||
else if (searchBy == GlobalVars.LOCATION)
|
||||
{
|
||||
else if (searchBy == GlobalVars.LOCATION) {
|
||||
sql = "SELECT WP_LOT_NO + '/' + ISNULL(WP_LOT_NO,'') AS LotNumber FROM SPNLot WHERE WP_CURRENT_LOCATION = '" + searchText.Trim() + "' AND WP_LOT_NO + '/' + ISNULL(WP_LOT_NO,'') IS NOT NULL";
|
||||
}
|
||||
lotList = db.Query<Lot>(sql).ToList();
|
||||
db.Close();
|
||||
}
|
||||
else
|
||||
{
|
||||
} else {
|
||||
if (searchBy == GlobalVars.LOT_NO)
|
||||
sql = "SELECT WP_LOT_NO + '/' + ISNULL(DieLotNumber,'') AS LotNumber FROM SPNLot WHERE WP_LOT_NO LIKE '%" + searchText + "%' OR DieLotNumber LIKE '%" + searchText + "%' ";
|
||||
else if (searchBy == GlobalVars.LOCATION)
|
||||
{
|
||||
else if (searchBy == GlobalVars.LOCATION) {
|
||||
sql = "SELECT WP_LOT_NO + '/' + ISNULL(DieLotNumber,'') AS LotNumber FROM SPNLot WHERE WP_CURRENT_LOCATION = '" + searchText.Trim() + "' AND WP_LOT_NO + '/' + ISNULL(DieLotNumber,'') IS NOT NULL";
|
||||
}
|
||||
lotList = db.Query<Lot>(sql).ToList();
|
||||
db.Close();
|
||||
}
|
||||
|
||||
|
||||
return lotList;
|
||||
}
|
||||
public static IEnumerable<int> GetUserIDsBySubRoleID(int subRoleID)
|
||||
{
|
||||
IDbConnection db = new SqlConnection(ConfigurationManager.ConnectionStrings["FabApprovalConnection"].ConnectionString);
|
||||
|
||||
public static IEnumerable<int> GetUserIDsBySubRoleID(int subRoleID) {
|
||||
IDbConnection db = new SqlConnection(GlobalVars.DB_CONNECTION_STRING);
|
||||
IEnumerable<int> userList;
|
||||
|
||||
string sql = "";
|
||||
@ -66,80 +52,47 @@ namespace Fab2ApprovalSystem.DMO
|
||||
return userList;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <param name="searchText"></param>
|
||||
/// <param name="searchBy"></param>
|
||||
/// <returns></returns>
|
||||
public static IEnumerable<Lot> SearchLTLots(string searchText, string searchBy)
|
||||
{
|
||||
IDbConnection db = new SqlConnection(ConfigurationManager.ConnectionStrings["FabApprovalConnection"].ConnectionString);
|
||||
public static IEnumerable<Lot> SearchLTLots(string searchText, string searchBy) {
|
||||
IDbConnection db = new SqlConnection(GlobalVars.DB_CONNECTION_STRING);
|
||||
string sql = "";
|
||||
|
||||
|
||||
if (searchBy == GlobalVars.LOT_NO)
|
||||
sql = "SELECT DISTINCT WP_LOT_NO AS LotNumber FROM vFAB2SPN_WP_RECORD WP WHERE WP_LOT_NO LIKE '%" + searchText.Trim() + "%' ";
|
||||
else if (searchBy == GlobalVars.LOCATION)
|
||||
{
|
||||
else if (searchBy == GlobalVars.LOCATION) {
|
||||
sql = "SELECT DISTINCT WP_LOT_NO AS LotNumber FROM vFAB2SPN_WP_RECORD WP WHERE WP_CURRENT_LOCATION = '" + searchText.Trim() + "'";
|
||||
}
|
||||
var lotList = db.Query<Lot>(sql).ToList();
|
||||
List<Lot> lotList = db.Query<Lot>(sql).ToList();
|
||||
db.Close();
|
||||
return lotList;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <param name="searchText"></param>
|
||||
/// <returns></returns>
|
||||
public static IEnumerable<WIPPart> SearchLTParts(string searchText)
|
||||
{
|
||||
IDbConnection db = new SqlConnection(ConfigurationManager.ConnectionStrings["FabApprovalConnection"].ConnectionString);
|
||||
StringBuilder sql = new StringBuilder();
|
||||
public static IEnumerable<WIPPart> SearchLTParts(string searchText) {
|
||||
IDbConnection db = new SqlConnection(GlobalVars.DB_CONNECTION_STRING);
|
||||
StringBuilder sql = new();
|
||||
sql.Append("SELECT PartNumber + '~' + SiliconPart + '~' + ProcessFlow + '~' + PartDescription AS WIPPartData ");
|
||||
sql.Append("FROM vWIPPartData WHERE PartNumber LIKE '%" + searchText + "%' ORDER BY PartNumber");
|
||||
|
||||
//StringBuilder sql = new StringBuilder();
|
||||
//sql.Append("SELECT TO_PART AS PartNumber, FROM_PART AS SiliconPart, P.MP_DESCRIPTION AS PartDescirption, ");
|
||||
//sql.Append("RTRIM(LTRIM(SUBSTRING(TO_PART_PROC, PATINDEX('% %', TO_PART_PROC), LEN(TO_PART_PROC)))) AS ProcessFlow ");
|
||||
//sql.Append("FROM TEMIRWAP019.FAB2SPN.dbo.PG_RECORD W ");
|
||||
//sql.Append("INNER JOIN TEMIRWAP019.Fab2SPN.dbo.MP_RECORD P ON W.TO_PART = P.MP_PART_NUMBER ");
|
||||
//sql.Append("WHERE PartNumber LIKE '%" + searchText + "%' ORDER BY PartNumber ");
|
||||
|
||||
|
||||
var parList = db.Query<WIPPart>(sql.ToString()).ToList();
|
||||
List<WIPPart> parList = db.Query<WIPPart>(sql.ToString()).ToList();
|
||||
db.Close();
|
||||
return parList;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <param name="lot"></param>
|
||||
public static void GetLotInformation(Lot lot)
|
||||
{
|
||||
IDbConnection db = new SqlConnection(ConfigurationManager.ConnectionStrings["FabApprovalConnection"].ConnectionString);
|
||||
//IDbConnection db = new SqlConnection(ConfigurationManager.ConnectionStrings["FabApprovalConnectionProd"].ConnectionString);
|
||||
StringBuilder qryLotInfo = new StringBuilder();
|
||||
public static void GetLotInformation(Lot lot) {
|
||||
IDbConnection db = new SqlConnection(GlobalVars.DB_CONNECTION_STRING);
|
||||
StringBuilder qryLotInfo = new();
|
||||
qryLotInfo.Append("SELECT WP_STATUS , WP_LOT_NO, WP_PART_NUMBER, MP_PRODUCT_FAMILY, MP_DESCRIPTION, ");
|
||||
qryLotInfo.Append("WP_CURRENT_QTY, WP_CURRENT_LOCATION, DieLotNumber, DiePartNo, DieCount, MP_QUALITY_CODE FROM SPNLot ");
|
||||
qryLotInfo.Append("WHERE WP_Lot_No = @LotNumber ");
|
||||
|
||||
//var tempLotNumber = lot.LotNumber.Substring(0, 9);
|
||||
var tempLotNumber = "";
|
||||
if (lot.LotNumber.IndexOf('/') >= 0)
|
||||
{
|
||||
if (lot.LotNumber.IndexOf('/') >= 0) {
|
||||
tempLotNumber = lot.LotNumber.Substring(0, lot.LotNumber.IndexOf('/'));
|
||||
}
|
||||
else
|
||||
} else
|
||||
tempLotNumber = lot.LotNumber;
|
||||
|
||||
lot.LotNumber = tempLotNumber;
|
||||
var lotInfoRow = db.Query<dynamic>(qryLotInfo.ToString(), new { LotNumber = tempLotNumber }).ToList();
|
||||
foreach (dynamic lotInfoColumn in lotInfoRow)
|
||||
{
|
||||
List<dynamic> lotInfoRow = db.Query<dynamic>(qryLotInfo.ToString(), new { LotNumber = tempLotNumber }).ToList();
|
||||
foreach (dynamic lotInfoColumn in lotInfoRow) {
|
||||
lot.LotNumber = lotInfoColumn.WP_LOT_NO;
|
||||
if (lot.DieLotNumber == null || lot.DieLotNumber == "")
|
||||
lot.DieLotNumber = lotInfoColumn.DieLotNumber;
|
||||
@ -147,8 +100,7 @@ namespace Fab2ApprovalSystem.DMO
|
||||
if (lotInfoColumn.WP_PART_NUMBER != null)
|
||||
lot.WipPartNo = lotInfoColumn.WP_PART_NUMBER.Trim();
|
||||
|
||||
if (lotInfoColumn.WP_CURRENT_LOCATION != null)
|
||||
{
|
||||
if (lotInfoColumn.WP_CURRENT_LOCATION != null) {
|
||||
// The data is returned from a view which is a combination from various sources and at times when the
|
||||
// Lot is at the QDB location, which is extracted out of SAP, it also shows up at the 6600 location in SPN.
|
||||
// There is a duplication.
|
||||
@ -159,36 +111,25 @@ namespace Fab2ApprovalSystem.DMO
|
||||
lot.Location = lotInfoColumn.WP_CURRENT_LOCATION;
|
||||
}
|
||||
|
||||
|
||||
if (lotInfoColumn.MP_DESCRIPTION != null)
|
||||
{
|
||||
if (lotInfoColumn.MP_DESCRIPTION != null) {
|
||||
lot.Description = lotInfoColumn.MP_DESCRIPTION;
|
||||
if (lot.Description.Length > 0)
|
||||
{
|
||||
if (lot.Description.Length > 0) {
|
||||
string[] temp = lot.Description.Split(new char[] { ',' });
|
||||
if (temp.Length > 0)
|
||||
{
|
||||
try
|
||||
{
|
||||
if (temp.Length > 0) {
|
||||
try {
|
||||
lot.ProductFamily = temp[0];
|
||||
}
|
||||
catch { } // ignore the error
|
||||
} catch { } // ignore the error
|
||||
|
||||
try
|
||||
{
|
||||
//lot.Gen = double.Parse(temp[2].Substring(1, temp[2].Length - 1));
|
||||
try {
|
||||
if (lot.Description.StartsWith("MA,"))
|
||||
lot.Gen = temp[2];
|
||||
else
|
||||
lot.Gen = temp[2].Substring(1, temp[2].Length - 1);
|
||||
}
|
||||
catch { }// ignore the error
|
||||
try
|
||||
{
|
||||
} catch { }// ignore the error
|
||||
try {
|
||||
// lot.Hexsize = double.Parse(temp[6]);
|
||||
lot.Hexsize = temp[6];
|
||||
}
|
||||
catch { }// ignore the error
|
||||
} catch { }// ignore the error
|
||||
|
||||
}
|
||||
}
|
||||
@ -197,30 +138,24 @@ namespace Fab2ApprovalSystem.DMO
|
||||
if (lotInfoColumn.WP_STATUS != null)
|
||||
lot.Status = lotInfoColumn.WP_STATUS;
|
||||
|
||||
|
||||
|
||||
if (lotInfoColumn.DiePartNo != null)
|
||||
lot.DiePartNo = lotInfoColumn.DiePartNo.Trim();
|
||||
|
||||
if (lotInfoColumn.WP_CURRENT_QTY != null)
|
||||
lot.WaferCount = lotInfoColumn.WP_CURRENT_QTY;
|
||||
|
||||
if (lot.WipPartNo.Length > 0 || lot.DiePartNo.Length > 0)
|
||||
{
|
||||
if (lot.WipPartNo.Length > 0 || lot.DiePartNo.Length > 0) {
|
||||
qryLotInfo.Clear();
|
||||
qryLotInfo.Append("SELECT DiePartNo, SourceFAB, Diameter, Silicon, Gen, Layers,HexSize,Voltage,Channel, Type AS ProductFamily, ");
|
||||
qryLotInfo.Append("WaferCost, DieCost FROM StdCost WHERE WIPWaferNo = @WIPPartNo OR DiePartNo = @DiePartNo ");
|
||||
var moreLotInfoRow = db.Query<dynamic>(qryLotInfo.ToString(), new { WIPPartNo = lot.WipPartNo, DiePartNo = lot.DiePartNo }).ToList();
|
||||
List<dynamic> moreLotInfoRow = db.Query<dynamic>(qryLotInfo.ToString(), new { WIPPartNo = lot.WipPartNo, DiePartNo = lot.DiePartNo }).ToList();
|
||||
|
||||
foreach (var moreLotInfoColumn in moreLotInfoRow)
|
||||
{
|
||||
foreach (var moreLotInfoColumn in moreLotInfoRow) {
|
||||
if (lotInfoColumn.DieCount != null && lotInfoColumn.DieCount != 0)
|
||||
lot.DieCount = int.Parse(lotInfoColumn.DieCount.ToString());
|
||||
lot.DieCost = double.Parse(moreLotInfoColumn.DieCost.ToString());
|
||||
lot.WaferCost = double.Parse(moreLotInfoColumn.WaferCost.ToString());
|
||||
|
||||
|
||||
|
||||
if (moreLotInfoColumn.Channel != null)
|
||||
lot.Channel = moreLotInfoColumn.Channel;
|
||||
|
||||
@ -230,7 +165,6 @@ namespace Fab2ApprovalSystem.DMO
|
||||
if (moreLotInfoColumn.Voltage != null)
|
||||
lot.Voltage = moreLotInfoColumn.Voltage;
|
||||
|
||||
|
||||
if (lot.DieCount > 0)
|
||||
lot.TotalCost = Math.Round(lot.DieCount * lot.DieCost, 2);
|
||||
else if (lot.WaferCount > 0)
|
||||
@ -240,8 +174,6 @@ namespace Fab2ApprovalSystem.DMO
|
||||
}
|
||||
|
||||
// added this code if the data shows up at the 6600 location and also at QDB for a lot.
|
||||
//if (lot.DieCost > 0)
|
||||
// lot.Location = "QDB";
|
||||
|
||||
if (lotInfoColumn.MP_QUALITY_CODE != null)
|
||||
lot.QualityCode = lotInfoColumn.MP_QUALITY_CODE.Trim();
|
||||
@ -249,20 +181,12 @@ namespace Fab2ApprovalSystem.DMO
|
||||
}
|
||||
|
||||
db.Close();
|
||||
//return lotStatusOption;
|
||||
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// /
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
public static IEnumerable<UserProfile> GetUserList()
|
||||
{
|
||||
public static IEnumerable<UserProfile> GetUserList() {
|
||||
IDbConnection db = new SqlConnection(GlobalVars.DB_CONNECTION_STRING);
|
||||
|
||||
IDbConnection db = new SqlConnection(ConfigurationManager.ConnectionStrings["FabApprovalConnection"].ConnectionString);
|
||||
|
||||
StringBuilder sql = new StringBuilder();
|
||||
StringBuilder sql = new();
|
||||
sql.Append("SELECT FirstName + ' ' + LastName AS FullName, U.UserID AS UserId ");
|
||||
sql.Append("FROM Users U ");
|
||||
sql.Append("ORDER BY FirstName");
|
||||
@ -270,56 +194,32 @@ namespace Fab2ApprovalSystem.DMO
|
||||
return db.Query<UserProfile>(sql.ToString()).ToList();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <param name="issueID"></param>
|
||||
/// <param name="step"></param>
|
||||
/// <param name="documentType"></param>
|
||||
/// <returns></returns>
|
||||
public static List<string> GetApproverEmailListByDocument(int issueID, byte step, int documentType)
|
||||
{
|
||||
IDbConnection db = new SqlConnection(ConfigurationManager.ConnectionStrings["FabApprovalConnection"].ConnectionString);
|
||||
public static List<string> GetApproverEmailListByDocument(int issueID, byte step, int documentType) {
|
||||
IDbConnection db = new SqlConnection(GlobalVars.DB_CONNECTION_STRING);
|
||||
|
||||
var parameters = new DynamicParameters();
|
||||
DynamicParameters parameters = new();
|
||||
parameters.Add("@DocumentTypeID", documentType);
|
||||
parameters.Add("@IssueID", issueID);
|
||||
parameters.Add("@Step", step);
|
||||
var emailList = db.Query<string>("GetApproverEmailListByDocument", parameters, commandType: CommandType.StoredProcedure).ToList();
|
||||
List<string> emailList = db.Query<string>("GetApproverEmailListByDocument", parameters, commandType: CommandType.StoredProcedure).ToList();
|
||||
return emailList;
|
||||
|
||||
}
|
||||
|
||||
public static List<ApproversListViewModel> GetApproversListByDocument(int issueID, byte step, int documentType) {
|
||||
IDbConnection db = new SqlConnection(GlobalVars.DB_CONNECTION_STRING);
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <param name="issueID"></param>
|
||||
/// <param name="step"></param>
|
||||
/// <param name="documentType"></param>
|
||||
/// <returns></returns>
|
||||
public static List<ApproversListViewModel> GetApproversListByDocument(int issueID, byte step, int documentType)
|
||||
{
|
||||
|
||||
IDbConnection db = new SqlConnection(ConfigurationManager.ConnectionStrings["FabApprovalConnection"].ConnectionString);
|
||||
|
||||
var parameters = new DynamicParameters();
|
||||
DynamicParameters parameters = new();
|
||||
parameters.Add("@DocumentTypeID", documentType);
|
||||
parameters.Add("@IssueID", issueID);
|
||||
parameters.Add("@Step", step);
|
||||
var approverList = db.Query<ApproversListViewModel>("GetApproversListByDocument", parameters, commandType: CommandType.StoredProcedure).ToList();
|
||||
List<ApproversListViewModel> approverList = db.Query<ApproversListViewModel>("GetApproversListByDocument", parameters, commandType: CommandType.StoredProcedure).ToList();
|
||||
return approverList;
|
||||
}
|
||||
|
||||
public static IEnumerable<ApprovalModel> GetApprovalsByDocument(int issueID, int documentType)
|
||||
{
|
||||
IDbConnection db = new SqlConnection(ConfigurationManager.ConnectionStrings["FabApprovalConnection"].ConnectionString);
|
||||
public static IEnumerable<ApprovalModel> GetApprovalsByDocument(int issueID, int documentType) {
|
||||
IDbConnection db = new SqlConnection(GlobalVars.DB_CONNECTION_STRING);
|
||||
|
||||
var parameters = new DynamicParameters();
|
||||
DynamicParameters parameters = new();
|
||||
parameters.Add("@DocumentTypeID", documentType);
|
||||
parameters.Add("@IssueID", issueID);
|
||||
var approvalList = db.Query<ApprovalModel>(
|
||||
@ -330,149 +230,81 @@ namespace Fab2ApprovalSystem.DMO
|
||||
/// <summary>
|
||||
/// NOT IN USE YET
|
||||
/// </summary>
|
||||
/// <param name="issueID"></param>
|
||||
/// <param name="currentStep"></param>
|
||||
/// <param name="documentType"></param>
|
||||
/// <returns></returns>
|
||||
public static IEnumerable<LoginModel> GetApprovedApproversListByDocument(int issueID, int currentStep, int documentType)
|
||||
{
|
||||
IDbConnection db = new SqlConnection(ConfigurationManager.ConnectionStrings["FabApprovalConnection"].ConnectionString);
|
||||
return db.Query<LoginModel>("GetApprovedApproversListByDocument", new { @DocumentTypeID = documentType, @IssueID = issueID, @Step = currentStep }, commandType: CommandType.StoredProcedure).ToList();
|
||||
|
||||
public static IEnumerable<LoginModel> GetApprovedApproversListByDocument(int issueID, int currentStep, int documentType) {
|
||||
IDbConnection db = new SqlConnection(GlobalVars.DB_CONNECTION_STRING);
|
||||
return db.Query<LoginModel>("GetApprovedApproversListByDocument", new { @DocumentTypeID = documentType, @IssueID = issueID, @Step = currentStep }, commandType: CommandType.StoredProcedure).ToList();
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <param name="issueID"></param>
|
||||
/// <param name="step"></param>
|
||||
/// <param name="documentType"></param>
|
||||
/// <returns></returns>
|
||||
public static List<ApproversListViewModel> GetPendingApproversListByDocument(int issueID, byte step, int documentType)
|
||||
{
|
||||
IDbConnection db = new SqlConnection(ConfigurationManager.ConnectionStrings["FabApprovalConnection"].ConnectionString);
|
||||
var parameters = new DynamicParameters();
|
||||
public static List<ApproversListViewModel> GetPendingApproversListByDocument(int issueID, byte step, int documentType) {
|
||||
IDbConnection db = new SqlConnection(GlobalVars.DB_CONNECTION_STRING);
|
||||
DynamicParameters parameters = new();
|
||||
parameters.Add("@DocumentTypeID", documentType);
|
||||
parameters.Add("@IssueID", issueID);
|
||||
parameters.Add("@Step", step);
|
||||
var approverList = db.Query<ApproversListViewModel>("GetPendingApproversListByDocument", parameters, commandType: CommandType.StoredProcedure).ToList();
|
||||
List<ApproversListViewModel> approverList = db.Query<ApproversListViewModel>("GetPendingApproversListByDocument", parameters, commandType: CommandType.StoredProcedure).ToList();
|
||||
return approverList;
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <param name="ecnNumber"></param>
|
||||
/// <returns></returns>
|
||||
public static List<string> GetEmergencyTECNApprovalNotifyList(int ecnNumber)
|
||||
{
|
||||
IDbConnection db = new SqlConnection(ConfigurationManager.ConnectionStrings["FabApprovalConnection"].ConnectionString);
|
||||
var parameters = new DynamicParameters();
|
||||
public static List<string> GetEmergencyTECNApprovalNotifyList(int ecnNumber) {
|
||||
IDbConnection db = new SqlConnection(GlobalVars.DB_CONNECTION_STRING);
|
||||
DynamicParameters parameters = new();
|
||||
parameters.Add("@ECNNumber", ecnNumber);
|
||||
var approverList = db.Query<string>("ECNGetETECNApprovalNotificationList", parameters, commandType: CommandType.StoredProcedure).ToList();
|
||||
List<string> approverList = db.Query<string>("ECNGetETECNApprovalNotificationList", parameters, commandType: CommandType.StoredProcedure).ToList();
|
||||
return approverList;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <param name="ecnNumber"></param>
|
||||
/// <returns></returns>
|
||||
public static List<string> GetTECNCancelledApprovalNotifyList(int ecnNumber)
|
||||
{
|
||||
IDbConnection db = new SqlConnection(ConfigurationManager.ConnectionStrings["FabApprovalConnection"].ConnectionString);
|
||||
var parameters = new DynamicParameters();
|
||||
public static List<string> GetTECNCancelledApprovalNotifyList(int ecnNumber) {
|
||||
IDbConnection db = new SqlConnection(GlobalVars.DB_CONNECTION_STRING);
|
||||
DynamicParameters parameters = new();
|
||||
parameters.Add("@ECNNumber", ecnNumber);
|
||||
var approverList = db.Query<string>("ECN_TECNCancelledApprovalNotifyList", parameters, commandType: CommandType.StoredProcedure).ToList();
|
||||
List<string> approverList = db.Query<string>("ECN_TECNCancelledApprovalNotifyList", parameters, commandType: CommandType.StoredProcedure).ToList();
|
||||
return approverList;
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <param name="workRequestID"></param>
|
||||
/// <returns></returns>
|
||||
public static List<string> GetFabGroupNotifyList(int workRequestID)
|
||||
{
|
||||
IDbConnection db = new SqlConnection(ConfigurationManager.ConnectionStrings["FabApprovalConnection"].ConnectionString);
|
||||
var parameters = new DynamicParameters();
|
||||
public static List<string> GetFabGroupNotifyList(int workRequestID) {
|
||||
IDbConnection db = new SqlConnection(GlobalVars.DB_CONNECTION_STRING);
|
||||
DynamicParameters parameters = new();
|
||||
parameters.Add("@WorkRequestID", workRequestID);
|
||||
var notifyList = db.Query<string>("LTFabGroupApprovalNotificationList", parameters, commandType: CommandType.StoredProcedure).ToList();
|
||||
List<string> notifyList = db.Query<string>("LTFabGroupApprovalNotificationList", parameters, commandType: CommandType.StoredProcedure).ToList();
|
||||
return notifyList;
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <param name="workRequestID"></param>
|
||||
/// <returns></returns>
|
||||
public static List<string> GetWorkRequestRevisionNotifyList(int notificationType, int workRequestID, int userID)
|
||||
{
|
||||
IDbConnection db = new SqlConnection(ConfigurationManager.ConnectionStrings["FabApprovalConnection"].ConnectionString);
|
||||
var parameters = new DynamicParameters();
|
||||
public static List<string> GetWorkRequestRevisionNotifyList(int notificationType, int workRequestID, int userID) {
|
||||
IDbConnection db = new SqlConnection(GlobalVars.DB_CONNECTION_STRING);
|
||||
DynamicParameters parameters = new();
|
||||
parameters.Add("@NotificationType", notificationType);
|
||||
parameters.Add("@UserID", userID);
|
||||
parameters.Add("@WorkRequestID", workRequestID);
|
||||
var notifyList = db.Query<string>("LTGetWorkRequestRevisionNotifyList", parameters, commandType: CommandType.StoredProcedure).ToList();
|
||||
List<string> notifyList = db.Query<string>("LTGetWorkRequestRevisionNotifyList", parameters, commandType: CommandType.StoredProcedure).ToList();
|
||||
return notifyList;
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <param name="notificationType"></param>
|
||||
/// <param name="workRequestID"></param>
|
||||
/// <param name="userID"></param>
|
||||
/// <returns></returns>
|
||||
public static List<string> GetWorkRequestApprovedNotifyList(int notificationType, int workRequestID, int userID)
|
||||
{
|
||||
IDbConnection db = new SqlConnection(ConfigurationManager.ConnectionStrings["FabApprovalConnection"].ConnectionString);
|
||||
var parameters = new DynamicParameters();
|
||||
public static List<string> GetWorkRequestApprovedNotifyList(int notificationType, int workRequestID, int userID) {
|
||||
IDbConnection db = new SqlConnection(GlobalVars.DB_CONNECTION_STRING);
|
||||
DynamicParameters parameters = new();
|
||||
parameters.Add("@NotificationType", notificationType);
|
||||
parameters.Add("@UserID", userID);
|
||||
parameters.Add("@WorkRequestID", workRequestID);
|
||||
var notifyList = db.Query<string>("LTGetWorkRequestApprovedNotifyList", parameters, commandType: CommandType.StoredProcedure).ToList();
|
||||
List<string> notifyList = db.Query<string>("LTGetWorkRequestApprovedNotifyList", parameters, commandType: CommandType.StoredProcedure).ToList();
|
||||
return notifyList;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <param name="notificationType"></param>
|
||||
/// <param name="workRequestID"></param>
|
||||
/// <param name="userID"></param>
|
||||
/// <returns></returns>
|
||||
public static List<string> GetLotTravelerCreationAndRevisionNotifyList(int ltLotID, int workRequestID, int userID)
|
||||
{
|
||||
IDbConnection db = new SqlConnection(ConfigurationManager.ConnectionStrings["FabApprovalConnection"].ConnectionString);
|
||||
var parameters = new DynamicParameters();
|
||||
public static List<string> GetLotTravelerCreationAndRevisionNotifyList(int ltLotID, int workRequestID, int userID) {
|
||||
IDbConnection db = new SqlConnection(GlobalVars.DB_CONNECTION_STRING);
|
||||
DynamicParameters parameters = new();
|
||||
parameters.Add("@LotID", ltLotID);
|
||||
parameters.Add("@UserID", userID);
|
||||
parameters.Add("@WorkRequestID", workRequestID);
|
||||
var notifyList = db.Query<string>("LTGetLotTravelerCreationAndRevisionNotifyList", parameters, commandType: CommandType.StoredProcedure).ToList();
|
||||
List<string> notifyList = db.Query<string>("LTGetLotTravelerCreationAndRevisionNotifyList", parameters, commandType: CommandType.StoredProcedure).ToList();
|
||||
return notifyList;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <param name="oooUserID"></param>
|
||||
/// <param name="delegatedTo"></param>
|
||||
/// <param name="startDate"></param>
|
||||
/// <param name="endDate"></param>
|
||||
public static int EnableOOOStatus(int oooUserID, int delegatedTo, DateTime startDate, DateTime endDate)
|
||||
{
|
||||
public static int EnableOOOStatus(int oooUserID, int delegatedTo, DateTime startDate, DateTime endDate) {
|
||||
int returnValue = 0;
|
||||
IDbConnection db = new SqlConnection(ConfigurationManager.ConnectionStrings["FabApprovalConnection"].ConnectionString);
|
||||
IDbConnection db = new SqlConnection(GlobalVars.DB_CONNECTION_STRING);
|
||||
|
||||
var parameters = new DynamicParameters();
|
||||
DynamicParameters parameters = new();
|
||||
parameters.Add("@OOOUserID", oooUserID);
|
||||
parameters.Add("@DelegatedTo", delegatedTo);
|
||||
parameters.Add("@OOOStartDate", startDate);
|
||||
@ -484,69 +316,32 @@ namespace Fab2ApprovalSystem.DMO
|
||||
returnValue = parameters.Get<int>("@ReturnValue");
|
||||
|
||||
return returnValue;
|
||||
|
||||
|
||||
}
|
||||
|
||||
public static void ExpireOOOStatus(int oooUserID) {
|
||||
IDbConnection db = new SqlConnection(GlobalVars.DB_CONNECTION_STRING);
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <param name="oooUserID"></param>
|
||||
/// <param name="delegatedTo"></param>
|
||||
/// <param name="startDate"></param>
|
||||
/// <param name="endDate"></param>
|
||||
public static void ExpireOOOStatus(int oooUserID)
|
||||
{
|
||||
IDbConnection db = new SqlConnection(ConfigurationManager.ConnectionStrings["FabApprovalConnection"].ConnectionString);
|
||||
|
||||
var parameters = new DynamicParameters();
|
||||
DynamicParameters parameters = new();
|
||||
parameters.Add("@OOOUserID", oooUserID);
|
||||
var approverList = db.Execute("ExpireOOOStatus", parameters, commandType: CommandType.StoredProcedure);
|
||||
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
public static List<Department> GetDepartments()
|
||||
{
|
||||
IDbConnection db = new SqlConnection(ConfigurationManager.ConnectionStrings["FabApprovalConnection"].ConnectionString);
|
||||
var departments = db.Query<Department>("GetDepartments", null, commandType: CommandType.StoredProcedure).ToList();
|
||||
public static List<Department> GetDepartments() {
|
||||
IDbConnection db = new SqlConnection(GlobalVars.DB_CONNECTION_STRING);
|
||||
List<Department> departments = db.Query<Department>("GetDepartments", null, commandType: CommandType.StoredProcedure).ToList();
|
||||
return departments;
|
||||
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
public static List<AffectedModule> GetModules()
|
||||
{
|
||||
IDbConnection db = new SqlConnection(ConfigurationManager.ConnectionStrings["FabApprovalConnection"].ConnectionString);
|
||||
public static List<AffectedModule> GetModules() {
|
||||
IDbConnection db = new SqlConnection(GlobalVars.DB_CONNECTION_STRING);
|
||||
|
||||
var modules = db.Query<AffectedModule>("GetModules", null, commandType: CommandType.StoredProcedure).ToList();
|
||||
List<AffectedModule> modules = db.Query<AffectedModule>("GetModules", null, commandType: CommandType.StoredProcedure).ToList();
|
||||
return modules;
|
||||
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <param name="lot"></param>
|
||||
public static void GetLTLotInformation(LTLot lot)
|
||||
{
|
||||
IDbConnection db = new SqlConnection(ConfigurationManager.ConnectionStrings["FabApprovalConnection"].ConnectionString);
|
||||
StringBuilder qryLotInfo = new StringBuilder();
|
||||
//qryLotInfo.Append("SELECT DISTINCT ");
|
||||
//qryLotInfo.Append("WP_LOT_NO, WP_CURRENT_QTY, WP.WP_PART_NUMBER, MP_DESCRIPTION, WP_PROCESS, WO_LOCATION, WO_OPER_NO, WP_STATUS ");
|
||||
//qryLotInfo.Append("FROM TEMIRWAP019.FAB2SPN.dbo.WO_RECORD WO ");
|
||||
//qryLotInfo.Append("INNER JOIN TEMIRWAP019.FAB2SPN.dbo.WP_RECORD WP ");
|
||||
//qryLotInfo.Append("ON WO.WO_LOT_NO = WP.WP_LOT_NO AND WO.InTime = (SELECT MAX(InTime) FROM TEMIRWAP019.FAB2SPN.dbo.WO_RECORD WHERE WO_LOT_NO = @LotNumber) ");
|
||||
//qryLotInfo.Append("LEFT JOIN TEMIRWAP019.FAB2SPN.dbo.MP_RECORD MP ");
|
||||
//qryLotInfo.Append("ON WP.WP_PART_NUMBER = MP.MP_PART_NUMBER ");
|
||||
//qryLotInfo.Append("WHERE WO_LOT_NO = @LotNumber ");
|
||||
public static void GetLTLotInformation(LTLot lot) {
|
||||
IDbConnection db = new SqlConnection(GlobalVars.DB_CONNECTION_STRING);
|
||||
StringBuilder qryLotInfo = new();
|
||||
|
||||
qryLotInfo.Append("SELECT DISTINCT ");
|
||||
qryLotInfo.Append("WP_LOT_NO, WP_CURRENT_QTY, WP.WP_PART_NUMBER, MP_DESCRIPTION, WP_PROCESS, WP_CURRENT_LOCATION, WP_OPER_NO, WP_STATUS ");
|
||||
@ -555,22 +350,17 @@ namespace Fab2ApprovalSystem.DMO
|
||||
qryLotInfo.Append("ON WP.WP_PART_NUMBER = MP.MP_PART_NUMBER ");
|
||||
qryLotInfo.Append("WHERE WP_LOT_NO = @LotNumber ");
|
||||
|
||||
//var tempLotNumber = lot.LotNumber.Substring(0, 9);
|
||||
|
||||
var tempLotNumber = "";
|
||||
if (lot.LotNumber.IndexOf('/') >= 0)
|
||||
{
|
||||
if (lot.LotNumber.IndexOf('/') >= 0) {
|
||||
tempLotNumber = lot.LotNumber.Substring(0, lot.LotNumber.IndexOf('/'));
|
||||
}
|
||||
else
|
||||
} else
|
||||
tempLotNumber = lot.LotNumber;
|
||||
|
||||
lot.LotNumber = tempLotNumber;
|
||||
|
||||
lot.LotNumber = tempLotNumber;
|
||||
var lotInfoRow = db.Query<dynamic>(qryLotInfo.ToString(), new { LotNumber = tempLotNumber }).ToList();
|
||||
foreach (dynamic lotInfoColumn in lotInfoRow)
|
||||
{
|
||||
List<dynamic> lotInfoRow = db.Query<dynamic>(qryLotInfo.ToString(), new { LotNumber = tempLotNumber }).ToList();
|
||||
foreach (dynamic lotInfoColumn in lotInfoRow) {
|
||||
lot.WIPPartNumber = lotInfoColumn.WP_PART_NUMBER;
|
||||
lot.WaferQty = lotInfoColumn.WP_CURRENT_QTY;
|
||||
lot.PartDescription = lotInfoColumn.MP_DESCRIPTION;
|
||||
@ -582,64 +372,45 @@ namespace Fab2ApprovalSystem.DMO
|
||||
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <param name="userID"></param>
|
||||
/// <returns></returns>
|
||||
public static string GetEmail(int? userID)
|
||||
{
|
||||
|
||||
IDbConnection db = new SqlConnection(ConfigurationManager.ConnectionStrings["FabApprovalConnection"].ConnectionString);
|
||||
var parameters = new DynamicParameters();
|
||||
public static string GetEmail(int? userID) {
|
||||
IDbConnection db = new SqlConnection(GlobalVars.DB_CONNECTION_STRING);
|
||||
DynamicParameters parameters = new();
|
||||
parameters.Add("@UserID", userID);
|
||||
var email = db.Query<string>("GetEmail", parameters, commandType: CommandType.StoredProcedure).Single();
|
||||
return email;
|
||||
}
|
||||
|
||||
public static List<string> Get8DEmailListForClosureNotification(int issueID) {
|
||||
IDbConnection db = new SqlConnection(GlobalVars.DB_CONNECTION_STRING);
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <param name="issueID"></param>
|
||||
/// <returns></returns>
|
||||
public static List<string> Get8DEmailListForClosureNotification(int issueID)
|
||||
{
|
||||
IDbConnection db = new SqlConnection(ConfigurationManager.ConnectionStrings["FabApprovalConnection"].ConnectionString);
|
||||
|
||||
var parameters = new DynamicParameters();
|
||||
DynamicParameters parameters = new();
|
||||
|
||||
parameters.Add("@DocID", issueID);
|
||||
var emailList = db.Query<string>("_8DGetEmailListClosureNotification", parameters, commandType: CommandType.StoredProcedure).ToList();
|
||||
List<string> emailList = db.Query<string>("_8DGetEmailListClosureNotification", parameters, commandType: CommandType.StoredProcedure).ToList();
|
||||
return emailList;
|
||||
|
||||
}
|
||||
|
||||
public static CredentialsStorage GetCredentialsInfo(string serverName, string credentialType) // TODO - need to use an enum for the credentialType
|
||||
{
|
||||
IDbConnection db = new SqlConnection(ConfigurationManager.ConnectionStrings["FabApprovalConnection"].ConnectionString);
|
||||
var parameters = new DynamicParameters();
|
||||
IDbConnection db = new SqlConnection(GlobalVars.DB_CONNECTION_STRING);
|
||||
DynamicParameters parameters = new();
|
||||
parameters.Add("@ServerName", serverName);
|
||||
parameters.Add("@CredentialType", credentialType);
|
||||
var data = db.Query<CredentialsStorage>("GetCredentialsInfo", param: parameters, commandType: CommandType.StoredProcedure).Single();
|
||||
return data;
|
||||
}
|
||||
|
||||
public List<ApproveListModel> GetApprovalReminderList()
|
||||
{
|
||||
IDbConnection db = new SqlConnection(ConfigurationManager.ConnectionStrings["FabApprovalConnection"].ConnectionString);
|
||||
var approvals = db.Query<ApproveListModel>("GetApprovalForNotifcation", null, commandType: CommandType.StoredProcedure).ToList();
|
||||
public List<ApproveListModel> GetApprovalReminderList() {
|
||||
IDbConnection db = new SqlConnection(GlobalVars.DB_CONNECTION_STRING);
|
||||
List<ApproveListModel> approvals = db.Query<ApproveListModel>("GetApprovalForNotifcation", null, commandType: CommandType.StoredProcedure).ToList();
|
||||
return approvals;
|
||||
}
|
||||
public void UpdateApprovalNotifyDate(int approvalId)
|
||||
{
|
||||
IDbConnection db = new SqlConnection(ConfigurationManager.ConnectionStrings["FabApprovalConnection"].ConnectionString);
|
||||
var parameters = new DynamicParameters();
|
||||
|
||||
public void UpdateApprovalNotifyDate(int approvalId) {
|
||||
IDbConnection db = new SqlConnection(GlobalVars.DB_CONNECTION_STRING);
|
||||
DynamicParameters parameters = new();
|
||||
parameters.Add("@ApprovalId", approvalId);
|
||||
db.Query<CredentialsStorage>("UpdateApprovalLastNotifyDate", param: parameters, commandType: CommandType.StoredProcedure).Single();
|
||||
//return data;
|
||||
}
|
||||
//================================================================== End of Class
|
||||
}
|
||||
|
||||
}
|
@ -1,63 +1,54 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Configuration;
|
||||
using System.Data;
|
||||
using System.Data.SqlClient;
|
||||
using System.Linq;
|
||||
using System.Web;
|
||||
using Fab2ApprovalSystem.Models;
|
||||
|
||||
using Dapper;
|
||||
using System.Transactions;
|
||||
|
||||
using Fab2ApprovalSystem.Misc;
|
||||
using Fab2ApprovalSystem.Models;
|
||||
|
||||
namespace Fab2ApprovalSystem.DMO
|
||||
{
|
||||
public class PartsRequestDMO
|
||||
{
|
||||
private IDbConnection db = new SqlConnection(ConfigurationManager.ConnectionStrings["FabApprovalConnection"].ConnectionString);
|
||||
namespace Fab2ApprovalSystem.DMO;
|
||||
|
||||
WorkflowDMO wfDMO = new WorkflowDMO();
|
||||
public class PartsRequestDMO {
|
||||
|
||||
public IEnumerable<PartsRequestList> GetPartsRequestList()
|
||||
{
|
||||
var r = this.db.Query<PartsRequestList>("PartsRequestGetList", commandType: CommandType.StoredProcedure).ToList();
|
||||
private readonly IDbConnection db = new SqlConnection(GlobalVars.DB_CONNECTION_STRING);
|
||||
|
||||
public IEnumerable<PartsRequestList> GetPartsRequestList() {
|
||||
List<PartsRequestList> r = db.Query<PartsRequestList>("PartsRequestGetList", commandType: CommandType.StoredProcedure).ToList();
|
||||
return r;
|
||||
}
|
||||
|
||||
public void Insert(PartsRequest pr)
|
||||
{
|
||||
var parameters = new DynamicParameters();
|
||||
public void Insert(PartsRequest pr) {
|
||||
DynamicParameters parameters = new();
|
||||
parameters.Add("@PRNumber", value: pr.PRNumber, dbType: DbType.Int32, direction: ParameterDirection.InputOutput);
|
||||
parameters.Add("@OriginatorID", pr.OriginatorID);
|
||||
|
||||
this.db.Execute("PartsRequestInsert", parameters, commandType: CommandType.StoredProcedure);
|
||||
db.Execute("PartsRequestInsert", parameters, commandType: CommandType.StoredProcedure);
|
||||
|
||||
pr.PRNumber = parameters.Get<int>("@PRNumber");
|
||||
}
|
||||
|
||||
public void Update(PartsRequest pr)
|
||||
{
|
||||
var parameters = new DynamicParameters();
|
||||
public void Update(PartsRequest pr) {
|
||||
DynamicParameters parameters = new();
|
||||
parameters.Add("@PRNumber", pr.PRNumber);
|
||||
parameters.Add("@Title", pr.Title);
|
||||
parameters.Add("@RequestorID", pr.RequestorID);
|
||||
parameters.Add("@TechLeadID", pr.TechLeadID);
|
||||
parameters.Add("@Description", pr.Description);
|
||||
|
||||
this.db.Execute("PartsRequestUpdate", parameters, commandType: CommandType.StoredProcedure);
|
||||
db.Execute("PartsRequestUpdate", parameters, commandType: CommandType.StoredProcedure);
|
||||
}
|
||||
|
||||
public PartsRequest Get(int PRNumber)
|
||||
{
|
||||
var parameters = new DynamicParameters();
|
||||
public PartsRequest Get(int PRNumber) {
|
||||
DynamicParameters parameters = new();
|
||||
parameters.Add("@PRNumber", value: PRNumber, dbType: DbType.Int32);
|
||||
|
||||
return this.db.Query<PartsRequest>("PartsRequestGet", parameters, commandType: CommandType.StoredProcedure).SingleOrDefault();
|
||||
return db.Query<PartsRequest>("PartsRequestGet", parameters, commandType: CommandType.StoredProcedure).SingleOrDefault();
|
||||
}
|
||||
|
||||
public IEnumerable<PartsRequestAttachmentList> GetAttachments(int prNumber)
|
||||
{
|
||||
var attachments = this.db.Query<PartsRequestAttachmentList>(
|
||||
public IEnumerable<PartsRequestAttachmentList> GetAttachments(int prNumber) {
|
||||
List<PartsRequestAttachmentList> attachments = db.Query<PartsRequestAttachmentList>(
|
||||
"SELECT AttachmentID, PRNumber, FileName, A.UserID, UploadDate, U.FirstName + ' ' + U.LastName AS FullName " +
|
||||
"FROM PartsRequestAttachment A " +
|
||||
"INNER JOIN Users U ON U.UserID = A.UserID " +
|
||||
@ -66,64 +57,56 @@ namespace Fab2ApprovalSystem.DMO
|
||||
return attachments;
|
||||
}
|
||||
|
||||
public void InsertAttachment(PartsRequestAttachment attach)
|
||||
{
|
||||
var parameters = new DynamicParameters();
|
||||
public void InsertAttachment(PartsRequestAttachment attach) {
|
||||
DynamicParameters parameters = new();
|
||||
parameters.Add("@PRNumber", attach.PRNumber);
|
||||
parameters.Add("@UserID", attach.UserID);
|
||||
parameters.Add("@FileName", attach.FileName);
|
||||
|
||||
this.db.Execute("PartsRequestInsertAttachment", parameters, commandType: CommandType.StoredProcedure);
|
||||
db.Execute("PartsRequestInsertAttachment", parameters, commandType: CommandType.StoredProcedure);
|
||||
}
|
||||
|
||||
public string GetFileName(string attachmentID)
|
||||
{
|
||||
var parameters = new DynamicParameters();
|
||||
public string GetFileName(string attachmentID) {
|
||||
DynamicParameters parameters = new();
|
||||
parameters.Add("@AttachmentID", attachmentID);
|
||||
var fileName = this.db.Query<string>("PartsRequestGetAttachmentFileName", parameters, commandType: CommandType.StoredProcedure).Single();
|
||||
var fileName = db.Query<string>("PartsRequestGetAttachmentFileName", parameters, commandType: CommandType.StoredProcedure).Single();
|
||||
return fileName;
|
||||
}
|
||||
|
||||
public void DeleteAttachment(int attachmentID)
|
||||
{
|
||||
var parameters = new DynamicParameters();
|
||||
public void DeleteAttachment(int attachmentID) {
|
||||
DynamicParameters parameters = new();
|
||||
parameters.Add("@AttachmentID", attachmentID);
|
||||
this.db.Execute("PartsRequestDeleteAttachment", parameters, commandType: CommandType.StoredProcedure);
|
||||
db.Execute("PartsRequestDeleteAttachment", parameters, commandType: CommandType.StoredProcedure);
|
||||
}
|
||||
|
||||
public void Submit(int prNumber, int userID)
|
||||
{
|
||||
var parameters = new DynamicParameters();
|
||||
public void Submit(int prNumber, int userID) {
|
||||
DynamicParameters parameters = new();
|
||||
parameters.Add("@PRNumber", prNumber);
|
||||
parameters.Add("@UserID", userID);
|
||||
this.db.Execute("PartsRequestSubmitForApproval", parameters, commandType: CommandType.StoredProcedure );
|
||||
db.Execute("PartsRequestSubmitForApproval", parameters, commandType: CommandType.StoredProcedure);
|
||||
}
|
||||
|
||||
public IEnumerable<ApprovalLogHistory> GetApprovalLogHistory(int prNumber)
|
||||
{
|
||||
var parameters = new DynamicParameters();
|
||||
public IEnumerable<ApprovalLogHistory> GetApprovalLogHistory(int prNumber) {
|
||||
DynamicParameters parameters = new();
|
||||
parameters.Add("@PRNumber", prNumber);
|
||||
var approverList = this.db.Query<ApprovalLogHistory>("PartsRequestGetApprovalLogHistory", parameters, commandType: CommandType.StoredProcedure).ToList();
|
||||
List<ApprovalLogHistory> approverList = db.Query<ApprovalLogHistory>("PartsRequestGetApprovalLogHistory", parameters, commandType: CommandType.StoredProcedure).ToList();
|
||||
return approverList;
|
||||
}
|
||||
|
||||
public IEnumerable<MyPartsRequestList> GetMyPartsRequests(int userID)
|
||||
{
|
||||
var parameters = new DynamicParameters();
|
||||
public IEnumerable<MyPartsRequestList> GetMyPartsRequests(int userID) {
|
||||
DynamicParameters parameters = new();
|
||||
parameters.Add("@UserID", userID);
|
||||
|
||||
var r = this.db.Query<MyPartsRequestList>("PartsRequestGetListByUser", parameters, commandType: CommandType.StoredProcedure);
|
||||
IEnumerable<MyPartsRequestList> r = db.Query<MyPartsRequestList>("PartsRequestGetListByUser", parameters, commandType: CommandType.StoredProcedure);
|
||||
return r.ToList();
|
||||
}
|
||||
|
||||
public void DeleteDocument(int prNumber, int userid)
|
||||
{
|
||||
var parameters = new DynamicParameters();
|
||||
public void DeleteDocument(int prNumber, int userid) {
|
||||
DynamicParameters parameters = new();
|
||||
parameters.Add("@UserID", userid);
|
||||
parameters.Add("@PRNumber", prNumber);
|
||||
|
||||
this.db.Execute("PartsRequestDelete", parameters, commandType: CommandType.StoredProcedure);
|
||||
db.Execute("PartsRequestDelete", parameters, commandType: CommandType.StoredProcedure);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
@ -1,29 +1,19 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Configuration;
|
||||
using System.Configuration;
|
||||
using System.Data;
|
||||
using System.Data.SqlClient;
|
||||
using System.Linq;
|
||||
using System.Web;
|
||||
using Dapper;
|
||||
using System.Text;
|
||||
|
||||
namespace Fab2ApprovalSystem.DMO
|
||||
{
|
||||
public class SAM_DMO
|
||||
{
|
||||
private IDbConnection db = new SqlConnection(ConfigurationManager.ConnectionStrings["SAMDBConnectionString"].ConnectionString);
|
||||
using Dapper;
|
||||
|
||||
namespace Fab2ApprovalSystem.DMO;
|
||||
|
||||
public int HasITARAccess(string userID)
|
||||
{
|
||||
|
||||
StringBuilder query = new StringBuilder("SELECT COUNT(*) FROM dbo.fnIsUserITARCompliant(@UserID) ");
|
||||
//query.Append("WHERE UserID = @UserID AND AND EmployeeStatus = 'Active'");
|
||||
return this.db.Query<int>(query.ToString(), new { UserID = userID }).SingleOrDefault();
|
||||
public class SAM_DMO {
|
||||
private readonly IDbConnection db = new SqlConnection(ConfigurationManager.ConnectionStrings["SAMDBConnectionString"].ConnectionString);
|
||||
|
||||
public int HasITARAccess(string userID) {
|
||||
StringBuilder query = new("SELECT COUNT(*) FROM dbo.fnIsUserITARCompliant(@UserID) ");
|
||||
return db.Query<int>(query.ToString(), new { UserID = userID }).SingleOrDefault();
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
@ -1,122 +1,166 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Configuration;
|
||||
using System.Data;
|
||||
using System.Data.SqlClient;
|
||||
using System.Linq;
|
||||
using System.Web;
|
||||
|
||||
using Dapper;
|
||||
|
||||
using Fab2ApprovalSystem.Misc;
|
||||
using Fab2ApprovalSystem.Models;
|
||||
using System.Text;
|
||||
|
||||
namespace Fab2ApprovalSystem.DMO
|
||||
{
|
||||
public class TrainingDMO
|
||||
{
|
||||
private IDbConnection db = new SqlConnection(ConfigurationManager.ConnectionStrings["FabApprovalConnection"].ConnectionString);
|
||||
namespace Fab2ApprovalSystem.DMO;
|
||||
|
||||
public class TrainingDMO {
|
||||
private readonly IDbConnection db = new SqlConnection(GlobalVars.DB_CONNECTION_STRING);
|
||||
#if !NET8
|
||||
private static FabApprovalTrainingEntities FabApprovalDB = new FabApprovalTrainingEntities();
|
||||
#endif
|
||||
|
||||
public int Create(int issueId)
|
||||
{
|
||||
var parameters = new DynamicParameters();
|
||||
|
||||
parameters = new DynamicParameters();
|
||||
public int Create(int issueId) {
|
||||
DynamicParameters parameters = new();
|
||||
parameters.Add("@TrainingId", dbType: DbType.Int32, direction: ParameterDirection.InputOutput);
|
||||
parameters.Add("@ECNNumber", issueId);
|
||||
|
||||
this.db.Execute("InsertTrainingItem", parameters, commandType: CommandType.StoredProcedure);
|
||||
db.Execute("InsertTrainingItem", parameters, commandType: CommandType.StoredProcedure);
|
||||
int trainingId = parameters.Get<int>("@TrainingId");
|
||||
|
||||
return trainingId;
|
||||
}
|
||||
public int CreateAssignment(int trainingId, int userId)
|
||||
{
|
||||
var parameters = new DynamicParameters();
|
||||
|
||||
parameters = new DynamicParameters();
|
||||
//parameters.Add("@TrainingId", dbType: DbType.Int32, direction: ParameterDirection.InputOutput);
|
||||
public int CreateAssignment(int trainingId, int userId) {
|
||||
DynamicParameters parameters = new();
|
||||
parameters.Add("@TrainingID", trainingId);
|
||||
parameters.Add("@UserID", userId);
|
||||
parameters.Add("@AssignmentID", dbType: DbType.Int32, direction: ParameterDirection.InputOutput);
|
||||
|
||||
this.db.Execute("InsertTrainingAssignment", parameters, commandType: CommandType.StoredProcedure);
|
||||
db.Execute("InsertTrainingAssignment", parameters, commandType: CommandType.StoredProcedure);
|
||||
int assignmentId = parameters.Get<int>("@AssignmentID");
|
||||
|
||||
return assignmentId;
|
||||
}
|
||||
public IEnumerable<Training> GetAllTrainings()
|
||||
{
|
||||
|
||||
public IEnumerable<Training> GetAllTrainings() {
|
||||
#if !NET8
|
||||
FabApprovalTrainingEntities db = new FabApprovalTrainingEntities();
|
||||
IEnumerable<Training> allTrainings = (from a in db.Trainings select a).ToList();
|
||||
|
||||
return allTrainings;
|
||||
#endif
|
||||
|
||||
#if NET8
|
||||
throw new NotImplementedException();
|
||||
#endif
|
||||
}
|
||||
public Training GetTraining(int trainingId)
|
||||
{
|
||||
|
||||
public Training GetTraining(int trainingId) {
|
||||
#if !NET8
|
||||
FabApprovalTrainingEntities db = new FabApprovalTrainingEntities();
|
||||
Training trainingRecord = new Training();
|
||||
trainingRecord = (from a in db.Trainings where a.TrainingID == trainingId select a).FirstOrDefault();
|
||||
return trainingRecord;
|
||||
#endif
|
||||
|
||||
#if NET8
|
||||
throw new NotImplementedException();
|
||||
#endif
|
||||
}
|
||||
public TrainingAssignment GetAssignment(int assignmentId)
|
||||
{
|
||||
|
||||
public TrainingAssignment GetAssignment(int assignmentId) {
|
||||
#if !NET8
|
||||
FabApprovalTrainingEntities db = new FabApprovalTrainingEntities();
|
||||
TrainingAssignment assignmentRecord = (from a in db.TrainingAssignments where a.ID == assignmentId select a).FirstOrDefault();
|
||||
return assignmentRecord;
|
||||
#endif
|
||||
|
||||
#if NET8
|
||||
throw new NotImplementedException();
|
||||
#endif
|
||||
}
|
||||
public int GetTrainingId(int issueId)
|
||||
{
|
||||
|
||||
public int GetTrainingId(int issueId) {
|
||||
#if !NET8
|
||||
FabApprovalTrainingEntities db = new FabApprovalTrainingEntities();
|
||||
int ECNId = issueId;
|
||||
int trainingId = (from a in db.Trainings where a.ECN == ECNId select a.TrainingID).FirstOrDefault();
|
||||
|
||||
return trainingId;
|
||||
#endif
|
||||
|
||||
#if NET8
|
||||
throw new NotImplementedException();
|
||||
#endif
|
||||
}
|
||||
public List<int> GetTrainees(int groupId)
|
||||
{
|
||||
|
||||
public List<int> GetTrainees(int groupId) {
|
||||
#if !NET8
|
||||
FabApprovalTrainingEntities db = new FabApprovalTrainingEntities();
|
||||
var users = (from a in db.TrainingGroupMembers where a.TrainingGroupID == groupId select a.UserID).ToList();
|
||||
|
||||
return users;
|
||||
#endif
|
||||
|
||||
#if NET8
|
||||
throw new NotImplementedException();
|
||||
#endif
|
||||
}
|
||||
public bool isUserTrainingMember(int groupId, int userId)
|
||||
{
|
||||
|
||||
public bool isUserTrainingMember(int groupId, int userId) {
|
||||
#if !NET8
|
||||
FabApprovalTrainingEntities db = new FabApprovalTrainingEntities();
|
||||
var users = (from a in db.TrainingGroupMembers where a.TrainingGroupID == groupId && a.UserID == userId select a).FirstOrDefault();
|
||||
|
||||
if (users == null)
|
||||
{
|
||||
if (users == null) {
|
||||
return false;
|
||||
}
|
||||
else
|
||||
{
|
||||
} else {
|
||||
return true;
|
||||
}
|
||||
#endif
|
||||
|
||||
#if NET8
|
||||
throw new NotImplementedException();
|
||||
#endif
|
||||
}
|
||||
public List<TrainingGroup> GetTrainingGroups()
|
||||
{
|
||||
|
||||
public List<TrainingGroup> GetTrainingGroups() {
|
||||
#if !NET8
|
||||
FabApprovalTrainingEntities db = new FabApprovalTrainingEntities();
|
||||
return (from a in db.TrainingGroups select a).ToList();
|
||||
#endif
|
||||
|
||||
#if NET8
|
||||
System.Text.StringBuilder query = new("SELECT TrainingGroupID, TrainingGroupName FROM TrainingGroups ORDER BY TrainingGroupID");
|
||||
return db.Query<TrainingGroup>(query.ToString()).ToList();
|
||||
#endif
|
||||
}
|
||||
public TrainingGroup GetTrainingGroupByID(int groupId)
|
||||
{
|
||||
|
||||
public TrainingGroup GetTrainingGroupByID(int groupId) {
|
||||
#if !NET8
|
||||
FabApprovalTrainingEntities db = new FabApprovalTrainingEntities();
|
||||
TrainingGroup groups = (from a in db.TrainingGroups where a.TrainingGroupID == groupId select a).FirstOrDefault();
|
||||
return groups;
|
||||
#endif
|
||||
|
||||
#if NET8
|
||||
throw new NotImplementedException();
|
||||
#endif
|
||||
}
|
||||
public List<int> GetECNAssignedTrainingGroups(int ECNNumber)
|
||||
{
|
||||
|
||||
public List<int> GetECNAssignedTrainingGroups(int ECNNumber) {
|
||||
#if !NET8
|
||||
List<int> trainingGroups = (from a in FabApprovalDB.ECNTrainingBies where a.ECNNumber == ECNNumber select a.AcknowledgementTrainingByID).ToList();
|
||||
|
||||
return trainingGroups;
|
||||
#endif
|
||||
|
||||
#if NET8
|
||||
throw new NotImplementedException();
|
||||
#endif
|
||||
}
|
||||
public void AddTrainingGroupToECN(int ECNNumber, int groupId)
|
||||
{
|
||||
|
||||
public void AddTrainingGroupToECN(int ECNNumber, int groupId) {
|
||||
#if !NET8
|
||||
FabApprovalTrainingEntities db = new FabApprovalTrainingEntities();
|
||||
//ECNTrainingBy ecnTraining = new ECNTrainingBy();
|
||||
//ecnTraining.AcknowledgementTrainingByID = groupId;
|
||||
//ecnTraining.ECNNumber = ECNNumber;
|
||||
|
||||
var parameters = new DynamicParameters();
|
||||
parameters.Add("@ECNNumber", ECNNumber);
|
||||
@ -124,329 +168,416 @@ namespace Fab2ApprovalSystem.DMO
|
||||
|
||||
this.db.Execute("ECNInsertTrainingBy", parameters, commandType: CommandType.StoredProcedure);
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
//db.ECNTrainingBies.Add(ecnTraining);
|
||||
|
||||
#if NET8
|
||||
throw new NotImplementedException();
|
||||
#endif
|
||||
}
|
||||
public void SetTrainingFlag(int ECNNumber)
|
||||
{
|
||||
FabApprovalTrainingEntities db = new FabApprovalTrainingEntities();
|
||||
//ECNTrainingBy ecnTraining = new ECNTrainingBy();
|
||||
//ecnTraining.AcknowledgementTrainingByID = groupId;
|
||||
//ecnTraining.ECNNumber = ECNNumber;
|
||||
|
||||
public void SetTrainingFlag(int ECNNumber) {
|
||||
#if !NET8
|
||||
FabApprovalTrainingEntities db = new FabApprovalTrainingEntities();
|
||||
var parameters = new DynamicParameters();
|
||||
parameters.Add("@ECNNumber", ECNNumber);
|
||||
|
||||
this.db.Execute("ECNSetTrainingFlag", parameters, commandType: CommandType.StoredProcedure);
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
//db.ECNTrainingBies.Add(ecnTraining);
|
||||
|
||||
#if NET8
|
||||
throw new NotImplementedException();
|
||||
#endif
|
||||
}
|
||||
public List<TrainingAssignment> GetAllTrainingAssignments(int TrainingID)
|
||||
{
|
||||
|
||||
public List<TrainingAssignment> GetAllTrainingAssignments(int TrainingID) {
|
||||
#if !NET8
|
||||
FabApprovalTrainingEntities db = new FabApprovalTrainingEntities();
|
||||
var TrainingData = from a in db.TrainingAssignments where a.TrainingID == TrainingID select a;
|
||||
|
||||
RefreshTrainingData(TrainingID, TrainingData);
|
||||
|
||||
TrainingData = from a in db.TrainingAssignments where a.TrainingID == TrainingID select a;
|
||||
|
||||
return TrainingData.ToList();
|
||||
#endif
|
||||
|
||||
#if NET8
|
||||
throw new NotImplementedException();
|
||||
#endif
|
||||
}
|
||||
public List<TrainingAssignment> GetTrainingAssignments(int TrainingID)
|
||||
{
|
||||
|
||||
public List<TrainingAssignment> GetTrainingAssignments(int TrainingID) {
|
||||
#if !NET8
|
||||
FabApprovalTrainingEntities db = new FabApprovalTrainingEntities();
|
||||
var TrainingData = from a in db.TrainingAssignments where a.TrainingID == TrainingID && a.Deleted != true select a;
|
||||
|
||||
RefreshTrainingData(TrainingID, TrainingData);
|
||||
|
||||
TrainingData = from a in db.TrainingAssignments where a.TrainingID == TrainingID select a;
|
||||
|
||||
return TrainingData.ToList();
|
||||
#endif
|
||||
|
||||
#if NET8
|
||||
throw new NotImplementedException();
|
||||
#endif
|
||||
}
|
||||
public List<TrainingAssignment> GetTrainingAssignmentsByUser(int TrainingID, int userID)
|
||||
{
|
||||
|
||||
public List<TrainingAssignment> GetTrainingAssignmentsByUser(int TrainingID, int userID) {
|
||||
#if !NET8
|
||||
FabApprovalTrainingEntities db = new FabApprovalTrainingEntities();
|
||||
var TrainingData = from a in db.TrainingAssignments where a.TrainingID == TrainingID && a.UserID == userID select a;
|
||||
|
||||
return TrainingData.ToList();
|
||||
#endif
|
||||
|
||||
#if NET8
|
||||
throw new NotImplementedException();
|
||||
#endif
|
||||
}
|
||||
public List<TrainingDocAck> GetAssignedDocs(int trainingAssignmentId)
|
||||
{
|
||||
|
||||
public List<TrainingDocAck> GetAssignedDocs(int trainingAssignmentId) {
|
||||
#if !NET8
|
||||
FabApprovalTrainingEntities db = new FabApprovalTrainingEntities();
|
||||
var docs = (from a in db.TrainingDocAcks where a.TrainingAssignmentID == trainingAssignmentId && a.Deleted != true select a).ToList();
|
||||
|
||||
return docs;
|
||||
}
|
||||
public void AcknowledgeDocument(int trainingDocAckID)
|
||||
{
|
||||
var parameters = new DynamicParameters();
|
||||
#endif
|
||||
|
||||
parameters = new DynamicParameters();
|
||||
#if NET8
|
||||
throw new NotImplementedException();
|
||||
#endif
|
||||
}
|
||||
|
||||
public void AcknowledgeDocument(int trainingDocAckID) {
|
||||
DynamicParameters parameters = new();
|
||||
parameters.Add("@TrainingDocAckID", trainingDocAckID);
|
||||
//parameters.Add("@AttachmentID", attachmentID);
|
||||
|
||||
this.db.Execute("TrainingAcknowledgeDocument", parameters, commandType: CommandType.StoredProcedure);
|
||||
|
||||
db.Execute("TrainingAcknowledgeDocument", parameters, commandType: CommandType.StoredProcedure);
|
||||
}
|
||||
public void UpdateAssignmentStatus(int trainingAssignmentID)
|
||||
{
|
||||
|
||||
public void UpdateAssignmentStatus(int trainingAssignmentID) {
|
||||
#if !NET8
|
||||
FabApprovalTrainingEntities db = new FabApprovalTrainingEntities();
|
||||
var RecordToUpdate = (from a in db.TrainingAssignments where a.ID == trainingAssignmentID select a).SingleOrDefault();
|
||||
if(RecordToUpdate.status != true)
|
||||
{
|
||||
if (RecordToUpdate.status != true) {
|
||||
RecordToUpdate.DateCompleted = DateTime.Now;
|
||||
RecordToUpdate.status = true;
|
||||
try
|
||||
{
|
||||
try {
|
||||
db.SaveChanges();
|
||||
}
|
||||
catch (InvalidOperationException e)
|
||||
{
|
||||
} catch (InvalidOperationException e) {
|
||||
string exception = e.ToString();
|
||||
Console.WriteLine(e);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
#if NET8
|
||||
throw new NotImplementedException();
|
||||
#endif
|
||||
}
|
||||
public int GetTrainingIdByAssignment(int trainingAssignmentID)
|
||||
{
|
||||
|
||||
public int GetTrainingIdByAssignment(int trainingAssignmentID) {
|
||||
#if !NET8
|
||||
FabApprovalTrainingEntities db = new FabApprovalTrainingEntities();
|
||||
int trainingID = (from a in db.TrainingAssignments where a.ID == trainingAssignmentID select a.TrainingID).SingleOrDefault();
|
||||
|
||||
return trainingID;
|
||||
#endif
|
||||
|
||||
#if NET8
|
||||
throw new NotImplementedException();
|
||||
#endif
|
||||
}
|
||||
public void UpdateTrainingStatus(int trainingId)
|
||||
{
|
||||
|
||||
public void UpdateTrainingStatus(int trainingId) {
|
||||
#if !NET8
|
||||
FabApprovalTrainingEntities db = new FabApprovalTrainingEntities();
|
||||
Training training = (from a in db.Trainings where a.TrainingID == trainingId select a).SingleOrDefault();
|
||||
|
||||
if (training != null)
|
||||
{
|
||||
if (training != null) {
|
||||
training.CompletedDate = DateTime.Now;
|
||||
training.Status = true;
|
||||
|
||||
try
|
||||
{
|
||||
try {
|
||||
db.SaveChanges();
|
||||
}
|
||||
catch (InvalidOperationException e)
|
||||
{
|
||||
} catch (InvalidOperationException e) {
|
||||
string exception = e.ToString();
|
||||
Console.WriteLine(e);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
#if NET8
|
||||
throw new NotImplementedException();
|
||||
#endif
|
||||
}
|
||||
public void reOpenTraining(int trainingId)
|
||||
{
|
||||
|
||||
public void reOpenTraining(int trainingId) {
|
||||
#if !NET8
|
||||
FabApprovalTrainingEntities db = new FabApprovalTrainingEntities();
|
||||
Training training = (from a in db.Trainings where a.TrainingID == trainingId select a).SingleOrDefault();
|
||||
|
||||
if (training != null)
|
||||
{
|
||||
if (training != null) {
|
||||
training.CompletedDate = null;
|
||||
training.Status = false;
|
||||
|
||||
try
|
||||
{
|
||||
try {
|
||||
db.SaveChanges();
|
||||
}
|
||||
catch (InvalidOperationException e)
|
||||
{
|
||||
} catch (InvalidOperationException e) {
|
||||
string exception = e.ToString();
|
||||
Console.WriteLine(e);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
#if NET8
|
||||
throw new NotImplementedException();
|
||||
#endif
|
||||
}
|
||||
|
||||
public bool CheckTrainingStatus(int trainingAssignmentID)
|
||||
{
|
||||
public bool CheckTrainingStatus(int trainingAssignmentID) {
|
||||
#if !NET8
|
||||
FabApprovalTrainingEntities db = new FabApprovalTrainingEntities();
|
||||
bool isFinished = true;
|
||||
int trainingID = (from a in db.TrainingAssignments where a.ID == trainingAssignmentID select a.TrainingID).SingleOrDefault();
|
||||
var trainingAssignments = from a in db.TrainingAssignments where a.TrainingID == trainingID && a.Deleted != true select a;
|
||||
|
||||
foreach (var training in trainingAssignments)
|
||||
{
|
||||
if (training.status == false)
|
||||
{
|
||||
foreach (var training in trainingAssignments) {
|
||||
if (training.status == false) {
|
||||
isFinished = false;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
return isFinished;
|
||||
#endif
|
||||
|
||||
#if NET8
|
||||
throw new NotImplementedException();
|
||||
#endif
|
||||
}
|
||||
|
||||
public bool CheckTrainingAssignmentStatus(int trainingAssignmentID)
|
||||
{
|
||||
public bool CheckTrainingAssignmentStatus(int trainingAssignmentID) {
|
||||
#if !NET8
|
||||
FabApprovalTrainingEntities db = new FabApprovalTrainingEntities();
|
||||
bool isFinished = true;
|
||||
// TrainingDocAck docsAssigned = null;
|
||||
|
||||
var docsAssigned = from a in db.TrainingDocAcks where a.TrainingAssignmentID == trainingAssignmentID && a.Deleted != true select a;
|
||||
|
||||
|
||||
|
||||
|
||||
foreach (var doc in docsAssigned)
|
||||
{
|
||||
if (doc.Reviewed == false)
|
||||
{
|
||||
foreach (var doc in docsAssigned) {
|
||||
if (doc.Reviewed == false) {
|
||||
isFinished = false;
|
||||
}
|
||||
}
|
||||
|
||||
return isFinished;
|
||||
#endif
|
||||
|
||||
#if NET8
|
||||
throw new NotImplementedException();
|
||||
#endif
|
||||
}
|
||||
public bool IsUserAssigned(int userId, int trainingId)
|
||||
{
|
||||
|
||||
public bool IsUserAssigned(int userId, int trainingId) {
|
||||
#if !NET8
|
||||
FabApprovalTrainingEntities db = new FabApprovalTrainingEntities();
|
||||
bool userHasAssignment = false;
|
||||
|
||||
var assignments = (from a in db.TrainingAssignments where a.TrainingID == trainingId && a.UserID == userId && a.Deleted != true select a).ToList();
|
||||
|
||||
if(assignments.Count() > 0)
|
||||
{
|
||||
if (assignments.Count() > 0) {
|
||||
userHasAssignment = true;
|
||||
}
|
||||
|
||||
return userHasAssignment;
|
||||
#endif
|
||||
|
||||
#if NET8
|
||||
throw new NotImplementedException();
|
||||
#endif
|
||||
}
|
||||
public List<Training> GetTrainings()
|
||||
{
|
||||
|
||||
public List<Training> GetTrainings() {
|
||||
#if !NET8
|
||||
FabApprovalTrainingEntities db = new FabApprovalTrainingEntities();
|
||||
var trainings = from a in db.Trainings select a;
|
||||
|
||||
return trainings.ToList();
|
||||
#endif
|
||||
|
||||
#if NET8
|
||||
throw new NotImplementedException();
|
||||
#endif
|
||||
}
|
||||
public List<TrainingAssignment> GetTrainingAssignmentsByUserID(int userID)
|
||||
{
|
||||
|
||||
public List<TrainingAssignment> GetTrainingAssignmentsByUserID(int userID) {
|
||||
#if !NET8
|
||||
FabApprovalTrainingEntities db = new FabApprovalTrainingEntities();
|
||||
var trainingAssignments = from a in db.TrainingAssignments where a.UserID == userID && a.Deleted != true select a;
|
||||
|
||||
return trainingAssignments.ToList();
|
||||
#endif
|
||||
|
||||
#if NET8
|
||||
throw new NotImplementedException();
|
||||
#endif
|
||||
}
|
||||
|
||||
public void DeleteTrainingAssignment(int trainingAssignmentId)
|
||||
{
|
||||
public void DeleteTrainingAssignment(int trainingAssignmentId) {
|
||||
#if !NET8
|
||||
FabApprovalTrainingEntities db = new FabApprovalTrainingEntities();
|
||||
var trainingAssignments = from a in db.TrainingAssignments where a.ID == trainingAssignmentId select a;
|
||||
|
||||
foreach (var item in trainingAssignments)
|
||||
{
|
||||
foreach (var item in trainingAssignments) {
|
||||
item.Deleted = true;
|
||||
item.DeletedDate = DateTime.Now;
|
||||
}
|
||||
try
|
||||
{
|
||||
try {
|
||||
db.SaveChanges();
|
||||
}
|
||||
catch (InvalidOperationException e)
|
||||
{
|
||||
} catch (InvalidOperationException e) {
|
||||
string exception = e.ToString();
|
||||
Console.WriteLine(e);
|
||||
}
|
||||
#endif
|
||||
|
||||
#if NET8
|
||||
throw new NotImplementedException();
|
||||
#endif
|
||||
}
|
||||
public void DeleteTrainingDocAck(int trainingAssignmentId)
|
||||
{
|
||||
|
||||
public void DeleteTrainingDocAck(int trainingAssignmentId) {
|
||||
#if !NET8
|
||||
FabApprovalTrainingEntities db = new FabApprovalTrainingEntities();
|
||||
var trainingDocAcks = from a in db.TrainingDocAcks where a.TrainingAssignmentID == trainingAssignmentId select a;
|
||||
|
||||
foreach (var item in trainingDocAcks)
|
||||
{
|
||||
foreach (var item in trainingDocAcks) {
|
||||
item.Deleted = true;
|
||||
item.DeletedDate = DateTime.Now;
|
||||
}
|
||||
try
|
||||
{
|
||||
try {
|
||||
db.SaveChanges();
|
||||
}
|
||||
catch (InvalidOperationException e)
|
||||
{
|
||||
} catch (InvalidOperationException e) {
|
||||
string exception = e.ToString();
|
||||
Console.WriteLine(e);
|
||||
}
|
||||
#endif
|
||||
|
||||
#if NET8
|
||||
throw new NotImplementedException();
|
||||
#endif
|
||||
}
|
||||
public void DeleteTraining(int trainingId)
|
||||
{
|
||||
|
||||
public void DeleteTraining(int trainingId) {
|
||||
#if !NET8
|
||||
FabApprovalTrainingEntities db = new FabApprovalTrainingEntities();
|
||||
Training training = (from a in db.Trainings where a.TrainingID == trainingId select a).FirstOrDefault();
|
||||
|
||||
if (training != null) {
|
||||
training.Deleted = true;
|
||||
training.DeletedDate = DateTime.Now;
|
||||
}
|
||||
|
||||
List<TrainingAssignment> trainingAssignments = (from a in db.TrainingAssignments where a.TrainingID == trainingId select a).ToList();
|
||||
db.SaveChanges();
|
||||
foreach (TrainingAssignment trainingAssignment in trainingAssignments)
|
||||
{
|
||||
foreach (TrainingAssignment trainingAssignment in trainingAssignments) {
|
||||
DeleteTrainingAssignment(trainingAssignment.ID);
|
||||
DeleteTrainingDocAck(trainingAssignment.ID);
|
||||
//db.SaveChanges();
|
||||
}
|
||||
#endif
|
||||
|
||||
#if NET8
|
||||
throw new NotImplementedException();
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
public void DeleteAssignmentByUserId(int userId)
|
||||
{
|
||||
public void DeleteAssignmentByUserId(int userId) {
|
||||
#if !NET8
|
||||
FabApprovalTrainingEntities db = new FabApprovalTrainingEntities();
|
||||
|
||||
var userAssignments = (from a in db.TrainingAssignments where a.UserID == userId select a).ToList();
|
||||
|
||||
foreach (var item in userAssignments)
|
||||
{
|
||||
foreach (var item in userAssignments) {
|
||||
// get document assignments
|
||||
var docAssignments = (from a in db.TrainingDocAcks where a.TrainingAssignmentID == item.TrainingID select a).ToList();
|
||||
// delete each docAssignment
|
||||
foreach (var docAssignment in docAssignments)
|
||||
{
|
||||
foreach (var docAssignment in docAssignments) {
|
||||
DeleteTrainingDocAck(docAssignment.ID);
|
||||
}
|
||||
DeleteTrainingAssignment(item.ID);
|
||||
}
|
||||
#endif
|
||||
|
||||
#if NET8
|
||||
throw new NotImplementedException();
|
||||
#endif
|
||||
}
|
||||
public bool CheckValidDocAck(int docAckId)
|
||||
{
|
||||
|
||||
public bool CheckValidDocAck(int docAckId) {
|
||||
#if !NET8
|
||||
FabApprovalTrainingEntities db = new FabApprovalTrainingEntities();
|
||||
TrainingDocAck ack = (from a in db.TrainingDocAcks where a.ID == docAckId select a).FirstOrDefault();
|
||||
|
||||
// TODO Check the user is valid
|
||||
|
||||
// Check that the assignment exists
|
||||
if (ack != null)
|
||||
{
|
||||
if (ack != null) {
|
||||
// Check that the assignment isn't deleted
|
||||
if (ack.Deleted == true)
|
||||
{
|
||||
if (ack.Deleted == true) {
|
||||
return false;
|
||||
}
|
||||
// Check that the assignment isn't completed
|
||||
else if (ack.Reviewed == true)
|
||||
{
|
||||
else if (ack.Reviewed == true) {
|
||||
return false;
|
||||
}
|
||||
else
|
||||
{
|
||||
} else {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
#endif
|
||||
|
||||
#if NET8
|
||||
throw new NotImplementedException();
|
||||
#endif
|
||||
}
|
||||
public List<Training> GetAllOpenTrainings()
|
||||
{
|
||||
|
||||
public List<Training> GetAllOpenTrainings() {
|
||||
#if !NET8
|
||||
FabApprovalTrainingEntities db = new FabApprovalTrainingEntities();
|
||||
List<Training> openTrainings = (from a in db.Trainings where a.Status != true && a.Deleted != true select a).ToList();
|
||||
return openTrainings;
|
||||
#endif
|
||||
|
||||
#if NET8
|
||||
throw new NotImplementedException();
|
||||
#endif
|
||||
}
|
||||
public List<TrainingAssignment> GetOpenAssignmentsByTrainingID(int trainingID)
|
||||
{
|
||||
|
||||
public List<TrainingAssignment> GetOpenAssignmentsByTrainingID(int trainingID) {
|
||||
#if !NET8
|
||||
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;
|
||||
#endif
|
||||
|
||||
#if NET8
|
||||
throw new NotImplementedException();
|
||||
#endif
|
||||
}
|
||||
|
||||
private void RefreshTrainingData(int TrainingID, IQueryable<TrainingAssignment> TrainingData) {
|
||||
bool assignmentIsIncomplete = false;
|
||||
UserAccountDMO userAccountDMO = new();
|
||||
foreach (TrainingAssignment assignment in TrainingData) {
|
||||
LoginModel userModel = userAccountDMO.GetUserByID(assignment.UserID);
|
||||
if (!userModel.IsActive)
|
||||
UpdateAssignmentStatus(assignment.ID);
|
||||
if (assignment.Deleted != true && (assignment.DateCompleted is null || assignment.DateCompleted > DateTime.Now))
|
||||
assignmentIsIncomplete = true;
|
||||
}
|
||||
|
||||
if (!assignmentIsIncomplete)
|
||||
UpdateTrainingStatus(TrainingID);
|
||||
}
|
||||
}
|
@ -1,98 +1,58 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Configuration;
|
||||
using System.Data;
|
||||
using System.Data.SqlClient;
|
||||
using System.Linq;
|
||||
using System.Web;
|
||||
using Dapper;
|
||||
using Fab2ApprovalSystem.Models;
|
||||
using System.Text;
|
||||
|
||||
using Dapper;
|
||||
|
||||
namespace Fab2ApprovalSystem.DMO
|
||||
{
|
||||
public class UserAccountDMO
|
||||
{
|
||||
private IDbConnection db = new SqlConnection(ConfigurationManager.ConnectionStrings["FabApprovalConnection"].ConnectionString);
|
||||
using Fab2ApprovalSystem.Misc;
|
||||
using Fab2ApprovalSystem.Models;
|
||||
|
||||
namespace Fab2ApprovalSystem.DMO;
|
||||
|
||||
//public List<LoginModel> GetUser(string loginID)
|
||||
//{
|
||||
// StringBuilder sql = new StringBuilder();
|
||||
// sql.Append("SELECT * FROM Users WHERE LoginID = '" + loginID + "'");
|
||||
public class UserAccountDMO {
|
||||
private readonly IDbConnection db = new SqlConnection(GlobalVars.DB_CONNECTION_STRING);
|
||||
|
||||
// return this.db.Query<LoginModel>(sql.ToString()).ToList();
|
||||
//}
|
||||
|
||||
public IEnumerable<LoginModel> GetAllUsers()
|
||||
{
|
||||
StringBuilder sql = new StringBuilder();
|
||||
//sql.Append("SELECT U.FirstName + ' ' + U.LastName AS FullName, U1.FirstName + ' ' + U1.LastName AS DelegatedToFullName, U.* ");
|
||||
//sql.Append("FROM Users U LEFT JOIN Users U1 ");
|
||||
//sql.Append("ON U.UserID = U1.DelegatedTo ORDER BY FirstName ");
|
||||
|
||||
//sql.Append("SELECT FirstName + ' ' + LastName AS FullName, * FROM Users ORDER BY FirstName ");
|
||||
public IEnumerable<LoginModel> GetAllUsers() {
|
||||
StringBuilder sql = new();
|
||||
sql.Append(" SELECT U.FirstName + ' ' + U.LastName AS FullName, U.* , U1.FirstName + ' ' + U1.LastName AS DelegatedToFullName ");
|
||||
sql.Append("FROM Users U LEFT JOIN Users U1 ON U.DelegatedTo = U1.UserID ");
|
||||
sql.Append("ORDER BY FirstName ");
|
||||
|
||||
return this.db.Query<LoginModel>(sql.ToString()).ToList();
|
||||
return db.Query<LoginModel>(sql.ToString()).ToList();
|
||||
}
|
||||
public IEnumerable<LoginModel> GetAllActiveUsers()
|
||||
{
|
||||
StringBuilder sql = new StringBuilder();
|
||||
//sql.Append("SELECT U.FirstName + ' ' + U.LastName AS FullName, U1.FirstName + ' ' + U1.LastName AS DelegatedToFullName, U.* ");
|
||||
//sql.Append("FROM Users U LEFT JOIN Users U1 ");
|
||||
//sql.Append("ON U.UserID = U1.DelegatedTo ORDER BY FirstName ");
|
||||
|
||||
//sql.Append("SELECT FirstName + ' ' + LastName AS FullName, * FROM Users ORDER BY FirstName ");
|
||||
public IEnumerable<LoginModel> GetAllActiveUsers() {
|
||||
StringBuilder sql = new();
|
||||
sql.Append(" SELECT U.FirstName + ' ' + U.LastName AS FullName, U.* , U1.FirstName + ' ' + U1.LastName AS DelegatedToFullName ");
|
||||
sql.Append("FROM Users U LEFT JOIN Users U1 ON U.DelegatedTo = U1.UserID ");
|
||||
sql.Append("WHERE U.IsActive = 1 ");
|
||||
sql.Append("ORDER BY FirstName ");
|
||||
|
||||
return this.db.Query<LoginModel>(sql.ToString()).ToList();
|
||||
return db.Query<LoginModel>(sql.ToString()).ToList();
|
||||
}
|
||||
|
||||
public LoginModel GetUser(string loginID) =>
|
||||
db.Query<LoginModel>("SELECT FirstName + ' ' + LastName AS FullName, * FROM Users WHERE LoginID = @loginID AND IsActive = 1 ", new { loginID = loginID }).Take(1).SingleOrDefault();
|
||||
|
||||
|
||||
|
||||
|
||||
public LoginModel GetUser(string loginID)
|
||||
{
|
||||
//StringBuilder sql = new StringBuilder();
|
||||
//sql.Append("SELECT * FROM Users WHERE LoginID = '" + loginID + "'");
|
||||
|
||||
//return this.db.Query<LoginModel>(sql.ToString()).SingleOrDefault();
|
||||
|
||||
|
||||
return this.db.Query<LoginModel>("SELECT FirstName + ' ' + LastName AS FullName, * FROM Users WHERE LoginID = @loginID AND IsActive = 1 ", new { loginID = loginID }).Take(1).SingleOrDefault();
|
||||
}
|
||||
|
||||
public LoginModel GetUserByID(int userID)
|
||||
{
|
||||
return this.db.Query<LoginModel>(
|
||||
public LoginModel GetUserByID(int userID) {
|
||||
return db.Query<LoginModel>(
|
||||
"SELECT FirstName + ' ' + LastName AS FullName, * FROM Users WHERE UserID = @UserID ",
|
||||
new { UserID = userID }).Take(1).SingleOrDefault();
|
||||
}
|
||||
|
||||
public string GetUserEmailByID(string userID)
|
||||
{
|
||||
return this.db.Query<string>(
|
||||
public string GetUserEmailByID(int userID) {
|
||||
return db.Query<string>(
|
||||
"SELECT Email FROM Users WHERE UserID = @UserID ",
|
||||
new { UserID = userID }).Take(1).SingleOrDefault();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <param name="model"></param>
|
||||
internal void UpdateUser(LoginModel model)
|
||||
{
|
||||
internal void UpdateUser(LoginModel model) {
|
||||
string sql;
|
||||
sql = "UPDATE Users SET LoginID = @LoginID, FirstName = @FirstName, LastName = @LastName, Email = @Email, IsActive = @IsActive, IsAdmin = @IsAdmin WHERE UserID = @UserID";
|
||||
var parameters = new DynamicParameters();
|
||||
DynamicParameters parameters = new();
|
||||
parameters.Add("@UserID", model.UserID);
|
||||
parameters.Add("@LoginID", model.LoginID);
|
||||
parameters.Add("@FirstName", model.FirstName);
|
||||
@ -101,34 +61,20 @@ namespace Fab2ApprovalSystem.DMO
|
||||
parameters.Add("@IsAdmin", model.IsAdmin);
|
||||
parameters.Add("@IsActive", model.IsActive);
|
||||
|
||||
this.db.Execute(sql, parameters);
|
||||
db.Execute(sql, parameters);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <param name="model"></param>
|
||||
internal void DeleteUser(LoginModel model)
|
||||
{
|
||||
internal void DeleteUser(LoginModel model) {
|
||||
string sql;
|
||||
//sql = "DELETE Users WHERE UserID = @UserID";
|
||||
sql = "UPDATE Users SET IsActive = 0 WHERE UserID = @UserID";
|
||||
var parameters = new DynamicParameters();
|
||||
DynamicParameters parameters = new();
|
||||
parameters.Add("@UserID", model.UserID);
|
||||
|
||||
this.db.Execute(sql, parameters);
|
||||
db.Execute(sql, parameters);
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <param name="model"></param>
|
||||
internal void InsertUser(LoginModel model)
|
||||
{
|
||||
//string sql;
|
||||
//sql = "INSERT Users (LoginID, FirstName, LastName, IsAdmin) VALUES (@LoginID, @FirstName, @LastName, @IsAdmin )";
|
||||
var parameters = new DynamicParameters();
|
||||
internal void InsertUser(LoginModel model) {
|
||||
DynamicParameters parameters = new();
|
||||
parameters.Add("@UserID", model.UserID, DbType.Int32, direction: ParameterDirection.InputOutput);
|
||||
parameters.Add("@LoginID", model.LoginID);
|
||||
parameters.Add("@FirstName", model.FirstName);
|
||||
@ -136,39 +82,24 @@ namespace Fab2ApprovalSystem.DMO
|
||||
parameters.Add("@Email", model.Email);
|
||||
parameters.Add("@IsAdmin", model.IsAdmin);
|
||||
|
||||
this.db.Execute("InsertUsers", parameters, commandType: CommandType.StoredProcedure);
|
||||
db.Execute("InsertUsers", parameters, commandType: CommandType.StoredProcedure);
|
||||
int userid = parameters.Get<int>("@UserID");
|
||||
model.UserID = userid;
|
||||
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <param name="userID"></param>
|
||||
/// <param name="hasITARAccess"></param>
|
||||
internal void UpdateInsertITARAccess(string userID, string hasITARAccess)
|
||||
{
|
||||
|
||||
var parameters = new DynamicParameters();
|
||||
internal void UpdateInsertITARAccess(string userID, string hasITARAccess) {
|
||||
DynamicParameters parameters = new();
|
||||
parameters.Add("@UserID", userID);
|
||||
parameters.Add("@HasITARAccess", hasITARAccess);
|
||||
|
||||
this.db.Execute("ITARAccessUpdateInsert", parameters, commandType: CommandType.StoredProcedure);
|
||||
|
||||
db.Execute("ITARAccessUpdateInsert", parameters, commandType: CommandType.StoredProcedure);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <param name="userID"></param>
|
||||
/// <returns></returns>
|
||||
internal bool GetITARAccess(int userID)
|
||||
{
|
||||
var parameters = new DynamicParameters();
|
||||
internal bool GetITARAccess(int userID) {
|
||||
DynamicParameters parameters = new();
|
||||
parameters.Add("@UserID", userID);
|
||||
|
||||
var results = this.db.Query<string>(
|
||||
var results = db.Query<string>(
|
||||
"SELECT HasITARAccess FROM SAMUsers, Users WHERE Users.UserID = @UserID AND SAMUsers.UserID = Users.LoginID",
|
||||
parameters, commandType: CommandType.Text);
|
||||
if ((results != null) && (results.Count() > 0) && (results.First() == "1"))
|
||||
@ -177,17 +108,11 @@ namespace Fab2ApprovalSystem.DMO
|
||||
return false;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <param name="userID"></param>
|
||||
/// <returns></returns>
|
||||
internal bool GetEC_AD_Users(string userID)
|
||||
{
|
||||
var parameters = new DynamicParameters();
|
||||
internal bool GetEC_AD_Users(string userID) {
|
||||
DynamicParameters parameters = new();
|
||||
parameters.Add("@UserID", userID);
|
||||
|
||||
var results = this.db.Query<string>(
|
||||
var results = db.Query<string>(
|
||||
"SELECT UserID FROM EC_AD_Users WHERE UserID = @UserID",
|
||||
parameters, commandType: CommandType.Text);
|
||||
if ((results != null) && (results.Count() > 0))
|
||||
@ -196,17 +121,13 @@ namespace Fab2ApprovalSystem.DMO
|
||||
return false;
|
||||
}
|
||||
|
||||
internal void ProcessOoO()
|
||||
{
|
||||
var parameters = new DynamicParameters();
|
||||
this.db.Execute("ProcesOOOEnableStatus", commandType: CommandType.StoredProcedure);
|
||||
|
||||
}
|
||||
internal void ExpireOoO()
|
||||
{
|
||||
var parameters = new DynamicParameters();
|
||||
this.db.Execute("ProcesOOOExpiration", commandType: CommandType.StoredProcedure);
|
||||
internal void ProcessOoO() {
|
||||
DynamicParameters parameters = new();
|
||||
db.Execute("ProcesOOOEnableStatus", commandType: CommandType.StoredProcedure);
|
||||
}
|
||||
|
||||
}
|
||||
internal void ExpireOoO() {
|
||||
DynamicParameters parameters = new();
|
||||
db.Execute("ProcesOOOExpiration", commandType: CommandType.StoredProcedure);
|
||||
}
|
||||
}
|
File diff suppressed because it is too large
Load Diff
@ -13,7 +13,7 @@ Title: {1}
|
||||
<br/>
|
||||
|
||||
<br/>
|
||||
https://messa016ec.ec.local/{0}/Edit?IssueID={2}
|
||||
https://messa016ec.infineon.com/{0}/Edit?IssueID={2}
|
||||
<br/><br/>
|
||||
|
||||
If you have any questions or trouble logging on please contact a site administrator.
|
||||
|
@ -7,7 +7,7 @@
|
||||
Please log on to the Approval website to view the assignment and act accordingly
|
||||
<br/><br/>
|
||||
|
||||
https://messa016ec.ec.local/CorrectiveAction/Edit?issueID={4}
|
||||
https://messa016ec.infineon.com/CorrectiveAction/Edit?issueID={4}
|
||||
<br/><br/>
|
||||
|
||||
If you have any questions or trouble logging on please contact a site administrator.
|
||||
|
@ -3,7 +3,7 @@
|
||||
<br/><br/>
|
||||
Corrective Action# {0} is ready for your approval. Please log on to the Approval website and review this item for <strong>FINAL Approval or Rejection</strong>.
|
||||
<br/><br/>
|
||||
https://messa016ec.ec.local/CorrectiveAction/Edit?issueID={1}
|
||||
https://messa016ec.infineon.com/CorrectiveAction/Edit?issueID={1}
|
||||
<br/><br/>
|
||||
|
||||
If you have any questions or trouble logging on please contact a site administrator.
|
||||
|
@ -7,7 +7,7 @@ Corrective Action# {0} has been assigned to you.
|
||||
Please log on to the Approval website to view the assignment and act accordingly
|
||||
<br/><br/>
|
||||
|
||||
https://messa016ec.ec.local/CorrectiveAction/Edit?issueID={3}
|
||||
https://messa016ec.infineon.com/CorrectiveAction/Edit?issueID={3}
|
||||
<br/><br/>
|
||||
D3 Due Date: {4}
|
||||
<br/>
|
||||
|
@ -6,7 +6,7 @@ Corrective Action {0} has been completed
|
||||
<br/><br/>
|
||||
|
||||
|
||||
https://messa016ec.ec.local/CorrectiveAction/Edit?issueID={2}
|
||||
https://messa016ec.infineon.com/CorrectiveAction/Edit?issueID={2}
|
||||
<br/><br/>
|
||||
Thank you for your effort. Follow up date has been set for {3}
|
||||
<br/><br/>
|
||||
|
@ -8,7 +8,7 @@ Action needs to be completed by {1}
|
||||
Please log on to the Approval website to view the assignment and act accordingly
|
||||
<br/><br/>
|
||||
|
||||
https://messa016ec.ec.local/Audit/Edit?issueID={4}
|
||||
https://messa016ec.infineon.com/Audit/Edit?issueID={4}
|
||||
<br/><br/>
|
||||
|
||||
If you have any questions or trouble logging on please contact a site administrator.
|
||||
|
@ -3,7 +3,7 @@
|
||||
<br/><br/>
|
||||
Corrective Action# {0} Re-Assigned to you for you approval. Please log on to the Approval website and review this item for Approval or Rejection.
|
||||
<br/><br/>
|
||||
https://messa016ec.ec.local/CorrectiveAction/Edit?issueID={1}
|
||||
https://messa016ec.infineon.com/CorrectiveAction/Edit?issueID={1}
|
||||
<br/><br/>
|
||||
|
||||
If you have any questions or trouble logging on please contact a site administrator.
|
||||
|
@ -9,7 +9,7 @@ Reason For Reject:
|
||||
<br/><br/>
|
||||
Please log on to the Approval website and review this item for re-submission.
|
||||
<br/><br/>
|
||||
https://messa016ec.ec.local/CorrectiveAction/Edit?issueID={1}
|
||||
https://messa016ec.infineon.com/CorrectiveAction/Edit?issueID={1}
|
||||
<br/><br/>
|
||||
|
||||
If you have any questions or trouble logging on please contact a site administrator.
|
||||
|
@ -1,13 +1,13 @@
|
||||
<font size="2" face="verdana">
|
||||
*****Please DO NOT reply to this email*****
|
||||
<br/><br/>
|
||||
Corrective Action# {1} section {3} has been approved.
|
||||
Corrective Action# {0} section {3} has been approved.
|
||||
<br/><br/>
|
||||
|
||||
Please log on to the Approval website to view the section and act accordingly
|
||||
<br/><br/>
|
||||
|
||||
https://messa016ec.ec.local/CorrectiveAction/Edit?issueID={0}
|
||||
https://messa016ec.infineon.com/CorrectiveAction/Edit?issueID={1}
|
||||
<br/><br/>
|
||||
|
||||
If you have any questions or trouble logging on please contact a site administrator.
|
||||
|
@ -7,7 +7,7 @@ Corrective Action# {0} section {3} has been assigned to you for approval.
|
||||
Please log on to the Approval website to view the assignment and act accordingly
|
||||
<br/><br/>
|
||||
|
||||
https://messa016ec.ec.local/CorrectiveAction/Edit?issueID={1}
|
||||
https://messa016ec.infineon.com/CorrectiveAction/Edit?issueID={1}
|
||||
<br/><br/>
|
||||
|
||||
If you have any questions or trouble logging on please contact a site administrator.
|
||||
|
@ -1,13 +1,16 @@
|
||||
<font size="2" face="verdana">
|
||||
*****Please DO NOT reply to this email*****
|
||||
<br/><br/>
|
||||
Corrective Action# {0} section {3} has been rejected.
|
||||
Corrective Action# {0} section {3} has been rejected by {4}.
|
||||
<br/><br/>
|
||||
|
||||
Rejection reason: {5}
|
||||
<br/><br/>
|
||||
|
||||
Please log on to the Approval website to view the section and act accordingly
|
||||
<br/><br/>
|
||||
|
||||
https://messa016ec.ec.local/CorrectiveAction/Edit?issueID={1}
|
||||
{2}/CorrectiveAction/Edit?issueID={1}
|
||||
<br/><br/>
|
||||
|
||||
If you have any questions or trouble logging on please contact a site administrator.
|
||||
|
@ -7,7 +7,7 @@ Corrective Action# {1} section D5/D6/D7(Corrective/Preventitive Actions) has bee
|
||||
Please log on to the Approval website to view the section and act accordingly
|
||||
<br/><br/>
|
||||
|
||||
https://messa016ec.ec.local/CorrectiveAction/Edit?issueID={0}
|
||||
https://messa016ec.infineon.com/CorrectiveAction/Edit?issueID={0}
|
||||
<br/><br/>
|
||||
|
||||
If you have any questions or trouble logging on please contact a site administrator.
|
||||
|
@ -3,7 +3,7 @@
|
||||
<br/><br/>
|
||||
Corrective Action# {0} section {4} is {3}. Please log on to the Approval website and review this item for <strong>completion</strong>.
|
||||
<br/><br/>
|
||||
https://messa016ec.ec.local/CorrectiveAction/Edit?issueID={1}
|
||||
https://messa016ec.infineon.com/CorrectiveAction/Edit?issueID={1}
|
||||
<br/><br/>
|
||||
D3 Due Date: {5}
|
||||
<br/>
|
||||
|
@ -3,7 +3,7 @@
|
||||
<br/><br/>
|
||||
{3}# {0} Delegated to you for your approval. Please log on to the Approval website and review this item for Approval or Rejection.
|
||||
<br/><br/>
|
||||
https://messa016ec.ec.local/{3}/Edit?issueID={1}
|
||||
https://messa016ec.infineon.com/{3}/Edit?issueID={1}
|
||||
<br/><br/>
|
||||
|
||||
If you have any questions or trouble logging on please contact a site administrator.
|
||||
|
@ -5,7 +5,7 @@
|
||||
<br/><br/>
|
||||
Rejection Comment: {5}
|
||||
<br/><br/>
|
||||
https://messa016ec.ec.local/ECN/Edit?issueID={1}
|
||||
https://messa016ec.infineon.com/ECN/Edit?issueID={1}
|
||||
<br/><br/>
|
||||
|
||||
If you have any questions or trouble logging on please contact a site administrator.
|
||||
|
@ -3,7 +3,7 @@
|
||||
<br/><br/>
|
||||
ECN# {1} was Approved.
|
||||
<br/><br/>
|
||||
https://messa016ec.ec.local/ECN/Edit?issueID={1}
|
||||
https://messa016ec.infineon.com/ECN/Edit?issueID={1}
|
||||
<br/><br/>
|
||||
Thank you!
|
||||
|
||||
|
@ -3,7 +3,7 @@
|
||||
<br/><br/>
|
||||
{3}# {0} is ready for your approval. Please log on to the Approval website and review this item for Approval or Rejection.
|
||||
<br/><br/>
|
||||
https://messa016ec.ec.local/ECN/Edit?issueID={1}
|
||||
https://messa016ec.infineon.com/ECN/Edit?issueID={1}
|
||||
<br/><br/>
|
||||
|
||||
If you have any questions or trouble logging on please contact a site administrator.
|
||||
|
@ -3,7 +3,7 @@
|
||||
<br/><br/>
|
||||
{3}# {0} Re-Assigned to you for your approval. Please log on to the Approval website and review this item for Approval or Rejection.
|
||||
<br/><br/>
|
||||
https://messa016ec.ec.local/ECN/Edit?issueID={1}
|
||||
https://messa016ec.infineon.com/ECN/Edit?issueID={1}
|
||||
<br/><br/>
|
||||
|
||||
If you have any questions or trouble logging on please contact a site administrator.
|
||||
|
@ -5,7 +5,7 @@
|
||||
<br/><br/>
|
||||
Comments: {4}
|
||||
<br/><br/>
|
||||
https://messa016ec.ec.local/ECN/Edit?issueID={1}
|
||||
https://messa016ec.infineon.com/ECN/Edit?issueID={1}
|
||||
<br/><br/>
|
||||
|
||||
If you have any questions or trouble logging on please contact a site administrator.
|
||||
|
@ -5,7 +5,7 @@
|
||||
<br/><br/>
|
||||
Rejection Comment: {5}
|
||||
<br/><br/>
|
||||
https://messa016ec.ec.local/ECN/Edit?issueID={1}
|
||||
https://messa016ec.infineon.com/ECN/Edit?issueID={1}
|
||||
<br/><br/>
|
||||
|
||||
If you have any questions or trouble logging on please contact a site administrator.
|
||||
|
@ -3,7 +3,7 @@
|
||||
<br/><br/>
|
||||
A new training assignment has been assigned to you for ECN# {1}
|
||||
<br/><br/>
|
||||
Please click here to view: <a href="https://messa016ec.ec.local/Training/ViewMyTrainingAssignment?assignmentID={0}&ECNNumber={1}">Click Here.</a>
|
||||
Please click here to view: <a href="https://messa016ec.infineon.com/Training/ViewMyTrainingAssignment?assignmentID={0}&ECNNumber={1}">Click Here.</a>
|
||||
<br/><br/>
|
||||
|
||||
If you have any questions or trouble logging on please contact a site administrator.
|
||||
|
@ -4,7 +4,7 @@
|
||||
{3}# {0} has been Approved. The expiration date is {4}
|
||||
Please review the approved ETECN form in the attachment.
|
||||
<br/><br/>
|
||||
https://messa016ec.ec.local/ECN/Edit?issueID={1}
|
||||
https://messa016ec.infineon.com/ECN/Edit?issueID={1}
|
||||
<br/><br/>
|
||||
|
||||
If you have any questions or trouble logging on please contact a site administrator.
|
||||
|
@ -3,7 +3,7 @@
|
||||
<br/><br/>
|
||||
Lot Disposition# {0} is ready for your approval. Please log on to the Approval website and review this item for Approval or Rejection.
|
||||
<br/><br/>
|
||||
https://messa016ec.ec.local/LotDisposition/Edit?issueID={1}
|
||||
https://messa016ec.infineon.com/LotDisposition/Edit?issueID={1}
|
||||
<br/><br/>
|
||||
|
||||
If you have any questions or trouble logging on please contact a site administrator.
|
||||
|
@ -3,7 +3,7 @@
|
||||
<br/><br/>
|
||||
Lot Disposition# {0} Re-Assigned to you for you approval. Please log on to the Approval website and review this item for Approval or Rejection.
|
||||
<br/><br/>
|
||||
https://messa016ec.ec.local/LotDisposition/Edit?issueID={1}
|
||||
https://messa016ec.infineon.com/LotDisposition/Edit?issueID={1}
|
||||
<br/><br/>
|
||||
|
||||
If you have any questions or trouble logging on please contact a site administrator.
|
||||
|
@ -3,7 +3,7 @@
|
||||
<br/><br/>
|
||||
Lot Disposition# {0} was rejected by {3}. Please log on to the Approval website and review this item for re-submission.
|
||||
<br/><br/>
|
||||
https://messa016ec.ec.local/LotDisposition/Edit?issueID={1}
|
||||
https://messa016ec.infineon.com/LotDisposition/Edit?issueID={1}
|
||||
<br/><br/>
|
||||
|
||||
If you have any questions or trouble logging on please contact a site administrator.
|
||||
|
@ -3,7 +3,7 @@
|
||||
<br/><br/>
|
||||
Lot Traveler for Lot# {3} , Request# {0} has a been created. Please login in to the Fab Approval System to review the change.
|
||||
<br/><br/>
|
||||
https://messa016ec.ec.local/LotTraveler/Edit?issueID={1}
|
||||
https://messa016ec.infineon.com/LotTraveler/Edit?issueID={1}
|
||||
<br/><br/>
|
||||
|
||||
If you have any questions or trouble logging on please contact the site administrator.
|
||||
|
@ -3,7 +3,7 @@
|
||||
<br/><br/>
|
||||
Lot Traveler for Lot# {3} , Request# {0} has a new Revision. Please login in to the Fab Approval System to review the change.
|
||||
<br/><br/>
|
||||
https://messa016ec.ec.local/LotTraveler/Edit?issueID={1}
|
||||
https://messa016ec.infineon.com/LotTraveler/Edit?issueID={1}
|
||||
<br/><br/>
|
||||
|
||||
If you have any questions or trouble logging on please contact the site administrator.
|
||||
|
@ -3,7 +3,7 @@
|
||||
<br/><br/>
|
||||
MRB# {0} is ready for your approval. Please log on to the Approval website and review this item for Approval.
|
||||
<br/><br/>
|
||||
https://messa016ec.ec.local/MRB/Edit?issueID={1}
|
||||
https://messa016ec.infineon.com/MRB/Edit?issueID={1}
|
||||
<br/><br/>
|
||||
|
||||
If you have any questions or trouble logging on please contact a site administrator.
|
||||
|
@ -3,7 +3,7 @@
|
||||
<br/><br/>
|
||||
{3}# {0} is ready for your approval. Please log on to the Approval website and review this item for Approval or Rejection.
|
||||
<br/><br/>
|
||||
https://messa016ec.ec.local/PartsRequest/Edit?issueID={1}
|
||||
https://messa016ec.infineon.com/PartsRequest/Edit?issueID={1}
|
||||
<br/><br/>
|
||||
|
||||
If you have any questions or trouble logging on please contact a site administrator.
|
||||
|
@ -3,7 +3,7 @@
|
||||
<br/><br/>
|
||||
{3}# {0} has been completed.
|
||||
<br/><br/>
|
||||
https://messa016ec.ec.local/PartsRequest/Edit?issueID={1}
|
||||
https://messa016ec.infineon.com/PartsRequest/Edit?issueID={1}
|
||||
<br/><br/>
|
||||
|
||||
If you have any questions or trouble logging on please contact a site administrator.
|
||||
|
@ -3,7 +3,7 @@
|
||||
<br/><br/>
|
||||
{3}# {0} Re-Assigned to you for you approval. Please log on to the Approval website and review this item for Approval or Rejection.
|
||||
<br/><br/>
|
||||
https://messa016ec.ec.local/PartsRequest/Edit?issueID={1}
|
||||
https://messa016ec.infineon.com/PartsRequest/Edit?issueID={1}
|
||||
<br/><br/>
|
||||
|
||||
If you have any questions or trouble logging on please contact a site administrator.
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user