/** * Part of a complete breakfast, it has everything you need to populate Key Personnel into a * <code>{@link ProposalDevelopmentDocument}</code> * * @param document */ public void populateDocument(ProposalDevelopmentDocument document) { if (hasBeenRoutedOrCanceled(document)) { Collection<InvestigatorCreditType> availableCreditTypes = getAllInvestigatorCreditTypes(); Set<InvestigatorCreditType> usedCreditTypes = new HashSet<InvestigatorCreditType>(); for (ProposalPerson person : document.getDevelopmentProposal().getInvestigators()) { for (ProposalPersonCreditSplit creditSplit : person.getCreditSplits()) { for (InvestigatorCreditType currentCreditType : availableCreditTypes) { if (currentCreditType.getCode().equals(creditSplit.getInvCreditTypeCode())) { usedCreditTypes.add(currentCreditType); } } } } document.getDevelopmentProposal().setInvestigatorCreditTypes(usedCreditTypes); } else { document.getDevelopmentProposal().setInvestigatorCreditTypes(getInvestigatorCreditTypes()); } if (document.getDevelopmentProposal().getInvestigators().isEmpty() && !document.getDevelopmentProposal().getProposalPersons().isEmpty()) { LOG.info("Need to repopulate investigator list"); populateInvestigators(document); if (!(document.getDocumentHeader().getWorkflowDocument().getStatus().getCode().equals("R"))) { populateActiveCredittypesPerson(document); } } /* check for new certification questions */ for (ProposalPerson person : document.getDevelopmentProposal().getProposalPersons()) { getYnqService().getPersonYNQ(person, document); } }
/** * Initializes credit splits for new investigators * * @param person */ protected void populateCreditTypes(ProposalPerson person) { if (!person.getCreditSplits().isEmpty()) { return; } for (InvestigatorCreditType creditType : (Collection<InvestigatorCreditType>) getInvestigatorCreditTypes()) { ProposalPersonCreditSplit creditSplit = new ProposalPersonCreditSplit(); creditSplit.setProposalPerson(person); creditSplit.setInvCreditTypeCode(creditType.getCode()); creditSplit.setCredit(new ScaleTwoDecimal(0)); person.getCreditSplits().add(creditSplit); } }
/** * It populates the Active credit type in the proposalpersoncreditsplit and unitcreditsplit * * @param document * @return true or false */ public void populateActiveCredittypesPerson(ProposalDevelopmentDocument document) { Collection<InvestigatorCreditType> invcrdttype = getInvestigatorCreditTypes(); for (ProposalPerson person : document.getDevelopmentProposal().getInvestigators()) { for (InvestigatorCreditType invcredtype : invcrdttype) { boolean creditTypeFound = false; for (ProposalPersonCreditSplit proposalpersoncrdt : person.getCreditSplits()) { if ((invcredtype.getCode().equals(proposalpersoncrdt.getInvCreditTypeCode()))) { creditTypeFound = true; break; } } if (!creditTypeFound) { ProposalPersonCreditSplit creditSplit = new ProposalPersonCreditSplit(); creditSplit.setProposalPerson(person); creditSplit.setInvCreditTypeCode(invcredtype.getCode()); creditSplit.setCredit(new ScaleTwoDecimal(0)); person.getCreditSplits().add(creditSplit); } } for (ProposalPersonUnit unitsplit : person.getUnits()) { for (InvestigatorCreditType invcrdtype : invcrdttype) { boolean creditTypeFound = false; for (ProposalUnitCreditSplit unitcreditsplit : unitsplit.getCreditSplits()) { if ((invcrdtype.getCode().equals(unitcreditsplit.getInvCreditTypeCode()))) { creditTypeFound = true; break; } } if (!creditTypeFound) { ProposalUnitCreditSplit creditSplit = new ProposalUnitCreditSplit(); creditSplit.setProposalPersonUnit(unitsplit); creditSplit.setInvCreditTypeCode(invcrdtype.getCode()); creditSplit.setCredit(new ScaleTwoDecimal(0)); unitsplit.getCreditSplits().add(creditSplit); } } } } }
@Override public List<ProposalCreditSplitListDto> createCreditSplitListItems( List<ProposalPerson> investigators) { List<ProposalCreditSplitListDto> creditSplitListItems = new ArrayList<ProposalCreditSplitListDto>(); Map<String, ProposalPersonCreditSplit> totalInvestigatorSplits = new HashMap<String, ProposalPersonCreditSplit>(); for (ProposalPerson investigator : investigators) { ProposalCreditSplitListDto investigatorLine = new ProposalCreditSplitListDto(); investigatorLine.setDescription(investigator.getFullName()); investigatorLine.setLineType("investigator"); investigatorLine.getCreditSplits().addAll(investigator.getCreditSplits()); creditSplitListItems.add(investigatorLine); for (ProposalPersonCreditSplit invesitgatorCreditSplit : investigator.getCreditSplits()) { if (totalInvestigatorSplits.containsKey(invesitgatorCreditSplit.getInvCreditTypeCode())) { ProposalPersonCreditSplit creditSplit = totalInvestigatorSplits.get(invesitgatorCreditSplit.getInvCreditTypeCode()); creditSplit.setCredit(creditSplit.getCredit().add(invesitgatorCreditSplit.getCredit())); } else { ProposalPersonCreditSplit creditSplit = new ProposalPersonCreditSplit(); creditSplit.setCredit(invesitgatorCreditSplit.getCredit()); totalInvestigatorSplits.put(invesitgatorCreditSplit.getInvCreditTypeCode(), creditSplit); } } Map<String, ProposalUnitCreditSplit> totalUnitSplits = new HashMap<String, ProposalUnitCreditSplit>(); for (ProposalPersonUnit unit : investigator.getUnits()) { ProposalCreditSplitListDto unitLine = new ProposalCreditSplitListDto(); unitLine.setDescription(unit.getUnitNumber() + " - " + unit.getUnit().getUnitName()); unitLine.getCreditSplits().addAll(unit.getCreditSplits()); unitLine.setLineType("unit"); creditSplitListItems.add(unitLine); for (ProposalUnitCreditSplit unitCreditSplit : unit.getCreditSplits()) { if (totalUnitSplits.containsKey(unitCreditSplit.getInvCreditTypeCode())) { ProposalUnitCreditSplit creditSplit = totalUnitSplits.get(unitCreditSplit.getInvCreditTypeCode()); creditSplit.setCredit(creditSplit.getCredit().add(unitCreditSplit.getCredit())); } else { ProposalUnitCreditSplit creditSplit = new ProposalUnitCreditSplit(); creditSplit.setCredit(unitCreditSplit.getCredit()); totalUnitSplits.put(unitCreditSplit.getInvCreditTypeCode(), creditSplit); } } } ProposalCreditSplitListDto unitTotalLine = new ProposalCreditSplitListDto(); unitTotalLine.setDescription("Unit Total:"); unitTotalLine.setLineType("unit-total"); for (Map.Entry<String, ProposalUnitCreditSplit> entry : totalUnitSplits.entrySet()) { unitTotalLine.getCreditSplits().add(0, entry.getValue()); } creditSplitListItems.add(unitTotalLine); } ProposalCreditSplitListDto investigatorTotalLine = new ProposalCreditSplitListDto(); investigatorTotalLine.setDescription("Investigator Total:"); investigatorTotalLine.setLineType("investigator-total"); for (Map.Entry<String, ProposalPersonCreditSplit> entry : totalInvestigatorSplits.entrySet()) { investigatorTotalLine.getCreditSplits().add(0, entry.getValue()); } creditSplitListItems.add(investigatorTotalLine); return creditSplitListItems; }