/* * Services Back Office Web * * PSOrderModel.java : TreeModel belonging to PSOrder.java, controller for PSOrder.zul * Author : EMEA professional services, Ben Brand * */ package asgps.model; import asgservices.dbcommon.portlet.DBP_Expenses; import asgservices.dbcommon.portlet.DBP_Invoices; import asgservices.dbcommon.portlet.DBP_PSOrder; import asgservices.dbcommon.portlet.DBP_RealTime; import asgservices.dbcommon.wrappers.DB_Expenses; import asgservices.dbcommon.wrappers.DB_Invoices; import asgservices.dbcommon.wrappers.DB_PSOrder; import asgservices.dbcommon.wrappers.DB_RealTime; import java.util.ArrayList; import java.util.HashMap; import org.zkoss.zul.AbstractTreeModel; /** * * @author brand */ public class PSOrderModel extends AbstractTreeModel { private ArrayList psOrderList = new ArrayList(); private ArrayList timeList = new ArrayList(); private ArrayList expensesList = new ArrayList(); private ArrayList invoicedList = new ArrayList(); private ArrayList plannedList = new ArrayList(); private ArrayList rootList = new ArrayList(); private ArrayList detail = new ArrayList(0); private ArrayList orderDetail = new ArrayList(0); private int pIndex = 0; private int pLevel = 0; private HashMap rootMap = new HashMap(); // // global vars // private String webServer = ""; private String region = ""; private Boolean completed = false; private DBP_PSOrder dbpPSOrder = new DBP_PSOrder(); private DB_PSOrder selectedOrder = new DB_PSOrder(); public PSOrderModel(String w) { super("root"); webServer = w; } public void setRegion(String r) { region = r; } public void setCompleted(Boolean c) { completed = c; } public Object getCurrentOrder() { return selectedOrder; } public void buildTree(int treeMode, String filter) { ArrayList orderList = new ArrayList(0); // ps order; default open mode if (treeMode == 0) { if (filter.isEmpty()) { orderList = dbpPSOrder.getList("REGIONAL-LIST", 0, 0, "N", region, completed, ""); } else { orderList = dbpPSOrder.getList("GET-ONE", new Integer(filter), 0, "N", region, completed, ""); } pIndex = 0; rootList.clear(); rootMap.clear(); for (Object r : orderList) { DB_PSOrder dbPSOrder = (DB_PSOrder) r; String keyString = "Order" + " : " + dbPSOrder.get$order_id() + " ; " + dbPSOrder.get$restask().replaceAll(";", "") + " ; " + dbPSOrder.get$project_id().replaceAll(";", "") + " "; if (dbPSOrder.get$rec_state().equals("D")) { keyString = keyString + "; [INACTIVE]"; } else if (dbPSOrder.get$rec_state().equals("N")) { keyString = keyString + "; [NEW]"; } rootMap.put(keyString, r); rootList.add(keyString); } } else if (treeMode == 1) { if (filter.isEmpty()) { orderList = dbpPSOrder.getList("CUSTOMER-LIST", 0, 0, "N", region, completed, ""); } else { orderList = dbpPSOrder.getList("CUSTOMER-FILTERED", 0, 0, "N", region, completed, filter); } pIndex = 2; rootList.clear(); rootMap.clear(); for (Object r : orderList) { String keyString = ""; ArrayList fields = (ArrayList) r; for (Object fld : fields) { if (keyString.isEmpty()) { keyString = "Customer : "; } else { keyString = keyString + " ; "; } keyString = keyString + fld.toString().replaceAll(";", ""); } rootMap.put(keyString, r); rootList.add(keyString); } } else if (treeMode == 2) { if (filter.isEmpty()) { orderList = dbpPSOrder.getList("PRACTICE-LIST", 0, 0, "N", region, completed, ""); } else { orderList = dbpPSOrder.getList("PRACTICE-FILTERED", 0, 0, "N", region, completed, filter); } pIndex = 3; rootList.clear(); rootMap.clear(); for (Object r : orderList) { String keyString = ""; ArrayList fields = (ArrayList) r; for (Object fld : fields) { if (keyString.isEmpty()) { keyString = "Practice : "; } else { keyString = keyString + " ; "; } keyString = keyString + fld.toString().replaceAll(";", ""); } rootMap.put(keyString, r); rootList.add(keyString); } } else if (treeMode == 3) { if (filter.isEmpty()) { orderList = dbpPSOrder.getList("PRODUCT-GROUP-LIST", 0, 0, "N", region, completed, ""); } else { orderList = dbpPSOrder.getList("PRODUCT-GROUP-FILTERED", 0, 0, "N", region, completed, filter); } pIndex = 4; rootList.clear(); rootMap.clear(); for (Object r : orderList) { String keyString = ""; ArrayList fields = (ArrayList) r; for (Object fld : fields) { if (keyString.isEmpty()) { keyString = "ProdGroup : "; } else { keyString = keyString + " ; "; } keyString = keyString + fld.toString().replaceAll(";", ""); } rootMap.put(keyString, r); rootList.add(keyString); } } else if (treeMode == 4) { if (filter.isEmpty()) { orderList = dbpPSOrder.getList("PRODUCT-LIST", 0, 0, "N", region, completed, ""); } else { orderList = dbpPSOrder.getList("PRODUCT-FILTERED", 0, 0, "N", region, completed, filter); } pIndex = 5; rootList.clear(); rootMap.clear(); for (Object r : orderList) { String keyString = ""; ArrayList fields = (ArrayList) r; for (Object fld : fields) { if (keyString.isEmpty()) { keyString = "Product : "; } else { keyString = keyString + " ; "; } keyString = keyString + fld.toString().replaceAll(";", ""); } rootMap.put(keyString, r); rootList.add(keyString); } } } public void clearTree() { psOrderList.clear(); rootList.clear(); } public void addOrder(DB_PSOrder dbPSOrder) { String keyString = "Order" + " : " + dbPSOrder.get$order_id() + " ; " + dbPSOrder.get$restask().replaceAll(";", "") + " ; " + dbPSOrder.get$project_id().replaceAll(";", "") + " "; rootMap.put(keyString, rootList.size() + 1); rootList.add(keyString); } @Override public Object getChild(Object parent, int index) { String childLeaf = ""; String p = (String) parent; if (p.startsWith("Order :")) { pLevel = 9; if (index == 0) { detail.clear(); selectedOrder = (DB_PSOrder) rootMap.get(parent); if (selectedOrder.get$actual() != 0) { detail.add("Time (" + (selectedOrder.get$actual()) + ")"); } else { detail.add("Time"); } if (selectedOrder.get$expenses() != 0) { detail.add("Expenses (" + selectedOrder.get$expenses() + ")"); } else { detail.add("Expenses"); } if (selectedOrder.get$invoiced() != 0) { detail.add("Invoiced (" + selectedOrder.get$invoiced() + ")"); } else { detail.add("Invoiced"); } String planned = ""; if (selectedOrder.get$inProgress()) { planned = "yes"; } else { planned = "no"; } detail.add("Planned (" + planned + ")"); } if (!detail.isEmpty()) { childLeaf = (String) detail.get(index); } } else if (p.startsWith("Customer : ")) { pLevel = 1; if (index == 0) { orderDetail.clear(); psOrderList.clear(); rootMap.clear(); String parseIt = p.replaceAll("\\p{Space}:\\p{Space}", "\t"); String[] dfield = parseIt.split("\t"); parseIt = dfield[1].replaceAll("\\p{Space};\\p{Space}", "\t"); String[] dataFields = parseIt.split("\t"); orderDetail = dbpPSOrder.getList("CUSTOMER", 0, 0, "N", region, completed, dataFields[1]); for (Object r : orderDetail) { DB_PSOrder dbPSOrder = (DB_PSOrder) r; String keyString = "Order" + " : " + dbPSOrder.get$order_id() + " ; " + dbPSOrder.get$restask().replaceAll(";", " ") + " ; " + dbPSOrder.get$project_id().replaceAll(";", " ") + " "; rootMap.put(keyString, r); psOrderList.add(keyString); } } if (!psOrderList.isEmpty()) { childLeaf = (String) psOrderList.get(index); } } else if (p.startsWith("Practice : ")) { pLevel = 1; if (index == 0) { orderDetail.clear(); psOrderList.clear(); rootMap.clear(); String parseIt = p.replaceAll("\\p{Space}:\\p{Space}", "\t"); String[] dfield = parseIt.split("\t"); parseIt = dfield[1].replaceAll("\\p{Space};\\p{Space}", "\t"); String[] dataFields = parseIt.split("\t"); orderDetail = dbpPSOrder.getList("PRACTICE", 0, 0, "N", region, completed, dataFields[1]); for (Object r : orderDetail) { DB_PSOrder dbPSOrder = (DB_PSOrder) r; String keyString = "Order" + " : " + dbPSOrder.get$order_id() + " ; " + dbPSOrder.get$restask().replaceAll(";", " ") + " ; " + dbPSOrder.get$project_id().replaceAll(";", " ") + " "; rootMap.put(keyString, r); psOrderList.add(keyString); } } if (!psOrderList.isEmpty()) { childLeaf = (String) psOrderList.get(index); } } else if (p.startsWith("ProdGroup : ")) { pLevel = 1; if (index == 0) { orderDetail.clear(); psOrderList.clear(); rootMap.clear(); String parseIt = p.replaceAll("\\p{Space}:\\p{Space}", "\t"); String[] dfield = parseIt.split("\t"); parseIt = dfield[1].replaceAll("\\p{Space};\\p{Space}", "\t"); String[] dataFields = parseIt.split("\t"); orderDetail = dbpPSOrder.getList("PRODUCT-GROUP", 0, 0, "N", region, completed, dataFields[1]); for (Object r : orderDetail) { DB_PSOrder dbPSOrder = (DB_PSOrder) r; String keyString = "Order" + " : " + dbPSOrder.get$order_id() + " ; " + dbPSOrder.get$restask().replaceAll(";", " ") + " ; " + dbPSOrder.get$project_id().replaceAll(";", " ") + " "; rootMap.put(keyString, r); psOrderList.add(keyString); } } if (!psOrderList.isEmpty()) { childLeaf = (String) psOrderList.get(index); } } else if (p.startsWith("Product : ")) { pLevel = 1; if (index == 0) { orderDetail.clear(); psOrderList.clear(); rootMap.clear(); String parseIt = p.replaceAll("\\p{Space}:\\p{Space}", "\t"); String[] dfield = parseIt.split("\t"); parseIt = dfield[1].replaceAll("\\p{Space};\\p{Space}", "\t"); String[] dataFields = parseIt.split("\t"); orderDetail = dbpPSOrder.getList("PRODUCT", 0, 0, "N", region, completed, dataFields[1]); for (Object r : orderDetail) { DB_PSOrder dbPSOrder = (DB_PSOrder) r; String keyString = "Order" + " : " + dbPSOrder.get$order_id() + " ; " + dbPSOrder.get$restask().replaceAll(";", " ") + " ; " + dbPSOrder.get$project_id().replaceAll(";", " ") + " "; rootMap.put(keyString, r); psOrderList.add(keyString); } } if (!psOrderList.isEmpty()) { childLeaf = (String) psOrderList.get(index); } } else if (p.startsWith("Time (")) { pLevel = 2; if (index == 0) { orderDetail.clear(); timeList.clear(); ArrayList recList = new ArrayList(); DBP_RealTime readRealTime = new DBP_RealTime(); recList = readRealTime.getList("ORDER-LIST", "", 0, new java.sql.Date(0), "", selectedOrder.get$order_id(), 0, "","","N"); for (Object r : recList) { DB_RealTime dbRealTime = (DB_RealTime) r; // DANGER WILL ROBINSON: // changes to the displayed data on the tree line must al be reflected in how to display // .. the detail data in the edit Tabs. See the controller PSOrder String keyString = "Timesheet" + " : " + dbRealTime.get$ts_no() + " ; " + dbRealTime.get$employee().replaceAll(";", " ") + " ; " + dbRealTime.get$delivery_date() + " ; " + (dbRealTime.get$billable_hours()) + " ; " + dbRealTime.get$id(); timeList.add(keyString); } } if (!timeList.isEmpty()) { childLeaf = (String) timeList.get(index); } } else if (p.startsWith("Expenses (")) { pLevel = 3; if (index == 0) { orderDetail.clear(); expensesList.clear(); ArrayList recList = new ArrayList(0); DBP_Expenses dbpExpenses = new DBP_Expenses(); recList = dbpExpenses.getList("ORDER-LIST", 0, selectedOrder.get$order_id(), "N", 0, 0); for (Object r : recList) { DB_Expenses dbExpenses = (DB_Expenses) r; // DANGER WILL ROBINSON: // changes to the displayed data on the tree line must al be reflected in how to display // .. the detail data in the edit Tabs. See the controller PSOrder String keyString = "Expenses" + " : " + dbExpenses.get$expense_id() + " ; " + dbExpenses.get$resres() + " ; " + dbExpenses.get$expense_date() + " ; " + dbExpenses.get$expense_type().replaceAll(";", " ") + " ; " + dbExpenses.get$amount_usd() + " ; " + dbExpenses.get$id(); expensesList.add(keyString); } } if (!expensesList.isEmpty()) { childLeaf = (String) expensesList.get(index); } } else if (p.startsWith("Invoiced (")) { pLevel = 4; if (index == 0) { orderDetail.clear(); invoicedList.clear(); ArrayList recordList = new ArrayList(); DBP_Invoices dbpInvoices = new DBP_Invoices(); recordList = dbpInvoices.getList("ORDER-LIST", selectedOrder.get$order_id(), 0, "N", 0); for (Object r : recordList) { DB_Invoices dbInvoices = (DB_Invoices) r; // DANGER WILL ROBINSON: // changes to the displayed data on the tree line must al be reflected in how to display // .. the detail data in the edit Tabs. See the controller PSOrder String keyString = "Invoices" + " : " + dbInvoices.get$invoice_number() + " ; " + dbInvoices.get$invoice_date() + " ; " + dbInvoices.get$currency() + " ; " + dbInvoices.get$amount() + " ; " + dbInvoices.get$invoice_id(); invoicedList.add(keyString); } } if (!invoicedList.isEmpty()) { childLeaf = (String) invoicedList.get(index); } } else if (p.startsWith("Planned (")) { pLevel = 5; if (index == 0) { orderDetail.clear(); plannedList.clear(); } if (!plannedList.isEmpty()) { childLeaf = (String) plannedList.get(index); } } else if (p.equals("root")) { childLeaf = (String) rootList.get(index); pLevel = 0; } return childLeaf; } @Override public int getChildCount(Object node) { int childCount = 0; if (pLevel == 0) { childCount = rootList.size(); } else if (pLevel == 1) { childCount = psOrderList.size(); } else if (pLevel == 2) { childCount = timeList.size(); } else if (pLevel == 3) { childCount = expensesList.size(); } else if (pLevel == 4) { childCount = invoicedList.size(); } else if (pLevel == 5) { childCount = plannedList.size(); } else if (pLevel == 9) { childCount = detail.size(); } return childCount; } @Override public boolean isLeaf(Object node) { // System.out.println("is Leaf method"); boolean il = false; if (node == null) { // should never occur, traps the major 6.0.1 bug // il = true; } else { if (pLevel == 2) { il = true; } else if (pLevel == 3) { il = true; } else if (pLevel == 4) { il = true; } else if (pLevel == 5) { il = true; } else if (pLevel == 9) { String n = node.toString(); if (n.startsWith("Planned")) { il = true; } else { if (n.indexOf("(") > 0) { il = false; } else { il = true; } } } } return il; } /* example found, update 1 node and not refresh everything * public void add(TreeNode parent, TreeNode node) { if (node != null && parent != null) { parent.add(node); int index = parent.getIndex(node); if (index >= 0) { fireEvent(parent, index, index, TreeDataEvent.INTERVAL_ADDED); } } } * * */ }