2022-11-17 14:32:36 -07:00

802 lines
27 KiB
C#

using Fab2ApprovalSystem.DMO;
using Fab2ApprovalSystem.Utilities;
using Fab2ApprovalSystem.Misc;
using Fab2ApprovalSystem.Models;
using Fab2ApprovalSystem.ViewModels;
using Kendo.Mvc.Extensions;
using Kendo.Mvc.UI;
using System;
using System.Collections.Generic;
using System.Configuration;
using System.Linq;
using System.Web;
using System.Web.Mvc;
namespace Fab2ApprovalSystem.Controllers
{
[Authorize]
[SessionExpireFilter]
[OutputCache(NoStore = true, Duration = 0, VaryByParam = "*")]
public class HomeController : Controller
{
LotDispositionDMO ldDMO = new LotDispositionDMO();
MRB_DMO mrbDMO = new MRB_DMO();
WorkflowDMO wfDMO = new WorkflowDMO();
ECN_DMO ecnDMO = new ECN_DMO();
PartsRequestDMO prDMO = new PartsRequestDMO();
UserUtilities userDMO = new UserUtilities();
UserAccountDMO originalUserDMO = new UserAccountDMO();
TrainingDMO trainingDMO = new TrainingDMO();
MiscDMO miscDMO = new MiscDMO();
/// <summary>
///
/// </summary>
/// <param name="tabName"></param>
/// <returns></returns>
public ActionResult Index(string tabName)
{
ViewBag.ActiveTabName = tabName;
return View();
}
/// <summary>
///
/// </summary>
/// <returns></returns>
public ActionResult MyTasks()
{
return View();
}
public ActionResult AllDocuments()
{
return View();
}
/// <summary>
///
/// </summary>
/// <returns></returns>
public ActionResult SpecialWorkRequestList()
{
return View();
}
public ActionResult MRBList()
{
return View();
}
public ActionResult ECNList()
{
return View();
}
public ActionResult TrainingList()
{
return View();
}
public ActionResult LotDispositionList()
{
return View();
}
public ActionResult AuditList()
{
return View();
}
public ActionResult CorrectiveActionList()
{
return View();
}
/// <summary>
///
/// </summary>
/// <param name="viewOption"></param>
/// <returns></returns>
public ActionResult ECN_TECN(string viewOption)
{
ViewBag.ViewOption = viewOption;
return View();
}
public ActionResult ChangeControlList()
{
return View();
}
/// <summary>
///
/// </summary>
/// <param name="request"></param>
/// <returns></returns>
public ActionResult GetTaskList([DataSourceRequest]DataSourceRequest request, string tabName)
{
try
{
ViewBag.ActiveTabName = tabName;
IEnumerable<IssuesViewModel> data = ldDMO.GetTaskList((int)Session[GlobalVars.SESSION_USERID]);
return Json(data.ToDataSourceResult(request), JsonRequestBehavior.AllowGet);
}
catch (Exception ex)
{
// TODO record the error
throw ex;
}
}
public ActionResult GetMyOpenActionItems([DataSourceRequest]DataSourceRequest request, string tabName)
{
try
{
ViewBag.ActiveTabName = tabName;
IEnumerable<OpenActionItemViewModel> data = ldDMO.GetMyOpenActionItems((int)Session[GlobalVars.SESSION_USERID]);
return Json(data.ToDataSourceResult(request), JsonRequestBehavior.AllowGet);
}
catch (Exception ex)
{
// TODO record the error
throw ex;
}
}
public ActionResult GetDocuments([DataSourceRequest]DataSourceRequest request, string tabName)
{
ViewBag.ActiveTabName = tabName;
//IEnumerable<IssuesViewModel> data = ldDMO.GetLotDispositions();
IEnumerable<IssuesViewModel> data = ldDMO.GetDocuments();
return Json(data.ToDataSourceResult(request));
}
/// <summary>
///
/// </summary>
/// <param name="request"></param>
/// <returns></returns>
public ActionResult GetWorkRequests([DataSourceRequest]DataSourceRequest request)
{
IEnumerable<IssuesViewModel> data = ldDMO.GetWorkRequests();
return Json(data.ToDataSourceResult(request));
}
/// <summary>
///
/// </summary>
/// <param name="request"></param>
/// <returns></returns>
public ActionResult GetChangeControlList([DataSourceRequest]DataSourceRequest request)
{
IEnumerable<ChangeControlList> data = ldDMO.GetChangeControls(int.Parse(Session[GlobalVars.SESSION_USERID].ToString()));
return Json(data.ToDataSourceResult(request));
}
/// <summary>
///
/// </summary>
/// <param name="request"></param>
/// <returns></returns>
public ActionResult GetAuditList([DataSourceRequest]DataSourceRequest request)
{
IEnumerable<AuditList> data = ldDMO.GetAuditList(int.Parse(Session[GlobalVars.SESSION_USERID].ToString()));
return Json(data.ToDataSourceResult(request));
}
/// <summary>
///
/// </summary>
/// <param name="request"></param>
/// <returns></returns>
public ActionResult GetCorrectiveActionList([DataSourceRequest]DataSourceRequest request)
{
IEnumerable<CorrectiveAction> data = ldDMO.GetCorrectiveActionList(int.Parse(Session[GlobalVars.SESSION_USERID].ToString()));
return Json(data.ToDataSourceResult(request));
}
/// <summary>
///
/// </summary>
/// <param name="request"></param>
/// <returns></returns>
public ActionResult GetMRBList([DataSourceRequest]DataSourceRequest request)
{
IEnumerable<IssuesViewModel> data = ldDMO.GetMRBList(int.Parse(Session[GlobalVars.SESSION_USERID].ToString()));
return Json(data.ToDataSourceResult(request));
}
/// <summary>
///
/// </summary>
/// <param name="request"></param>
/// <returns></returns>
public ActionResult GetLotDispositionList([DataSourceRequest]DataSourceRequest request)
{
IEnumerable<IssuesViewModel> data = ldDMO.GetLotDispositionList(int.Parse(Session[GlobalVars.SESSION_USERID].ToString()));
return Json(data.ToDataSourceResult(request));
}
/// <summary>
///
/// </summary>
/// <param name="request"></param>
/// <returns></returns>
public ActionResult GetECNList([DataSourceRequest]DataSourceRequest request)
{
IEnumerable<IssuesViewModel> data = ldDMO.GetECNList(int.Parse(Session[GlobalVars.SESSION_USERID].ToString()));
return Json(data.ToDataSourceResult(request));
}
public ActionResult GetTrainingList([DataSourceRequest]DataSourceRequest request)
{
IEnumerable<Training> data = trainingDMO.GetAllTrainings();
return Json(data.ToDataSourceResult(request));
}
/// <summary>
///
/// </summary>
/// <param name="dataType"></param>
/// <returns></returns>
public ActionResult MyECNsTECNs(string dataType)
{
ViewBag.ActiveTabName = dataType;
return View();
}
/// <summary>
///
/// </summary>
/// <param name="request"></param>
/// <returns></returns>
public ActionResult GetECN_TECNsPendingApproval([DataSourceRequest]DataSourceRequest request)
{
IEnumerable<IssuesViewModel> data = ecnDMO.GetECN_TECNPendingApprovals(int.Parse(Session[GlobalVars.SESSION_USERID].ToString()));
ViewBag.ViewOption = "Pending Approvals";
Session[GlobalVars.ECN_VIEW_OPTION] = ViewBag.ViewOption;
return Json(data.ToDataSourceResult(request));
}
/// <summary>
///
/// </summary>
/// <param name="request"></param>
/// <returns></returns>
public ActionResult GetMyExpiredTECNs([DataSourceRequest]DataSourceRequest request)
{
IEnumerable<IssuesViewModel> data = ecnDMO.GetMyExpiredTECNs(int.Parse(Session[GlobalVars.SESSION_USERID].ToString()), 7);
ViewBag.ViewOption = "Expired TECNs";
Session[GlobalVars.ECN_VIEW_OPTION] = ViewBag.ViewOption;
return Json(data.ToDataSourceResult(request));
}
public ActionResult GetAllTECNs([DataSourceRequest]DataSourceRequest request)
{
IEnumerable<IssuesViewModel> data = ecnDMO.GetAllTECNs();
ViewBag.ViewOption = "All TECNs";
Session[GlobalVars.ECN_VIEW_OPTION] = ViewBag.ViewOption;
return Json(data.ToDataSourceResult(request));
}
/// <summary>
///
/// </summary>
/// <param name="request"></param>
/// <returns></returns>
public ActionResult GetMyConvertedTECNsToECNs([DataSourceRequest]DataSourceRequest request)
{
IEnumerable<IssuesViewModel> data = ecnDMO.GetMyConvertedTECNsToECNs(int.Parse(Session[GlobalVars.SESSION_USERID].ToString()), 7);
ViewBag.ViewOption = "Converted TECNs";
Session[GlobalVars.ECN_VIEW_OPTION] = ViewBag.ViewOption;
return Json(data.ToDataSourceResult(request));
}
/// <summary>
///
/// </summary>
/// <param name="request"></param>
/// <returns></returns>
public ActionResult GetMyExpiringTECNs([DataSourceRequest]DataSourceRequest request)
{
IEnumerable<IssuesViewModel> data = ecnDMO.GetMyExpiringTECNs(int.Parse(Session[GlobalVars.SESSION_USERID].ToString()), 7);
ViewBag.ViewOption = "Expiring TECNs";
Session[GlobalVars.ECN_VIEW_OPTION] = ViewBag.ViewOption;
return Json(data.ToDataSourceResult(request));
}
/// <summary>
///
/// </summary>
/// <param name="request"></param>
/// <param name="workRequestID"></param>
/// <returns></returns>
public ActionResult GetLotList([DataSourceRequest] DataSourceRequest request, int workRequestID)
{
LotTravelerDMO LotTravDMO = new LotTravelerDMO();
return Json(LotTravDMO.GetLotListBasedOnSWRNumber(workRequestID).ToDataSourceResult(request));
}
/// <summary>
///
/// </summary>
/// <returns></returns>
public ActionResult SetOOOStatus(int delegatedTo, DateTime startDate, DateTime endDate, string tab)
{
if (Session[GlobalVars.SESSION_USERID] != null)
{
int returnValue = MiscDMO.EnableOOOStatus(int.Parse(Session[GlobalVars.SESSION_USERID].ToString()), delegatedTo, startDate, endDate);
if (returnValue == 3) // the delegator is already a delegator to someone else
{
return Content("3");
}
if (startDate <= DateTime.Today)
Session[GlobalVars.OOO] = true;
NotifyDelegation(delegatedTo, startDate, endDate);
}
return Content("");
}
/// <summary>
///
/// </summary>
/// <param name="oooUserID"></param>
public void ExpireOOOStatus(string tab)
{
if (Session[GlobalVars.SESSION_USERID] != null)
{
MiscDMO.ExpireOOOStatus(int.Parse(Session[GlobalVars.SESSION_USERID].ToString()));
Session[GlobalVars.OOO] = false;
}
}
/// <summary>
///
/// </summary>
/// <param name="request"></param>
/// <param name="issue"></param>
/// <returns></returns>
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult DeleteItem([DataSourceRequest] DataSourceRequest request, IssuesViewModel issue)
{
GlobalVars.DocumentType dType;
Enum.TryParse(issue.DocumentType, out dType);
if (dType == GlobalVars.DocumentType.MRB)
mrbDMO.DeleteMRB(issue.IssueID);
else if (dType == GlobalVars.DocumentType.LotDisposition)
ldDMO.DeleteLotDisposition(issue.IssueID);
else if (dType == GlobalVars.DocumentType.ECN)
ecnDMO.DeleteDocument(issue.IssueID, int.Parse(Session[GlobalVars.SESSION_USERID].ToString()), "ECN");
return Json(new[] { issue }.ToDataSourceResult(request, ModelState));
}
/// <summary>
///
/// </summary>
/// <returns></returns>
public ActionResult About()
{
ViewBag.Message = "Your application description page.";
return View();
}
/// <summary>
///
/// </summary>
/// <returns></returns>
public ActionResult Contact()
{
ViewBag.Message = "Your contact page.";
return View();
}
#region testing purpose
public ActionResult Edit()
{
return View(DemoHelper.Instance.ListOfModels[0]);
}
[HttpPost]
public ActionResult Edit(TestModel editTest)
{
DemoHelper.Instance.ListOfModels[0] = editTest;
return RedirectToAction("Index");
}
public static void Test()
{
string[] colorStrings = { "0", "2", "8", "blue", "Blue", "Yellow", "Red, Green" };
foreach (string colorString in colorStrings)
{
GlobalVars.Colors colorValue;
if (Enum.TryParse(colorString, true, out colorValue))
if (Enum.IsDefined(typeof(GlobalVars.Colors), colorValue) | colorValue.ToString().Contains(","))
Console.WriteLine("Converted '{0}' to {1}.", colorString, colorValue.ToString());
else
Console.WriteLine("{0} is not an underlying value of the Colors enumeration.", colorString);
else
Console.WriteLine("{0} is not a member of the Colors enumeration.", colorString);
}
}
#endregion
/// <summary>
///
/// </summary>
/// <param name="issueID"></param>
/// <param name="delegateTo"></param>
/// <param name="step"></param>
/// <param name="docType"></param>
/// <param name="ecnTypeString"></param>
public void DelegateDocumentApproval(int issueID, int delegateTo, string ecnTypeString, string title)
{
var email = "";
int delegateFrom = (int)Session[GlobalVars.SESSION_USERID];
try
{
email = wfDMO.DelegateDocumentApproval(issueID, delegateFrom, delegateTo);
EventLogDMO.Add(new WinEventLog() { IssueID = issueID, UserID = @User.Identity.Name, DocumentType = ecnTypeString , OperationType = "Delegation", Comments = "Delegated from - " + delegateFrom + " to " + delegateTo });
}
catch (Exception e)
{
string exceptionString = e.Message.ToString().Trim().Length > 500 ? "Issue=" + issueID.ToString() + " " + e.Message.ToString().Substring(0, 250) : e.Message.ToString();
Functions.WriteEvent(@User.Identity.Name + "\r\n DelegateApproval\r\n" + e.Message.ToString(), System.Diagnostics.EventLogEntryType.Error);
EventLogDMO.Add(new WinEventLog() { IssueID = issueID, UserID = @User.Identity.Name, DocumentType = " + ecnTypeString + ", OperationType = "Error", Comments = "DelegateApproval - " + exceptionString });
throw new Exception(e.Message);
}
string emailTemplate = "DelegateApproval.txt";
string userEmail = string.Empty;
string subject;
string senderName = ecnTypeString;
subject = ecnTypeString + " Delegation" + " - Email would be sent to " + email + " for Number " + issueID + ", - " + title; ;
EmailNotification en = new EmailNotification(subject, ConfigurationManager.AppSettings["EmailTemplatesPath"]);
string[] emailparams = new string[4];
emailparams[0] = issueID.ToString();
emailparams[1] = issueID.ToString();
emailparams[2] = GlobalVars.hostURL;
emailparams[3] = ecnTypeString;
userEmail = email;
en.SendNotificationEmail(emailTemplate, GlobalVars.SENDER_EMAIL, senderName, userEmail, null, subject, emailparams);
try
{
EventLogDMO.Add(new WinEventLog() { IssueID = issueID, UserID = @User.Identity.Name, DocumentType = ecnTypeString, OperationType = "Email", Comments = "Delegated to Approver: " + email });
}
catch { }
}
/// <summary>
///
/// </summary>
/// <returns></returns>
public JsonResult GetAllUsersList()
{
UserAccountDMO userDMO = new UserAccountDMO();
IEnumerable<LoginModel> userlist = userDMO.GetAllUsers();
return Json(userlist, JsonRequestBehavior.AllowGet);
}
/// <summary>
///
/// </summary>
/// <param name="data"></param>
/// <returns></returns>
public ActionResult SaveAllDocumentsFilter(string data)
{
Session["AllDocumentsFilterData"] = data;
return new EmptyResult();
}
/// <summary>
///
/// </summary>
/// <returns></returns>
public ActionResult LoadAllDocumentsFilter()
{
return Json(Session["AllDocumentsFilterData"], JsonRequestBehavior.AllowGet);
}
/// <summary>
///
/// </summary>
/// <param name="data"></param>
/// <returns></returns>
public ActionResult SaveSWRFilter(string data)
{
Session["SWRFilterData"] = data;
return new EmptyResult();
}
/// <summary>
///
/// </summary>
/// <returns></returns>
public ActionResult LoadSWRFilter()
{
return Json(Session["SWRFilterData"], JsonRequestBehavior.AllowGet);
}
/// <summary>
///
/// </summary>
/// <param name="data"></param>
/// <returns></returns>
public ActionResult SavePCRBFilter(string data)
{
Session["PCRBFilterData"] = data;
return new EmptyResult();
}
/// <summary>
///
/// </summary>
/// <returns></returns>
public ActionResult LoadPCRBFilter()
{
return Json(Session["PCRBFilterData"], JsonRequestBehavior.AllowGet);
}
public ActionResult PartsRequestList()
{
ViewBag.CanDeletePR = Session[GlobalVars.CAN_CREATE_PARTS_REQUEST];
return View();
}
public ActionResult GetPartsRequestList([DataSourceRequest]DataSourceRequest request)
{
IEnumerable<PartsRequestList> data = prDMO.GetPartsRequestList();
return Json(data.ToDataSourceResult(request));
}
public ActionResult GetMyPartsRequestsList([DataSourceRequest]DataSourceRequest request, string tabName)
{
try
{
ViewBag.ActiveTabName = tabName;
var data = prDMO.GetMyPartsRequests((int)Session[GlobalVars.SESSION_USERID]);
return Json(data.ToDataSourceResult(request), JsonRequestBehavior.AllowGet);
}
catch (Exception ex)
{
// TODO record the error
throw ex;
}
}
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult DeletePR([DataSourceRequest] DataSourceRequest request, MyPartsRequestList pr)
{
try
{
if (Convert.ToBoolean(Session[GlobalVars.CAN_CREATE_PARTS_REQUEST]) == false)
throw new Exception("Permission denied");
prDMO.DeleteDocument(pr.PRNumber, (int)Session[GlobalVars.SESSION_USERID]);
return Json(new[] { pr }.ToDataSourceResult(request, ModelState));
}
catch (Exception ex)
{
return new HttpStatusCodeResult(System.Net.HttpStatusCode.BadRequest, ex.Message);
}
}
public void NotifyDelegation(int delegatedUser, DateTime startDate, DateTime endDate)
{
LoginModel delegateFrom = originalUserDMO.GetUserByID((int)Session[GlobalVars.SESSION_USERID]);
LoginModel delegateTo = originalUserDMO.GetUserByID(delegatedUser);
List<string> emailList = new List<string>();
emailList.Add(delegateFrom.Email);
emailList.Add(delegateTo.Email);
string emailTemplate = "DelegationOn.txt";
string userEmail = string.Empty;
string subject = "Mesa Approval Delegation Notification";
string senderName = "Mesa Approval";
foreach (string email in emailList)
{
EmailNotification en = new EmailNotification(subject, ConfigurationManager.AppSettings["EmailTemplatesPath"]);
string[] emailparams = new string[5];
emailparams[0] = delegateFrom.FullName;
emailparams[1] = delegateTo.FullName;
emailparams[2] = startDate.ToString("yyyy-MM-dd");
emailparams[3] = endDate.ToString("yyyy-MM-dd");
userEmail = email;
//#if(DEBUG)
// userEmail = GlobalVars.SENDER_EMAIL;
//#endif
en.SendNotificationEmail(emailTemplate, GlobalVars.SENDER_EMAIL, senderName, userEmail, null, subject, emailparams);
}
try
{
//EventLogDMO.Add(new WinEventLog() { IssueID = issueID, UserID = @User.Identity.Name, DocumentType = ecnTypeString, OperationType = "Email", Comments = "Rejection: " + userEmail });
}
catch { }
}
public bool ProcessOoO()
{
try
{
UserAccountDMO userDMO = new UserAccountDMO();
userDMO.ProcessOoO();
return true;
}
catch
{
return false;
}
}
public bool ExpireOoO()
{
try
{
UserAccountDMO userDMO = new UserAccountDMO();
userDMO.ExpireOoO();
return true;
}
catch
{
return false;
}
}
public bool ApprovalsReminderNotifications()
{
try
{
//Get list of approvals
List<ApproveListModel> approveList = miscDMO.GetApprovalReminderList();
foreach (var item in approveList)
{
try
{
NotifyApprover(item.AssignedEmail, item.Title, item.IssueID, item.DocType);
}
catch(Exception e)
{
EventLogDMO.Add(new WinEventLog() { IssueID = item.ApprovalKey, UserID = "SYSTEM", DocumentType = "Approval Reminders", OperationType = "Email", Comments = e.Message });
}
//We want to update the last notification anyway so we don't continue trying on something that may be failing.
miscDMO.UpdateApprovalNotifyDate(item.ApprovalKey);
}
// List<ApproveListModel> approveList = miscDMO.
return true;
}
catch
{
return false;
}
}
public void NotifyApprover(string toEmail, string title, int issueId, string docType)
{
try
{
string emailSentList = "";
//List<string> emailIst = ldDMO.GetApproverEmailList(@issueID, currentStep).Distinct().ToList();
//List<string> emailIst = MiscDMO.GetApproverEmailListByDocument(@ecnNumber, currentStep, documentType).Distinct().ToList();
//string ecnCreatedByEmail = MiscDMO.GetEmail(ecnCreatedById);
string emailTemplate = "ApprovalReminders.txt";
string userEmail = string.Empty;
string subject = string.Empty;
string senderName = docType;
subject = docType + " Approval Reminder: " + title;
EmailNotification en = new EmailNotification(subject, ConfigurationManager.AppSettings["EmailTemplatesPath"]);
string[] emailparams = new string[4];
emailparams[0] = docType;
emailparams[1] = title;
emailparams[2] = issueId.ToString();
userEmail = toEmail;
//#if(DEBUG)
//string SenderEmail = "MesaFabApproval@infineon.com";
//userEmail = "jonathan.ouellette@infineon.com";
//#endif
en.SendNotificationEmail(emailTemplate, GlobalVars.SENDER_EMAIL, senderName, userEmail, "jonathan.ouellette@infineon.com", subject, emailparams);
//en.SendNotificationEmail(emailTemplate, SenderEmail, senderName, userEmail, null, subject, emailparams);
//emailSentList = ecnCreatedByEmail;
try
{
EventLogDMO.Add(new WinEventLog() { IssueID = issueId, UserID = @User.Identity.Name, DocumentType = docType, OperationType = "Email", Comments = "Approval reminders" });
}
catch { }
//EmailNotification en = new EmailNotification(subject, ConfigurationManager.AppSettings["EmailTemplatesPath"]);
//string[] emailparams = new string[4];
//emailparams[0] = issueID.ToString();
//emailparams[1] = issueID.ToString();
//emailparams[2] = GlobalVars.hostURL;
//emailparams[3] =Session[GlobalVars.SESSION_USERNAME].ToString();
//en.SendNotificationEmail(emailTemplate, GlobalVars.SENDER_EMAIL, senderName, emailIst, null, subject, emailparams);
}
catch (Exception e)
{
string detailedException = "";
try
{
detailedException = e.InnerException.ToString();
}
catch
{
detailedException = e.Message;
}
EventLogDMO.Add(new WinEventLog() { IssueID = issueId, UserID = @User.Identity.Name, DocumentType = docType, OperationType = "Email", Comments = "Approval reminders" });
throw e;
}
}
}
}