private void SendTicketEmail(BacklogItem ticket, string folder, Project project) { try { // get members and attach to the project mailer.AttachProjectMembers(project); // create body from the template ReportHelper.Report reports = new ReportHelper.Report(); ReportHelper.ReportConfig reportConfig = new ReportHelper.ReportConfig("EmailNotifications", "ticket_created", Helper.ReportTemplate.ServerUrl); reportConfig.ReportObjects.Add(project); reportConfig.ReportObjects.Add(ticket); reportConfig.ReportVars.Add("TicketFolder", folder); string body = reports.CreateReportXAML(Helper.ReportTemplate.ServerUrl, reportConfig); // subject string subject = "Ticket #" + project.ProjectNumber + "." + ticket.BacklogItemNumber; // send it to all project members bool send = mailer.SendEmail(project, subject, body); if (!send) ScrumFactory.Services.Logic.Helper.Log.LogMessage("Ticket email was not send."); } catch (System.Exception ex) { ScrumFactory.Services.Logic.Helper.Log.LogError(ex); } }
private ReportHelper.ReportConfig CreateReportConfig(ICollection<ProposalItemViewModel> items) { ReportHelper.ReportConfig reportConfig = new ReportHelper.ReportConfig("ProposalReport", Proposal.TemplateName, Proposal.ProposalName); // if is an approved or rejected proposal, uses the xaml saved at the database if (Proposal.ProposalStatus != (short)ProposalStatus.PROPOSAL_WAITING) { try { ProposalDocument document = proposalsService.GetProposalDocument(Proposal.ProjectUId, Proposal.ProposalUId); reportConfig.StaticXAMLReport = document.ProposalXAML; } catch (Exception) { dialogs.ShowAlertMessage(Properties.Resources.Error_reading_proposal, Properties.Resources.An_error_occured_when_reading_this_proposal, null); return null; } return reportConfig; } // add risks ICollection<Risk> risks = projectsService.GetProjectRisks(Project.ProjectUId); reportConfig.ReportObjects.Add(risks); // calcs the work days int dayCount = calendar.CalcWorkDayCount(Proposal.EstimatedStartDate, Proposal.EstimatedEndDate); reportConfig.ReportVars.Add("workDaysCount", dayCount.ToString()); // constraints ICollection<ProjectConstraint> constraints = constraintsService.GetProjectConstraints(Project.ProjectUId); if (Proposal.CurrencyRate == null) Proposal.CurrencyRate = 1; reportConfig.ReportObjects.Add(Project); reportConfig.ReportObjects.Add(Proposal); reportConfig.ReportObjects.Add(HourCosts); reportConfig.ReportObjects.Add(groups); reportConfig.ReportObjects.Add(allItems); reportConfig.ReportObjects.Add(constraints); // creates proposal items with price List<ProposalItemWithPrice> itemsWithValue = new List<ProposalItemWithPrice>(); //ICollection<ProposalItemViewModel> items = itemsViewSource.Source as ICollection<ProposalItemViewModel>; foreach (ProposalItemViewModel item in items.Where(i => i.IsAtProposal == true)) itemsWithValue.Add(new ProposalItemWithPrice(Proposal.ProposalUId, item.Item, item.ItemPrice)); reportConfig.ReportObjects.Add(itemsWithValue); return reportConfig; }
public void SetReportDocument(string xaml, string title, ReportHelper.Report reports, ReportHelper.ReportConfig config) { this.reportXaml = xaml; this.reports = reports; this.config = config; this.title = title; if (reportXaml == null) { documentReader.Document = null; return; } xaml = CleanInvalidXmlChars(xaml); var document = System.Windows.Markup.XamlReader.Parse(xaml) as System.Windows.Documents.FlowDocument; documentReader.Document = document; foreach (string name in config.ReportViewModels.Keys) SetElementViewModel(name, config.ReportViewModels[name]); ScrumFactory.ReportHelper.Paginator.LoadLogo(serverUrl.Url + "/images/companyLogo.png"); }
private void SendInviteMemberEmail(ProjectMembership membership, string serverUrl) { try { Project project = GetProject_skipAuth(membership.ProjectUId); // get members and attach to the project mailer.AttachProjectMembers(project); MemberProfile member = project.Memberships.FirstOrDefault(ms => ms.MemberUId == membership.MemberUId).Member; if (member.IsContactMember) return; // create body from the template ReportHelper.Report reports = new ReportHelper.Report(); ReportHelper.ReportConfig reportConfig = new ReportHelper.ReportConfig("EmailNotifications", "member_invited", ""); reportConfig.ReportObjects.Add(project); reportConfig.ReportVars.Add("RoleName", membership.Role.RoleName); string body = reports.CreateReportXAML(serverUrl, reportConfig); // subject string subject = "Join project invitation"; // send it to all project members bool send = mailer.SendEmail(member.EmailAccount, subject, body); if (!send) ScrumFactory.Services.Logic.Helper.Log.LogMessage("Invite project email was not send."); } catch (System.Exception ex) { ScrumFactory.Services.Logic.Helper.Log.LogError(ex); } }
private void SendStartProjectEmail(Project project, string serverUrl) { try { // get members and attach to the project mailer.AttachProjectMembers(project); // create body from the template ReportHelper.Report reports = new ReportHelper.Report(); ReportHelper.ReportConfig reportConfig = new ReportHelper.ReportConfig("EmailNotifications", "project_started", ""); reportConfig.ReportObjects.Add(project); reportConfig.ReportVars.Add("LastSprintUId", project.LastSprint.SprintUId); string body = reports.CreateReportXAML(serverUrl, reportConfig); // subject string subject = project.ProjectName + " STARTED !!"; // send it to all project members bool send = mailer.SendEmail(project, subject, body); if (!send) ScrumFactory.Services.Logic.Helper.Log.LogMessage("Start project email was not send."); } catch (System.Exception ex) { ScrumFactory.Services.Logic.Helper.Log.LogError(ex); } }
private void SendCloseProjectEmail(Project project, string serverUrl) { try { // get members and attach to the project mailer.AttachProjectMembers(project); // get vel indicator decimal velIndicator = backlogService.GetProjectVelocityIndicator_skipAuth(project.ProjectUId); decimal budgetIndicator = proposalsService.GetBudgetIndicator_skipAuth(project.ProjectUId); decimal qualityIndicator = tasksService.GetReworkIndicator_skipAuth(project.ProjectUId); // create body from the template ReportHelper.Report reports = new ReportHelper.Report(); ReportHelper.ReportConfig reportConfig = new ReportHelper.ReportConfig("EmailNotifications", "project_closed", ""); reportConfig.ReportObjects.Add(project); reportConfig.ReportVars.Add("VelIndicator", velIndicator.ToString("#0")); reportConfig.ReportVars.Add("BudgetIndicator", budgetIndicator.ToString("#0")); reportConfig.ReportVars.Add("QualityIndicator", qualityIndicator.ToString("#0")); string body = reports.CreateReportXAML(serverUrl, reportConfig); // subject string subject = project.ProjectName + " CLOSED !!"; // send it to all project members bool send = mailer.SendEmail(project, subject, body); if (!send) ScrumFactory.Services.Logic.Helper.Log.LogMessage("Close project email was not send."); } catch (System.Exception ex) { ScrumFactory.Services.Logic.Helper.Log.LogError(ex); } }
private ReportHelper.ReportConfig CreateReportConfig(ScrumFactory.Project project, string group, string template, string name) { var config = new ReportHelper.ReportConfig(group, template, name); // add project config.ReportObjects.Add(project); // get project members var members = teamService.GetProjectMembers(project.ProjectUId); foreach (var mm in project.Memberships) mm.Member = members.SingleOrDefault(m => m.MemberUId == mm.MemberUId); // add risks ICollection<Risk> risks = projectService.GetProjectRisks(project.ProjectUId); config.ReportObjects.Add(risks); // add groups ICollection<BacklogItemGroup> groups = backlogService.GetBacklogItemGroups(project.ProjectUId); config.ReportObjects.Add(groups); // add itens ICollection<BacklogItem> items = backlogService.GetBacklog(project.ProjectUId, null, (short)ScrumFactory.Services.BacklogFiltersMode.ALL); foreach (BacklogItem item in items) { item.ValidPlannedHours = item.GetValidPlannedHours(); int? firstSprint = item.ValidPlannedHours.Min(h => h.SprintNumber); item.FirstSprintWorked = firstSprint.HasValue ? firstSprint.Value : project.LastSprint.SprintNumber; int? lastSprint = item.ValidPlannedHours.Max(h => h.SprintNumber); item.LastSprintWorked = lastSprint.HasValue ? lastSprint.Value : project.LastSprint.SprintNumber; if (item.FirstSprintWorked < project.CurrentValidSprint.SprintNumber) item.OrderSprintWorked = item.LastSprintWorked; else item.OrderSprintWorked = item.FirstSprintWorked; item.Group = groups.SingleOrDefault(g => g.GroupUId == item.GroupUId); } config.ReportObjects.Add(items); // add constraints ICollection<ProjectConstraint> constraints = constraintsService.GetProjectConstraints(project.ProjectUId); config.ReportObjects.Add(constraints); // add end date config.AddReportVar("ProjectEndDate", project.LastSprint.EndDate); if (project.CurrentSprint != null) { if (project.CurrentSprint.SprintNumber > 1) { config.ReportVars.Add("ProjectCurrentSprintNumber", project.CurrentSprint.SprintNumber.ToString()); config.ReportVars.Add("ProjectPreviousSprintNumber", (project.CurrentSprint.SprintNumber - 1).ToString()); } else { if (project.Sprints.Count > project.CurrentSprint.SprintNumber + 1) config.ReportVars.Add("ProjectCurrentSprintNumber", (project.CurrentSprint.SprintNumber + 1).ToString()); else config.ReportVars.Add("ProjectCurrentSprintNumber", project.CurrentSprint.SprintNumber.ToString()); config.ReportVars.Add("ProjectPreviousSprintNumber", project.CurrentSprint.SprintNumber.ToString()); } } return config; }
public string GetReportXAMLOnly(string templateGroup, string template, string projectUId, string proposalUId) { serverUrl = System.Web.Hosting.HostingEnvironment.ApplicationPhysicalPath; var project = projectService.GetProject(projectUId); config = CreateReportConfig(project, templateGroup, template, "report"); if (templateGroup == "ProposalReport") { ProposalConfig(config, projectUId, proposalUId); } if (templateGroup == "SprintReview" && template == "default10") { BurndownConfig(config, project); } var report = new ReportHelper.Report(); var xaml = report.CreateReportXAML(serverUrl, config); xaml = CleanInvalidXmlChars(xaml); return xaml; }
public byte[] GetReport(string templateGroup, string template, string projectUId, string format, string proposalUId) { errorMessage = ""; fileName = Path.Combine(HostingEnvironment.ApplicationPhysicalPath, "App_Data", Guid.NewGuid() + "." + format); serverUrl = System.Web.Hosting.HostingEnvironment.ApplicationPhysicalPath; this.format = format; var project = projectService.GetProject(projectUId); title = project.ClientName + " - " + project.ProjectName; config = CreateReportConfig(project, templateGroup, template, "report"); if (templateGroup == "ProposalReport") { ProposalConfig(config, projectUId, proposalUId); } if(templateGroup=="SprintReview" && template=="default10") { BurndownConfig(config, project); } Thread thread = new Thread(_GetReport); thread.SetApartmentState(ApartmentState.STA); thread.Start(); thread.Join(); if (!String.IsNullOrEmpty(errorMessage)) throw new WebFaultException<string>("ERRO:" + errorMessage, System.Net.HttpStatusCode.BadRequest); return pdfBytes; }
private ReportHelper.ReportConfig PrepareReportCheckingServerVersion(string reportTemplate, string title) { ReportHelper.ReportConfig config = null; try { config = new ReportHelper.ReportConfig("SprintReview", reportTemplate, title); PrepareReport(config); } catch (Exception) { dialogService.ShowAlertMessage("Wrong server version", "Please update your server to 3.1 version in order to access this report", null); return null; } return config; }