/* * $Id: NackaCCPlacementReportModel.java,v 1.9 2004/03/15 11:21:56 anders Exp $ * * Copyright (C) 2003 Agura IT. All Rights Reserved. * * This software is the proprietary information of Agura IT AB. * Use is subject to license terms. * */ package se.idega.idegaweb.commune.school.report.business; import java.rmi.RemoteException; /** * Report model for child care placements in Nacka. * <p> * Last modified: $Date: 2004/03/15 11:21:56 $ by $Author: anders $ * * @author Anders Lindman * @version $Revision: 1.9 $ */ public class NackaCCPlacementReportModel extends ReportModel { private final static int ROW_SIZE = 22; private final static int COLUMN_SIZE = 1; private final static int ROW_METHOD_PRE_SCHOOL_MANAGEMENT_PRE_SCHOOL = 1; private final static int ROW_METHOD_PRE_SCHOOL_MANAGEMENT_PRE_SCHOOL_COMMUNE = 2; private final static int ROW_METHOD_PRE_SCHOOL_MANAGEMENT_PRE_SCHOOL_PRIVATE = 3; private final static int ROW_METHOD_PRE_SCHOOL_MANAGEMENT_FAMILY_AFTER_SCHOOL = 4; private final static int ROW_METHOD_PRE_SCHOOL_MANAGEMENT_FAMILY_AFTER_SCHOOL_COMMUNE = 5; private final static int ROW_METHOD_PRE_SCHOOL_MANAGEMENT_FAMILY_AFTER_SCHOOL_PRIVATE = 6; private final static int ROW_METHOD_SCHOOL_CHILDREN_CARE_6_AFTER_SCHOOL = 8; private final static int ROW_METHOD_SCHOOL_CHILDREN_CARE_6_AFTER_SCHOOL_COMMUNE = 9; private final static int ROW_METHOD_SCHOOL_CHILDREN_CARE_6_AFTER_SCHOOL_PRIVATE = 10; private final static int ROW_METHOD_SCHOOL_CHILDREN_CARE_6_FAMILY_DAYCARE = 11; private final static int ROW_METHOD_SCHOOL_CHILDREN_CARE_6_FAMILY_DAYCARE_COMMUNE = 12; private final static int ROW_METHOD_SCHOOL_CHILDREN_CARE_6_FAMILY_DAYCARE_PRIVATE = 13; private final static int ROW_METHOD_SCHOOL_CHILDREN_CARE_7_9_AFTER_SCHOOL = 15; private final static int ROW_METHOD_SCHOOL_CHILDREN_CARE_7_9_AFTER_SCHOOL_COMMUNE = 16; private final static int ROW_METHOD_SCHOOL_CHILDREN_CARE_7_9_AFTER_SCHOOL_PRIVATE = 17; private final static int ROW_METHOD_SCHOOL_CHILDREN_CARE_7_9_FAMILY_AFTER_SCHOOL = 18; private final static int ROW_METHOD_SCHOOL_CHILDREN_CARE_7_9_FAMILY_AFTER_SCHOOL_COMMUNE = 19; private final static int ROW_METHOD_SCHOOL_CHILDREN_CARE_7_9_FAMILY_AFTER_SCHOOL_PRIVATE = 20; private final static int ROW_METHOD_SUM = 22; private final static int ROW_METHOD_TOTAL =23; private final static int COLUMN_METHOD_DATE = 101; private final static String QUERY_CHILD_CARE = "child_care"; private final static int PRE_SCHOOL = 1; private final static int FAMILY_DAYCARE = 2; private final static int AFTER_SCHOOL_6 = 3; private final static int FAMILY_DAYCARE_6 = 4; private final static int AFTER_SCHOOL_7_9 = 5; private final static int FAMILY_AFTER_SCHOOL_7_9 = 6; private final static int COMMUNE = 1; private final static int PRIVATE = 2; private final static String KEY_REPORT_TITLE = KP + "title_nacka_child_care_placements"; /** * Constructs this report model. * @param reportBusiness the report business instance for calculating cell values */ public NackaCCPlacementReportModel(ReportBusiness reportBusiness) { super(reportBusiness); } /** * @see se.idega.idegaweb.commune.school.report.business.ReportModel#initReportSize() */ protected void initReportSize() { setReportSize(ROW_SIZE, COLUMN_SIZE); } /** * @see se.idega.idegaweb.commune.school.report.business.ReportModel#buildRowHeaders() */ protected Header[] buildRowHeaders() { Header[] headers = new Header[4]; Header h = new Header(KEY_PRE_SCHOOL_OPERATION, Header.HEADERTYPE_ROW_HEADER, 7); Header child0 = new Header(KEY_PRE_SCHOOL, Header.HEADERTYPE_ROW_NORMAL); Header child1 = new Header(KEY_OF_WHICH_COMMUNE_MANAGEMENT, Header.HEADERTYPE_ROW_NORMAL); Header child2 = new Header(KEY_OF_WHICH_PRIVATE_MANAGEMENT, Header.HEADERTYPE_ROW_NORMAL); Header child3 = new Header(KEY_FAMILY_DAYCARE, Header.HEADERTYPE_ROW_NORMAL); Header child4 = new Header(KEY_OF_WHICH_COMMUNE_MANAGEMENT, Header.HEADERTYPE_ROW_NORMAL); Header child5 = new Header(KEY_OF_WHICH_PRIVATE_MANAGEMENT, Header.HEADERTYPE_ROW_NORMAL); Header child6 = new Header(KEY_SUM, Header.HEADERTYPE_ROW_SUM); h.setChild(0, child0); h.setChild(1, child1); h.setChild(2, child2); h.setChild(3, child3); h.setChild(4, child4); h.setChild(5, child5); h.setChild(6, child6); headers[0] = h; h = new Header(KEY_SCHOOL_CHILDREN_CARE_6_YEAR, Header.HEADERTYPE_ROW_HEADER, 7); child0 = new Header(KEY_AFTER_SCHOOL_CENTRE, Header.HEADERTYPE_ROW_NORMAL); child1 = new Header(KEY_OF_WHICH_COMMUNE_MANAGEMENT, Header.HEADERTYPE_ROW_NORMAL); child2 = new Header(KEY_OF_WHICH_PRIVATE_MANAGEMENT, Header.HEADERTYPE_ROW_NORMAL); child3 = new Header(KEY_FAMILY_DAYCARE, Header.HEADERTYPE_ROW_NORMAL); child4 = new Header(KEY_OF_WHICH_COMMUNE_MANAGEMENT, Header.HEADERTYPE_ROW_NORMAL); child5 = new Header(KEY_OF_WHICH_PRIVATE_MANAGEMENT, Header.HEADERTYPE_ROW_NORMAL); child6 = new Header(KEY_SUM, Header.HEADERTYPE_ROW_SUM); h.setChild(0, child0); h.setChild(1, child1); h.setChild(2, child2); h.setChild(3, child3); h.setChild(4, child4); h.setChild(5, child5); h.setChild(6, child6); headers[1] = h; h = new Header(KEY_SCHOOL_CHILDREN_CARE_7_9_YEAR, Header.HEADERTYPE_ROW_HEADER, 7); child0 = new Header(KEY_AFTER_SCHOOL_CENTRE, Header.HEADERTYPE_ROW_NORMAL); child1 = new Header(KEY_OF_WHICH_COMMUNE_MANAGEMENT, Header.HEADERTYPE_ROW_NORMAL); child2 = new Header(KEY_OF_WHICH_PRIVATE_MANAGEMENT, Header.HEADERTYPE_ROW_NORMAL); child3 = new Header(KEY_FAMILY_AFTER_SCHOOL_CENTRE, Header.HEADERTYPE_ROW_NORMAL); child4 = new Header(KEY_OF_WHICH_COMMUNE_MANAGEMENT, Header.HEADERTYPE_ROW_NORMAL); child5 = new Header(KEY_OF_WHICH_PRIVATE_MANAGEMENT, Header.HEADERTYPE_ROW_NORMAL); child6 = new Header(KEY_SUM, Header.HEADERTYPE_ROW_SUM); h.setChild(0, child0); h.setChild(1, child1); h.setChild(2, child2); h.setChild(3, child3); h.setChild(4, child4); h.setChild(5, child5); h.setChild(6, child6); headers[2] = h; h = new Header(KEY_TOTAL, Header.HEADERTYPE_ROW_HEADER, 1); child0 = new Header(KEY_SUM_CHILDREN, Header.HEADERTYPE_ROW_NORMAL); h.setChild(0, child0); headers[3] = h; return headers; } /** * @see se.idega.idegaweb.commune.school.report.business.ReportModel#buildColumnHeaders() */ protected Header[] buildColumnHeaders() { Header[] headers = new Header[1]; // IWTimestamp now = IWTimestamp.RightNow(); // String date = now.getDateString("yy-MM-dd"); headers[0] = new Header(KEY_NUMBER_OF_CHILDREN, Header.HEADERTYPE_COLUMN_HEADER); return headers; } /** * @see se.idega.idegaweb.commune.school.report.business.ReportModel#buildCells() */ protected void buildCells() { for (int column = 0; column < getColumnSize(); column++) { int row = 0; int columnMethod = 0; Object columnParameter = null; switch (column) { case 0: columnMethod = COLUMN_METHOD_DATE; columnParameter = null; break; } Object rowParameter = null; Cell cell = new Cell(this, row, column, ROW_METHOD_PRE_SCHOOL_MANAGEMENT_PRE_SCHOOL, columnMethod, rowParameter, columnParameter, Cell.CELLTYPE_NORMAL); setCell(row++, column, cell); cell = new Cell(this, row, column, ROW_METHOD_PRE_SCHOOL_MANAGEMENT_PRE_SCHOOL_COMMUNE, columnMethod, rowParameter, columnParameter, Cell.CELLTYPE_NORMAL); setCell(row++, column, cell); cell = new Cell(this, row, column, ROW_METHOD_PRE_SCHOOL_MANAGEMENT_PRE_SCHOOL_PRIVATE, columnMethod, rowParameter, columnParameter, Cell.CELLTYPE_NORMAL); setCell(row++, column, cell); cell = new Cell(this, row, column, ROW_METHOD_PRE_SCHOOL_MANAGEMENT_FAMILY_AFTER_SCHOOL, columnMethod, rowParameter, columnParameter, Cell.CELLTYPE_NORMAL); setCell(row++, column, cell); cell = new Cell(this, row, column, ROW_METHOD_PRE_SCHOOL_MANAGEMENT_FAMILY_AFTER_SCHOOL_COMMUNE, columnMethod, rowParameter, columnParameter, Cell.CELLTYPE_NORMAL); setCell(row++, column, cell); cell = new Cell(this, row, column, ROW_METHOD_PRE_SCHOOL_MANAGEMENT_FAMILY_AFTER_SCHOOL_PRIVATE, columnMethod, rowParameter, columnParameter, Cell.CELLTYPE_NORMAL); setCell(row++, column, cell); cell = new Cell(this, row, column, ROW_METHOD_SUM, columnMethod, rowParameter, columnParameter, Cell.CELLTYPE_NORMAL); setCell(row++, column, cell); cell = new Cell(this, row, column, ROW_METHOD_SCHOOL_CHILDREN_CARE_6_AFTER_SCHOOL, columnMethod, rowParameter, columnParameter, Cell.CELLTYPE_NORMAL); setCell(row++, column, cell); cell = new Cell(this, row, column, ROW_METHOD_SCHOOL_CHILDREN_CARE_6_AFTER_SCHOOL_COMMUNE, columnMethod, rowParameter, columnParameter, Cell.CELLTYPE_NORMAL); setCell(row++, column, cell); cell = new Cell(this, row, column, ROW_METHOD_SCHOOL_CHILDREN_CARE_6_AFTER_SCHOOL_PRIVATE, columnMethod, rowParameter, columnParameter, Cell.CELLTYPE_NORMAL); setCell(row++, column, cell); cell = new Cell(this, row, column, ROW_METHOD_SCHOOL_CHILDREN_CARE_6_FAMILY_DAYCARE, columnMethod, rowParameter, columnParameter, Cell.CELLTYPE_NORMAL); setCell(row++, column, cell); cell = new Cell(this, row, column, ROW_METHOD_SCHOOL_CHILDREN_CARE_6_FAMILY_DAYCARE_COMMUNE, columnMethod, rowParameter, columnParameter, Cell.CELLTYPE_NORMAL); setCell(row++, column, cell); cell = new Cell(this, row, column, ROW_METHOD_SCHOOL_CHILDREN_CARE_6_FAMILY_DAYCARE_PRIVATE, columnMethod, rowParameter, columnParameter, Cell.CELLTYPE_NORMAL); setCell(row++, column, cell); cell = new Cell(this, row, column, ROW_METHOD_SUM, columnMethod, rowParameter, columnParameter, Cell.CELLTYPE_NORMAL); setCell(row++, column, cell); cell = new Cell(this, row, column, ROW_METHOD_SCHOOL_CHILDREN_CARE_7_9_AFTER_SCHOOL, columnMethod, rowParameter, columnParameter, Cell.CELLTYPE_NORMAL); setCell(row++, column, cell); cell = new Cell(this, row, column, ROW_METHOD_SCHOOL_CHILDREN_CARE_7_9_AFTER_SCHOOL_COMMUNE, columnMethod, rowParameter, columnParameter, Cell.CELLTYPE_NORMAL); setCell(row++, column, cell); cell = new Cell(this, row, column, ROW_METHOD_SCHOOL_CHILDREN_CARE_7_9_AFTER_SCHOOL_PRIVATE, columnMethod, rowParameter, columnParameter, Cell.CELLTYPE_NORMAL); setCell(row++, column, cell); cell = new Cell(this, row, column, ROW_METHOD_SCHOOL_CHILDREN_CARE_7_9_FAMILY_AFTER_SCHOOL, columnMethod, rowParameter, columnParameter, Cell.CELLTYPE_NORMAL); setCell(row++, column, cell); cell = new Cell(this, row, column, ROW_METHOD_SCHOOL_CHILDREN_CARE_7_9_FAMILY_AFTER_SCHOOL_COMMUNE, columnMethod, rowParameter, columnParameter, Cell.CELLTYPE_NORMAL); setCell(row++, column, cell); cell = new Cell(this, row, column, ROW_METHOD_SCHOOL_CHILDREN_CARE_7_9_FAMILY_AFTER_SCHOOL_PRIVATE, columnMethod, rowParameter, columnParameter, Cell.CELLTYPE_NORMAL); setCell(row++, column, cell); cell = new Cell(this, row, column, ROW_METHOD_SUM, columnMethod, rowParameter, columnParameter, Cell.CELLTYPE_NORMAL); setCell(row++, column, cell); cell = new Cell(this, row, column, ROW_METHOD_TOTAL, columnMethod, rowParameter, columnParameter, Cell.CELLTYPE_NORMAL); setCell(row++, column, cell); } } /** * @see se.idega.idegaweb.commune.school.report.business.ReportModel#calculate() */ protected float calculate(Cell cell) throws RemoteException { float value = 0f; int row = cell.getRow(); int column = cell.getColumn(); switch (cell.getRowMethod()) { case ROW_METHOD_PRE_SCHOOL_MANAGEMENT_PRE_SCHOOL: value = getCell(1, column).getFloatValue() + getCell(2, column).getFloatValue(); break; case ROW_METHOD_PRE_SCHOOL_MANAGEMENT_PRE_SCHOOL_COMMUNE: value = getChildCarePlacementCount(PRE_SCHOOL, COMMUNE); break; case ROW_METHOD_PRE_SCHOOL_MANAGEMENT_PRE_SCHOOL_PRIVATE: value = getChildCarePlacementCount(PRE_SCHOOL, PRIVATE); break; case ROW_METHOD_PRE_SCHOOL_MANAGEMENT_FAMILY_AFTER_SCHOOL: value = getCell(4, column).getFloatValue() + getCell(5, column).getFloatValue(); break; case ROW_METHOD_PRE_SCHOOL_MANAGEMENT_FAMILY_AFTER_SCHOOL_COMMUNE: value = getChildCarePlacementCount(FAMILY_DAYCARE, COMMUNE); break; case ROW_METHOD_PRE_SCHOOL_MANAGEMENT_FAMILY_AFTER_SCHOOL_PRIVATE: value = getChildCarePlacementCount(FAMILY_DAYCARE, PRIVATE); break; case ROW_METHOD_SCHOOL_CHILDREN_CARE_6_AFTER_SCHOOL: value = getCell(8, column).getFloatValue() + getCell(9, column).getFloatValue(); break; case ROW_METHOD_SCHOOL_CHILDREN_CARE_6_AFTER_SCHOOL_COMMUNE: value = getChildCarePlacementCount(AFTER_SCHOOL_6, COMMUNE); break; case ROW_METHOD_SCHOOL_CHILDREN_CARE_6_AFTER_SCHOOL_PRIVATE: value = getChildCarePlacementCount(AFTER_SCHOOL_6, PRIVATE); break; case ROW_METHOD_SCHOOL_CHILDREN_CARE_6_FAMILY_DAYCARE: value = getCell(11, column).getFloatValue() + getCell(12, column).getFloatValue(); break; case ROW_METHOD_SCHOOL_CHILDREN_CARE_6_FAMILY_DAYCARE_COMMUNE: value = getChildCarePlacementCount(FAMILY_DAYCARE_6, COMMUNE); break; case ROW_METHOD_SCHOOL_CHILDREN_CARE_6_FAMILY_DAYCARE_PRIVATE: value = getChildCarePlacementCount(FAMILY_DAYCARE_6, PRIVATE); break; case ROW_METHOD_SCHOOL_CHILDREN_CARE_7_9_AFTER_SCHOOL: value = getCell(15, column).getFloatValue() + getCell(16, column).getFloatValue(); break; case ROW_METHOD_SCHOOL_CHILDREN_CARE_7_9_AFTER_SCHOOL_COMMUNE: value = getChildCarePlacementCount(AFTER_SCHOOL_7_9, COMMUNE); break; case ROW_METHOD_SCHOOL_CHILDREN_CARE_7_9_AFTER_SCHOOL_PRIVATE: value = getChildCarePlacementCount(AFTER_SCHOOL_7_9, PRIVATE); break; case ROW_METHOD_SCHOOL_CHILDREN_CARE_7_9_FAMILY_AFTER_SCHOOL: value = getCell(18, column).getFloatValue() + getCell(19, column).getFloatValue(); break; case ROW_METHOD_SCHOOL_CHILDREN_CARE_7_9_FAMILY_AFTER_SCHOOL_COMMUNE: value = getChildCarePlacementCount(FAMILY_AFTER_SCHOOL_7_9, COMMUNE); break; case ROW_METHOD_SCHOOL_CHILDREN_CARE_7_9_FAMILY_AFTER_SCHOOL_PRIVATE: value = getChildCarePlacementCount(FAMILY_AFTER_SCHOOL_7_9, PRIVATE); break; case ROW_METHOD_SUM: for (int i = row - 6; i < row; i += 3) { value += getCell(i, column).getFloatValue(); } break; case ROW_METHOD_TOTAL: value = getCell(6, column).getFloatValue() + getCell(13, column).getFloatValue() + getCell(20, column).getFloatValue(); break; } return value; } /** * @see se.idega.idegaweb.commune.school.report.business.ReportModel#getReportTitleLocalizationKey() */ public String getReportTitleLocalizationKey() { return KEY_REPORT_TITLE; } /** * Returns the number of student placements for the specified high school and school year. */ protected int getChildCarePlacementCount(int schoolType, int managementType) throws RemoteException { ReportBusiness rb = getReportBusiness(); int schoolType1 = 0; int schoolType2 = 0; int schoolType3 = 0; int schoolType4 = 0; switch (schoolType) { case PRE_SCHOOL: schoolType1 = rb.getPreSchoolTypeId(); schoolType2 = rb.getGeneralPreSchoolTypeId(); schoolType3 = schoolType1; schoolType4 = schoolType2; break; case FAMILY_DAYCARE: schoolType1 = rb.getFamilyDayCareSchoolTypeId(); schoolType2 = rb.getGeneralFamilyDaycareSchoolTypeId(); schoolType3 = schoolType1; schoolType4 = schoolType2; break; case AFTER_SCHOOL_6: schoolType1 = rb.getAfterSchool6TypeId(); schoolType2 = schoolType1; schoolType3 = schoolType1; schoolType4 = schoolType1; break; case FAMILY_DAYCARE_6: schoolType1 = rb.getFamilyAfterSchool6TypeId(); schoolType2 = schoolType1; schoolType3 = schoolType1; schoolType4 = schoolType1; break; case AFTER_SCHOOL_7_9: schoolType1 = rb.getAfterSchool7_9TypeId(); schoolType2 = schoolType1; schoolType3 = schoolType1; schoolType4 = schoolType1; break; case FAMILY_AFTER_SCHOOL_7_9: schoolType1 = rb.getFamilyAfterSchool7_9TypeId(); schoolType2 = schoolType1; schoolType3 = schoolType1; schoolType4 = schoolType1; break; } String managementType1 = null; String managementType2 = null; String managementType3 = null; String managementType4 = null; switch (managementType) { case COMMUNE: managementType1 = "COMMUNE"; managementType2 = managementType1; managementType3 = managementType1; managementType4 = managementType1; break; case PRIVATE: managementType1 = "COMPANY"; managementType2 = "FOUNDATION"; managementType3 = "OTHER"; managementType4 = "COOPERATIVE_COMMUNE_LIABILITY"; break; } PreparedQuery query = null; query = getQuery(QUERY_CHILD_CARE); if (query == null) { query = new PreparedQuery(getConnection()); query.setSelectCount(); query.setChildCarePlacements(); query.setFourSchoolTypes(); // parameter 1-4 query.setFourManagementTypes(); // parameter 5-8 query.prepare(); setQuery(QUERY_CHILD_CARE, query); } query.setInt(1, schoolType1); query.setInt(2, schoolType2); query.setInt(3, schoolType3); query.setInt(4, schoolType4); query.setString(5, managementType1); query.setString(6, managementType2); query.setString(7, managementType3); query.setString(8, managementType4); return query.execute(); } }