package module.projects.presentationTier.servlet; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import javax.servlet.ServletContextEvent; import javax.servlet.ServletContextListener; import javax.servlet.annotation.WebListener; import module.projects.domain.AccessControl; import module.projects.presentationTier.vaadin.reportType.ReportType; import module.projects.presentationTier.vaadin.reportType.ReportType.NoBehaviourCustomTableFormatter; import module.projects.presentationTier.vaadin.reportType.components.ReportViewerComponent; import pt.ist.bennu.core.applicationTier.Authenticate.UserView; import pt.ist.bennu.core.domain.RoleType; import pt.ist.bennu.core.domain.User; import pt.ist.bennu.core.util.BundleUtil; import pt.ist.expenditureTrackingSystem.domain.ExpenditureTrackingSystem; import pt.ist.expenditureTrackingSystem.domain.organization.Person; import pt.ist.expenditureTrackingSystem.domain.organization.Project; import pt.ist.expenditureTrackingSystem.domain.organization.SubProject; import pt.ist.expenditureTrackingSystem.domain.organization.Unit; import pt.ist.fenixframework.FenixFramework; import com.vaadin.data.Item; import com.vaadin.ui.Table; @WebListener public class ProjectsInitializer implements ServletContextListener { @Override public void contextInitialized(ServletContextEvent sce) { ExpenditureTrackingSystem.registerInfoProvider(new ProjectReportsInfoProvider()); } @Override public void contextDestroyed(ServletContextEvent sce) { } public class ProjectReportsInfoProvider implements ExpenditureTrackingSystem.InfoProvider { @Override public String getTitle() { return getMessage("financialprojectsreports.infoProvider.title"); } @Override public Map<String, String> getLinks(String page, Object object) { Map<String, String> map = null; if (page.equals("viewOrganization.jsp")) { if (!(object instanceof Unit)) { return null; } Unit unit = (Unit) object; final User user = UserView.getCurrentUser(); if (!AccessControl.isUserAllowedToViewDetailedProjectInfo(unit, user)) { return null; } map = new HashMap<String, String>(); String baseLink = "/vaadinContext.do?method=forwardToVaadin#projectsService?unit=" + unit.getExternalId(); if (unit.isProject()) { map.put(getMessage("financialprojectsreports.infoProvider.cabimentos"), baseLink + "&reportType=" + ReportType.CABIMENTOS_STRING); map.put(getMessage("financialprojectsreports.infoProvider.adiantamentos"), baseLink + "&reportType=" + ReportType.ADIANTAMENTOS_STRING); map.put(getMessage("financialprojectsreports.infoProvider.revenue"), baseLink + "&reportType=" + ReportType.REVENUE_STRING); map.put(getMessage("financialprojectsreports.infoProvider.expenses"), baseLink + "&reportType=" + ReportType.EXPENSES_STRING); map.put(getMessage("financialprojectsreports.infoProvider.budgetaryBalance"), baseLink + "&reportType=" + ReportType.PROJECT_BUDGETARY_BALANCE_STRING); map.put(getMessage("financialprojectsreports.infoProvider.openingFile"), baseLink + "&reportType=" + ReportType.OPENING_PROJECT_FILE_STRING); // } else { // map.put(getMessage("financialprojectsreports.infoProvider.unitSummary"), baseLink + "&reportType=" // + ReportType.UNIT_SUMMARY_STRING); // map.put(getMessage("financialprojectsreports.infoProvider.generatedOverheads"), baseLink + "&reportType=" // + ReportType.GENERATED_OVERHEADS_STRING); // map.put(getMessage("financialprojectsreports.infoProvider.transferedOverheads"), baseLink + "&reportType=" // + ReportType.TRANSFERED_OVERHEADS_STRING); // map.put(getMessage("financialprojectsreports.infoProvider.overheadsSummary"), baseLink + "&reportType=" // + ReportType.OVERHEADS_SUMMARY_STRING); } } if (page.equals("viewPerson.jsp")) { if (!(object instanceof Person)) { return null; } Person person = (Person) object; if (!(UserView.getCurrentUser().getExpenditurePerson().equals(person) || UserView.getCurrentUser().hasRoleType( RoleType.MANAGER))) { return null; } map = new HashMap<String, String>(); map.put(getMessage("financialprojectsreports.infoProvider.coordinatorSummary"), "/vaadinContext.do?method=forwardToVaadin#projectsService?reportType=" + ReportType.SUMMARY_STRING + "&user=" + person.getUsername()); } return map; } @Override public List<List<String>> getSummary(String page, Object object) { List<List<String>> list = null; if (page.equals("viewOrganization.jsp")) { if (!(object instanceof Unit)) { return null; } Unit unit = (Unit) object; final User user = UserView.getCurrentUser(); if (!AccessControl.isUserAllowedToViewDetailedProjectInfo(unit, user)) { return null; } list = new ArrayList<List<String>>(); list.add(new ArrayList<String>()); list.add(new ArrayList<String>()); ReportViewerComponent projectSummary; Project project = getProjectFromID(unit.getExternalId()); if (project != null) { String projectCode = project.getProjectCode(); System.out.println(projectCode); projectSummary = new ReportViewerComponent( "SELECT V.\"Orçamento\", V.\"Máximo Financiável\" AS \"Máx. Financiável\", V.\"Receita\", V.\"Transf. Parceiros\", V.\"Despesa\", V.\"Adiantamentos por Justificar\", V.\"Cabimentos por Executar\", V.\"Saldo Tesouraria\", V.\"Saldo Orçamental\" FROM V_RESPROJPROF V WHERE V.\"NºProj\"='" + projectCode + "'", new NoBehaviourCustomTableFormatter()); Table t = projectSummary.getTable(); if (t.getItemIds().size() > 0) { for (Object a : t.getItemIds()) { Item item = t.getItem(a); for (Object column : item.getItemPropertyIds()) { String itemString = ReportType.formatCurrency(item.getItemProperty(column).toString()); list.get(0).add(t.getColumnHeader(column)); list.get(1).add(itemString); } } } } } return list; } public String getMessage(String message) { return BundleUtil.getFormattedStringFromResourceBundle("resources/projectsResources", message); } private Project getProjectFromID(String projectID) { Unit project = FenixFramework.getDomainObject(projectID); if (project instanceof Project) { return (Project) project; } else if (project instanceof SubProject) { return (Project) ((SubProject) project).getParentUnit(); } return null; } } }