package module.projects.presentationTier.vaadin.reportType;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import module.projects.domain.AccessControl;
import module.projects.presentationTier.vaadin.IllegalAccessException;
import module.projects.presentationTier.vaadin.reportType.components.CoordinatorHeaderComponent;
import module.projects.presentationTier.vaadin.reportType.components.ReportViewerComponent;
import module.projects.presentationTier.vaadin.reportType.components.TableSummaryComponent;
import org.apache.poi.hssf.usermodel.HSSFFont;
import org.apache.poi.hssf.usermodel.HSSFSheet;
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.expenditureTrackingSystem.domain.organization.Project;
import pt.ist.expenditureTrackingSystem.domain.organization.Unit;
import pt.ist.fenixframework.FenixFramework;
import com.vaadin.ui.Label;
import com.vaadin.ui.Panel;
import com.vaadin.ui.Table;
public class UnitSubProjectsSummaryReport extends ReportType {
private final String unitID;
final List<String> projectCodes;
ReportViewerComponent reportViewer;
TableSummaryComponent summary;
CoordinatorHeaderComponent header;
protected UnitSubProjectsSummaryReport(Map<String, String> args) {
super(args);
projectCodes = new ArrayList<String>();
unitID = args.get("unit");
Unit unit = FenixFramework.getDomainObject(unitID);
final User user = UserView.getCurrentUser();
if (unit.isProject() || !AccessControl.isUserAllowedToViewDetailedProjectInfo(unit, user)) {
throw new IllegalAccessException();
}
for (Unit subUnit : unit.getSubUnitsSet()) {
if (subUnit instanceof Project) {
Project project = (Project) subUnit;
if (!project.hasResponsiblesInUnit()) {
String projectCode = project.getProjectCode();
if (projectCode.matches("[a-zA-Z][a-zA-Z]\\d{1,4}")) {
projectCode = projectCode.substring(2);
}
projectCodes.add(projectCode);
}
}
}
String query = getQuery();
addComponent(new Label(getLabel()));
if (query == null) {
addComponent(new Label(getMessage("financialprojectsreports.unitReport.label.noProjects")));
} else {
header = new CoordinatorHeaderComponent(unit.getName(), getLabel());
addComponent(header);
reportViewer = new ReportViewerComponent(query, getCustomFormatter());
setColumnNames(reportViewer.getTable());
Panel panel = new Panel();
panel.addComponent(reportViewer);
panel.getContent().setSizeUndefined();
addComponent(panel);
summary =
new TableSummaryComponent(reportViewer.getTable(), getLabel(), "ORCBRUTO", "MAXFINANC", "RECEITA",
"TRF_PARCEIROS", "DESP_VALOR", "JU_AD_VALOR", "TREASURY_BALANCE", "CB_AD_VALOR", "BUDGET_BALANCE");
addComponent(summary);
}
}
@Override
public void write(HSSFSheet sheet, HSSFFont headersFont) {
header.write(sheet, headersFont);
reportViewer.write(sheet, headersFont);
summary.write(sheet, headersFont);
}
@Override
public String getLabel() {
return getMessage("financialprojectsreports.reportTitle.unitSummary");
}
@Override
public String getQuery() {
String subQuery = getProjectsSubQuery();
if (subQuery == null) {
return null;
}
return "select proj, acronimo, proj_ue, proj_tipo, orcbruto, maxfinanc, receita, trf_parceiros, desp_valor, ju_ad_valor , cb_ad_valor,receita - (trf_parceiros + desp_valor + ju_ad_valor) as treasury_balance ,maxfinanc - (desp_valor + cb_ad_valor) as budget_balance from V_LST_RESUMOCOORDENADOR "
+ subQuery;
}
@Override
protected ReportViewerComponent getReportViewer() {
// TODO Auto-generated method stub
return null;
}
public void setColumnNames(Table table) {
table.setColumnHeader("PROJ", getMessage("financialprojectsreports.coordinatorReport.column.projectNumber"));
table.setColumnHeader("ACRONIMO", getMessage("financialprojectsreports.coordinatorReport.column.acronym"));
table.setColumnHeader("PROJ_UE", getMessage("financialprojectsreports.coordinatorReport.column.explorationUnit"));
table.setColumnHeader("PROJ_TIPO", getMessage("financialprojectsreports.coordinatorReport.column.type"));
table.setColumnHeader("ORCBRUTO", getMessage("financialprojectsreports.coordinatorReport.column.budget"));
table.setColumnHeader("MAXFINANC", getMessage("financialprojectsreports.coordinatorReport.column.financiableMaximum"));
table.setColumnHeader("RECEITA", getMessage("financialprojectsreports.coordinatorReport.column.revenue"));
table.setColumnHeader("TRF_PARCEIROS", getMessage("financialprojectsreports.coordinatorReport.column.parteners"));
table.setColumnHeader("DESP_VALOR", getMessage("financialprojectsreports.coordinatorReport.column.expense"));
table.setColumnHeader("JU_AD_VALOR", getMessage("financialprojectsreports.coordinatorReport.column.adperJust"));
table.setColumnHeader("CB_AD_VALOR", getMessage("financialprojectsreports.coordinatorReport.column.cabimentsToExecute"));
table.setColumnHeader("TREASURY_BALANCE", getMessage("financialprojectsreports.coordinatorReport.column.treasuryBalance"));
table.setColumnHeader("BUDGET_BALANCE", getMessage("financialprojectsreports.coordinatorReport.column.budgetatyBalance"));
}
String getProjectsSubQuery() {
if (projectCodes.size() == 0) {
return "";
} else {
String subquery = "where proj='" + projectCodes.get(0) + "' ";
for (int i = 1; i < projectCodes.size(); i++) {
subquery += "or proj='" + projectCodes.get(i) + "' ";
}
return subquery;
}
}
}