/* * The Kuali Financial System, a comprehensive financial management system for higher education. * * Copyright 2005-2014 The Kuali Foundation * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ package org.kuali.kfs.module.ec.document; import static org.kuali.kfs.sys.fixture.UserNameFixture.khuntley; import java.sql.Connection; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.util.ArrayList; import java.util.HashSet; import java.util.List; import java.util.Set; import javax.sql.DataSource; import org.kuali.kfs.module.ec.businessobject.EffortCertificationDetail; import org.kuali.kfs.sys.ConfigureContext; import org.kuali.kfs.sys.DocumentTestUtils; import org.kuali.kfs.sys.context.KualiTestBase; import org.kuali.kfs.sys.context.SpringContext; import org.kuali.kfs.sys.service.UniversityDateService; import org.kuali.rice.core.api.util.type.KualiDecimal; import org.kuali.rice.kew.api.WorkflowDocument; import org.kuali.rice.kim.api.identity.Person; import org.kuali.rice.kim.api.identity.PersonService; import org.kuali.rice.kns.service.DataDictionaryService; import org.kuali.rice.krad.bo.DocumentHeader; import org.kuali.rice.krad.bo.Note; import org.kuali.rice.krad.document.Document; import org.kuali.rice.krad.service.DocumentService; import org.kuali.rice.krad.service.NoteService; import org.kuali.rice.krad.service.XmlObjectSerializerService; import org.kuali.rice.krad.workflow.DocumentInitiator; import org.kuali.rice.krad.workflow.KualiDocumentXmlMaterializer; import org.kuali.rice.krad.workflow.KualiTransactionalDocumentInformation; @ConfigureContext(session = khuntley) public class EffortCertificationRoutingTest extends KualiTestBase { private Set<String> databaseNodes; private Document getDocumentParameterFixture() throws Exception { return DocumentTestUtils.createDocument(SpringContext.getBean(DocumentService.class), EffortCertificationDocument.class); } @Override public void setUp() throws Exception { super.setUp(); String documentType = SpringContext.getBean(DataDictionaryService.class).getDocumentTypeNameByClass(EffortCertificationDocument.class); DataSource mySource = SpringContext.getBean(DataSource.class); Connection dbCon = null; ResultSet dbAnswer = null; databaseNodes = new HashSet<String>(); try { dbCon = mySource.getConnection(); Statement dbAsk = dbCon.createStatement(); String query = "select nd.nm "; query = query + "from KREW_RTE_NODE_T nd, KREW_DOC_TYP_T doc "; query = query + "where nd.rte_mthd_nm is not null "; query = query + "and doc.doc_typ_id = nd.doc_typ_id "; query = query + "and doc.doc_typ_nm = '" + documentType + "' "; query = query + "and doc.cur_ind = 1 "; query = query + "and exists (select * from KREW_RTE_NODE_LNK_T "; query = query + "where to_rte_node_id=nd.rte_node_id) "; dbAnswer = dbAsk.executeQuery(query); } catch (Exception e) { e.printStackTrace(); } finally { try { dbCon.close(); } catch (SQLException sqle2) { sqle2.printStackTrace(); } } while (dbAnswer.next()) { databaseNodes.add(dbAnswer.getString(1)); } } private EffortCertificationDocument buildDocument() throws Exception { // put accounting lines into document parameter for later EffortCertificationDocument document = (EffortCertificationDocument) getDocumentParameterFixture(); document.setEmplid("0000000060"); document.setEffortCertificationReportNumber("A03"); document.setUniversityFiscalYear(2009);// Data only exists for this year document.setEffortCertificationDocumentCode(true);// for award routing List<EffortCertificationDetail> effortCertificationDetailLines = new ArrayList<EffortCertificationDetail>(); EffortCertificationDetail testDetailLine = new EffortCertificationDetail(); testDetailLine.setAccountNumber("4831401"); testDetailLine.setChartOfAccountsCode("BL"); // Calculated and updated percent differ to invoke recreate routing testDetailLine.setEffortCertificationCalculatedOverallPercent(40); testDetailLine.setEffortCertificationUpdatedOverallPercent(50); testDetailLine.setPositionNumber("1"); testDetailLine.setFinancialObjectCode("4000"); testDetailLine.setSourceChartOfAccountsCode("BL"); testDetailLine.setSourceAccountNumber("4831401"); Integer testDate = SpringContext.getBean(UniversityDateService.class).getCurrentFiscalYear(); testDetailLine.setUniversityFiscalYear(testDate); testDetailLine.setEffortCertificationOriginalPayrollAmount(new KualiDecimal(100.00)); // testDetailLine.setEffortCertificationPayrollAmount(new KualiDecimal(100.00)); // Adding a note because duplicate documents are not permitted otherwise Note testNote = new Note(); testNote.setNoteText("This is a nice note."); testNote.setAuthorUniversalIdentifier(document.getDocumentHeader().getWorkflowDocument().getInitiatorPrincipalId()); SpringContext.getBean(NoteService.class).createNote(testNote, document.getDocumentHeader(),document.getDocumentHeader().getWorkflowDocument().getInitiatorPrincipalId() ); effortCertificationDetailLines.add(testDetailLine); testDetailLine = new EffortCertificationDetail(); testDetailLine.setAccountNumber("4631483"); testDetailLine.setChartOfAccountsCode("BL"); // Calculated and updated percent differ to invoke recreate routing testDetailLine.setEffortCertificationCalculatedOverallPercent(60); testDetailLine.setEffortCertificationUpdatedOverallPercent(50); testDetailLine.setPositionNumber("1"); testDetailLine.setFinancialObjectCode("4000"); testDetailLine.setSourceChartOfAccountsCode("BL"); testDetailLine.setSourceAccountNumber("4631483"); testDetailLine.setUniversityFiscalYear(testDate); testDetailLine.setEffortCertificationOriginalPayrollAmount(new KualiDecimal(100.00)); effortCertificationDetailLines.add(testDetailLine); document.setEffortCertificationDetailLines(effortCertificationDetailLines); document.getFinancialSystemDocumentHeader().setFinancialDocumentTotalAmount(new KualiDecimal(200.00)); SpringContext.getBean(DocumentService.class).saveDocument(document); return (EffortCertificationDocument) SpringContext.getBean(DocumentService.class).getByDocumentHeaderId(document.getDocumentNumber()); } public String serializeDocumentToXml(Document document) { DocumentHeader documentHeader = document.getDocumentHeader(); KualiTransactionalDocumentInformation transInfo = new KualiTransactionalDocumentInformation(); DocumentInitiator initiatior = new DocumentInitiator(); try { String initiatorPrincipalId = documentHeader.getWorkflowDocument().getInitiatorPrincipalId(); Person initiatorUser = SpringContext.getBean(PersonService.class).getPersonByPrincipalName(initiatorPrincipalId); initiatior.setPerson(initiatorUser); } catch (Exception e) { throw new RuntimeException(e); } transInfo.setDocumentInitiator(initiatior); KualiDocumentXmlMaterializer xmlWrapper = new KualiDocumentXmlMaterializer(); xmlWrapper.setDocument(document); xmlWrapper.setKualiTransactionalDocumentInformation(transInfo); String xml = SpringContext.getBean(XmlObjectSerializerService.class).toXml(xmlWrapper); return xml; } public final void testRouting() throws Exception { EffortCertificationDocument document = buildDocument(); System.out.println("EffortCertificationDocument doc# " + document.getDocumentNumber()); WorkflowDocument testDoc = document.getDocumentHeader().getWorkflowDocument(); testDoc.blanketApprove("Approved by unit test"); assertTrue("Document didn't route!", testDoc.isProcessed() || testDoc.isFinal()); // List<ActionRequest> tempValues = SpringContext.getBean(ActionRequestService.class).findByRouteHeaderIdIgnoreCurrentInd(document.getDocumentHeader().getWorkflowDocument().getDocumentId()); // Set<String> serviceNodes = new HashSet<String>(); // for (ActionRequestValue tempValue : tempValues) { // serviceNodes.add(tempValue.getNodeInstance().getName()); // System.out.println("serviceNodes:::: " + tempValue.getNodeInstance().getName()); // } // // boolean documentRouted = true; // for (String tempName : databaseNodes) { // System.out.println("databaseNodes::::: " + tempName); // // if (serviceNodes.contains(tempName)) { // } // else { // documentRouted = false; // } // } // BIN: disable this test because the role is not setup for AccountingOrganazationHierachy in KIM //assertTrue("Document had routing problems", documentRouted); System.out.println("Document Routed"); } }