use of org.kuali.kfs.krad.document.Document in project cu-kfs by CU-CommunityApps.
the class CUAccountMaintainableImpl method saveBusinessObject.
@Override
public void saveBusinessObject() {
boolean isClosingAccount = isClosingAccount();
Account account = (Account) getBusinessObject();
AccountExtendedAttribute aea = (AccountExtendedAttribute) (account.getExtension());
BusinessObjectService bos = SpringContext.getBean(BusinessObjectService.class);
HashMap<String, String> keys = new HashMap<String, String>();
keys.put("programCode", aea.getProgramCode());
keys.put(SUB_FUND_GROUP_CODE, aea.getSubFundGroupCode());
SubFundProgram sfp = (SubFundProgram) bos.findByPrimaryKey(SubFundProgram.class, keys);
aea.setSubFundProgram(sfp);
aea.setSubFundGroupCode(account.getSubFundGroupCode());
keys = new HashMap<String, String>();
keys.put("appropriationAccountNumber", aea.getAppropriationAccountNumber());
keys.put(SUB_FUND_GROUP_CODE, aea.getSubFundGroupCode());
AppropriationAccount aan = (AppropriationAccount) bos.findByPrimaryKey(AppropriationAccount.class, keys);
aea.setAppropriationAccount(aan);
if (account.isClosed() && aea.getAccountClosedDate() == null) {
aea.setAccountClosedDate(SpringContext.getBean(DateTimeService.class).getCurrentSqlDate());
} else if (!account.isClosed() && aea.getAccountClosedDate() != null) {
aea.setAccountClosedDate(null);
}
super.saveBusinessObject();
// trickle down Account Reversion inactivation
if (isClosingAccount) {
SpringContext.getBean(AccountReversionTrickleDownInactivationService.class).trickleDownInactivateAccountReversions((Account) getBusinessObject(), getDocumentNumber());
}
// content and will display any future notes on account edits as well
try {
Document document = SpringContext.getBean(DocumentService.class).getByDocumentHeaderId(getDocumentNumber());
Account xmlaccount = (Account) ((MaintenanceDocument) document).getNewMaintainableObject().getBusinessObject();
if (ObjectUtils.isNull(xmlaccount.getObjectId()) && (KFSConstants.MAINTENANCE_NEW_ACTION.equals(getMaintenanceAction()) || KFSConstants.MAINTENANCE_COPY_ACTION.equals(getMaintenanceAction()))) {
((MaintenanceDocument) document).getNewMaintainableObject().setBusinessObject(account);
SpringContext.getBean(DocumentService.class).saveDocument(document);
}
} catch (Exception e) {
LOG.error("Account doc not saved successfully " + e.getMessage());
}
}
use of org.kuali.kfs.krad.document.Document in project cu-kfs by CU-CommunityApps.
the class LaborExpenseTransferAccountTypesValidation method validate.
/**
* Validates before the document routes
* @see org.kuali.kfs.validation.Validation#validate(java.lang.Object[])
*/
@SuppressWarnings("unchecked")
public boolean validate(AttributedDocumentEvent event) {
boolean isValid = true;
if (getParameterService().getParameterValueAsBoolean(LaborConstants.LABOR_MODULE_CODE, ParameterConstants.DOCUMENT_COMPONENT, LdParameterConstants.VALIDATE_TRANSFER_ACCOUNT_TYPES_IND) && !hasExceptionPermission()) {
Document documentForValidation = getDocumentForValidation();
LaborExpenseTransferDocumentBase expenseTransferDocument = (LaborExpenseTransferDocumentBase) documentForValidation;
List<AccountingLine> sourceLines = (List<AccountingLine>) expenseTransferDocument.getSourceAccountingLines();
List<AccountingLine> targetLines = (List<AccountingLine>) expenseTransferDocument.getTargetAccountingLines();
setInvalidTransferAccountTypesMap();
if (CollectionUtils.isNotEmpty(sourceLines) && CollectionUtils.isNotEmpty(targetLines) && invalidTransferAccountTypesMap.size() > 0) {
if (isInvalidTransferBetweenAccountTypes(sourceLines, targetLines)) {
GlobalVariables.getMessageMap().putError(KFSPropertyConstants.SOURCE_ACCOUNTING_LINES, CuLaborKeyConstants.INVALID_ACCOUNTTRANSFER_ERROR);
isValid = false;
}
}
}
return isValid;
}
use of org.kuali.kfs.krad.document.Document in project cu-kfs by CU-CommunityApps.
the class CuFinancialMaintenanceDocumentAction method insertBONote.
/**
* Overridden to include a Rice 2.5.x fix for persisting BO note additions,
* and to delegate the fix's boolean logic to some new shouldSaveBoNoteAfterUpdate()
* and isTargetReadyForNotes() methods so that it can be further limited based on BO class and readiness.
*
* Some other cleanup has also been done to improve line lengths
* and remove certain comments, but other than that and the changes stated above,
* this method is the same as the one from KualiDocumentActionBase.
*
* @see org.kuali.kfs.kns.web.struts.action.KualiDocumentActionBase#insertBONote(
* org.apache.struts.action.ActionMapping, org.apache.struts.action.ActionForm,
* javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
*/
@Override
public ActionForward insertBONote(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
KualiDocumentFormBase kualiDocumentFormBase = (KualiDocumentFormBase) form;
Document document = kualiDocumentFormBase.getDocument();
Note newNote = kualiDocumentFormBase.getNewNote();
newNote.setNotePostedTimestampToCurrent();
String attachmentTypeCode = null;
FormFile attachmentFile = kualiDocumentFormBase.getAttachmentFile();
if (attachmentFile == null) {
GlobalVariables.getMessageMap().putError(String.format("%s.%s", KRADConstants.NEW_DOCUMENT_NOTE_PROPERTY_NAME, KRADConstants.NOTE_ATTACHMENT_FILE_PROPERTY_NAME), RiceKeyConstants.ERROR_UPLOADFILE_NULL);
}
if (newNote.getAttachment() != null) {
attachmentTypeCode = newNote.getAttachment().getAttachmentTypeCode();
}
// check authorization for adding notes
DocumentAuthorizer documentAuthorizer = getDocumentHelperService().getDocumentAuthorizer(document);
if (!documentAuthorizer.canAddNoteAttachment(document, attachmentTypeCode, GlobalVariables.getUserSession().getPerson())) {
throw buildAuthorizationException("annotate", document);
}
// create the attachment first, so that failure-to-create-attachment can be treated as a validation failure
Attachment attachment = null;
if (attachmentFile != null && !StringUtils.isBlank(attachmentFile.getFileName())) {
if (attachmentFile.getFileSize() == 0) {
GlobalVariables.getMessageMap().putError(String.format("%s.%s", KRADConstants.NEW_DOCUMENT_NOTE_PROPERTY_NAME, KRADConstants.NOTE_ATTACHMENT_FILE_PROPERTY_NAME), RiceKeyConstants.ERROR_UPLOADFILE_EMPTY, attachmentFile.getFileName());
} else {
String attachmentType = null;
Attachment newAttachment = kualiDocumentFormBase.getNewNote().getAttachment();
if (newAttachment != null) {
attachmentType = newAttachment.getAttachmentTypeCode();
}
attachment = getAttachmentService().createAttachment(document.getNoteTarget(), attachmentFile.getFileName(), attachmentFile.getContentType(), attachmentFile.getFileSize(), attachmentFile.getInputStream(), attachmentType);
}
}
DataDictionary dataDictionary = getDataDictionaryService().getDataDictionary();
DocumentEntry entry = dataDictionary.getDocumentEntry(document.getClass().getName());
if (entry.getDisplayTopicFieldInNotes()) {
String topicText = kualiDocumentFormBase.getNewNote().getNoteTopicText();
if (StringUtils.isBlank(topicText)) {
GlobalVariables.getMessageMap().putError(String.format("%s.%s", KRADConstants.NEW_DOCUMENT_NOTE_PROPERTY_NAME, KRADConstants.NOTE_TOPIC_TEXT_PROPERTY_NAME), RiceKeyConstants.ERROR_REQUIRED, "Note Topic (Note Topic)");
}
}
// create a new note from the data passed in
Person kualiUser = GlobalVariables.getUserSession().getPerson();
if (kualiUser == null) {
throw new IllegalStateException("Current UserSession has a null Person.");
}
Note tmpNote = getNoteService().createNote(newNote, document.getNoteTarget(), kualiUser.getPrincipalId());
ActionForward forward = checkAndWarnAboutSensitiveData(mapping, form, request, response, KRADPropertyConstants.NOTE, tmpNote.getNoteText(), "insertBONote", "");
if (forward != null) {
return forward;
}
// validate the note
boolean rulePassed = getKualiRuleService().applyRules(new AddNoteEvent(document, tmpNote));
// if the rule evaluation passed, let's add the note
if (rulePassed) {
tmpNote.refresh();
DocumentHeader documentHeader = document.getDocumentHeader();
// associate note with object now
document.addNote(tmpNote);
// maintenance document BO note should only be saved into table when document is in the PROCESSED workflow status
if (!documentHeader.getWorkflowDocument().isInitiated() && StringUtils.isNotEmpty(document.getNoteTarget().getObjectId()) && !(document instanceof MaintenanceDocument && NoteType.BUSINESS_OBJECT.getCode().equals(tmpNote.getNoteTypeCode()))) {
getNoteService().save(tmpNote);
}
// autopopulate the id since the note hasn't been persisted yet)
if (attachment != null) {
tmpNote.addAttachment(attachment);
// without the PK on the attachment I think it is safer then trying to get the sequence manually
if (!documentHeader.getWorkflowDocument().isInitiated() && StringUtils.isNotEmpty(document.getNoteTarget().getObjectId()) && !(document instanceof MaintenanceDocument && NoteType.BUSINESS_OBJECT.getCode().equals(tmpNote.getNoteTypeCode()))) {
getNoteService().save(tmpNote);
}
}
// Added some logic which saves the document and/or notes list after a BO note is added to the document
if (shouldSaveBoNoteAfterUpdate(document, tmpNote)) {
if (isTargetReadyForNotes(document)) {
getNoteService().save(tmpNote);
} else {
getDocumentService().saveDocument(document);
}
}
// reset the new note back to an empty one
kualiDocumentFormBase.setNewNote(new Note());
}
return mapping.findForward(RiceConstants.MAPPING_BASIC);
}
use of org.kuali.kfs.krad.document.Document in project cu-kfs by CU-CommunityApps.
the class CuFinancialMaintenanceDocumentAction method deleteBONote.
/**
* Overridden to include a Rice 2.5.x fix for deleting INITIATED-doc notes and persisting BO note deletions,
* and to delegate the fix's boolean logic to some new shouldSaveBoNoteAfterUpdate()
* and isTargetReadyForNotes() methods so that it can be further limited based on BO class and readiness.
*
* Some other cleanup has also been done to remove certain comments and unused variables,
* but other than that and the changes stated above,
* this method is the same as the one from KualiDocumentActionBase.
*
* @see org.kuali.kfs.kns.web.struts.action.KualiDocumentActionBase#deleteBONote(
* org.apache.struts.action.ActionMapping, org.apache.struts.action.ActionForm,
* javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
*/
@Override
public ActionForward deleteBONote(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
KualiDocumentFormBase kualiDocumentFormBase = (KualiDocumentFormBase) form;
Document document = kualiDocumentFormBase.getDocument();
Note note = document.getNote(getLineToDelete(request));
Attachment attachment = note.getAttachment();
String attachmentTypeCode = null;
if (attachment != null) {
attachmentTypeCode = attachment.getAttachmentTypeCode();
}
String authorUniversalIdentifier = note.getAuthorUniversalIdentifier();
if (!WebUtils.canDeleteNoteAttachment(document, attachmentTypeCode, authorUniversalIdentifier)) {
throw buildAuthorizationException("annotate", document);
}
if (attachment != null) {
// so refreshNonUpdateableReferences() should work the same as refresh()
if (note.getNoteIdentifier() != null) {
// KULRICE-2343 don't blow away note reference if the note wasn't persisted
attachment.refreshNonUpdateableReferences();
}
getAttachmentService().deleteAttachmentContents(attachment);
}
// Removed the if check so it no longer checks if the document is initiated before deleting the BO's note per KULRICE- 12327
getNoteService().deleteNote(note);
document.removeNote(note);
if (shouldSaveBoNoteAfterUpdate(document, note)) {
// If this is a maintenance document and we're deleting a BO note then try to save the document so the note is removed from the content
if (!isTargetReadyForNotes(document)) {
getDocumentService().saveDocument(document);
}
}
return mapping.findForward(RiceConstants.MAPPING_BASIC);
}
use of org.kuali.kfs.krad.document.Document in project cu-kfs by CU-CommunityApps.
the class FinancialSystemSearchableAttribute method extractDocumentAttributes.
@Override
public List<DocumentAttribute> extractDocumentAttributes(ExtensionDefinition extensionDefinition, DocumentWithContent documentWithContent) {
if (LOG.isDebugEnabled()) {
LOG.debug("extractDocumentAttributes( " + extensionDefinition + ", " + documentWithContent + " )");
}
List<DocumentAttribute> searchAttrValues = super.extractDocumentAttributes(extensionDefinition, documentWithContent);
String docId = documentWithContent.getDocument().getDocumentId();
DocumentService docService = SpringContext.getBean(DocumentService.class);
Document doc = null;
try {
doc = docService.getByDocumentHeaderIdSessionless(docId);
} catch (WorkflowException we) {
}
if (doc != null) {
if (doc instanceof AmountTotaling && ((AmountTotaling) doc).getTotalDollarAmount() != null) {
DocumentAttributeDecimal.Builder searchableAttributeValue = DocumentAttributeDecimal.Builder.create(KFSPropertyConstants.FINANCIAL_DOCUMENT_TOTAL_AMOUNT);
searchableAttributeValue.setValue(((AmountTotaling) doc).getTotalDollarAmount().bigDecimalValue());
searchAttrValues.add(searchableAttributeValue.build());
}
if (doc instanceof AccountingDocument) {
AccountingDocument accountingDoc = (AccountingDocument) doc;
searchAttrValues.addAll(harvestAccountingDocumentSearchableAttributes(accountingDoc));
}
boolean indexedLedgerDoc = false;
if (doc instanceof LaborLedgerPostingDocumentForSearching) {
LaborLedgerPostingDocumentForSearching LLPostingDoc = (LaborLedgerPostingDocumentForSearching) doc;
searchAttrValues.addAll(harvestLLPDocumentSearchableAttributes(LLPostingDoc));
indexedLedgerDoc = true;
}
if (doc instanceof GeneralLedgerPostingDocument && !indexedLedgerDoc) {
GeneralLedgerPostingDocument GLPostingDoc = (GeneralLedgerPostingDocument) doc;
searchAttrValues.addAll(harvestGLPDocumentSearchableAttributes(GLPostingDoc));
}
DocumentHeader docHeader = doc.getDocumentHeader();
if (ObjectUtils.isNotNull(docHeader) && ObjectUtils.isNotNull(docHeader.getWorkflowDocument()) && CUKFSConstants.GACC_DOCUMENT_TYPE.equalsIgnoreCase(docHeader.getWorkflowDocument().getDocumentTypeName())) {
for (AccountGlobalDetail detail : ((AccountGlobal) ((AccountGlobalMaintainableImpl) ((FinancialSystemMaintenanceDocument) doc).getNewMaintainableObject()).getBusinessObject()).getAccountGlobalDetails()) {
if (!StringUtils.isBlank(detail.getAccountNumber())) {
DocumentAttributeString.Builder searchableAttributeValue = DocumentAttributeString.Builder.create(KFSPropertyConstants.ACCOUNT_NUMBER);
searchableAttributeValue.setValue(detail.getAccountNumber());
searchAttrValues.add(searchableAttributeValue.build());
}
}
}
}
return searchAttrValues;
}
Aggregations