コード例 #1
0
        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);
            }
        }
コード例 #2
0
        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;
        }
コード例 #3
0
        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");
        }
コード例 #4
0
        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);
            }
        }
コード例 #5
0
        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);
            }
        }
コード例 #6
0
        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);
            }
        }
コード例 #7
0
        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;
        }
コード例 #8
0
        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;
        }
コード例 #9
0
        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;
        }
コード例 #10
0
        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;
        }