using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; using Kendo.Mvc.Extensions; using Kendo.Mvc.UI; using Fab2ApprovalSystem.Models; using Fab2ApprovalSystem.DMO; using Fab2ApprovalSystem.Misc; using System.IO; using System.Configuration; using Fab2ApprovalSystem.ViewModels; //using Ionic.Zip; using System.IO.Compression; //using ReportManagement; using Fab2ApprovalSystem.PdfGenerator; using Dapper; namespace Fab2ApprovalSystem.Controllers { [Authorize] [OutputCache(NoStore = true, Duration = 0, VaryByParam = "*")] [SessionExpireFilter] public class ECNController : PdfViewController { private const string ECN_PREFIX = "ECN_"; private const string TECN_PREFIX = "TECN_"; private const string ETECN_PREFIX = "ETECN_"; ECN_DMO ecnDMO = new ECN_DMO(); WorkflowDMO wfDMO = new WorkflowDMO(); TrainingDMO trainingDMO = new TrainingDMO(); UserAccountDMO userDMO = new UserAccountDMO(); // // GET: /ECN/ public ActionResult Index() { return View(); } // // GET: /ECN/Details/5 public ActionResult Details(int id) { return View(); } // // GET: /ECN/Create public ActionResult Create() { ECN ecn = new ECN(); try { // TODO: Add insert logic here ecn.OriginatorID = (int)Session[GlobalVars.SESSION_USERID]; ecnDMO.InsertECN(ecn); return RedirectToAction("Edit", new { issueID = ecn.ECNNumber }); } catch (Exception e) { string detailedException = ""; try { detailedException = e.InnerException.ToString(); } catch { detailedException = e.Message; } string exceptionString = e.Message.ToString().Trim().Length > 500 ? "Issue=" + ecn.ECNNumber.ToString() + e.Message.ToString().Substring(0, 250) : e.Message.ToString(); Functions.WriteEvent(@User.Identity.Name + "\r\n SubmitDocument - ECN\r\n" + ecn.ECNNumber.ToString() + "\r\n" + detailedException, System.Diagnostics.EventLogEntryType.Error); EventLogDMO.Add(new WinEventLog() { IssueID = ecn.ECNNumber, UserID = @User.Identity.Name, DocumentType = "ECN", OperationType = "Error", Comments = "SubmitDocument - " + exceptionString }); throw new Exception(e.Message); } } // // // GET: /ECN/Edit/5 public ActionResult Edit(int issueID) { int isITARCompliant = 1; ECN ecn = new ECN(); //GlobalVars.DocumentType docType = GlobalVars.DocumentType.ECN; try { //ecn = ecnDMO.GetECN(issueID); ecn = ecnDMO.GetECNForRead(issueID, out isITARCompliant, (int)Session[GlobalVars.SESSION_USERID]); //if (ecn.IsTECN && ecn.IsEmergencyTECN) // docType = GlobalVars.DocumentType.EECN; if (isITARCompliant == 0) // not ITAR Compliant { return View("UnAuthorizedAccess"); } else { //if (ecn.CloseDate != null) //{ // return RedirectToAction("ReadOnly", new { issueID = issueID }); //} if (ecn.Deleted) { return RedirectToAction("ReadOnly", new { issueID = issueID }); } if (ecn.CurrentStep >= 1) { return RedirectToAction("EditApproval", new { issueID = issueID }); } else { //ecn = ecnDMO.GetECN(issueID, out isITARCompliant, (int)Session[GlobalVars.SESSION_USERID]); if ((ecn.RecordLockIndicator && ecn.RecordLockedBy != (int)Session[GlobalVars.SESSION_USERID])) { return RedirectToAction("ReadOnly", new { issueID = issueID }); } else { ecn = ecnDMO.GetECN(issueID, out isITARCompliant, (int)Session[GlobalVars.SESSION_USERID]); ViewBag.Departments = ecnDMO.GetDepartments(); ViewBag.AffectedModules = ecnDMO.GetModules(); ViewBag.AffectedAreas = ecnDMO.GetECNAreas(); ViewBag.AffectedTechnologies = ecnDMO.GetECNTechnologies(); ViewBag.AcknowledgementTrainingByIDs = trainingDMO.GetTrainingGroups(); ViewBag.Categories = ecnDMO.GetCategories(); ViewBag.ProductFamilies = ecnDMO.GetProductFamilies(); return View(ecn); } } } } catch (Exception e) { string exceptionString = e.Message.ToString().Trim().Length > 500 ? e.Message.ToString().Substring(0, 250) : e.Message.ToString(); Functions.WriteEvent( String.Format("{0}\r\nEdit ECN\r\n{1}\r\n{2}", @User?.Identity?.Name, ecn?.ECNNumber, e.InnerException), System.Diagnostics.EventLogEntryType.Error); EventLogDMO.Add(new WinEventLog() { IssueID = issueID, UserID = @User.Identity.Name, DocumentType = "ECN", OperationType = "Error", Comments = exceptionString }); return View("Error"); } } // // POST: /ECN/Edit/5 [HttpPost] public void Edit(ECN ecn) { try { // TODO: Add update logic here ecnDMO.UpdateECN(ecn);; } catch { //return View(); } } //public JsonResult GetTechnology(int? area) //{ // List respIssue = ecnDMO.GetECNTechnology(area); // var data = respIssue.Select(s => new SelectListItem { Value = s.TechnologyID.ToString(), Text = s.Technology }); // return Json(data, JsonRequestBehavior.AllowGet); //} /// /// /// /// /// public ActionResult ReadOnly(int issueID) { int isITARCompliant = 1; ECN ecn = new ECN(); try { ecn = ecnDMO.GetECNForRead(issueID, out isITARCompliant, (int)Session[GlobalVars.SESSION_USERID]); bool trainingRequired = ecn.TrainingRequired; if (isITARCompliant == 0) // not ITAR Compliant { return View("UnAuthorizedAccess"); } else { GlobalVars.DocumentType docType = (ecn.ExpirationInProgress || ecn.ExpirationProcessed || ecn.CancellationInProgress || ecn.CancellationApproved)? GlobalVars.DocumentType.TECNCancelledExpired : GlobalVars.DocumentType.ECN; if (ecn.IsEmergencyTECN) docType = GlobalVars.DocumentType.EECN; List userList = MiscDMO.GetPendingApproversListByDocument(issueID, ecn.CurrentStep, (int)docType); ApproversListViewModel approver = userList.Find(delegate(ApproversListViewModel al) { return al.UserID == (int)Session[GlobalVars.SESSION_USERID]; }); if (approver == null) ViewBag.IsApprover = "false"; else ViewBag.IsApprover = "true"; if ((int)Session[GlobalVars.SESSION_USERID] == ecn.OriginatorID) ViewBag.IsOriginator = "true"; else ViewBag.IsOriginator = "false"; int trainingId = trainingDMO.GetTrainingId(ecn.ECNNumber); if(trainingId > 0) { bool? trainingStatus = (trainingDMO.GetTraining(trainingId)).Status; ViewBag.TrainingID = trainingId; ViewBag.TrainingStatus = trainingStatus; } ViewBag.Departments = ecnDMO.GetDepartments(); ViewBag.AffectedModules = ecnDMO.GetModules(); ViewBag.AffectedAreas = ecnDMO.GetECNAreas(); ViewBag.AffectedTechnologies = ecnDMO.GetECNTechnologies(); ViewBag.AcknowledgementTrainingByIDs = trainingDMO.GetTrainingGroups(); ViewBag.Categories = ecnDMO.GetCategories(); ViewBag.ProductFamilies = ecnDMO.GetProductFamilies(); ViewBag.ECNNumber = ecn.ECNNumber; return View(ecn); } } catch (Exception e) { string detailedException = ""; try { detailedException = e.InnerException.ToString(); } catch { detailedException = e.Message; } string exceptionString = e.Message.ToString().Trim().Length > 500 ? "IssueID=" + issueID.ToString() + " " + e.Message.ToString().Substring(0, 250) : e.Message.ToString(); Functions.WriteEvent(@User.Identity.Name + "\r\n ReadOnly ECN\r\n" + ecn.ECNNumber.ToString() + "\r\n" + detailedException, System.Diagnostics.EventLogEntryType.Error); EventLogDMO.Add(new WinEventLog() { IssueID = issueID, UserID = @User.Identity.Name, DocumentType = "ECN", OperationType = "Error", Comments = exceptionString }); throw new Exception(e.Message); } } [OutputCache(Duration = 60, VaryByCustom = "host")] public ActionResult ECNTrainingView(int issueID) { int isITARCompliant = 1; ECN ecn = new ECN(); try { ecn = ecnDMO.GetECNForRead(issueID, out isITARCompliant, (int)Session[GlobalVars.SESSION_USERID]); //bool trainingRequired = ecn.TrainingRequired; if (isITARCompliant == 0) // not ITAR Compliant { return PartialView("UnAuthorizedAccess"); } else { ViewBag.Departments = ecnDMO.GetDepartments(); ViewBag.AffectedModules = ecnDMO.GetModules(); ViewBag.AffectedAreas = ecnDMO.GetECNAreas(); ViewBag.AffectedTechnologies = ecnDMO.GetECNTechnologies(); ViewBag.AcknowledgementTrainingByIDs = ecnDMO.GetECNAcknowledgementTrainingBy(); ViewBag.Categories = ecnDMO.GetCategories(); ViewBag.ProductFamilies = ecnDMO.GetProductFamilies(); ViewBag.ECNNumber = ecn.ECNNumber; return PartialView(ecn); } } catch (Exception e) { string detailedException = ""; try { detailedException = e.InnerException.ToString(); } catch { detailedException = e.Message; } string exceptionString = e.Message.ToString().Trim().Length > 500 ? "IssueID=" + issueID.ToString() + " " + e.Message.ToString().Substring(0, 250) : e.Message.ToString(); Functions.WriteEvent(@User.Identity.Name + "\r\n ReadOnly ECN\r\n" + ecn.ECNNumber.ToString() + "\r\n" + detailedException, System.Diagnostics.EventLogEntryType.Error); EventLogDMO.Add(new WinEventLog() { IssueID = issueID, UserID = @User.Identity.Name, DocumentType = "ECN", OperationType = "Error", Comments = exceptionString }); throw new Exception(e.Message); } } public ActionResult Acknowledge(int issueID) { int isITARCompliant = 1; ECN ecn = new ECN(); try { ecn = ecnDMO.GetECNForRead(issueID, out isITARCompliant, (int)Session[GlobalVars.SESSION_USERID]); if (isITARCompliant == 0) // not ITAR Compliant { return View("UnAuthorizedAccess"); } else { GlobalVars.DocumentType docType = (ecn.ExpirationInProgress || ecn.ExpirationProcessed || ecn.CancellationInProgress || ecn.CancellationApproved) ? GlobalVars.DocumentType.TECNCancelledExpired : GlobalVars.DocumentType.ECN; if (ecn.IsEmergencyTECN) docType = GlobalVars.DocumentType.EECN; List userList = MiscDMO.GetPendingApproversListByDocument(issueID, ecn.CurrentStep, (int)docType); ApproversListViewModel approver = userList.Find(delegate (ApproversListViewModel al) { return al.UserID == (int)Session[GlobalVars.SESSION_USERID]; }); if (approver == null) ViewBag.IsApprover = "false"; else ViewBag.IsApprover = "true"; if ((int)Session[GlobalVars.SESSION_USERID] == ecn.OriginatorID) ViewBag.IsOriginator = "true"; else ViewBag.IsOriginator = "false"; ViewBag.Departments = ecnDMO.GetDepartments(); ViewBag.AffectedModules = ecnDMO.GetModules(); ViewBag.AffectedAreas = ecnDMO.GetECNAreas(); ViewBag.AffectedTechnologies = ecnDMO.GetECNTechnologies(); ViewBag.AcknowledgementTrainingByIDs = ecnDMO.GetECNAcknowledgementTrainingBy(); ViewBag.Categories = ecnDMO.GetCategories(); ViewBag.ProductFamilies = ecnDMO.GetProductFamilies(); return View(ecn); } } catch (Exception e) { string detailedException = ""; try { detailedException = e.InnerException.ToString(); } catch { detailedException = e.Message; } string exceptionString = e.Message.ToString().Trim().Length > 500 ? "IssueID=" + issueID.ToString() + " " + e.Message.ToString().Substring(0, 250) : e.Message.ToString(); Functions.WriteEvent(@User.Identity.Name + "\r\n ReadOnly ECN\r\n" + ecn.ECNNumber.ToString() + "\r\n" + detailedException, System.Diagnostics.EventLogEntryType.Error); EventLogDMO.Add(new WinEventLog() { IssueID = issueID, UserID = @User.Identity.Name, DocumentType = "ECN", OperationType = "Error", Comments = exceptionString }); throw new Exception(e.Message); } } /// /// /// /// /// public ActionResult EditApproval(int issueID) { int isITARCompliant = 1; ECN ecn = new ECN(); try { ecn = ecnDMO.GetECNForRead(issueID, out isITARCompliant, (int)Session[GlobalVars.SESSION_USERID]); if (isITARCompliant == 0) // not ITAR Compliant { return View("UnAuthorizedAccess"); } else { if (ecn.Deleted) { return RedirectToAction("ReadOnly", new { issueID = issueID }); } GlobalVars.DocumentType docType = GlobalVars.DocumentType.ECN; if (ecn.IsEmergencyTECN) docType = GlobalVars.DocumentType.EECN; if (ecn.ExpirationInProgress || ecn.ExpirationProcessed || ecn.CancellationInProgress || ecn.CancellationApproved) docType = GlobalVars.DocumentType.TECNCancelledExpired; List userList = MiscDMO.GetPendingApproversListByDocument(issueID, ecn.CurrentStep, (int)docType); ApproversListViewModel approver = userList.Find(delegate(ApproversListViewModel al) { return al.UserID == (int)Session[GlobalVars.SESSION_USERID]; }); if (approver == null) ViewBag.IsApprover = "false"; else ViewBag.IsApprover = "true"; if ((int)Session[GlobalVars.SESSION_USERID] == ecn.OriginatorID) ViewBag.IsOriginator = "true"; else ViewBag.IsOriginator = "false"; //============== //if ((ViewBag.IsApprover == "true" && ecn.CancellationInProgress) // || // (ViewBag.IsApprover == "true" && ecn.ExpirationInProgress) // || // ( // (ViewBag.IsApprover == "true" && ecn.TECNExtensionState && ecn.CurrentStep > 2) // || (ViewBag.IsApprover == "true" && ecn.CurrentStep == 3 && ecn.ConvertedFromNumber != null) // ) // || // (ViewBag.IsApprover == "true") // || // (ecn.CurrentStep <= 2 && ecn.CloseDate == null && !ecn.ReSubmitted && ecn.ConvertedFromNumber == null && ecn.TECNExtensionState == false) //) int trainingId = trainingDMO.GetTrainingId(ecn.ECNNumber); if (trainingId > 0) { bool? trainingStatus = (trainingDMO.GetTraining(trainingId)).Status; ViewBag.TrainingID = trainingId; ViewBag.TrainingStatus = trainingStatus; } if (ViewBag.IsApprover == "true" || ViewBag.IsOriginator == "true") { ecn = ecnDMO.GetECN(issueID, out isITARCompliant, (int)Session[GlobalVars.SESSION_USERID]); if (ecn.RecordLockIndicator && ecn.RecordLockedBy == (int)Session[GlobalVars.SESSION_USERID]) { ViewBag.Departments = ecnDMO.GetDepartments(); ViewBag.AffectedModules = ecnDMO.GetModules(); ViewBag.AffectedAreas = ecnDMO.GetECNAreas(); ViewBag.AffectedTechnologies = ecnDMO.GetECNTechnologies(); ViewBag.AcknowledgementTrainingByIDs = trainingDMO.GetTrainingGroups(); ViewBag.Categories = ecnDMO.GetCategories(); ViewBag.ProductFamilies = ecnDMO.GetProductFamilies(); return View(ecn); } else { return RedirectToAction("ReadOnly", new { issueID = issueID }); } } else { return RedirectToAction("ReadOnly", new { issueID = issueID }); } //if (ecn.CloseDate != null ) //{ // return RedirectToAction("ReadOnly", new { issueID = issueID }); //} //if ( // (ecn.RecordLockIndicator && ecn.RecordLockedBy != (int)Session[GlobalVars.SESSION_USERID]) // || ((ViewBag.IsApprover == "false") && (ViewBag.IsOriginator == "false")) // ) //{ // return RedirectToAction("ReadOnly", new { issueID = issueID }); //} //else //{ // ecn = ecnDMO.GetECN(issueID, out isITARCompliant, (int)Session[GlobalVars.SESSION_USERID]); // ViewBag.Departments = ecnDMO.GetDepartments(); // ViewBag.AffectedModules = ecnDMO.GetModules(); // ViewBag.AffectedAreas = ecnDMO.GetECNAreas(); // ViewBag.AffectedTechnologies = ecnDMO.GetECNTechnologies(); // ViewBag.AcknowledgementTrainingByIDs = ecnDMO.GetECNAcknowledgementTrainingBy(); // return View(ecn); //} } } catch (Exception e) { string detailedException = ""; try { detailedException = e.InnerException.ToString(); } catch { detailedException = e.Message; } string exceptionString = e.Message.ToString().Trim().Length > 500 ? "IssueID=" + issueID.ToString() + " " + e.Message.ToString().Substring(0, 250) : e.Message.ToString(); Functions.WriteEvent(@User.Identity.Name + "\r\n ReadOnly ECN\r\n" + ecn.ECNNumber.ToString() + "\r\n" + detailedException, System.Diagnostics.EventLogEntryType.Error); EventLogDMO.Add(new WinEventLog() { IssueID = issueID, UserID = @User.Identity.Name, DocumentType = "ECN", OperationType = "Error", Comments = exceptionString }); throw new Exception(e.Message); } } /// /// /// /// /// public ActionResult AttachSave(IEnumerable files, int ecnNumber) { string returnString = ""; // 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 = Path.GetFileName(file.FileName); string ecnFolderPath = Functions.GetAttachmentFolder() + "ECN\\" + ecnNumber.ToString(); DirectoryInfo di = new DirectoryInfo(ecnFolderPath); if (!di.Exists) try { di.Create(); } catch { returnString = "Error creating ECN directory."; } if (returnString == "") { var physicalPath = Path.Combine(ecnFolderPath, fileName); if (!System.IO.File.Exists(physicalPath)) { file.SaveAs(physicalPath); ECNAttachment attach = new ECNAttachment() { ECNNumber = ecnNumber, FileName = fileName, UserID = (int)Session[GlobalVars.SESSION_USERID], }; if (System.IO.File.Exists(physicalPath)) { ecnDMO.InsertECNAttachment(attach); } else { returnString = "File was not uploaded to server."; } } else { returnString = "Cannot have duplicate file names."; } } } } return Content(returnString); } /// /// /// /// /// /// public ActionResult Attachment_Read([DataSourceRequest] DataSourceRequest request, int ecnNumber) { return Json(ecnDMO.GetECNAttachments(ecnNumber).ToDataSourceResult(request), JsonRequestBehavior.AllowGet); } /// /// /// /// /// /// public ActionResult ApprovalLogHistory_Read([DataSourceRequest] DataSourceRequest request, int ecnNumber) { return Json(ecnDMO.GetECNApprovalLogHistory(ecnNumber).ToDataSourceResult(request), JsonRequestBehavior.AllowGet); } //[AcceptVerbs(HttpVerbs.Post)] /// /// /// /// /// [HttpPost] public void DeleteAttachment(int attachmentID, string fileName, int ecnNumber) { try { if (ModelState.IsValid) { ecnDMO.DeleteECNAttachment(attachmentID); //var physicalPath = Path.Combine(Server.MapPath("~/UserUploads"), fileName); //var physicalPath = Path.Combine(@"C:\Websites\Fab2ApprovalAttachments\ECN\" + ecnNumber.ToString(), fileName); var physicalPath = Path.Combine(Functions.GetAttachmentFolder() + @"ECN\" + ecnNumber.ToString(), fileName); FileInfo f = new FileInfo(physicalPath); if (f.Exists) f.Delete(); } } catch (Exception e) { string detailedException = ""; try { detailedException = e.InnerException.ToString(); } catch { detailedException = e.Message; } string exceptionString = e.Message.ToString().Trim().Length > 500 ? "AttachmentID=" + attachmentID.ToString() + " " + e.Message.ToString().Substring(0, 250) : e.Message.ToString(); Functions.WriteEvent(@User.Identity.Name + "\r\n DeleteAttachment ECN\r\n" + ecnNumber.ToString() + detailedException.ToString(), System.Diagnostics.EventLogEntryType.Error); EventLogDMO.Add(new WinEventLog() { IssueID = 999, UserID = @User.Identity.Name, DocumentType = "ECN", OperationType = "Error", Comments = "Delete Attachment " + exceptionString }); throw new Exception(e.Message); } } /// /// /// /// /// /// [AcceptVerbs(HttpVerbs.Post)] public ActionResult Attachment_Destroy([DataSourceRequest] DataSourceRequest request, Attachment attachment) { try { if (attachment != null && ModelState.IsValid) { ecnDMO.DeleteECNAttachment(attachment.AttachmentID); } } catch (Exception e) { //string exceptionString = e.Message.ToString().Trim().Length > 500 ? "Delete =" + attachmentID.ToString() + " " + e.Message.ToString().Substring(0, 250) : e.Message.ToString(); //Functions.WriteEvent(@User.Identity.Name + "\r\n AttachmentID ECN\r\n" + e.Message.ToString(), System.Diagnostics.EventLogEntryType.Error); //EventLogDMO.Add(new WinEventLog() { UserID = @User.Identity.Name, OperationType = "Error", Comments = exceptionString }); //throw new Exception(e.Message); } return Json(new[] { attachment }.ToDataSourceResult(request, ModelState)); } /// /// /// /// public ActionResult SubmitDocument(int ecnNumber, int documentType, string ecnTypeString) { int isITARCompliant = 1; try { int appoverCount = ecnDMO.SubmitDocument(ecnNumber, (int)Session[GlobalVars.SESSION_USERID], documentType, out isITARCompliant); if (isITARCompliant == 0) // not ITAR Compliant { // the content gets evaluated on the client side return Content("ITAR"); } else { if (appoverCount > 0) { NotifyApprovers(ecnNumber, (byte)GlobalVars.WorkFLowStepNumber.Step1, documentType, ecnTypeString); } else { // automaically approve current step (Step 1) beacuase there are no approvers in step 1 and move to the next step of approval Approve(ecnNumber, (byte)GlobalVars.WorkFLowStepNumber.Step1, "", documentType, ecnTypeString); // this is the Submit Level Approval } if (Request.IsAjaxRequest()) { // the content gets evaluated on the client side return Content("Redirect"); } else return Content("Invalid"); } } catch (Exception e) { string detailedException = ""; try { detailedException = e.InnerException.ToString(); } catch { detailedException = e.Message; } string exceptionString = e.Message.ToString().Trim().Length > 500 ? "Issue=" + ecnNumber.ToString() + e.Message.ToString().Substring(0, 250) : e.Message.ToString(); Functions.WriteEvent(@User.Identity.Name + "\r\n SubmitDocument\r\n" + ecnNumber.ToString() + "\r\n" + detailedException, System.Diagnostics.EventLogEntryType.Error); EventLogDMO.Add(new WinEventLog() { IssueID = ecnNumber, UserID = @User.Identity.Name, DocumentType = "ECN", OperationType = "Error", Comments = "SubmitDocument - " + exceptionString }); throw new Exception(e.Message); } } /// /// /// /// /// /// /// /// public ActionResult SubmitTECNExtension(int ecnNumber, int documentType, string ecnTypeString, DateTime extensionDate) { try { int appoverCount = ecnDMO.SubmitTECNExtensionDocument(ecnNumber, (int)Session[GlobalVars.SESSION_USERID], documentType, extensionDate); // Update the TECN Extension History try { //ecnDMO.TECNExtensionLog(ecnNumber, extensionDate); } catch (Exception e) { string detailedException = ""; try { detailedException = e.InnerException.ToString(); } catch { detailedException = e.Message; } string exceptionString = e.Message.ToString().Trim().Length > 500 ? "Issue=" + ecnNumber.ToString() + e.Message.ToString().Substring(0, 250) : e.Message.ToString(); Functions.WriteEvent(@User.Identity.Name + "\r\n TECNExtensionLog\r\n" + ecnNumber.ToString() + "\r\n" + detailedException, System.Diagnostics.EventLogEntryType.Error); EventLogDMO.Add(new WinEventLog() { IssueID = ecnNumber, UserID = @User.Identity.Name, DocumentType = "ECN", OperationType = "Error", Comments = "TECNExtensionLog - " + exceptionString }); } if (appoverCount > 0) NotifyApprovers(ecnNumber, (byte)GlobalVars.WorkFLowStepNumber.Step1, documentType, ecnTypeString); else { // automaically approve current step (Step 1) beacuase there are no approvers in step 1 and move to the next step of approval Approve(ecnNumber, (byte)GlobalVars.WorkFLowStepNumber.Step1, "", documentType, ecnTypeString); // this is the Submit Level Approval } if (Request.IsAjaxRequest()) { return Content("Redirect"); } else return Content("Invalid"); } catch (Exception e) { string detailedException = ""; try { detailedException = e.InnerException.ToString(); } catch { detailedException = e.Message; } string exceptionString = e.Message.ToString().Trim().Length > 500 ? "Issue=" + ecnNumber.ToString() + e.Message.ToString().Substring(0, 250) : e.Message.ToString(); Functions.WriteEvent(@User.Identity.Name + "\r\n SubmitDocument\r\n" + ecnNumber.ToString() + "\r\n" + detailedException, System.Diagnostics.EventLogEntryType.Error); EventLogDMO.Add(new WinEventLog() { IssueID = ecnNumber, UserID = @User.Identity.Name, DocumentType = "ECN", OperationType = "Error", Comments = "SubmitDocument - " + exceptionString }); throw new Exception(e.Message); } } /// /// /// /// public ActionResult SubmitDocument_EmergencyTECN(int ecnNumber, int documentType) { int isITARCompliant = 0; try { ecnDMO.SubmitDocument(ecnNumber, (int)Session[GlobalVars.SESSION_USERID], documentType, out isITARCompliant); if (isITARCompliant == 0) // not ITAR Compliant { return View("ITAR"); } else { if (Request.IsAjaxRequest()) { return Content("Redirect"); } else return Content("Invalid"); } } catch (Exception e) { string detailedException = ""; try { detailedException = e.InnerException.ToString(); } catch { detailedException = e.Message; } string exceptionString = e.Message.ToString().Trim().Length > 500 ? "Issue=" + ecnNumber.ToString() + e.Message.ToString().Substring(0, 250) : e.Message.ToString(); Functions.WriteEvent(@User.Identity.Name + "\r\n SubmitDocument ETECN\r\n" + ecnNumber.ToString() + "\r\n" + detailedException, System.Diagnostics.EventLogEntryType.Error); EventLogDMO.Add(new WinEventLog() { IssueID = ecnNumber, UserID = @User.Identity.Name, DocumentType = "ECN", OperationType = "Error", Comments = "SubmitDocument-ETECN - " + exceptionString }); throw new Exception(e.Message); } } /// /// /// /// /// /// public void Approve(int ecnNumber, byte currentStep, string comments, int documentType, string ecnTypeString) { try { bool lastStep = false; ECN ecn = ecnDMO.GetECN(ecnNumber); bool lastApprover = wfDMO.Approve(ecnNumber, currentStep, comments, out lastStep, (int)Session[GlobalVars.SESSION_USERID], documentType, ecn.WorkFlowNumber); while (lastApprover && !lastStep) { currentStep++; //Changed this next line of code to not pass the currently approving user. This prevents a user from approving multiple steps at once. An undesired function. lastApprover = wfDMO.Approve(ecnNumber, currentStep, comments, out lastStep, 11111111, documentType, ecn.WorkFlowNumber); NotifyApprovers(ecnNumber, currentStep, documentType, ecnTypeString); } //#if(!DEBUG) // only execute at the last step of the Approval loop if (lastApprover && lastStep) { NotifySubmitter(ecn.ECNNumber, ecnTypeString); NotifyAdmin(ecn.ECNNumber, ecnTypeString); if (ecn.TrainingRequired) { TrainingController NewTraining = new TrainingController(); NewTraining.Create(ecnNumber); } if (ecn.IsECN && ecn.ConvertedFromNumber != null) { // Set the cancellation date for the TECN ecnDMO.CancelECN(ecn.ConvertedFromNumber); //copy the TECN to the new ECN folder GenerateECNPdfDifferentLocation((int)ecn.ConvertedFromNumber, ecnNumber); } // Combine the TECN and the ECN in a zipped file for DCC task creation PostApproval(ecnNumber, documentType); if (ecn.IsECN && ecn.ConvertedFromNumber != null) { ApprovalLogDMO.Add(new ApprovalLog { IssueID = (int)ecn.ConvertedFromNumber, DocumentTypeID = documentType, OperationType = "Change to " + ecnTypeString + ecnNumber.ToString() + " Approved", UserID = (int)Session[GlobalVars.SESSION_USERID], OperationLog = "Approval of the Document conversion" }); List attachments = new List(); attachments.Add(Functions.GetAttachmentFolder() + "ECN\\" + ecnNumber + "\\ECNForm_" + ecnNumber + ".pdf"); attachments.Add(Functions.GetAttachmentFolder() + "ECN\\" + ecnNumber + "\\ECNForm_" + ecn.ConvertedFromNumber + ".pdf"); NotifyTECNAutoCancellation(ecnNumber, (int)ecn.ConvertedFromNumber, attachments); } } //#endif } catch (Exception e) { string detailedException = ""; try { detailedException = e.InnerException.ToString(); } catch { detailedException = e.Message; } string exceptionString = e.Message.ToString().Trim().Length > 500 ? "Issue=" + ecnNumber.ToString() + " Step:" + currentStep + " " + e.Message.ToString().Substring(0, 250) : e.Message.ToString(); Functions.WriteEvent(@User.Identity.Name + "\r\n Approve\r\n" + ecnNumber.ToString() + "\r\n" + detailedException, System.Diagnostics.EventLogEntryType.Error); EventLogDMO.Add(new WinEventLog() { IssueID = ecnNumber, UserID = @User.Identity.Name, DocumentType = "ECN", OperationType = "Error", Comments = "Approve - " + exceptionString }); throw new Exception(e.Message); } } /// /// /// /// void PostApproval(int ecnNumber, int documentType) { try { ECNPdf ecn = new ECNPdf(); // Generate the PDF version of the ECN form and Approval log if (GenerateECNPdf(ecnNumber, out ecn)) { // Zip up all the attached files along with the Pdf version of the ECN form and the Approval Log if (CreateZip(ecn)) { //Documentum.Process(Functions.GetAttachmentFolder() + "\\ECNZipped\\" + ecnNumber.ToString() + ".zip"); } else { // TODO How to recreate and send the files to documentum throw new Exception("Problems while generating the ZIP file. Please contact the system Administrator"); } } else { throw new Exception("Problems while generating the PDF file. Please contact the system Administrator"); } // Notify a list of people when the E-TECN is approved if (documentType == (int)GlobalVars.DocumentType.EECN) { NotifyEmergencyTECNApproval(ecnNumber, ecn.ExpirationDate); } } catch (Exception e) { string detailedException = ""; try { detailedException = e.InnerException.ToString(); } catch { detailedException = e.Message; } string exceptionString = e.Message.ToString().Trim().Length > 500 ? "Issue=" + ecnNumber.ToString() + " " + e.Message.ToString().Substring(0, 250) : e.Message.ToString(); Functions.WriteEvent(@User.Identity.Name + "\r\n ECN - PostApproval \r\n" + ecnNumber.ToString() + "\r\n" + detailedException, System.Diagnostics.EventLogEntryType.Error); EventLogDMO.Add(new WinEventLog() { IssueID = ecnNumber, UserID = @User.Identity.Name, DocumentType = "ECN", OperationType = "Error", Comments = "PostApprovalForECNsDerivedFromTECN - " + exceptionString }); throw e; } } /// /// /// /// /// //void PostApprovalForECNsDerivedFromTECN(int ecnNumber, int tecnNumber) //{ // try // { // // Generate the PDF version of the ECN form and Approval log // string sourceFile = Functions.GetAttachmentFolder() + "ECN\\" + tecnNumber + "\\ECNForm_" + tecnNumber + ".pdf"; // string destFile = Functions.GetAttachmentFolder() + "ECN\\" + ecnNumber + "\\ECNForm_" + tecnNumber + ".pdf"; // GenerateECNPdfDifferentLocation(ecnNumber, tecnNumber); // } // catch(Exception e) // { // string exceptionString = e.Message.ToString().Trim().Length > 500 ? "Issue=" + ecnNumber.ToString() + " " + e.Message.ToString().Substring(0, 250) : e.Message.ToString(); // Functions.WriteEvent(@User.Identity.Name + "\r\n ECN - PostApprovalForECNsDerivedFromTECN \r\n" + detailedException, System.Diagnostics.EventLogEntryType.Error); // EventLogDMO.Add(new WinEventLog() { IssueID = ecnNumber, UserID = @User.Identity.Name, DocumentType = "ECN", OperationType = "Error", Comments = "PostApprovalForECNsDerivedFromTECN - " + exceptionString }); // throw e; // } //} /// /// /// /// /// public void NotifySubmitter(int ecnNumber, string ecnTypeString) { try { string emailSentList = ""; ECN ecn = ecnDMO.GetECN(ecnNumber); //List emailIst = ldDMO.GetApproverEmailList(@issueID, currentStep).Distinct().ToList(); //List emailIst = MiscDMO.GetApproverEmailListByDocument(@ecnNumber, currentStep, documentType).Distinct().ToList(); int ecnCreatedById = ecn.OriginatorID; string ecnCreatedByEmail = MiscDMO.GetEmail(ecnCreatedById); string emailTemplate = "ECNApproved.txt"; string userEmail = string.Empty; string subject = string.Empty; string senderName = ecnTypeString; subject = ecnTypeString + " Approval notice for Number " + ecn.ECNNumber + ", - " + ecn.Title; EmailNotification en = new EmailNotification(subject, ConfigurationManager.AppSettings["EmailTemplatesPath"]); string[] emailparams = new string[4]; emailparams[0] = ecnNumber.ToString(); emailparams[1] = ecnNumber.ToString(); emailparams[2] = GlobalVars.hostURL; emailparams[3] = ecnTypeString; userEmail = ecnCreatedByEmail; //#if(DEBUG) //string SenderEmail = "MesaFabApproval@infineon.com"; //userEmail = "jonathan.ouellette@infineon.com"; //#endif en.SendNotificationEmail(emailTemplate, GlobalVars.SENDER_EMAIL, senderName, userEmail, null, subject, emailparams); //en.SendNotificationEmail(emailTemplate, SenderEmail, senderName, userEmail, null, subject, emailparams); emailSentList = ecnCreatedByEmail; try { EventLogDMO.Add(new WinEventLog() { IssueID = ecnNumber, UserID = @User.Identity.Name, DocumentType = ecnTypeString, OperationType = "Email", Comments = "Approvers for Step " + ":" + emailSentList }); } 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; } string exceptionString = e.Message.ToString().Trim().Length > 500 ? "Issue=" + ecnNumber.ToString() + " " + e.Message.ToString().Substring(0, 250) : e.Message.ToString(); Functions.WriteEvent(@User.Identity.Name + "\r\n ECN - Notify Approvers \r\n" + ecnNumber.ToString() + "\r\n" + detailedException, System.Diagnostics.EventLogEntryType.Error); EventLogDMO.Add(new WinEventLog() { IssueID = ecnNumber, UserID = @User.Identity.Name, DocumentType = "ECN", OperationType = "Error", Comments = "Approve - " + exceptionString }); throw e; } } public void NotifyAdmin(int ecnNumber, string ecnTypeString) { try { string emailSentList = ""; ECN ecn = ecnDMO.GetECN(ecnNumber); //List emailIst = ldDMO.GetApproverEmailList(@issueID, currentStep).Distinct().ToList(); //List emailIst = MiscDMO.GetApproverEmailListByDocument(@ecnNumber, currentStep, documentType).Distinct().ToList(); IEnumerable ecnAdminIDs = MiscDMO.GetUserIDsBySubRoleID(383); foreach (int id in ecnAdminIDs) { string ecnCreatedByEmail = MiscDMO.GetEmail(id); string emailTemplate = "ECNApproved.txt"; string userEmail = string.Empty; string subject = string.Empty; string senderName = ecnTypeString; subject = ecnTypeString + " Approval notice for Number " + ecn.ECNNumber + ", - " + ecn.Title; EmailNotification en = new EmailNotification(subject, ConfigurationManager.AppSettings["EmailTemplatesPath"]); string[] emailparams = new string[4]; emailparams[0] = ecnNumber.ToString(); emailparams[1] = ecnNumber.ToString(); emailparams[2] = GlobalVars.hostURL; emailparams[3] = ecnTypeString; userEmail = ecnCreatedByEmail; //#if(DEBUG) //string SenderEmail = "MesaFabApproval@infineon.com"; //userEmail = "jonathan.ouellette@infineon.com"; //#endif en.SendNotificationEmail(emailTemplate, GlobalVars.SENDER_EMAIL, senderName, userEmail, null, subject, emailparams); //en.SendNotificationEmail(emailTemplate, SenderEmail, senderName, userEmail, null, subject, emailparams); emailSentList = ecnCreatedByEmail; try { EventLogDMO.Add(new WinEventLog() { IssueID = ecnNumber, UserID = @User.Identity.Name, DocumentType = ecnTypeString, OperationType = "Email", Comments = "Approvers for Step " + ":" + emailSentList }); } 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; } string exceptionString = e.Message.ToString().Trim().Length > 500 ? "Issue=" + ecnNumber.ToString() + " " + e.Message.ToString().Substring(0, 250) : e.Message.ToString(); Functions.WriteEvent(@User.Identity.Name + "\r\n ECN - Notify Approvers \r\n" + ecnNumber.ToString() + "\r\n" + detailedException, System.Diagnostics.EventLogEntryType.Error); EventLogDMO.Add(new WinEventLog() { IssueID = ecnNumber, UserID = @User.Identity.Name, DocumentType = "ECN", OperationType = "Error", Comments = "Approve - " + exceptionString }); throw e; } } /// /// /// /// /// public void NotifyApprovers(int ecnNumber, byte currentStep, int documentType, string ecnTypeString) { try { string emailSentList = ""; ECN ecn = ecnDMO.GetECN(ecnNumber); //List emailIst = ldDMO.GetApproverEmailList(@issueID, currentStep).Distinct().ToList(); List emailIst = MiscDMO.GetApproverEmailListByDocument(@ecnNumber, currentStep, documentType).Distinct().ToList(); string emailTemplate = "ECNAssigned.txt"; string userEmail = string.Empty; string subject = string.Empty; string senderName = ecnTypeString; subject = ecnTypeString + " Assignment notice for Number " + ecn.ECNNumber + ", - " + ecn.Title; foreach (string email in emailIst) { EmailNotification en = new EmailNotification(subject, ConfigurationManager.AppSettings["EmailTemplatesPath"]); string[] emailparams = new string[4]; emailparams[0] = ecnNumber.ToString(); emailparams[1] = ecnNumber.ToString(); emailparams[2] = GlobalVars.hostURL; emailparams[3] = ecnTypeString; userEmail = email; //#if(DEBUG) //string SenderEmail = "MesaFabApproval@infineon.com"; //userEmail = "jonathan.ouellette@infineon.com"; //#endif en.SendNotificationEmail(emailTemplate, GlobalVars.SENDER_EMAIL, senderName, userEmail, null, subject, emailparams); //en.SendNotificationEmail(emailTemplate, SenderEmail, senderName, userEmail, null, subject, emailparams); emailSentList += email + ","; } try { EventLogDMO.Add(new WinEventLog() { IssueID = ecnNumber, UserID = @User.Identity.Name, DocumentType = ecnTypeString, OperationType = "Email", Comments = "Approvers for Step " + currentStep.ToString() + ":" + emailSentList }); } 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; } string exceptionString = e.Message.ToString().Trim().Length > 500 ? "Issue=" + ecnNumber.ToString() + " Step:" + currentStep + " " + e.Message.ToString().Substring(0, 250) : e.Message.ToString(); Functions.WriteEvent(@User.Identity.Name + "\r\n ECN - Notify Approvers \r\n" + ecnNumber.ToString() + "\r\n" + detailedException, System.Diagnostics.EventLogEntryType.Error); EventLogDMO.Add(new WinEventLog() { IssueID = ecnNumber, UserID = @User.Identity.Name, DocumentType = "ECN", OperationType = "Error", Comments = "Approve - " + exceptionString }); throw e; } } /// /// /// /// //public void NotifyRejectionToOrginator(int ecnNumber, int documentType) //{ // List emailIst = ecnDMO.GetRejectionOrginatorEmailList(@ecnNumber).Distinct().ToList(); // string emailTemplate = "ECNReject.txt"; // string userEmail = string.Empty; // string subject = "ECN Rejection"; // string senderName = "ECN"; // foreach (string email in emailIst) // { // subject = "ECN Rejection"; // EmailNotification en = new EmailNotification(subject, ConfigurationManager.AppSettings["EmailTemplatesPath"]); // string[] emailparams = new string[4]; // emailparams[0] = ecnNumber.ToString(); // emailparams[1] = ecnNumber.ToString(); // emailparams[2] = GlobalVars.hostURL; // emailparams[3] = Session[GlobalVars.SESSION_USERNAME].ToString(); // 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 = ecnNumber, UserID = @User.Identity.Name, DocumentType = "ECN", OperationType = "Email", Comments = "Rejection: " + userEmail }); // } // catch { } //} /// /// Get a list of Approvers and the status /// /// /// /// /// public ActionResult GetApproversList([DataSourceRequest] DataSourceRequest request, int issueID, byte step, bool isTECN, bool isEmergrncyTECN) { int isITARCompliant = 0; ECN ecn = new ECN(); ecn = ecnDMO.GetECNForRead(issueID, out isITARCompliant, (int)Session[GlobalVars.SESSION_USERID]); GlobalVars.DocumentType docType; // fix related to ticket #35336 if (ecn.CancellationInProgress || ecn.CancellationApproved || ecn.ExpirationInProgress || ecn.ExpirationProcessed) docType = GlobalVars.DocumentType.TECNCancelledExpired; else docType = isEmergrncyTECN ? GlobalVars.DocumentType.EECN : GlobalVars.DocumentType.ECN; return Json(MiscDMO.GetApproversListByDocument(issueID, step,(int) docType).ToDataSourceResult(request)); } /// /// /// /// public void NotifyRejectionToOrginator(int issueID, string ecnTypeString, string comments) { List emailIst = ecnDMO.GetRejectionOrginatorEmailList(@issueID).Distinct().ToList(); ECN ecn = ecnDMO.GetECN(issueID); string emailTemplate = "ECNReject.txt"; string userEmail = string.Empty; string subject = ecnTypeString + " Rejection"; string senderName = ecnTypeString; foreach (string email in emailIst) { subject = ecnTypeString + " Rejection notice for Number " + ecn.ECNNumber + ", - " + ecn.Title; EmailNotification en = new EmailNotification(subject, ConfigurationManager.AppSettings["EmailTemplatesPath"]); string[] emailparams = new string[6]; emailparams[0] = issueID.ToString(); emailparams[1] = issueID.ToString(); emailparams[2] = GlobalVars.hostURL; emailparams[3] = Session[GlobalVars.SESSION_USERNAME].ToString(); emailparams[4] = ecnTypeString; emailparams[5] = comments; 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 void NotifyTECNExtensionRejectionToOrginator(int issueID, string ecnTypeString) { List emailIst = ecnDMO.GetRejectionOrginatorEmailList(@issueID).Distinct().ToList(); ECN ecn = ecnDMO.GetECN(issueID); string emailTemplate = "TECNExtensionReject.txt"; string userEmail = string.Empty; string subject = ecnTypeString + " Rejection"; string senderName = ecnTypeString; foreach (string email in emailIst) { subject = ecnTypeString + " Extension Rejection notice for Number " + ecn.ECNNumber + ", - " + ecn.Title; EmailNotification en = new EmailNotification(subject, ConfigurationManager.AppSettings["EmailTemplatesPath"]); string[] emailparams = new string[5]; emailparams[0] = issueID.ToString(); emailparams[1] = issueID.ToString(); emailparams[2] = GlobalVars.hostURL; emailparams[3] = Session[GlobalVars.SESSION_USERNAME].ToString(); emailparams[4] = ecnTypeString; 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 void Reject(int ecnNumber, byte currentStep, string comments, int docType, string ecnTypeString) { try { // TODO // Check Rejection is for the TECN Extension int isITARCompliant = 0; ECN ecn = new ECN(); ecn = ecnDMO.GetECNForRead(ecnNumber, out isITARCompliant, (int)Session[GlobalVars.SESSION_USERID]); if (Session[GlobalVars.SESSION_USERID] != null) { if (ecn.TECNExtensionState) { wfDMO.RejectTECNExtension(ecnNumber, currentStep, comments, (int)Session[GlobalVars.SESSION_USERID], docType); NotifyTECNExtensionRejectionToOrginator(ecnNumber, ecnTypeString); } else { if (ecn.IsECN && ecn.ConvertedFromNumber != null) { ecnDMO.ECNResetTECNAtRejection(ecnNumber, (int)Session[GlobalVars.SESSION_USERID], docType); } wfDMO.Reject(ecnNumber, currentStep, comments, (int)Session[GlobalVars.SESSION_USERID], docType); NotifyRejectionToOrginator(ecnNumber, ecnTypeString, comments); } } else { Response.Redirect("~/Account/Login"); } } catch (Exception e) { string detailedException = ""; try { detailedException = e.InnerException.ToString(); } catch { detailedException = e.Message; } string exceptionString = e.Message.ToString().Trim().Length > 500 ? "Issue=" + ecnNumber.ToString() + " Step:" + currentStep + " " + e.Message.ToString().Substring(0, 250) : e.Message.ToString(); Functions.WriteEvent(@User.Identity.Name + "\r\n Reject\r\n" + ecnNumber.ToString() + "\r\n" + detailedException, System.Diagnostics.EventLogEntryType.Error); EventLogDMO.Add(new WinEventLog() { IssueID = ecnNumber, UserID = @User.Identity.Name, DocumentType = "ECN", OperationType = "Error", Comments = "Reject - " + exceptionString }); throw new Exception(e.Message); } } public void RecallDocument(int ecnNumber, byte currentStep, string comments, int docType, string ecnTypeString) { try { // TODO // Check Rejection is for the TECN Extension int isITARCompliant = 0; ECN ecn = new ECN(); ecn = ecnDMO.GetECNForRead(ecnNumber, out isITARCompliant, (int)Session[GlobalVars.SESSION_USERID]); if (Session[GlobalVars.SESSION_USERID] != null) { NotifyApproversForRecall(ecnNumber, currentStep, docType, ecnTypeString, comments); wfDMO.Recall(ecnNumber, currentStep, comments, (int)Session[GlobalVars.SESSION_USERID], docType); //NotifyRejectionToOrginator(ecnNumber, ecnTypeString, comments); } else { Response.Redirect("~/Account/Login"); } } catch (Exception e) { string detailedException = ""; try { detailedException = e.InnerException.ToString(); } catch { detailedException = e.Message; } string exceptionString = e.Message.ToString().Trim().Length > 500 ? "Issue=" + ecnNumber.ToString() + " Step:" + currentStep + " " + e.Message.ToString().Substring(0, 250) : e.Message.ToString(); Functions.WriteEvent(@User.Identity.Name + "\r\n Reject\r\n" + ecnNumber.ToString() + "\r\n" + detailedException, System.Diagnostics.EventLogEntryType.Error); EventLogDMO.Add(new WinEventLog() { IssueID = ecnNumber, UserID = @User.Identity.Name, DocumentType = "ECN", OperationType = "Error", Comments = "Reject - " + exceptionString }); throw new Exception(e.Message); } } /// /// /// /// /// /// /// public void ReAssignApproverByAdmin(int issueID, int reAssignApproverFrom, int reAssignApproverTo, byte step, int docType, string ecnTypeString) { var email = ""; try { email = wfDMO.ReAssignApproval(issueID, reAssignApproverFrom, reAssignApproverTo, step, docType); } catch (Exception e) { string detailedException = ""; try { detailedException = e.InnerException.ToString(); } catch { detailedException = e.Message; } string exceptionString = e.Message.ToString().Trim().Length > 500 ? "Issue=" + issueID.ToString() + " Step:" + step + " " + e.Message.ToString().Substring(0, 250) : e.Message.ToString(); Functions.WriteEvent(@User.Identity.Name + "\r\n ReAssignApproval\r\n" + issueID.ToString() + "\r\n" + detailedException, System.Diagnostics.EventLogEntryType.Error); EventLogDMO.Add(new WinEventLog() { IssueID = issueID, UserID = @User.Identity.Name, DocumentType = "ECN", OperationType = "Error", Comments = "ReAssignApproval - " + exceptionString }); throw new Exception(e.Message); } ECN ecn = ecnDMO.GetECN(issueID); string emailTemplate = "ECNReAssigned.txt"; string userEmail = string.Empty; string subject; string senderName = ecnTypeString; subject = ecnTypeString + " Re-Assignment" + " - ECN #" + ecn.ECNNumber + ", - " + ecn.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; //#if(DEBUG) // userEmail = "rkotian1@infineon.com"; //#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 = "ReAssign Approver: " + email }); } catch { } } [HttpPost] public void ReAssignOriginatorByAdmin(int ecnNumber, string comments, int newOriginatorId) { if (Session[GlobalVars.IS_ADMIN] == null) throw new Exception("Permission denied"); try { ecnDMO.ReassignOriginatorECN(ecnNumber, newOriginatorId, comments, (int)Session[GlobalVars.SESSION_USERID]); } catch (Exception e) { string detailedException = ""; try { detailedException = e.InnerException.ToString(); } catch { detailedException = e.Message; } string exceptionString = e.Message.ToString().Trim(); if (exceptionString.Length > 450) exceptionString = exceptionString.Substring(0, 450); Functions.WriteEvent(@User.Identity.Name + "\r\n ReAssignOriginatorByAdmin\r\n" + ecnNumber.ToString() + "\r\n" + detailedException, System.Diagnostics.EventLogEntryType.Error); EventLogDMO.Add(new WinEventLog() { IssueID = ecnNumber, UserID = @User.Identity.Name, DocumentType = "ECN", OperationType = "Error", Comments = "ReAssignOriginatorByAdmin - " + exceptionString }); throw new Exception(e.Message); } } /// /// /// /// /// /// /// public void ReAssignApproval(int issueID, int userIDs, byte step, int docType, string ecnTypeString) { var email = ""; try { email = wfDMO.ReAssignApproval(issueID, (int)Session[GlobalVars.SESSION_USERID], userIDs, step, docType); } catch (Exception e) { string detailedException = ""; try { detailedException = e.InnerException.ToString(); } catch { detailedException = e.Message; } string exceptionString = e.Message.ToString().Trim().Length > 500 ? "Issue=" + issueID.ToString() + " Step:" + step + " " + e.Message.ToString().Substring(0, 250) : e.Message.ToString(); Functions.WriteEvent(@User.Identity.Name + "\r\n ReAssignApproval\r\n" + issueID.ToString() + "\r\n" + detailedException, System.Diagnostics.EventLogEntryType.Error); EventLogDMO.Add(new WinEventLog() { IssueID = issueID, UserID = @User.Identity.Name, DocumentType = ecnTypeString, OperationType = "Error", Comments = "ReAssignApproval - " + exceptionString }); throw new Exception(e.Message); } ECN ecn = ecnDMO.GetECN(issueID); string emailTemplate = "ECNReAssigned.txt"; string userEmail = string.Empty; string subject = ecnTypeString + " Re-Assignment"; string senderName = ecnTypeString; subject = ecnTypeString + " Re-Assignment" + " - Email would be sent to " + email + " for Number " + ecn.ECNNumber + ", - " + ecn.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; //#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 = "ReAssign Approver: " + email }); } catch { } } #region #endregion /// /// /// /// //public JsonResult GetUserListForAdditionalAppprrovers() //{ // UserAccountDMO userDMO = new UserAccountDMO(); // IEnumerable userlist = userDMO.GetAllUsers(); // return Json(userlist, JsonRequestBehavior.AllowGet); //} /// /// /// /// /// /// public JsonResult GetAllUsersList() { //var userList = ldDMO.GetApprovedApproversList(issueID, currentStep); //return Json(userList, JsonRequestBehavior.AllowGet); UserAccountDMO userDMO = new UserAccountDMO(); IEnumerable userlist = userDMO.GetAllActiveUsers(); return Json(userlist, JsonRequestBehavior.AllowGet); } /// /// /// /// /// /// /// public void AddAdditionalApproval(int issueID, byte step, string userIDs, int docType, string ecnTypeString) { string emailSentList = ""; var emailArray = ""; try { emailArray = wfDMO.AddAdditionalApproval(issueID, userIDs, step, docType); } catch (Exception e) { string detailedException = ""; try { detailedException = e.InnerException.ToString(); } catch { detailedException = e.Message; } string exceptionString = e.Message.ToString().Trim().Length > 500 ? "Issue=" + issueID.ToString() + " Step:" + step + " " + " Userid:" + userIDs + " " + e.Message.ToString().Substring(0, 250) : e.Message.ToString(); Functions.WriteEvent(@User.Identity.Name + "\r\n AddAdditionalApproval\r\n" + issueID.ToString() + "\r\n" + detailedException, System.Diagnostics.EventLogEntryType.Error); EventLogDMO.Add(new WinEventLog() { IssueID = issueID, UserID = @User.Identity.Name, DocumentType = "ECN", OperationType = "Error", Comments = "AddAdditionalApproval - " + exceptionString }); throw new Exception(e.Message); } ECN ecn = ecnDMO.GetECN(issueID); string emailTemplate = "ECNAssigned.txt"; string userEmail = string.Empty; string subject = ecnTypeString + " Assignment"; string senderName = ecnTypeString; string[] emailIst = emailArray.Split(new char[] { '~' }); foreach (string email in emailIst) { if (email.Length > 0) { //subject = "Lot Disposition Assignment" + " - Email would be sent to " + email; subject = ecnTypeString + "Assignment notice for Number " + ecn.ECNNumber + ", - " + ecn.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; //#if(DEBUG) // userEmail = "rkotian1@infineon.com"; //#endif 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 = ecnTypeString, OperationType = "Email", Comments = "Additonal Approver: " + emailSentList }); } catch { } } /// /// /// /// public bool GenerateECNPdf(int ecnNumber, out ECNPdf ecn) { //DateTime? expDt; try { string outputFileName = ""; ecn = ecnDMO.GetECNPdf(ecnNumber); //expDate = ecn.ExpirationDate; //extensionDate = ecn.ExtensionDate; outputFileName = ecnNumber.ToString() + ".pdf"; string ecnFolderPath = Functions.GetAttachmentFolder() + "ECN\\" + ecnNumber.ToString(); //string ecnFolderPath = @"C:\Users\Ouellette\Desktop"; DirectoryInfo di = new DirectoryInfo(ecnFolderPath); // create the folder for the ECN if it does not exist if (!di.Exists) di.Create(); // To render a PDF instead of an HTML, all we need to do is call ViewPdf instead of View. This // requires the controller to be inherited from MyController instead of MVC's Controller. SavePdf(ecnFolderPath + "\\ECNForm_" + outputFileName, "ECNPdf", ecn); SavePdf(ecnFolderPath + "\\ECNApprovalLog_" + outputFileName, "ECNApprovalPdf", ecn); } catch (Exception ex) { EventLogDMO.Add(new WinEventLog() { IssueID = ecnNumber, UserID = @User.Identity.Name, DocumentType = "ECN", OperationType = "Generate PDF", Comments = ex.Message }); ecn = null; return false; } return true; } /// /// /// /// /// /// /// public bool GenerateECNPdfDifferentLocation(int ecnNumber, int folderName) { ECNPdf ecn = new ECNPdf(); try { string outputFileName = ""; ecn = ecnDMO.GetECNPdf(ecnNumber); //expDate = ecn.ExpirationDate; //extensionDate = ecn.ExtensionDate; outputFileName = ecnNumber.ToString() + ".pdf"; string ecnFolderPath = Functions.GetAttachmentFolder() + "ECN\\" + folderName.ToString(); DirectoryInfo di = new DirectoryInfo(ecnFolderPath); // create the folder for the ECN if it does not exist if (!di.Exists) di.Create(); // To render a PDF instead of an HTML, all we need to do is call ViewPdf instead of View. This // requires the controller to be inherited from MyController instead of MVC's Controller. SavePdf(ecnFolderPath + "\\ECNForm_" + outputFileName, "ECNPdf", ecn); } catch (Exception ex) { EventLogDMO.Add(new WinEventLog() { IssueID = ecnNumber, UserID = @User.Identity.Name, DocumentType = "ECN", OperationType = "Generate PDF", Comments = ex.Message }); ecn = null; return false; } return true; } /// /// /// /// /// /// public ActionResult PrintECNPdf(int ecnNumber) { ECNPdf ecn; try { //string outputFileName = ""; ecn = ecnDMO.GetECNPdf(ecnNumber); // To render a PDF instead of an HTML, all we need to do is call ViewPdf instead of View. This // requires the controller to be inherited from MyController instead of MVC's Controller. return this.ViewPdf("", "ECNPdf", ecn); } catch (Exception ex) { EventLogDMO.Add(new WinEventLog() { IssueID = ecnNumber, UserID = @User.Identity.Name, DocumentType = "ECN", OperationType = "Print PDF", Comments = ex.Message }); ecn = null; return Content(""); } //return true; } /// /// /// /// public void NotifyEmergencyTECNApproval(int ecnNumber, DateTime? expDate) { string ecnFolderPath = Functions.GetAttachmentFolder() + "E-TECNZipped\\" + ETECN_PREFIX + ecnNumber.ToString() + ".zip"; string emailSentList = ""; List emailIst = MiscDMO.GetEmergencyTECNApprovalNotifyList(ecnNumber).Distinct().ToList(); string emailTemplate = "ETECNApproved.txt"; string userEmail = string.Empty; string subject = "E-TECN Approved"; string senderName = "E-TECN"; ECN ecn = ecnDMO.GetECN(ecnNumber); subject = "E-TECN Approved notice for Number " + ecn.ECNNumber + ", - " + ecn.Title; EmailNotification en = new EmailNotification(subject, ConfigurationManager.AppSettings["EmailTemplatesPath"]); string[] emailparams = new string[5]; emailparams[0] = ecnNumber.ToString(); emailparams[1] = ecnNumber.ToString(); emailparams[2] = GlobalVars.hostURL; emailparams[3] = "E-TECN"; emailparams[4] = expDate.ToString(); //#if(DEBUG) // userEmail = "rkotian1@infineon.com"; //#endif if (IsITAR(ecn)) en.SendNotificationEmail(emailTemplate, GlobalVars.SENDER_EMAIL, senderName, emailIst, null, subject, emailparams); else en.SendNotificationEmailWithAttachment(emailTemplate, GlobalVars.SENDER_EMAIL, senderName, emailIst, null, subject, ecnFolderPath, emailparams); //emailSentList += email + ","; emailSentList = String.Join(", ", emailIst.Distinct().ToArray()) ; try { EventLogDMO.Add(new WinEventLog() { IssueID = ecnNumber, UserID = @User.Identity.Name, DocumentType = "E-TECN", OperationType = "Email", Comments = "Approvers for Step 1:" + emailSentList }); } catch { } } /// /// /// /// /// /// /// public void NotifyApproversForCancellation(int ecnNumber, byte currentStep, int documentType, string ecnTypeString) { ECN ecn = ecnDMO.GetECN(ecnNumber); string emailSentList = ""; //List emailIst = ldDMO.GetApproverEmailList(@issueID, currentStep).Distinct().ToList(); List emailIst = MiscDMO.GetApproverEmailListByDocument(@ecnNumber, currentStep, documentType).Distinct().ToList(); string emailTemplate = "TECNCancellationApproval.txt"; string userEmail = string.Empty; string subject = ecnTypeString + " Cancellation Approval Required - " + ecnNumber + " for " + ecn.Title + ", Cancellation initiated on :" + ecn.CancellationDate; string senderName = ecnTypeString; foreach (string email in emailIst) { EmailNotification en = new EmailNotification(subject, ConfigurationManager.AppSettings["EmailTemplatesPath"]); string[] emailparams = new string[4]; emailparams[0] = ecnNumber.ToString(); emailparams[1] = ecnNumber.ToString(); emailparams[2] = GlobalVars.hostURL; emailparams[3] = ecnTypeString; userEmail = email; //#if(DEBUG) // userEmail = "rkotian1@infineon.com"; //#endif en.SendNotificationEmail(emailTemplate, GlobalVars.SENDER_EMAIL, senderName, userEmail, null, subject, emailparams); emailSentList += email + ","; } try { EventLogDMO.Add(new WinEventLog() { IssueID = ecnNumber, UserID = @User.Identity.Name, DocumentType = ecnTypeString, OperationType = "Email", Comments = "Approvers for Step " + currentStep.ToString() + ":" + emailSentList }); } catch { } } /// /// /// /// /// /// /// public void NotifyApproversForRecall(int ecnNumber, byte currentStep, int documentType, string ecnTypeString, string recallComments) { ECN ecn = ecnDMO.GetECN(ecnNumber); string emailSentList = ""; //List emailIst = ldDMO.GetApproverEmailList(@issueID, currentStep).Distinct().ToList(); List emailIst = MiscDMO.GetApproverEmailListByDocument(@ecnNumber, currentStep, documentType).Distinct().ToList(); emailIst.Add("Jeanne.McIntyre@infineon.com"); emailIst.Add("Jonathan.Ouellette@infineon.com"); string emailTemplate = "ECNRecallApproval.txt"; string userEmail = string.Empty; string subject = ecnTypeString + " Recalled - " + ecnNumber + " for " + ecn.Title + ", Recall initiated on :" + DateTime.Now.ToString(); string senderName = ecnTypeString; foreach (string email in emailIst) { EmailNotification en = new EmailNotification(subject, ConfigurationManager.AppSettings["EmailTemplatesPath"]); string[] emailparams = new string[5]; emailparams[0] = ecnNumber.ToString(); emailparams[1] = ecnNumber.ToString(); emailparams[2] = GlobalVars.hostURL; emailparams[3] = ecnTypeString; emailparams[4] = recallComments; userEmail = email; //#if(DEBUG) // userEmail = "rkotian1@infineon.com"; //#endif en.SendNotificationEmail(emailTemplate, GlobalVars.SENDER_EMAIL, senderName, userEmail, null, subject, emailparams); emailSentList += email + ","; } try { EventLogDMO.Add(new WinEventLog() { IssueID = ecnNumber, UserID = @User.Identity.Name, DocumentType = ecnTypeString, OperationType = "Email", Comments = "Approvers for Step " + currentStep.ToString() + ":" + emailSentList }); } catch { } } /// /// /// /// /// /// /// public void NotifyApproversForExpiration(int ecnNumber, byte currentStep, int documentType, string ecnTypeString) { ECN ecn = ecnDMO.GetECN(ecnNumber); string emailSentList = ""; //List emailIst = ldDMO.GetApproverEmailList(@issueID, currentStep).Distinct().ToList(); List emailIst = MiscDMO.GetApproverEmailListByDocument(@ecnNumber, currentStep, documentType).Distinct().ToList(); string emailTemplate = "TECNExpirationApproval.txt"; string userEmail = string.Empty; string subject = " TECN Expiration Approval Reqquired - " + ecnTypeString + "# " + ecnNumber + " for " + ecn.Title + ", Expired:" + ecn.ExpirationDate; string senderName = ecnTypeString; foreach (string email in emailIst) { EmailNotification en = new EmailNotification(subject, ConfigurationManager.AppSettings["EmailTemplatesPath"]); string[] emailparams = new string[4]; emailparams[0] = ecnNumber.ToString(); emailparams[1] = ecnNumber.ToString(); emailparams[2] = GlobalVars.hostURL; emailparams[3] = ecnTypeString; userEmail = email; #if(DEBUG) userEmail = GlobalVars.SENDER_EMAIL; #endif en.SendNotificationEmail(emailTemplate, GlobalVars.SENDER_EMAIL, senderName, userEmail, null, subject, emailparams); emailSentList += email + ","; } try { EventLogDMO.Add(new WinEventLog() { IssueID = ecnNumber, UserID = @User.Identity.Name, DocumentType = ecnTypeString, OperationType = "Email", Comments = "Approvers for Step " + currentStep.ToString() + ":" + emailSentList }); } catch { } } /// /// /// /// public void NotifyTECNCancellation(int ecnNumber, string ecnFolderPath) { //string ecnFolderPath = Functions.GetAttachmentFolder() + "TECNCancelledZipped\\" + TECN_PREFIX + ecnNumber.ToString() + ".zip"; ECN ecn = ecnDMO.GetECN(ecnNumber); string emailSentList = ""; List emailIst = MiscDMO.GetTECNCancelledApprovalNotifyList(ecnNumber).Distinct().ToList(); List notificationUserList = ecnDMO.GetTECNNotificationUsers().ToList(); foreach (int userId in notificationUserList) { string email = userDMO.GetUserEmailByID(userId.ToString()); if (email != null && !emailIst.Contains(email)) emailIst.Add(email); } string emailTemplate = "TECNCancelled.txt"; string userEmail = string.Empty; string subject = string.Empty; if (ecn.CancellationApprovalDate == null) { subject = "TECN Cancellation Initiated Notice - " + ecnNumber + " for " + ecn.Title + ", Cancellation Initiated on:" + DateTime.Now; } else { subject = "TECN Cancellation Approved Notice - " + ecnNumber + " for " + ecn.Title + ", Cancelled:" + ecn.CancellationApprovalDate; } string senderName = "ECN"; //foreach (string email in emailIst) //{ EmailNotification en = new EmailNotification(subject, ConfigurationManager.AppSettings["EmailTemplatesPath"]); string[] emailparams = new string[5]; emailparams[0] = ecnNumber.ToString(); emailparams[1] = ecnNumber.ToString(); emailparams[2] = GlobalVars.hostURL; emailparams[3] = "TECN"; emailparams[4] = DateTime.Now.ToString(); //userEmail = email; #if(DEBUG) userEmail = GlobalVars.SENDER_EMAIL; #endif //en.SendNotificationEmailWithAttachment(emailTemplate, "rkotian1@irf.com", senderName, userEmail, null, subject, ecnFolderPath, emailparams); if (IsITAR(ecn)) en.SendNotificationEmail(emailTemplate, GlobalVars.SENDER_EMAIL, senderName, emailIst, null, subject, emailparams); else en.SendNotificationEmailWithAttachment(emailTemplate, GlobalVars.SENDER_EMAIL, senderName, emailIst, null, subject, ecnFolderPath, emailparams); //emailSentList += email + ","; emailSentList = String.Join(", ", emailIst.Distinct().ToArray()); //} try { EventLogDMO.Add(new WinEventLog() { IssueID = ecnNumber, UserID = @User.Identity.Name, DocumentType = "E-TECN", OperationType = "Email", Comments = "Approvers for Cancellation :" + emailSentList }); } catch { } } /// /// /// /// /// public void NotifyTECNAutoCancellation(int ecnNumber, int tecnNumber, List attachments) { //string ecnFolderPath = Functions.GetAttachmentFolder() + "TECNCancelledZipped\\" + TECN_PREFIX + ecnNumber.ToString() + ".zip"; ECN ecn = ecnDMO.GetECN(tecnNumber); string emailSentList = ""; List emailIst = MiscDMO.GetTECNCancelledApprovalNotifyList(ecnNumber).Distinct().ToList(); string emailTemplate = "TECNAutoCancelled.txt"; string userEmail = string.Empty; string subject = string.Empty; subject = "TECN Conversion and Cancellation Notice - " + tecnNumber + " for " + ecn.Title + ", Converted on:" + DateTime.Now; string senderName = "ECN"; //foreach (string email in emailIst) //{ EmailNotification en = new EmailNotification(subject, ConfigurationManager.AppSettings["EmailTemplatesPath"]); string[] emailparams = new string[6]; emailparams[0] = tecnNumber.ToString(); emailparams[1] = tecnNumber.ToString(); emailparams[2] = GlobalVars.hostURL; emailparams[3] = "TECN"; emailparams[4] = DateTime.Now.ToString(); emailparams[5] = ecnNumber.ToString(); //userEmail = email; #if(DEBUG) userEmail = GlobalVars.SENDER_EMAIL; #endif //en.SendNotificationEmailWithAttachment(emailTemplate, "rkotian1@irf.com", senderName, userEmail, null, subject, ecnFolderPath, emailparams); if (IsITAR(ecn)) en.SendNotificationEmail(emailTemplate, GlobalVars.SENDER_EMAIL, senderName, emailIst, null, subject, emailparams); else en.SendNotificationEmailWithAttachments(emailTemplate, GlobalVars.SENDER_EMAIL, senderName, emailIst, null, subject, attachments, emailparams); //emailSentList += email + ","; emailSentList = String.Join(", ", emailIst.Distinct().ToArray()); //} try { EventLogDMO.Add(new WinEventLog() { IssueID = ecnNumber, UserID = @User.Identity.Name, DocumentType = "E-TECN", OperationType = "Email", Comments = "Approvers for Cancellation :" + emailSentList }); } catch { } } /// /// /// /// public void NotifyTECNExpiration(int ecnNumber, string ecnFolderPath) { ECN ecn = ecnDMO.GetECN(ecnNumber); //string ecnFolderPath = Functions.GetAttachmentFolder() + "TECNExpiredZipped\\" + TECN_PREFIX + ecnNumber.ToString() + ".zip"; string emailSentList = ""; List emailIst = MiscDMO.GetEmergencyTECNApprovalNotifyList(ecnNumber).Distinct().ToList(); string emailTemplate = "TECNExpired.txt"; string userEmail = string.Empty; string subject = "TECN Expiration Approved Notice - " + ecnNumber + " for " + ecn.Title + ", Expired:" + ecn.ExpirationDate; string senderName = "ECN"; //foreach (string email in emailIst) //{ EmailNotification en = new EmailNotification(subject, ConfigurationManager.AppSettings["EmailTemplatesPath"]); string[] emailparams = new string[5]; emailparams[0] = ecnNumber.ToString(); emailparams[1] = ecnNumber.ToString(); emailparams[2] = GlobalVars.hostURL; emailparams[3] = "TECN"; emailparams[4] = ecn.ExpirationDate.Value.ToShortDateString(); //userEmail = email; //#if(DEBUG) // userEmail = "rkotian1@infineon.com"; //#endif //en.SendNotificationEmailWithAttachment(emailTemplate, "rkotian1@infineon.com", senderName, userEmail, null, subject, ecnFolderPath, emailparams); if (IsITAR(ecn)) en.SendNotificationEmail(emailTemplate, GlobalVars.SENDER_EMAIL, senderName, emailIst, null, subject, emailparams); else en.SendNotificationEmailWithAttachment(emailTemplate, GlobalVars.SENDER_EMAIL, senderName, emailIst, null, subject, ecnFolderPath, emailparams); //emailSentList += email + ","; emailSentList = String.Join(", ", emailIst.Distinct().ToArray()); //} try { EventLogDMO.Add(new WinEventLog() { IssueID = ecnNumber, UserID = @User.Identity.Name, DocumentType = "TECN", OperationType = "Email", Comments = "Approvers for Expiration:" + emailSentList }); } catch { } } /// /// /// /// bool CreateZip(ECNPdf ecn) { try { string sourceDirectory = Functions.GetAttachmentFolder() + "ECN\\" + ecn.ECNNumber.ToString() + "\\"; string outputFullFilePath = ""; string outputFileName; if (ecn.IsTECN) { if (ecn.ExtensionDate != null) outputFileName = TECN_PREFIX + ecn.ECNNumber.ToString() + "_Extension.zip"; else outputFileName = TECN_PREFIX + ecn.ECNNumber.ToString() + ".zip"; outputFullFilePath = Functions.GetAttachmentFolder() + "\\ECNZipped\\" + outputFileName; } else if (ecn.IsEmergencyTECN) // Transfer it to different folder , coz documentum does not need to have a Workflow Item created for Emergency TECN { outputFileName = ETECN_PREFIX + ecn.ECNNumber.ToString() + ".zip"; outputFullFilePath = Functions.GetAttachmentFolder() + "\\E-TECNZipped\\" + outputFileName; } else { outputFileName = ECN_PREFIX + ecn.ECNNumber.ToString() + ".zip"; outputFullFilePath = Functions.GetAttachmentFolder() + "\\ECNZipped\\" + outputFileName; } Zipper zip = new Zipper(); zip.CreateZip(outputFullFilePath, sourceDirectory); } catch(Exception ex) { EventLogDMO.Add(new WinEventLog() { IssueID = ecn.ECNNumber, UserID = @User.Identity.Name, DocumentType = ecn.IsECN? "ECN" : (ecn.IsEmergencyTECN? "E-TECN" : "TECN"), OperationType = "Error", Comments = ex.Message }); return false; } return true; } /// /// /// /// /// /// public void AddEECNApproval(int ecnNumber, byte step, string engUserIDs, string OpUserIDs) { // it is always going to be the first step step = 1; string emailSentList = ""; var emailArray = ""; try { emailArray = wfDMO.AddEECNApproval(ecnNumber, step, (int)GlobalVars.DocumentType.EECN, engUserIDs, OpUserIDs); } catch (Exception e) { string detailedException = ""; try { detailedException = e.InnerException.ToString(); } catch { detailedException = e.Message; } string exceptionString = e.Message.ToString().Trim().Length > 500 ? "Issue=" + ecnNumber.ToString() + " Step:" + step + " " + " Userid:" + engUserIDs + " - " + OpUserIDs + " - " + e.Message.ToString().Substring(0, 250) : e.Message.ToString(); Functions.WriteEvent(@User.Identity.Name + "\r\n AddEECNApproval\r\n" + detailedException, System.Diagnostics.EventLogEntryType.Error); EventLogDMO.Add(new WinEventLog() { IssueID = ecnNumber, UserID = @User.Identity.Name, DocumentType = "E-TECN ", OperationType = "Error", Comments = "AddEECNApproval - " + exceptionString }); throw new Exception(e.Message); } ECN ecn = ecnDMO.GetECN(ecnNumber); string emailTemplate = "ECNAssigned.txt"; string userEmail = string.Empty; string subject = "E-TECN Assignment"; string senderName = "E-TECN"; string[] emailIst = emailArray.Split(new char[] { '~' }); foreach (string email in emailIst) { if (email.Length > 0) { subject = "E-TECN Assignment notice for Number " + ecn.ECNNumber + ", - " + ecn.Title; EmailNotification en = new EmailNotification(subject, ConfigurationManager.AppSettings["EmailTemplatesPath"]); string[] emailparams = new string[4]; emailparams[0] = ecnNumber.ToString(); emailparams[1] = ecnNumber.ToString(); emailparams[2] = GlobalVars.hostURL; emailparams[3] = "E-TECN"; userEmail = email; //#if(DEBUG) // userEmail = "rkotian1@infineon.com"; //#endif en.SendNotificationEmail(emailTemplate, GlobalVars.SENDER_EMAIL, senderName, userEmail, null, subject, emailparams); emailSentList += email + ","; } } try { EventLogDMO.Add(new WinEventLog() { IssueID = ecnNumber, UserID = @User.Identity.Name, DocumentType = "E-TECN", OperationType = "Email", Comments = "Additonal Approver: " + emailSentList }); } catch { } } /// /// /// /// /// public void SaveAfterSubmitByApprover(int ecnNumber, string implementationDetails) { try { ecnDMO.SaveAfterSubmitByApprover(ecnNumber, implementationDetails); } catch (Exception e) { string detailedException = ""; try { detailedException = e.InnerException.ToString(); } catch { detailedException = e.Message; } string exceptionString = e.Message.ToString().Trim().Length > 500 ? "Issue=" + ecnNumber.ToString() + " - " + e.Message.ToString().Substring(0, 250) : e.Message.ToString(); Functions.WriteEvent(@User.Identity.Name + "\r\n SaveAfterSubmitByApprover\r\n" + ecnNumber.ToString() + "\r\n" + detailedException, System.Diagnostics.EventLogEntryType.Error); EventLogDMO.Add(new WinEventLog() { IssueID = ecnNumber, UserID = @User.Identity.Name, DocumentType = "E-TECN ", OperationType = "Error", Comments = "SaveAfterSubmitByApprover - " + exceptionString }); throw new Exception(e.Message); } } /// /// /// /// /// public void DeleteDocument(int ecnNumber, string ecnTypeString) { try { ecnDMO.DeleteDocument(ecnNumber, (int)Session[GlobalVars.SESSION_USERID], ecnTypeString); } catch (Exception e) { string detailedException = ""; try { detailedException = e.InnerException.ToString(); } catch { detailedException = e.Message; } string exceptionString = e.Message.ToString().Trim().Length > 500 ? "Issue=" + ecnNumber.ToString() + " - " + e.Message.ToString().Substring(0, 250) : e.Message.ToString(); Functions.WriteEvent(@User.Identity.Name + "\r\n DeleteDocument\r\n" + ecnNumber.ToString() + "\r\n" + detailedException, System.Diagnostics.EventLogEntryType.Error); EventLogDMO.Add(new WinEventLog() { IssueID = ecnNumber, UserID = @User.Identity.Name, DocumentType = "", OperationType = "Error", Comments = "DeleteDocument - " + exceptionString }); throw new Exception(e.Message); } } public void DeleteDocumentBySubmitter(int ecnNumber, string ecnTypeString) { ECN ecn = ecnDMO.GetECN(ecnNumber); int submitterId = ecn.OriginatorID; if (submitterId == (int)Session[GlobalVars.SESSION_USERID]) { try { ecnDMO.DeleteDocument(ecnNumber, (int)Session[GlobalVars.SESSION_USERID], ecnTypeString); } catch (Exception e) { string detailedException = ""; try { detailedException = e.InnerException.ToString(); } catch { detailedException = e.Message; } string exceptionString = e.Message.ToString().Trim().Length > 500 ? "Issue=" + ecnNumber.ToString() + " - " + e.Message.ToString().Substring(0, 250) : e.Message.ToString(); Functions.WriteEvent(@User.Identity.Name + "\r\n DeleteDocument\r\n" + ecnNumber.ToString() + "\r\n" + detailedException, System.Diagnostics.EventLogEntryType.Error); EventLogDMO.Add(new WinEventLog() { IssueID = ecnNumber, UserID = @User.Identity.Name, DocumentType = "", OperationType = "Error", Comments = "DeleteDocument - " + exceptionString }); throw new Exception(e.Message); } } else { } } /// /// /// /// /// /// /// /// public ActionResult ReSubmitDocument(int ecnNumber, int documentType, string ecnTypeString, string oldECNTypeString, string descriptionOfChange, string reasonForChange, string categoryId = "") { // Update ECN Type in the ECN table ECN ecn = new ECN(); int isITARCompliant = 1; int newECNNumber = 0; int catId = 0; Int32.TryParse(categoryId, out catId); try { int appoverCount = ecnDMO.ReSubmitDocument( ecnNumber, (int)Session[GlobalVars.SESSION_USERID], documentType, out isITARCompliant, descriptionOfChange, reasonForChange, ecnTypeString, out newECNNumber, catId); if (isITARCompliant == 0) // not ITAR Compliant { // the content gets evaluated on the client side return Content("ITAR"); } else { //TODO - COPY ATTACHMENTS Functions.CopyAttachments(ecnNumber, newECNNumber); // Log into the Approval Log try { ecn = ecnDMO.GetECN(ecnNumber); //ecnDMO.UpdateECNType(ecnNumber, ecnTypeString); ApprovalLogDMO.Add(new ApprovalLog { IssueID = ecnNumber, DocumentTypeID = documentType, OperationType = "Changed From " + oldECNTypeString + " To " + ecnTypeString, UserID = (int)Session[GlobalVars.SESSION_USERID], OperationLog = "Changed the Document Type" }); } catch (Exception e) { string detailedException = ""; try { detailedException = e.InnerException.ToString(); } catch { detailedException = e.Message; } string exceptionString = e.Message.ToString().Trim().Length > 500 ? "Issue=" + ecnNumber.ToString() + e.Message.ToString().Substring(0, 250) : e.Message.ToString(); Functions.WriteEvent(@User.Identity.Name + "\r\n ReSubmitDocument (ApprovalLogDMO)\r\n" + detailedException, System.Diagnostics.EventLogEntryType.Error); EventLogDMO.Add(new WinEventLog() { IssueID = ecnNumber, UserID = @User.Identity.Name, DocumentType = ecnTypeString, OperationType = "Error", Comments = "ReSubmitDocument (ApprovalLogDMO)" + exceptionString }); } // Add to the Document Change Log try { ECNTypeChangeLogDMO.Add(new ECNTypeChangeLog { ECNNumber = ecnNumber, UserID = (int)Session[GlobalVars.SESSION_USERID], ECNTypeFrom = oldECNTypeString, ECNTypeTo = ecnTypeString }); } catch (Exception e) { string detailedException = ""; try { detailedException = e.InnerException.ToString(); } catch { detailedException = e.Message; } string exceptionString = e.Message.ToString().Trim().Length > 500 ? "Issue=" + ecnNumber.ToString() + e.Message.ToString().Substring(0, 250) : e.Message.ToString(); Functions.WriteEvent(@User.Identity.Name + "\r\n ReSubmitDocument (ECNTypeChangeLogDMO)\r\n" + ecnNumber.ToString() + "\r\n" + detailedException, System.Diagnostics.EventLogEntryType.Error); EventLogDMO.Add(new WinEventLog() { IssueID = ecnNumber, UserID = @User.Identity.Name, DocumentType = ecnTypeString, OperationType = "Error", Comments = "ReSubmitDocument (ECNTypeChangeLogDMO)" + exceptionString }); } //if (appoverCount > 0) //{ // NotifyApprovers(newECNNumber, (byte)GlobalVars.WorkFLowStepNumber.Step1, documentType, ecnTypeString); //} //else //{ // // automaically approve current step (Step 1) beacuase there are no approvers in step 1 and move to the next step of approval // Approve(newECNNumber, (byte)GlobalVars.WorkFLowStepNumber.Step1, "", documentType, ecnTypeString); // this is the Submit Level Approval //} if (Request.IsAjaxRequest()) { // the content gets evaluated on the client side return Content("Redirect~" + newECNNumber); } else return Content("Invalid"); } } catch (Exception e) { string detailedException = ""; try { detailedException = e.InnerException.ToString(); } catch { detailedException = e.Message; } string exceptionString = e.Message.ToString().Trim().Length > 500 ? "Issue=" + ecnNumber.ToString() + e.Message.ToString().Substring(0, 250) : e.Message.ToString(); Functions.WriteEvent(@User.Identity.Name + "\r\n SubmitDocument\r\n" + ecnNumber.ToString() + "\r\n" + detailedException, System.Diagnostics.EventLogEntryType.Error); EventLogDMO.Add(new WinEventLog() { IssueID = ecnNumber, UserID = @User.Identity.Name, DocumentType = "ECN", OperationType = "Error", Comments = "Re-SubmitDocument - " + exceptionString }); throw new Exception(e.Message); } } /// /// /// /// /// public ActionResult PCRBExists(int pcrb) { return Content(ecnDMO.PCRBExists(pcrb).ToString()); } /// /// /// /// public ActionResult CancelDocument(int ecnNumber, byte currentStep, int documentType, string ecnTypeString) { // log the cancelled event //EventLogDMO.Add(new WinEventLog() { IssueID = ecnNumber, UserID = @User.Identity.Name, DocumentType = docTypeString, OperationType = "Cancelled", Comments = "Cancelled the document" }); // Set the ECN Current step to the last step of the document type, which is the execution step bool lastApproverAndLastStep = false; int appoverCount = ecnDMO.SubmitForCancellation(ecnNumber, (byte)GlobalVars.WorkFLowStepNumber.Step1, (int)Session[GlobalVars.SESSION_USERID], documentType, ecnTypeString, (int)GlobalVars.TECNExpirationCancellation.Cancellation); if (appoverCount > 0) { NotifyApproversForCancellation(ecnNumber, currentStep, documentType, ecnTypeString); } else // TODO Automatically close the { lastApproverAndLastStep = ApproveCancellation(ecnNumber, currentStep, "", documentType, ecnTypeString); // automaically approve current step (Step 1) because there are no approvers in step 1 and move to the next step of approval //Approve(ecnNumber, currentStep, "", documentType, ecnTypeString); // this is the Submit Level Approval } // if there are approvers dont wait for it to finish the approval loop for sending cancel notications. if (!lastApproverAndLastStep) { // send notifications try { lastApproverAndLastStep = true; ECNPdf ecn = new ECNPdf(); GenerateECNPdf(ecnNumber, out ecn); string sourceDirectory = Functions.GetAttachmentFolder() + "ECN\\" + ecnNumber.ToString() + "\\"; string outputFullFilePath = ""; string outputFileName; outputFileName = TECN_PREFIX + ecnNumber.ToString() + ".zip"; outputFullFilePath = Functions.GetAttachmentFolder() + "\\TECNCancelledZipped\\" + outputFileName; // Create the zipped package Zipper zip = new Zipper(); zip.CreateZip(outputFullFilePath, sourceDirectory); NotifyTECNCancellation(ecnNumber, outputFullFilePath); } catch (Exception ex) { EventLogDMO.Add(new WinEventLog() { IssueID = ecnNumber, UserID = @User.Identity.Name, DocumentType = "TECN", OperationType = "Error", Comments = ex.Message }); } } int trainingId = trainingDMO.GetTrainingId(ecnNumber); trainingDMO.DeleteTraining(trainingId); if (Request.IsAjaxRequest()) { // the content gets evaluated on the client side return Content("Redirect"); } else return Content("Invalid"); } public ActionResult CancelDocumentBySubmitter(int ecnNumber, byte currentStep, int documentType, string ecnTypeString) { return Content("Redirect"); } /// /// /// /// /// /// /// /// public bool ApproveCancellation(int ecnNumber, byte currentStep, string comments, int documentType, string ecnTypeString) { bool lastApproverAndLastStep = false; bool lastStep = false; bool lastApprover = ecnDMO.ECNApproveCancelled_ExpiredDocument(ecnNumber, currentStep, comments, out lastStep, (int)Session[GlobalVars.SESSION_USERID], documentType); while (lastApprover && !lastStep) { currentStep++; lastApprover = ecnDMO.ECNApproveCancelled_ExpiredDocument(ecnNumber, currentStep, comments, out lastStep, (int)Session[GlobalVars.SESSION_USERID], documentType); NotifyApproversForCancellation(ecnNumber, currentStep, documentType, ecnTypeString); } if (lastApprover && lastStep) { try { lastApproverAndLastStep = true; ECNPdf ecn = new ECNPdf(); GenerateECNPdf(ecnNumber, out ecn); string sourceDirectory = Functions.GetAttachmentFolder() + "ECN\\" + ecnNumber.ToString() + "\\"; string outputFullFilePath = ""; string outputFileName; outputFileName = TECN_PREFIX + ecnNumber.ToString() + ".zip"; outputFullFilePath = Functions.GetAttachmentFolder() + "\\TECNCancelledZipped\\" + outputFileName; // Create the zipped package Zipper zip = new Zipper(); zip.CreateZip(outputFullFilePath, sourceDirectory); NotifyTECNCancellation(ecnNumber, outputFullFilePath); } catch (Exception ex) { EventLogDMO.Add(new WinEventLog() { IssueID = ecnNumber, UserID = @User.Identity.Name, DocumentType = "TECN", OperationType = "Error", Comments = ex.Message }); } } return lastApproverAndLastStep; } /// /// /// /// /// /// /// /// public void ApproveExpiration(int ecnNumber, byte currentStep, string comments, int documentType, string ecnTypeString) { bool lastStep = false; bool lastApprover = ecnDMO.ECNApproveCancelled_ExpiredDocument(ecnNumber, currentStep, comments, out lastStep, (int)Session[GlobalVars.SESSION_USERID], documentType); while (lastApprover && !lastStep) { currentStep++; lastApprover = lastApprover = ecnDMO.ECNApproveCancelled_ExpiredDocument(ecnNumber, currentStep, comments, out lastStep, (int)Session[GlobalVars.SESSION_USERID], documentType); NotifyApproversForExpiration(ecnNumber, currentStep, documentType, ecnTypeString); } if (lastApprover && lastStep) { try { ECNPdf ecn = new ECNPdf(); GenerateECNPdf(ecnNumber, out ecn); string sourceDirectory = Functions.GetAttachmentFolder() + "ECN\\" + ecnNumber.ToString() + "\\"; string outputFullFilePath = ""; string outputFileName; outputFileName = TECN_PREFIX + ecnNumber.ToString() + ".zip"; outputFullFilePath = Functions.GetAttachmentFolder() + "\\TECNExpiredZipped\\" + outputFileName; Zipper zip = new Zipper(); zip.CreateZip(outputFullFilePath, sourceDirectory); NotifyTECNExpiration(ecnNumber, outputFullFilePath); } catch (Exception ex) { EventLogDMO.Add(new WinEventLog() { IssueID = ecnNumber, UserID = @User.Identity.Name, DocumentType = "TECN", OperationType = "Error", Comments = ex.Message }); } } } /// /// /// /// public void CheckCanSubmit(int ecnNumber) { bool result = ecnDMO.CanSubmitECN(ecnNumber); if (result) { throw new Exception("Cannot Submit"); } } /// /// /// /// public void ReleaseLockOnDocument(int issueID) { try { ecnDMO.ReleaseLockOnDocument((int)Session[GlobalVars.SESSION_USERID], issueID); } catch(Exception e) { try { Functions.WriteEvent(@User.Identity.Name + "\r\n ReleaseLockOnDocument ECN\r\n" + issueID.ToString() + "\r\n" + e.Message, System.Diagnostics.EventLogEntryType.Error); } catch { } ecnDMO.ReleaseLockOnDocument(-1, issueID); } } public void ReleaseLockOnDocumentAdmin(int issueID) { try { ecnDMO.ReleaseLockOnDocument(-1, issueID); } catch (Exception e) { try { Functions.WriteEvent(@User.Identity.Name + "\r\n ReleaseLockOnDocument ECN\r\n" + issueID.ToString() + "\r\n" + e.Message, System.Diagnostics.EventLogEntryType.Error); } catch { } ecnDMO.ReleaseLockOnDocument(-1, issueID); } } /// /// /// /// /// /// public FileResult DownloadFile(string attachmentID, string ecnNumber) { //fileName = "ECNForm_71132.pdf"; string fileName = ecnDMO.GetFileName(attachmentID); string ecnFolderPath = Functions.GetAttachmentFolder() + "ECN\\" + ecnNumber.ToString(); var sDocument = Path.Combine(ecnFolderPath, fileName); var FDir_AppData = Functions.GetAttachmentFolder(); 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"); } if (!System.IO.File.Exists(sDocument)) { return null; //throw new Exception("File not found"); } return File(sDocument, System.Net.Mime.MediaTypeNames.Application.Octet, fileName); } ///// ///// ///// //void CreateZipFile() //{ // try // { // using (ZipFile zip = new ZipFile()) // { // // note: this does not recurse directories! // String[] filenames = System.IO.Directory.GetFiles(@"C:\Documents\Approval System\ECN-TECN"); // // This is just a sample, provided to illustrate the DotNetZip interface. // // This logic does not recurse through sub-directories. // // If you are zipping up a directory, you may want to see the AddDirectory() method, // // which operates recursively. // foreach (String filename in filenames) // { // Console.WriteLine("Adding {0}...", filename); // ZipEntry e = zip.AddFile(filename); // e.Comment = "Added by Cheeso's CreateZip utility."; // } // zip.Comment = String.Format("This zip archive was created by the CreateZip example application on machine '{0}'", // System.Net.Dns.GetHostName()); // zip.Save(@"C:\Documents\Approval System\ECN-TECN\New.Zip"); // } // } // catch (System.Exception ex1) // { // System.Console.Error.WriteLine("exception: " + ex1); // } //} /// /// /// /// /// bool IsITAR(ECN ecn) { if (ecn.IsRH && !ecn.IsAU && !ecn.IsIndustrial && !ecn.IsMA) { return true; } else return false; } } }