Source Code Cross Referenced for RoutingFormServiceImpl.java in  » ERP-CRM-Financial » Kuali-Financial-System » org » kuali » module » kra » routingform » service » impl » Java Source Code / Java DocumentationJava Source Code and Java Documentation

Java Source Code / Java Documentation
1. 6.0 JDK Core
2. 6.0 JDK Modules
3. 6.0 JDK Modules com.sun
4. 6.0 JDK Modules com.sun.java
5. 6.0 JDK Modules sun
6. 6.0 JDK Platform
7. Ajax
8. Apache Harmony Java SE
9. Aspect oriented
10. Authentication Authorization
11. Blogger System
12. Build
13. Byte Code
14. Cache
15. Chart
16. Chat
17. Code Analyzer
18. Collaboration
19. Content Management System
20. Database Client
21. Database DBMS
22. Database JDBC Connection Pool
23. Database ORM
24. Development
25. EJB Server geronimo
26. EJB Server GlassFish
27. EJB Server JBoss 4.2.1
28. EJB Server resin 3.1.5
29. ERP CRM Financial
30. ESB
31. Forum
32. GIS
33. Graphic Library
34. Groupware
35. HTML Parser
36. IDE
37. IDE Eclipse
38. IDE Netbeans
39. Installer
40. Internationalization Localization
41. Inversion of Control
42. Issue Tracking
43. J2EE
44. JBoss
45. JMS
46. JMX
47. Library
48. Mail Clients
49. Net
50. Parser
51. PDF
52. Portal
53. Profiler
54. Project Management
55. Report
56. RSS RDF
57. Rule Engine
58. Science
59. Scripting
60. Search Engine
61. Security
62. Sevlet Container
63. Source Control
64. Swing Library
65. Template Engine
66. Test Coverage
67. Testing
68. UML
69. Web Crawler
70. Web Framework
71. Web Mail
72. Web Server
73. Web Services
74. Web Services apache cxf 2.0.1
75. Web Services AXIS2
76. Wiki Engine
77. Workflow Engines
78. XML
79. XML UI
Java
Java Tutorial
Java Open Source
Jar File Download
Java Articles
Java Products
Java by API
Photoshop Tutorials
Maya Tutorials
Flash Tutorials
3ds-Max Tutorials
Illustrator Tutorials
GIMP Tutorials
C# / C Sharp
C# / CSharp Tutorial
C# / CSharp Open Source
ASP.Net
ASP.NET Tutorial
JavaScript DHTML
JavaScript Tutorial
JavaScript Reference
HTML / CSS
HTML CSS Reference
C / ANSI-C
C Tutorial
C++
C++ Tutorial
Ruby
PHP
Python
Python Tutorial
Python Open Source
SQL Server / T-SQL
SQL Server / T-SQL Tutorial
Oracle PL / SQL
Oracle PL/SQL Tutorial
PostgreSQL
SQL / MySQL
MySQL Tutorial
VB.Net
VB.Net Tutorial
Flash / Flex / ActionScript
VBA / Excel / Access / Word
XML
XML Tutorial
Microsoft Office PowerPoint 2007 Tutorial
Microsoft Office Excel 2007 Tutorial
Microsoft Office Word 2007 Tutorial
Java Source Code / Java Documentation » ERP CRM Financial » Kuali Financial System » org.kuali.module.kra.routingform.service.impl 
Source Cross Referenced  Class Diagram Java Document (Java Doc) 


