Align .editorconfig files Move Controller logic to DMO classes GlobalVars.AppSettings = Models.AppSettings.GetFromConfigurationManager(); Question EditorConfig Project level editorconfig Format White Spaces AppSetting when EnvironmentVariable not set Corrective Actions Tests Schedule Actions Tests DMO Tests Controller Tests Get ready to use VSCode IDE
141 lines
5.5 KiB
C#
141 lines
5.5 KiB
C#
using System.Collections.Generic;
|
|
using System.Data;
|
|
using System.Data.SqlClient;
|
|
using System.IO;
|
|
using System.Linq;
|
|
|
|
using Dapper;
|
|
|
|
using Fab2ApprovalSystem.Misc;
|
|
using Fab2ApprovalSystem.Models;
|
|
|
|
namespace Fab2ApprovalSystem.DMO;
|
|
|
|
public class PartsRequestDMO {
|
|
|
|
private readonly AppSettings _AppSettings;
|
|
private readonly IDbConnection db = new SqlConnection(GlobalVars.DB_CONNECTION_STRING);
|
|
|
|
public PartsRequestDMO(AppSettings appSettings) =>
|
|
_AppSettings = appSettings;
|
|
|
|
public IEnumerable<PartsRequestList> GetPartsRequestList() {
|
|
List<PartsRequestList> r = db.Query<PartsRequestList>("PartsRequestGetList", commandType: CommandType.StoredProcedure).ToList();
|
|
return r;
|
|
}
|
|
|
|
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);
|
|
|
|
db.Execute("PartsRequestInsert", parameters, commandType: CommandType.StoredProcedure);
|
|
|
|
pr.PRNumber = parameters.Get<int>("@PRNumber");
|
|
}
|
|
|
|
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);
|
|
|
|
db.Execute("PartsRequestUpdate", parameters, commandType: CommandType.StoredProcedure);
|
|
}
|
|
|
|
public PartsRequest Get(int PRNumber) {
|
|
DynamicParameters parameters = new();
|
|
parameters.Add("@PRNumber", value: PRNumber, dbType: DbType.Int32);
|
|
|
|
return db.Query<PartsRequest>("PartsRequestGet", parameters, commandType: CommandType.StoredProcedure).SingleOrDefault();
|
|
}
|
|
|
|
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 " +
|
|
"WHERE PRNumber = @PRNumber",
|
|
new { PRNumber = prNumber }).ToList();
|
|
return attachments;
|
|
}
|
|
|
|
public void InsertAttachment(PartsRequestAttachment attach) {
|
|
DynamicParameters parameters = new();
|
|
parameters.Add("@PRNumber", attach.PRNumber);
|
|
parameters.Add("@UserID", attach.UserID);
|
|
parameters.Add("@FileName", attach.FileName);
|
|
|
|
db.Execute("PartsRequestInsertAttachment", parameters, commandType: CommandType.StoredProcedure);
|
|
}
|
|
|
|
public string GetFileName(string attachmentID) {
|
|
DynamicParameters parameters = new();
|
|
parameters.Add("@AttachmentID", attachmentID);
|
|
var fileName = db.Query<string>("PartsRequestGetAttachmentFileName", parameters, commandType: CommandType.StoredProcedure).Single();
|
|
return fileName;
|
|
}
|
|
|
|
public void DeleteAttachment(int attachmentID) {
|
|
DynamicParameters parameters = new();
|
|
parameters.Add("@AttachmentID", attachmentID);
|
|
db.Execute("PartsRequestDeleteAttachment", parameters, commandType: CommandType.StoredProcedure);
|
|
}
|
|
|
|
public void Submit(int prNumber, int userID) {
|
|
DynamicParameters parameters = new();
|
|
parameters.Add("@PRNumber", prNumber);
|
|
parameters.Add("@UserID", userID);
|
|
db.Execute("PartsRequestSubmitForApproval", parameters, commandType: CommandType.StoredProcedure);
|
|
}
|
|
|
|
public IEnumerable<ApprovalLogHistory> GetApprovalLogHistory(int prNumber) {
|
|
DynamicParameters parameters = new();
|
|
parameters.Add("@PRNumber", prNumber);
|
|
List<ApprovalLogHistory> approverList = db.Query<ApprovalLogHistory>("PartsRequestGetApprovalLogHistory", parameters, commandType: CommandType.StoredProcedure).ToList();
|
|
return approverList;
|
|
}
|
|
|
|
public IEnumerable<MyPartsRequestList> GetMyPartsRequests(int userID) {
|
|
DynamicParameters parameters = new();
|
|
parameters.Add("@UserID", userID);
|
|
|
|
IEnumerable<MyPartsRequestList> r = db.Query<MyPartsRequestList>("PartsRequestGetListByUser", parameters, commandType: CommandType.StoredProcedure);
|
|
return r.ToList();
|
|
}
|
|
|
|
public void DeleteDocument(int prNumber, int userid) {
|
|
DynamicParameters parameters = new();
|
|
parameters.Add("@UserID", userid);
|
|
parameters.Add("@PRNumber", prNumber);
|
|
|
|
db.Execute("PartsRequestDelete", parameters, commandType: CommandType.StoredProcedure);
|
|
}
|
|
|
|
public void AttachSave(int prNumber, int userId, string fullFileName, Stream stream) {
|
|
// Some browsers send file names with full path.
|
|
// We are only interested in the file name.
|
|
var fileName = Path.GetFileName(fullFileName);
|
|
|
|
string prFolderPath = _AppSettings.AttachmentFolder + "PartsRequest\\" + prNumber.ToString();
|
|
|
|
DirectoryInfo di = new(prFolderPath);
|
|
if (!di.Exists)
|
|
di.Create();
|
|
|
|
var physicalPath = Path.Combine(prFolderPath, fileName);
|
|
|
|
using (FileStream fileStream = new(physicalPath, FileMode.Create, FileAccess.Write)) {
|
|
stream.CopyTo(fileStream);
|
|
}
|
|
PartsRequestAttachment attach = new() {
|
|
PRNumber = prNumber,
|
|
FileName = fileName,
|
|
UserID = userId,
|
|
};
|
|
InsertAttachment(attach);
|
|
}
|
|
|
|
} |