public int AddReceipt(LineItemGroup encumbrance, User submitter, string comments) { Message msg = new Message { FromUserID = encumbrance.LastEditedUserID, MessageDate = DateTime.Now }; msg.Subject = "Encumbrance Request ID " + encumbrance.GroupID; // + " for contract " + contract.ContractNumber msg.Body = GetOriginatorReceipt(encumbrance); msg.MessageDate = DateTime.Now; msg.FromUserID = submitter.UserID; // Save the message to the database try { _context.Messages.Add(msg); _context.SaveChanges(); AddRecipient(msg.MessageID, submitter); return(msg.MessageID); } catch (Exception e) { Log.Error("MessageService.SendReceipt Error:" + e.GetBaseException() + "\n" + e.StackTrace); return(-1); } }
public bool SendReceipt(LineItemGroup encumbrance, User submitter, string comments) { int msgID = AddReceipt(encumbrance, submitter, comments); if (submitter.CanReceiveEmails() && submitter.IsDisabled == 0) { SendEmailMessage(msgID); return(true); } return(false); }
public bool IsShallowEncumbrance(LineItemGroup encumbrance) { // return true if encumbrance does not include child elements (i.e., LineItems) if (encumbrance.LineItems == null && _context.HasLineItems(encumbrance)) { return(true); } if (encumbrance.OriginatorUserID > 0 && encumbrance.OriginatorUser == null) { return(true); } return(false); }
public decimal GetEncumbranceTotal(LineItemGroup encumbrance) { //encumbrance is a deep copy decimal total = 0M; if (encumbrance.LineItems != null) { foreach (LineItem item in encumbrance.LineItems) { total += item.Amount; } } return(total); }
public LineItemGroup GetDeepEncumbrance(int groupID) { LineItemGroup encumbrance = this.LineItemGroups.AsNoTracking() .Include(l => l.LastEditedUser) .Include(l => l.OriginatorUser) .Include(l => l.Contract) .Include(l => l.FileAttachments) .Include(l => l.LineItems).ThenInclude(li => li.OCA) .Include(l => l.LineItems).ThenInclude(li => li.Category) .Include(l => l.LineItems).ThenInclude(li => li.StateProgram) .Include(l => l.LineItems).ThenInclude(li => li.Fund) .Include(l => l.Statuses).ThenInclude(gst => gst.User) .SingleOrDefault(l => l.GroupID == groupID); return(encumbrance); }
public string GetEncumbranceInfo(LineItemGroup encumbrance, decimal encumbranceTotal) { string encumbranceInfo = ""; encumbranceInfo += "<strong>Encumbrance Type:</strong> " + encumbrance.LineItemType + "<br />"; encumbranceInfo += "<strong>Status:</strong> " + encumbrance.CurrentStatus + "<br />"; encumbranceInfo += "<strong>Encumbrance Total:</strong> " + Utils.FormatCurrency(encumbranceTotal) + "<br />"; encumbranceInfo += "<strong>Description: </strong> " + encumbrance.Description + "<br />"; if (encumbrance.LineID6S != null && encumbrance.LineID6S != "") { encumbranceInfo += "<strong>6s:</strong> " + encumbrance.LineID6S + "<br />"; } if (encumbrance.FlairAmendmentID != null && encumbrance.FlairAmendmentID != "") { encumbranceInfo += "<strong>Original FLAIR Amendment ID:</strong> " + encumbrance.FlairAmendmentID + "<br />"; } if (encumbrance.UserAssignedID != null && encumbrance.UserAssignedID != "") { encumbranceInfo += "<strong>User Assigned ID:</strong> " + encumbrance.UserAssignedID + "<br />"; } if (encumbrance.AmendedLineItemID != null && encumbrance.AmendedLineItemID != "") { encumbranceInfo += "<strong>Amended LOA:</strong> " + encumbrance.AmendedLineItemID + "<br />"; } if (encumbrance.AmendedFlairLOAID != null && encumbrance.AmendedFlairLOAID != "") { encumbranceInfo += "<strong>Amended/Corrected FLAIR ID:</strong> " + encumbrance.AmendedFlairLOAID + "<br />"; } if (encumbrance.AdvertisedDate != null) { encumbranceInfo += "<strong>Advertised Date:</strong> " + String.Format("{0:MM/dd/yyyy}", encumbrance.AdvertisedDate) + "<br />"; } if (encumbrance.LettingDate != null) { encumbranceInfo += "<strong>Letting Date:</strong> " + String.Format("{0:MM/dd/yyyy}", encumbrance.LettingDate) + "<br />"; } if (encumbrance.RenewalDate != null) { encumbranceInfo += "<strong>Renewal Date:</strong> " + String.Format("{0:MM/dd/yyyy}", encumbrance.RenewalDate) + "<br />"; } encumbranceInfo += "<strong>Last Updated:</strong> " + String.Format("{0:MM/dd/yyyy HH:mm}", encumbrance.LastEditedDate) + " by " + encumbrance.LastEditedUser.FirstName + " " + encumbrance.LastEditedUser.LastName + "<br />"; return(encumbranceInfo); }
public IActionResult Create(int contractID, int groupID) { //string userLogin = GetLogin(); PopulateViewBag(contractID); if (groupID > 0) { try { // id is the LineItemGroup.GroupID var group = _context.LineItemGroups.Where(lig => lig.GroupID == groupID).SingleOrDefault(); if (group == null) { // if it is zero or does not exist, create a new LineItemGroup and set id = its GroupID LineItemGroup newGroup = new LineItemGroup(ViewBag.Contract, ViewBag.CurrentUser) { CurrentStatus = ConstantStrings.Draft, LastEditedUserID = ViewBag.CurrentUser.UserID, OriginatorUserID = ViewBag.CurrentUser.UserID }; _context.LineItemGroups.Add(newGroup); _context.SaveChanges(); group = newGroup; } ViewBag.lineItemGroup = group; ViewBag.contractID = ViewBag.Contract.ContractID; // also the View does not use this to populate a selection list yet. //ViewData["FlairLineIDs"] = GetAmendmentsList(contractID); } catch (Exception e) { _logger.LogError("LineItemsController.Create Error:" + e.GetBaseException()); Log.Error("LineItemsController.Create Error:" + e.GetBaseException() + "\n" + e.StackTrace); } } ViewBag.LineItemTypes = ConstantStrings.GetLineItemTypeList(); ViewBag.currentFiscalYear = PermissionsUtils.GetCurrentFiscalYear(); ViewData["Categories"] = _context.Categories.OrderBy(v => v.CategoryCode); ViewData["StatePrograms"] = _context.StatePrograms.OrderBy(v => v.ProgramCode); return(View()); }
private void UpdateContractTotal(LineItem lineItem) { // A line item has been added with LineItemType = {Award, Advertisement, New Contract} // Reset the parent Contract's ContractTotal value to the total of the new encumbrance LineItemGroup encumbrance = _context.LineItemGroups .Include(g => g.LineItems) .AsNoTracking() .SingleOrDefault(g => g.GroupID == lineItem.LineItemGroupID); //verify the encumbrance line item type is one of the three selected if (encumbrance.LineItemType.Equals(ConstantStrings.NewContract) || encumbrance.LineItemType.Equals(ConstantStrings.Award) || encumbrance.LineItemType.Equals(ConstantStrings.Advertisement)) { // get the total of all LineItems in this encumbrance decimal sum = 0.00M; foreach (LineItem item in encumbrance.LineItems) { sum += item.Amount; } Contract contract = _context.Contracts.SingleOrDefault(c => c.ContractID == encumbrance.ContractID); contract.ContractTotal = sum; _context.Contracts.Update(contract); _context.SaveChanges(); } }
public int AddMessage(string updateType, LineItemGroup encumbrance, string comments, List <int> otherRecipients, List <int> ccIDs) { encumbrance = _context.GetDeepEncumbrance(encumbrance.GroupID); int msgID = 0; List <int> recipientIDs = null; // list of IDs of email recipients decimal encumbranceTotal = 0.0M; //string contractViewURL = _serverpath + "/Contracts/View/" + encumbrance.ContractID + "/enc_" + encumbrance.GroupID; string contractViewURL = _serverpath + "/LineItemGroups/Manage/" + encumbrance.GroupID; encumbranceTotal = GetEncumbranceTotal(encumbrance); Contract contract = _context.Contracts.SingleOrDefault(c => c.ContractID == encumbrance.ContractID); User submitter = _context.Users.SingleOrDefault(u => u.UserID == encumbrance.LastEditedUserID); Message msg = new Message { FromUserID = encumbrance.LastEditedUserID, MessageDate = DateTime.Now }; if (!updateType.Equals(ConstantStrings.NoChange)) { switch (updateType) { case ConstantStrings.DraftToFinance: msg.Subject = "Encumbrance Request# " + encumbrance.GroupID + " for contract " + contract.ContractNumber + " has been submitted for Finance Review"; msg.Body = "<p>Please process the following encumbrance request: ID " + encumbrance.GroupID + " for contract " + contract.ContractNumber + " in the amount of " + Utils.FormatCurrency(encumbranceTotal) + ".</p>\n"; if (comments != null && comments.Length > 0) { msg.Body += "<p>Comments: " + comments + "</p>\n"; } if (encumbrance.FileAttachments != null && encumbrance.FileAttachments.Count > 0) { msg.Body += "File Attachments:<br/><ul>"; foreach (FileAttachment fileAtt in encumbrance.FileAttachments) { var fileUrl = _serverpath + "\\" + FileAttachment.UserFilesPath + "\\" + fileAtt.FileName; msg.Body += "<li><a href='" + fileUrl + "'>" + fileAtt.DisplayName + "</a></li>"; } msg.Body += "</ul>"; } msg.Body += "<p>Review this encumbrance request in the <a href='" + contractViewURL + "'>" + "EPS Application</a>.</p>"; // Send only to TPK Encumbrance mailbox recipientIDs = getFinanceRecipients(); break; case ConstantStrings.DraftToCFM: msg.Subject = "Encumbrance Request# " + encumbrance.GroupID + " for contract " + contract.ContractNumber + " for " + encumbrance.LineItemType; msg.Body = "<p>Please input the following encumbrance into CFM: request ID " + encumbrance.GroupID + " for contract " + contract.ContractNumber + ".</p>\n"; //msg.Body += "in the amount of " + Utils.FormatCurrency(encumbranceTotal) + " applied to Amendment " + encumbrance.FlairAmendmentID + " Line " + encumbrance.LineID6S + "."; if (encumbrance.LineItems != null && encumbrance.LineItems.Count > 0) { string tblText = "<table><tr><th>Contract</th><th>Amendment</th><th>Line (6s)</th><th>Amount</th></tr>"; foreach (LineItem item in encumbrance.LineItems) { tblText += "<tr><td>" + contract.ContractNumber + "</td><td>" + item.FlairAmendmentID + "</td><td>" + item.LineID6S + "</td><td>" + Utils.FormatCurrency(item.Amount) + "</td></tr>"; } tblText += "</table> <br/>"; msg.Body += tblText; } if (comments != null && comments.Length > 0) { msg.Body += "<p>Comments: " + comments + "</p>\n"; } msg.Body += "<p>View this encumbrance request in the <a href='" + contractViewURL + "'>" + "EPS Application</a>.</p>"; // Send only to TPK Encumbrance mailbox recipientIDs = (List <int>)_context.Users.Where(u => u.Email == ConstantStrings.TPKMailbox).Select(u => u.UserID).ToList(); break; case ConstantStrings.FinanceToDraft: case ConstantStrings.CFMToDraft: case ConstantStrings.CompleteToDraft: msg.Subject = "Encumbrance Request#" + encumbrance.GroupID + " for contract " + contract.ContractNumber + " has been returned to the Originator"; msg.Body = "<p>Encumbrance ID " + encumbrance.GroupID + " for contract " + contract.ContractNumber + " has been returned for the following reason:</p>\n"; if (comments.Length > 0) { msg.Body += "<p>Comments: " + comments + "</p>\n"; } msg.Body += "<p>Review this encumbrance request in the <a href='" + contractViewURL + "'>" + "EPS Application</a>.</p>"; recipientIDs = new List <int> { encumbrance.OriginatorUserID }; break; case ConstantStrings.FinanceToWP: msg.Subject = "Please review encumbrance request #" + encumbrance.GroupID + " for contract " + contract.ContractNumber + " for Work Program Evaluation"; msg.Body = "<p>" + submitter.FullName + " has completed a Finance Review for encumbrance request #" + encumbrance.GroupID + " under contract " + contract.ContractNumber + ".</p>\n"; if (comments.Length > 0) { msg.Body += "<p>Comments: " + comments + "</p>\n"; } msg.Body += "<p>Review this encumbrance request in the <a href='" + contractViewURL + "'>" + "EPS Application</a>.</p>"; recipientIDs = otherRecipients; //(List<int>)_context.UserRoles.Where(u => u.Role.Equals(ConstantStrings.WPReviewer)).Select(u => u.UserID).ToList(); break; case ConstantStrings.FinanceToCFM: case ConstantStrings.FinanceToComplete: // No notification required. Exit without sending message return(0); case ConstantStrings.WPToFinance: msg.Subject = "Encumbrance request #" + encumbrance.GroupID + " for contract " + contract.ContractNumber + " has been returned by Work Program"; msg.Body = "<p>" + submitter.FullName + " has completed a Work Program review for encumbrance request #" + encumbrance.GroupID + " under contract " + contract.ContractNumber + ".</p>\n"; msg.Body += "<p>This encumbrance request is returned to Finance with the following comment:</p>"; if (comments.Length > 0) { msg.Body += "<p>Comments: " + comments + "</p>\n"; } msg.Body += "<p>Review this encumbrance request in the <a href='" + contractViewURL + "'>" + "EPS Application</a>.</p>"; // Send only to TPK Encumbrance mailbox recipientIDs = (List <int>)_context.Users.Where(u => u.Email == ConstantStrings.TPKMailbox).Select(u => u.UserID).ToList(); break; case ConstantStrings.WPToCFM: msg.Subject = "Encumbrance request #" + encumbrance.GroupID + " for contract " + contract.ContractNumber + " is ready for CFM Input"; msg.Body = "<p>" + submitter.FullName + " has completed a Work Program review for encumbrance request #" + encumbrance.GroupID + " in Work Program review under contract " + contract.ContractNumber + ".</p>\n"; if (comments.Length > 0) { msg.Body += "<p>Comments: " + comments + "</p>\n"; } msg.Body += "<p>Review this encumbrance request in the <a href='" + contractViewURL + "'>" + "EPS Application</a>.</p>"; // Send only to TPK Encumbrance mailbox recipientIDs = (List <int>)_context.Users.Where(u => u.Email == ConstantStrings.TPKMailbox).Select(u => u.UserID).ToList(); break; case ConstantStrings.CFMToFinance: msg.Subject = "Encumbrance request #" + encumbrance.GroupID + " for contract " + contract.ContractNumber + " has been returned to Finance"; msg.Body = "<p>" + submitter.FullName + " has returned to Encumbranc request #" + encumbrance.GroupID + " to Finance with the following comment:</p>"; if (comments.Length > 0) { msg.Body += "<p>Comments: " + comments + "</p>\n"; } msg.Body += "<p>Review this encumbrance request in the <a href='" + contractViewURL + "'>" + "EPS Application</a>.</p>"; // Send only to TPK Encumbrance mailbox recipientIDs = (List <int>)_context.Users.Where(u => u.Email == ConstantStrings.TPKMailbox).Select(u => u.UserID).ToList(); break; case ConstantStrings.CFMToWP: msg.Subject = "Please review encumbrance request #" + encumbrance.GroupID + " for contract " + contract.ContractNumber + " requires additional Work Program Review"; msg.Body = "<p>" + submitter.FullName + " has returned encumbrance request #" + encumbrance.GroupID + " from CFM for additional Work Program review for contract " + contract.ContractNumber + ".</p>\n"; if (comments.Length > 0) { msg.Body += "<p>Comments: " + comments + "</p>\n"; } msg.Body += "<p>Review this encumbrance request in the <a href='" + contractViewURL + "'>" + "EPS Application</a>.</p>"; recipientIDs = otherRecipients;; break; case ConstantStrings.CFMToComplete: //msg.Subject = "Encumbrance request #" + encumbrance.GroupID + " for contract " + contract.ContractNumber + " has been input into CFM"; //msg.Body = "<p>" + submitter.FullName + " has input encumbrance request #" + encumbrance.GroupID + " for contract " + contract.ContractNumber + " into CFM.</p>\n"; //if (comments.Length > 0) //{ msg.Body += "<p>Comments: " + comments + "</p>\n"; } //msg.Body += "<p>No further action is required. You may view this encumbrance request in the <a href='" + contractViewURL + "'>" + // "EPS Application</a>.</p>"; //// Send only to TPK Encumbrance mailbox //recipientIDs = new List<int> { submitter.UserID }; // No notification needed per Lorna 7/9/2019 return(0); case ConstantStrings.CloseContract: msg.Subject = "Request to Close Contract #" + contract.ContractNumber; msg.Body = "<p>" + submitter.FullName + " requests closure of the contract " + contract.ContractNumber + ", closure type " + encumbrance.LineItemType + " </p>"; //msg.Body += "<p>Review this closure request in the <a href='" + contractViewURL + "'>" + "EPS Application</a>.</p>"; recipientIDs = (List <int>)_context.UserRoles.Where(u => u.Role.Equals(ConstantStrings.Closer)).Select(u => u.UserID).ToList(); ccIDs = (List <int>)_context.UserRoles.Where(u => u.Role.Equals(ConstantStrings.CloserCC)).Select(u => u.UserID).ToList(); break; default: // if no message then exit return(0); } // Save the message to the database try { _context.Messages.Add(msg); _context.SaveChanges(); msgID = msg.MessageID; if (otherRecipients != null && otherRecipients.Count > 0) { AddRecipients(msgID, otherRecipients); } else { AddRecipients(msgID, recipientIDs); } if (ccIDs != null && ccIDs.Count > 0) { AddCCs(msgID, ccIDs); } }catch (Exception e) { Log.Error("MessageService.AddMessage Error:" + e.GetBaseException() + "\n" + e.StackTrace); return(-1); } } return(msgID); }
public int AddMessage(string updateType, LineItemGroup encumbrance, string comments, List <int> otherRecipients) { return(AddMessage(updateType, encumbrance, comments, otherRecipients, null)); }
public string GetOriginatorReceipt(Contract contract, LineItemGroup encumbrance) { string body = "<p>You have submitted the following encumbrance request for Finance Review in the Encumbrance Processing System application.</p><br\\>"; string contractInfo = ""; string encumbranceInfo = ""; string linesInfo = ""; string url = _serverpath + "/LineItemGroups/Manage/" + encumbrance.GroupID; if (this.IsShallowContract(contract)) { contract = _context.GetDeepContract(contract.ContractID); } if (encumbrance == null) { return(null); } else { if (this.IsShallowEncumbrance(encumbrance)) { encumbrance = _context.GetDeepEncumbrance(encumbrance.GroupID); } decimal encumbranceTotal = GetEncumbranceTotal(encumbrance); encumbranceInfo = GetEncumbranceInfo(encumbrance, encumbranceTotal); if (contract == null) { contract = _context.GetDeepContract(encumbrance.ContractID); } // if encumbrance is populated, start with a row for contract, one row for encumbrance and include all associated Line Items if (encumbrance.LineItemType.Equals(ConstantStrings.NewContract) || encumbrance.LineItemType.Equals(ConstantStrings.Advertisement) || encumbrance.LineItemType.Equals(ConstantStrings.Award)) { contractInfo = GetContractInfo(contract); } else { contractInfo += "<strong>Contract: </strong>" + contract.ContractNumber + "<br/>"; contractInfo += "<strong>Contract Initial Amount:</strong> " + Utils.FormatCurrency(contract.ContractTotal) + "<br/>"; //TODO: What other contract information should be included in the email receipt? } List <LineItem> lineItems = _context.GetDeepLineItems(encumbrance.GroupID); if (lineItems == null || lineItems.Count == 0) { linesInfo += "There are no line items associated with this encumbrance."; } else { linesInfo += GetLineItemsInfo(lineItems); } } if (encumbrance.FileAttachments != null && encumbrance.FileAttachments.Count > 0) { body += "File Attachments:<br/><ul>"; foreach (FileAttachment fileAtt in encumbrance.FileAttachments) { var fileUrl = _serverpath + "\\" + FileAttachment.UserFilesPath + "\\" + fileAtt.FileName; body += "<li><a href='" + fileUrl + "'>" + fileAtt.DisplayName + "</a></li>"; } body += "</ul>"; } body += contractInfo + "<br/>" + encumbranceInfo + "<br/>" + linesInfo + "<br/><br/>"; body += "You can review your encumbrance request at <a href='" + url + "'> Encumbrance " + encumbrance.GroupID + "</a>"; return(body); }
public string GetOriginatorReceipt(LineItemGroup encumbrance) { Contract contract = _context.Contracts.SingleOrDefault(c => c.ContractID == encumbrance.ContractID); return(GetOriginatorReceipt(contract, encumbrance)); }
public bool HasLineItems(LineItemGroup encumbrance) { int itemCount = this.LineItems.Where(li => li.LineItemGroupID == encumbrance.GroupID).Count(); return(itemCount > 0); }