001:        /*
002:         * Copyright 2006-2007 The Kuali Foundation.
003:         * 
004:         * Licensed under the Educational Community License, Version 1.0 (the "License");
005:         * you may not use this file except in compliance with the License.
006:         * You may obtain a copy of the License at
007:         * 
008:         * http://www.opensource.org/licenses/ecl1.php
009:         * 
010:         * Unless required by applicable law or agreed to in writing, software
011:         * distributed under the License is distributed on an "AS IS" BASIS,
012:         * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013:         * See the License for the specific language governing permissions and
014:         * limitations under the License.
015:         */
016:        package org.kuali.module.kra.routingform.service.impl;
017:
018:        import java.util.HashMap;
019:        import java.util.Iterator;
020:        import java.util.List;
021:        import java.util.Map;
022:
023:        import org.kuali.core.document.Document;
024:        import org.kuali.core.document.MaintenanceDocument;
025:        import org.kuali.core.service.DateTimeService;
026:        import org.kuali.core.service.DocumentService;
027:        import org.kuali.core.service.KualiConfigurationService;
028:        import org.kuali.core.service.MaintenanceDocumentDictionaryService;
029:        import org.kuali.core.util.GlobalVariables;
030:        import org.kuali.core.util.KualiInteger;
031:        import org.kuali.core.util.ObjectUtils;
032:        import org.kuali.kfs.context.SpringContext;
033:        import org.kuali.kfs.service.ParameterService;
034:        import org.kuali.module.cg.bo.Proposal;
035:        import org.kuali.module.cg.bo.ProposalOrganization;
036:        import org.kuali.module.cg.bo.ProposalProjectDirector;
037:        import org.kuali.module.cg.bo.ProposalResearchRisk;
038:        import org.kuali.module.cg.bo.ProposalSubcontractor;
039:        import org.kuali.module.cg.lookup.valuefinder.NextProposalNumberFinder;
040:        import org.kuali.module.cg.maintenance.ProposalMaintainableImpl;
041:        import org.kuali.module.kra.KraConstants;
042:        import org.kuali.module.kra.budget.bo.Budget;
043:        import org.kuali.module.kra.budget.bo.BudgetInstitutionCostShare;
044:        import org.kuali.module.kra.budget.bo.BudgetNonpersonnel;
045:        import org.kuali.module.kra.budget.bo.BudgetPeriodInstitutionCostShare;
046:        import org.kuali.module.kra.budget.bo.BudgetPeriodThirdPartyCostShare;
047:        import org.kuali.module.kra.budget.bo.BudgetThirdPartyCostShare;
048:        import org.kuali.module.kra.budget.bo.BudgetUser;
049:        import org.kuali.module.kra.budget.bo.UserAppointmentTask;
050:        import org.kuali.module.kra.budget.bo.UserAppointmentTaskPeriod;
051:        import org.kuali.module.kra.budget.document.BudgetDocument;
052:        import org.kuali.module.kra.budget.web.struts.form.BudgetOverviewFormHelper;
053:        import org.kuali.module.kra.routingform.bo.RoutingFormBudget;
054:        import org.kuali.module.kra.routingform.bo.RoutingFormInstitutionCostShare;
055:        import org.kuali.module.kra.routingform.bo.RoutingFormOrganization;
056:        import org.kuali.module.kra.routingform.bo.RoutingFormOtherCostShare;
057:        import org.kuali.module.kra.routingform.bo.RoutingFormPersonnel;
058:        import org.kuali.module.kra.routingform.bo.RoutingFormProjectType;
059:        import org.kuali.module.kra.routingform.bo.RoutingFormResearchRisk;
060:        import org.kuali.module.kra.routingform.bo.RoutingFormSubcontractor;
061:        import org.kuali.module.kra.routingform.document.RoutingFormDocument;
062:        import org.kuali.module.kra.routingform.service.RoutingFormService;
063:        import org.springframework.transaction.annotation.Transactional;
064:
065:        import edu.iu.uis.eden.exception.WorkflowException;
066:
067:        @Transactional
068:        public class RoutingFormServiceImpl implements  RoutingFormService {
069:
070:            private DocumentService documentService;
071:            private MaintenanceDocumentDictionaryService maintenanceDocumentDictionaryService;
072:            private ParameterService parameterService;
073:
074:            /**
075:             * @see org.kuali.module.kra.routingform.service.RoutingFormService#prepareRoutingFormForSave(org.kuali.module.kra.routingform.document.RoutingFormDocument)
076:             */
077:            public void prepareRoutingFormForSave(
078:                    RoutingFormDocument routingFormDocument)
079:                    throws WorkflowException {
080:                // TODO
081:            }
082:
083:            public BudgetDocument retrieveBudgetForLinking(
084:                    String budgetDocumentNumber) throws WorkflowException {
085:                Document document = documentService
086:                        .getByDocumentHeaderId(budgetDocumentNumber);
087:
088:                if (document != null && document instanceof  BudgetDocument) {
089:                    return (BudgetDocument) document;
090:                } else {
091:                    return null;
092:                }
093:            }
094:
095:            public void linkImportBudgetDataToRoutingForm(
096:                    RoutingFormDocument routingFormDocument,
097:                    String budgetDocumentHeaderId,
098:                    List<BudgetOverviewFormHelper> periodOverviews)
099:                    throws WorkflowException {
100:
101:                KualiConfigurationService kualiConfigurationService = SpringContext
102:                        .getBean(KualiConfigurationService.class);
103:                final String PERSON_ROLE_CODE_PD = parameterService
104:                        .getParameterValue(RoutingFormDocument.class,
105:                                KraConstants.PERSON_ROLE_CODE_PROJECT_DIRECTOR);
106:
107:                Integer minPeriod = routingFormDocument.getRoutingFormBudget()
108:                        .getRoutingFormBudgetMinimumPeriodNumber();
109:                Integer maxPeriod = routingFormDocument.getRoutingFormBudget()
110:                        .getRoutingFormBudgetMaximumPeriodNumber();
111:
112:                BudgetDocument budgetDocument = retrieveBudgetForLinking(budgetDocumentHeaderId);
113:
114:                Budget budget = budgetDocument.getBudget();
115:
116:                // clear out lists that are going to be re-populated with Budget data.
117:                routingFormDocument.getRoutingFormInstitutionCostShares()
118:                        .clear();
119:                routingFormDocument.getRoutingFormOtherCostShares().clear();
120:                routingFormDocument.getRoutingFormSubcontractors().clear();
121:
122:                RoutingFormBudget routingFormBudget = routingFormDocument
123:                        .getRoutingFormBudget();
124:                routingFormBudget.resetRoutingFormBudgetData();
125:
126:                for (BudgetOverviewFormHelper periodOverview : periodOverviews) {
127:                    if (routingFormBudget.getRoutingFormBudgetTotalStartDate() == null) {
128:                        routingFormBudget
129:                                .setRoutingFormBudgetTotalStartDate(periodOverview
130:                                        .getBudgetPeriod()
131:                                        .getBudgetPeriodBeginDate());
132:                    }
133:                    routingFormBudget
134:                            .setRoutingFormBudgetTotalEndDate(periodOverview
135:                                    .getBudgetPeriod().getBudgetPeriodEndDate());
136:                    routingFormBudget
137:                            .setRoutingFormBudgetTotalIndirectCostAmount(routingFormBudget
138:                                    .getRoutingFormBudgetTotalIndirectCostAmount()
139:                                    .add(
140:                                            periodOverview
141:                                                    .getTotalIndirectCostsAgencyRequest()));
142:
143:                    if (!periodOverview.isOverviewShowModular()) {
144:                        routingFormBudget
145:                                .setRoutingFormBudgetTotalDirectAmount(routingFormBudget
146:                                        .getRoutingFormBudgetTotalDirectAmount()
147:                                        .add(
148:                                                periodOverview
149:                                                        .getTotalDirectCostsAgencyRequest()));
150:                    } else {
151:                        routingFormBudget
152:                                .setRoutingFormBudgetTotalDirectAmount(routingFormBudget
153:                                        .getRoutingFormBudgetTotalDirectAmount()
154:                                        .add(
155:                                                periodOverview
156:                                                        .getAdjustedDirectCostsAgencyRequest()));
157:                    }
158:
159:                    if (periodOverview.isSelected()) {
160:                        if (routingFormBudget.getRoutingFormBudgetStartDate() == null) {
161:                            routingFormBudget
162:                                    .setRoutingFormBudgetStartDate(periodOverview
163:                                            .getBudgetPeriod()
164:                                            .getBudgetPeriodBeginDate());
165:                        }
166:                        routingFormBudget
167:                                .setRoutingFormBudgetEndDate(periodOverview
168:                                        .getBudgetPeriod()
169:                                        .getBudgetPeriodEndDate());
170:                        routingFormBudget
171:                                .setRoutingFormBudgetIndirectCostAmount(routingFormBudget
172:                                        .getRoutingFormBudgetIndirectCostAmount()
173:                                        .add(
174:                                                periodOverview
175:                                                        .getTotalIndirectCostsAgencyRequest()));
176:
177:                        if (!periodOverview.isOverviewShowModular()) {
178:                            routingFormBudget
179:                                    .setRoutingFormBudgetDirectAmount(routingFormBudget
180:                                            .getRoutingFormBudgetDirectAmount()
181:                                            .add(
182:                                                    periodOverview
183:                                                            .getTotalDirectCostsAgencyRequest()));
184:                        } else {
185:                            routingFormBudget
186:                                    .setRoutingFormBudgetDirectAmount(routingFormBudget
187:                                            .getRoutingFormBudgetDirectAmount()
188:                                            .add(
189:                                                    periodOverview
190:                                                            .getAdjustedDirectCostsAgencyRequest()));
191:                        }
192:                    }
193:                }
194:
195:                // set simple values - just replace the RF version w/ what's in the Budget
196:                routingFormDocument
197:                        .setRoutingFormBudgetNumber(budgetDocumentHeaderId);
198:                routingFormDocument.setRoutingFormAnnouncementNumber(budget
199:                        .getBudgetProgramAnnouncementNumber());
200:                routingFormDocument.setAgencyFederalPassThroughNumber(budget
201:                        .getFederalPassThroughAgencyNumber());
202:                routingFormDocument
203:                        .setRoutingFormAgencyToBeNamedIndicator(budget
204:                                .isAgencyToBeNamedIndicator());
205:                routingFormDocument.setRoutingFormPurposeCode(budget
206:                        .getIndirectCost().getBudgetPurposeCode());
207:
208:                routingFormDocument.getRoutingFormAgency().setAgencyNumber(
209:                        budget.getBudgetAgencyNumber());
210:
211:                // Making this call to refresh the document's attributes
212:                routingFormDocument.getRoutingFormAgency()
213:                        .refreshReferenceObject("agency");
214:
215:                // Project Director
216:                for (Iterator i = routingFormDocument.getRoutingFormPersonnel()
217:                        .iterator(); i.hasNext();) {
218:                    RoutingFormPersonnel routingFormPerson = (RoutingFormPersonnel) i
219:                            .next();
220:                    if (routingFormPerson.isProjectDirector()) {
221:                        i.remove();
222:                        break;
223:                    }
224:                }
225:
226:                for (BudgetUser budgetUser : budget.getPersonnel()) {
227:                    if (budgetUser.isPersonProjectDirectorIndicator()) {
228:                        // Get Project Director from Budget
229:                        RoutingFormPersonnel routingFormProjectDirector = new RoutingFormPersonnel(
230:                                budgetUser, routingFormDocument
231:                                        .getDocumentNumber(),
232:                                PERSON_ROLE_CODE_PD);
233:                        routingFormProjectDirector
234:                                .setPersonCreditPercent(new KualiInteger(100));
235:                        routingFormProjectDirector
236:                                .setPersonFinancialAidPercent(new KualiInteger(
237:                                        100));
238:                        routingFormProjectDirector
239:                                .refreshNonUpdateableReferences();
240:                        routingFormDocument
241:                                .addPerson(routingFormProjectDirector);
242:                    }
243:
244:                    // Routing Form Cost Share entries from Personnel
245:                    RoutingFormInstitutionCostShare routingFormInstitutionCostShare = new RoutingFormInstitutionCostShare();
246:                    routingFormInstitutionCostShare
247:                            .setChartOfAccountsCode(budgetUser
248:                                    .getFiscalCampusCode());
249:                    routingFormInstitutionCostShare
250:                            .setOrganizationCode(budgetUser
251:                                    .getPrimaryDepartmentCode());
252:                    routingFormInstitutionCostShare
253:                            .setRoutingFormCostShareAmount(new KualiInteger(0));
254:
255:                    for (UserAppointmentTask userAppointmentTask : budgetUser
256:                            .getUserAppointmentTasks()) {
257:                        for (UserAppointmentTaskPeriod userAppointmentTaskPeriod : userAppointmentTask
258:                                .getUserAppointmentTaskPeriods()) {
259:                            if (userAppointmentTaskPeriod
260:                                    .getBudgetPeriodSequenceNumber().compareTo(
261:                                            minPeriod) >= 0
262:                                    && userAppointmentTaskPeriod
263:                                            .getBudgetPeriodSequenceNumber()
264:                                            .compareTo(maxPeriod) <= 0) {
265:                                routingFormInstitutionCostShare
266:                                        .setRoutingFormCostShareAmount(routingFormInstitutionCostShare
267:                                                .getRoutingFormCostShareAmount()
268:                                                .add(
269:                                                        userAppointmentTaskPeriod
270:                                                                .getInstitutionCostShareRequestTotalAmount()));
271:                            }
272:                        }
273:                    }
274:
275:                    if (routingFormInstitutionCostShare
276:                            .getRoutingFormCostShareAmount().isGreaterThan(
277:                                    KualiInteger.ZERO)) {
278:                        routingFormDocument.addRoutingFormInstitutionCostShare(
279:                                routingFormInstitutionCostShare, true);
280:                    }
281:                }
282:
283:                // Routing Form Cost Share entries from Budget Cost Share screen (not personnel)
284:                for (BudgetInstitutionCostShare budgetInstitutionCostShare : budget
285:                        .getInstitutionCostShareItems()) {
286:                    RoutingFormInstitutionCostShare routingFormInstitutionCostShare = new RoutingFormInstitutionCostShare();
287:                    routingFormInstitutionCostShare
288:                            .setChartOfAccountsCode(budgetInstitutionCostShare
289:                                    .getChartOfAccountsCode());
290:                    routingFormInstitutionCostShare
291:                            .setOrganizationCode(budgetInstitutionCostShare
292:                                    .getOrganizationCode());
293:                    routingFormInstitutionCostShare
294:                            .setRoutingFormCostShareAmount(KualiInteger.ZERO);
295:
296:                    for (BudgetPeriodInstitutionCostShare budgetPeriodInstitutionCostShare : budgetInstitutionCostShare
297:                            .getBudgetPeriodCostShare()) {
298:                        if (budgetPeriodInstitutionCostShare
299:                                .getBudgetCostShareAmount() != null
300:                                && budgetPeriodInstitutionCostShare
301:                                        .getBudgetPeriodSequenceNumber()
302:                                        .compareTo(minPeriod) >= 0
303:                                && budgetPeriodInstitutionCostShare
304:                                        .getBudgetPeriodSequenceNumber()
305:                                        .compareTo(maxPeriod) <= 0) {
306:                            routingFormInstitutionCostShare
307:                                    .setRoutingFormCostShareAmount(routingFormInstitutionCostShare
308:                                            .getRoutingFormCostShareAmount()
309:                                            .add(
310:                                                    budgetPeriodInstitutionCostShare
311:                                                            .getBudgetCostShareAmount()));
312:                        }
313:                    }
314:
315:                    if (routingFormInstitutionCostShare
316:                            .getRoutingFormCostShareAmount().isGreaterThan(
317:                                    KualiInteger.ZERO)) {
318:                        routingFormDocument.addRoutingFormInstitutionCostShare(
319:                                routingFormInstitutionCostShare, true);
320:                    }
321:
322:                }
323:
324:                // Other Cost Share from Budget Cost Share screen
325:                for (BudgetThirdPartyCostShare budgetThirdPartyCostShare : budget
326:                        .getThirdPartyCostShareItems()) {
327:                    RoutingFormOtherCostShare routingFormOtherCostShare = new RoutingFormOtherCostShare();
328:                    routingFormOtherCostShare
329:                            .setRoutingFormCostShareSourceName(budgetThirdPartyCostShare
330:                                    .getBudgetCostShareDescription());
331:                    routingFormOtherCostShare
332:                            .setRoutingFormCostShareAmount(KualiInteger.ZERO);
333:
334:                    for (BudgetPeriodThirdPartyCostShare budgetPeriodThirdPartyCostShare : budgetThirdPartyCostShare
335:                            .getBudgetPeriodCostShare()) {
336:                        if (budgetPeriodThirdPartyCostShare
337:                                .getBudgetPeriodSequenceNumber().compareTo(
338:                                        minPeriod) >= 0
339:                                && budgetPeriodThirdPartyCostShare
340:                                        .getBudgetPeriodSequenceNumber()
341:                                        .compareTo(maxPeriod) <= 0) {
342:                            routingFormOtherCostShare
343:                                    .setRoutingFormCostShareAmount(routingFormOtherCostShare
344:                                            .getRoutingFormCostShareAmount()
345:                                            .add(
346:                                                    budgetPeriodThirdPartyCostShare
347:                                                            .getBudgetCostShareAmount()));
348:                        }
349:                    }
350:
351:                    if (routingFormOtherCostShare
352:                            .getRoutingFormCostShareAmount().isGreaterThan(
353:                                    KualiInteger.ZERO)) {
354:                        routingFormDocument
355:                                .addRoutingFormOtherCostShare(routingFormOtherCostShare);
356:                    }
357:                }
358:
359:                // Other Cost Share from Subcontractors (only Third Party and Inst. Cost Share amounts)
360:                // Create Aggregate Entries for Subcontractor Cost Share and Subcontractor entries
361:                Map<String, RoutingFormOtherCostShare> subcontractorCostShareMap = new HashMap<String, RoutingFormOtherCostShare>();
362:                Map<String, RoutingFormSubcontractor> subcontractorMap = new HashMap<String, RoutingFormSubcontractor>();
363:                for (BudgetNonpersonnel budgetNonpersonnel : budget
364:                        .getNonpersonnelItems()) {
365:                    if (KraConstants.SUBCONTRACTOR_CATEGORY_CODE
366:                            .equals(budgetNonpersonnel
367:                                    .getBudgetNonpersonnelCategoryCode())) {
368:                        if (budgetNonpersonnel.getBudgetPeriodSequenceNumber()
369:                                .compareTo(minPeriod) >= 0
370:                                && budgetNonpersonnel
371:                                        .getBudgetPeriodSequenceNumber()
372:                                        .compareTo(maxPeriod) <= 0) {
373:                            if (subcontractorCostShareMap
374:                                    .containsKey(budgetNonpersonnel
375:                                            .getSubcontractorNumber())) {
376:                                RoutingFormOtherCostShare subcontractor = subcontractorCostShareMap
377:                                        .get(budgetNonpersonnel
378:                                                .getSubcontractorNumber());
379:                                subcontractor
380:                                        .setRoutingFormCostShareAmount(subcontractor
381:                                                .getRoutingFormCostShareAmount()
382:                                                .add(
383:                                                        budgetNonpersonnel
384:                                                                .getBudgetThirdPartyCostShareAmount()
385:                                                                .add(
386:                                                                        budgetNonpersonnel
387:                                                                                .getBudgetInstitutionCostShareAmount())));
388:                            } else {
389:                                RoutingFormOtherCostShare routingFormOtherCostShare = new RoutingFormOtherCostShare();
390:                                routingFormOtherCostShare
391:                                        .setRoutingFormCostShareSourceName(budgetNonpersonnel
392:                                                .getBudgetNonpersonnelDescription());
393:                                routingFormOtherCostShare
394:                                        .setRoutingFormCostShareAmount(budgetNonpersonnel
395:                                                .getBudgetThirdPartyCostShareAmount()
396:                                                .add(
397:                                                        budgetNonpersonnel
398:                                                                .getBudgetInstitutionCostShareAmount()));
399:
400:                                subcontractorCostShareMap.put(
401:                                        budgetNonpersonnel
402:                                                .getSubcontractorNumber(),
403:                                        routingFormOtherCostShare);
404:                            }
405:
406:                            if (subcontractorMap.containsKey(budgetNonpersonnel
407:                                    .getSubcontractorNumber())) {
408:                                RoutingFormSubcontractor subcontractor = subcontractorMap
409:                                        .get(budgetNonpersonnel
410:                                                .getSubcontractorNumber());
411:                                subcontractor
412:                                        .setRoutingFormSubcontractorAmount(subcontractor
413:                                                .getRoutingFormSubcontractorAmount()
414:                                                .add(
415:                                                        budgetNonpersonnel
416:                                                                .getAgencyRequestAmount()));
417:                            } else {
418:                                RoutingFormSubcontractor subcontractor = new RoutingFormSubcontractor();
419:                                subcontractor
420:                                        .setRoutingFormSubcontractorNumber(budgetNonpersonnel
421:                                                .getSubcontractorNumber());
422:                                subcontractor
423:                                        .setRoutingFormSubcontractorAmount(budgetNonpersonnel
424:                                                .getAgencyRequestAmount());
425:
426:                                subcontractorMap.put(budgetNonpersonnel
427:                                        .getSubcontractorNumber(),
428:                                        subcontractor);
429:                            }
430:                        }
431:                    }
432:                }
433:
434:                for (RoutingFormOtherCostShare routingFormOtherCostShare : subcontractorCostShareMap
435:                        .values()) {
436:                    if (routingFormOtherCostShare
437:                            .getRoutingFormCostShareAmount().isGreaterThan(
438:                                    KualiInteger.ZERO)) {
439:                        routingFormDocument
440:                                .addRoutingFormOtherCostShare(routingFormOtherCostShare);
441:                    }
442:                }
443:
444:                for (RoutingFormSubcontractor routingFormSubcontractor : subcontractorMap
445:                        .values()) {
446:                    if (routingFormSubcontractor
447:                            .getRoutingFormSubcontractorAmount().isGreaterThan(
448:                                    KualiInteger.ZERO)) {
449:                        routingFormDocument
450:                                .addRoutingFormSubcontractor(routingFormSubcontractor);
451:                    }
452:                }
453:
454:            }
455:
456:            /**
457:             * This method creates and routes a C&G Proposal based on the values in a Routing Form. This is being done in the KRA-RF space
458:             * to avoid creating a code dependency from C&G to KRA.
459:             * 
460:             * @param routingFormDocument
461:             * @return
462:             */
463:            public Long createAndRouteProposalMaintenanceDocument(
464:                    RoutingFormDocument routingFormDocument) {
465:
466:                try {
467:                    MaintenanceDocument proposalMaintenanceDocument = (MaintenanceDocument) documentService
468:                            .getNewDocument("ProposalAutoGeneratedMaintenanceDocument");
469:
470:                    ProposalMaintainableImpl proposalMaintainable = new ProposalMaintainableImpl(
471:                            this 
472:                                    .createProposalFromRoutingForm(routingFormDocument));
473:                    proposalMaintainable
474:                            .setDocumentNumber(proposalMaintenanceDocument
475:                                    .getDocumentNumber());
476:
477:                    proposalMaintenanceDocument
478:                            .setNewMaintainableObject(proposalMaintainable);
479:
480:                    proposalMaintenanceDocument.getDocumentHeader()
481:                            .setFinancialDocumentDescription(
482:                                    "Created from Routing Form "
483:                                            + routingFormDocument
484:                                                    .getDocumentNumber());
485:
486:                    documentService.updateDocument(proposalMaintenanceDocument);
487:
488:                    GlobalVariables.clear();
489:                    documentService.routeDocument(proposalMaintenanceDocument,
490:                            null, null);
491:
492:                    return ((ProposalMaintainableImpl) proposalMaintenanceDocument
493:                            .getNewMaintainableObject()).getProposal()
494:                            .getProposalNumber();
495:                } catch (WorkflowException e) {
496:                    throw new RuntimeException(
497:                            "Error creating/routing new Proposal from Routing Form Document.  Routing Form "
498:                                    + routingFormDocument.getDocumentNumber());
499:                }
500:
501:            }
502:
503:            private Proposal createProposalFromRoutingForm(
504:                    RoutingFormDocument routingFormDocument) {
505:                Proposal proposal = new Proposal();
506:
507:                Long newProposalNumber = NextProposalNumberFinder
508:                        .getLongValue();
509:                proposal.setProposalNumber(newProposalNumber);
510:                proposal.setProposalStatusCode(Proposal.PROPOSAL_CODE);
511:
512:                // Values coming from RoutingFormDocument (ER_RF_DOC_T)
513:                proposal
514:                        .setProposalProjectTitle(routingFormDocument
515:                                .getRoutingFormProjectTitle().length() > 250 ? routingFormDocument
516:                                .getRoutingFormProjectTitle().substring(0, 250)
517:                                : routingFormDocument
518:                                        .getRoutingFormProjectTitle());
519:                proposal.setProposalPurposeCode(routingFormDocument
520:                        .getRoutingFormPurposeCode());
521:                proposal.setGrantNumber(routingFormDocument.getGrantNumber());
522:                proposal
523:                        .setCfdaNumber(routingFormDocument
524:                                .getRoutingFormCatalogOfFederalDomesticAssistanceNumber());
525:                proposal.setProposalFellowName(routingFormDocument
526:                        .getRoutingFormFellowFullName());
527:                proposal
528:                        .setProposalFederalPassThroughIndicator(routingFormDocument
529:                                .getRoutingFormFederalPassThroughIndicator());
530:                proposal.setFederalPassThroughAgencyNumber(routingFormDocument
531:                        .getAgencyFederalPassThroughNumber());
532:
533:                // There could be multiple types on the RF, but only one of them will pass this rule, and that's the one that should be used
534:                // to populate the Proposal field.
535:                for (RoutingFormProjectType routingFormProjectType : routingFormDocument
536:                        .getRoutingFormProjectTypes()) {
537:                    if (parameterService.getParameterEvaluator(
538:                            RoutingFormDocument.class,
539:                            KraConstants.CREATE_PROPOSAL_PROJECT_TYPES,
540:                            routingFormProjectType.getProjectTypeCode())
541:                            .evaluationSucceeds()) {
542:                        proposal
543:                                .setProposalAwardTypeCode(routingFormProjectType
544:                                        .getProjectTypeCode());
545:                        break;
546:                    }
547:                }
548:
549:                // Values coming from Routing Form Budget BO (ER_RF_BDGT_T)
550:                RoutingFormBudget routingFormBudget = routingFormDocument
551:                        .getRoutingFormBudget();
552:                proposal.setProposalBeginningDate(routingFormBudget
553:                        .getRoutingFormBudgetStartDate());
554:                proposal.setProposalEndingDate(routingFormBudget
555:                        .getRoutingFormBudgetEndDate());
556:                proposal
557:                        .setProposalTotalAmount((routingFormBudget
558:                                .getRoutingFormBudgetDirectAmount() != null ? routingFormBudget
559:                                .getRoutingFormBudgetDirectAmount()
560:                                : new KualiInteger(0))
561:                                .add(
562:                                        routingFormBudget
563:                                                .getRoutingFormBudgetIndirectCostAmount() != null ? routingFormBudget
564:                                                .getRoutingFormBudgetIndirectCostAmount()
565:                                                : new KualiInteger(0))
566:                                .kualiDecimalValue());
567:                proposal
568:                        .setProposalDirectCostAmount((routingFormBudget
569:                                .getRoutingFormBudgetDirectAmount() != null ? routingFormBudget
570:                                .getRoutingFormBudgetDirectAmount()
571:                                : new KualiInteger(0)).kualiDecimalValue());
572:                proposal
573:                        .setProposalIndirectCostAmount((routingFormBudget
574:                                .getRoutingFormBudgetIndirectCostAmount() != null ? routingFormBudget
575:                                .getRoutingFormBudgetIndirectCostAmount()
576:                                : new KualiInteger(0)).kualiDecimalValue());
577:                proposal.setProposalDueDate(routingFormDocument
578:                        .getRoutingFormAgency().getRoutingFormDueDate());
579:
580:                // Values coming from RoutingFormAgency (ER_RF_AGNCY_T)
581:                proposal.setAgencyNumber(routingFormDocument
582:                        .getRoutingFormAgency().getAgencyNumber());
583:
584:                // Values coming from the list of Subcontractors (ER_RF_SUBCNR_T)
585:                for (RoutingFormSubcontractor routingFormSubcontractor : routingFormDocument
586:                        .getRoutingFormSubcontractors()) {
587:
588:                    /**
589:                     * Constructs a ProposalSubcontractor with a Proposal Number and uses a RoutingFormSubcontractor as a template.
590:                     * 
591:                     * @param proposalNumber The proposalNumber for the Proposal that this ProposalSubcontractor will be associated with
592:                     * @param routingFormSubcontractor The routingFormSubcontractor that will act as a template for this
593:                     *        ProposalSubcontractor
594:                     */
595:                    ProposalSubcontractor newProposalSubcontractor = new ProposalSubcontractor();
596:                    newProposalSubcontractor
597:                            .setProposalNumber(newProposalNumber);
598:                    newProposalSubcontractor
599:                            .setProposalSubcontractorNumber(routingFormSubcontractor
600:                                    .getRoutingFormSubcontractorSequenceNumber()
601:                                    .toString());
602:                    newProposalSubcontractor
603:                            .setSubcontractorNumber(routingFormSubcontractor
604:                                    .getRoutingFormSubcontractorNumber());
605:                    newProposalSubcontractor
606:                            .setProposalSubcontractorAmount(routingFormSubcontractor
607:                                    .getRoutingFormSubcontractorAmount()
608:                                    .kualiDecimalValue());
609:
610:                    proposal.getProposalSubcontractors().add(
611:                            newProposalSubcontractor);
612:                }
613:
614:                // Get the RF Primary Project Director
615:                for (RoutingFormPersonnel routingFormPerson : routingFormDocument
616:                        .getRoutingFormPersonnel()) {
617:                    if (routingFormPerson.isProjectDirector()) {
618:                        RoutingFormPersonnel projectDirector = routingFormPerson;
619:
620:                        ProposalProjectDirector newProposalProjectDirector = new ProposalProjectDirector();
621:                        newProposalProjectDirector
622:                                .setProposalNumber(newProposalNumber);
623:                        newProposalProjectDirector
624:                                .setPersonUniversalIdentifier(projectDirector
625:                                        .getPersonUniversalIdentifier());
626:                        newProposalProjectDirector
627:                                .setProposalPrimaryProjectDirectorIndicator(true);
628:
629:                        proposal.getProposalProjectDirectors().add(
630:                                newProposalProjectDirector);
631:
632:                        ProposalOrganization projectDirectorOrganization = new ProposalOrganization();
633:                        projectDirectorOrganization
634:                                .setProposalNumber(newProposalNumber);
635:                        projectDirectorOrganization
636:                                .setChartOfAccountsCode(projectDirector
637:                                        .getChartOfAccountsCode());
638:                        projectDirectorOrganization
639:                                .setOrganizationCode(projectDirector
640:                                        .getOrganizationCode());
641:                        projectDirectorOrganization
642:                                .setProposalPrimaryOrganizationIndicator(true);
643:
644:                        proposal.getProposalOrganizations().add(
645:                                projectDirectorOrganization);
646:                        break;
647:                    }
648:                }
649:
650:                for (RoutingFormOrganization routingFormOrganization : routingFormDocument
651:                        .getRoutingFormOrganizations()) {
652:                    // construct a new ProposalOrganization using the current RoutingFormOrganization as a template.
653:                    ProposalOrganization proposalOrganization = new ProposalOrganization();
654:                    proposalOrganization.setProposalNumber(newProposalNumber);
655:                    proposalOrganization
656:                            .setChartOfAccountsCode(routingFormOrganization
657:                                    .getChartOfAccountsCode());
658:                    proposalOrganization
659:                            .setOrganizationCode(routingFormOrganization
660:                                    .getOrganizationCode());
661:                    proposalOrganization
662:                            .setProposalPrimaryOrganizationIndicator(routingFormOrganization
663:                                    .getRoutingFormPrimaryOrganizationIndicator());
664:
665:                    // check to see if the list or ProposalOrganizations already contains an entry with this key; add it to the list if it
666:                    // does not.
667:                    if (!ObjectUtils.collectionContainsObjectWithIdentitcalKey(
668:                            proposal.getProposalOrganizations(),
669:                            proposalOrganization)) {
670:                        proposal.getProposalOrganizations().add(
671:                                proposalOrganization);
672:                    }
673:                }
674:
675:                for (RoutingFormResearchRisk routingFormResearchRisk : routingFormDocument
676:                        .getRoutingFormResearchRisks()) {
677:                    ProposalResearchRisk newProposalResearchRisk = new ProposalResearchRisk();
678:
679:                    newProposalResearchRisk
680:                            .setProposalNumber(newProposalNumber);
681:                    newProposalResearchRisk
682:                            .setResearchRiskTypeCode(routingFormResearchRisk
683:                                    .getResearchRiskTypeCode());
684:                    newProposalResearchRisk
685:                            .setResearchRiskTypeIndicator(routingFormResearchRisk
686:                                    .getResearchRiskStudies() != null
687:                                    && routingFormResearchRisk
688:                                            .getResearchRiskStudies().size() > 0
689:                                    || routingFormResearchRisk
690:                                            .getResearchRiskDescription() != null);
691:                    newProposalResearchRisk
692:                            .setResearchRiskType(routingFormResearchRisk
693:                                    .getResearchRiskType());
694:
695:                    proposal.getProposalResearchRisks().add(
696:                            newProposalResearchRisk);
697:                }
698:
699:                proposal.setProposalSubmissionDate(SpringContext.getBean(
700:                        DateTimeService.class).getCurrentSqlDate());
701:
702:                return proposal;
703:            }
704:
705:            public void setMaintenanceDocumentDictionaryService(
706:                    MaintenanceDocumentDictionaryService maintenanceDocumentDictionaryService) {
707:                this .maintenanceDocumentDictionaryService = maintenanceDocumentDictionaryService;
708:            }
709:
710:            public void setDocumentService(DocumentService documentService) {
711:                this .documentService = documentService;
712:            }
713:
714:            public void setParameterService(ParameterService parameterService) {
715:                this.parameterService = parameterService;
716:            }
717:
718:        }
w_w_w___.ja_v__a_2___s___.___c__om__ | Contact Us
Copyright 2009 - 12 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.