/* * @(#)SubmitForValidationActivity.java * * Copyright 2010 Instituto Superior Tecnico * Founding Authors: Luis Cruz * * https://fenix-ashes.ist.utl.pt/ * * This file is part of the Working Capital Module. * * The Working Capital Module is free software: you can * redistribute it and/or modify it under the terms of the GNU Lesser General * Public License as published by the Free Software Foundation, either version * 3 of the License, or (at your option) any later version. * * The Working Capital Module 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 Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with the Working Capital Module. If not, see <http://www.gnu.org/licenses/>. * */ package module.workingCapital.domain.activity; import java.util.HashMap; import java.util.Map; import java.util.ResourceBundle; import module.finance.util.Money; import module.workflow.activities.ActivityInformation; import module.workflow.activities.WorkflowActivity; import module.workingCapital.domain.WorkingCapital; import module.workingCapital.domain.WorkingCapitalAcquisitionSubmission; import module.workingCapital.domain.WorkingCapitalAcquisitionSubmissionDocument; import module.workingCapital.domain.WorkingCapitalAcquisitionTransaction; import module.workingCapital.domain.WorkingCapitalProcess; import module.workingCapital.domain.WorkingCapitalTransaction; import module.workingCapital.util.Bundle; import net.sf.jasperreports.engine.JRException; import org.fenixedu.bennu.core.domain.User; import org.fenixedu.bennu.core.i18n.BundleUtil; import org.fenixedu.bennu.core.util.CoreConfiguration; import pt.ist.expenditureTrackingSystem._development.ExpenditureConfiguration; import pt.ist.expenditureTrackingSystem.domain.util.DomainException; import pt.ist.expenditureTrackingSystem.util.ReportUtils; /** * * @author João Neves * @author Luis Cruz * */ public class SubmitForValidationActivity extends WorkflowActivity<WorkingCapitalProcess, SubmitForValidationActivityInformation> { @Override public String getLocalizedName() { return BundleUtil.getString(Bundle.WORKING_CAPITAL, "activity." + getClass().getSimpleName()); } @Override public boolean isActive(final WorkingCapitalProcess process, final User user) { WorkingCapital workingCapital = process.getWorkingCapital(); return !workingCapital.isCanceledOrRejected() && (process.getCurrentOwner() == null || process.isTakenByCurrentUser()) && workingCapital.isMovementResponsible(user) && workingCapital.hasApprovedAndUnSubmittedAcquisitions() && workingCapital.areAllAcquisitionsApproved(); } @Override protected void process(final SubmitForValidationActivityInformation activityInformation) { final WorkingCapitalProcess workingCapitalProcess = activityInformation.getProcess(); workingCapitalProcess.submitAcquisitionsForValidation(); final WorkingCapital workingCapital = workingCapitalProcess.getWorkingCapital(); final Money accumulatedValue = workingCapital.getLastTransaction().getAccumulatedValue(); WorkingCapitalAcquisitionSubmission acquisitionSubmission = new WorkingCapitalAcquisitionSubmission(workingCapital, getLoggedPerson().getPerson(), accumulatedValue, activityInformation.isPaymentRequired()); WorkingCapitalTransaction previousTransaction = acquisitionSubmission.getPreviousTransaction(); while (previousTransaction != null) { if (previousTransaction.isSubmission()) { break; } if ((previousTransaction.isAcquisition()) && previousTransaction.isApproved()) { acquisitionSubmission .addWorkingCapitalAcquisitionTransactions((WorkingCapitalAcquisitionTransaction) previousTransaction); } previousTransaction = previousTransaction.getPreviousTransaction(); } String txNumber = String.valueOf(acquisitionSubmission.getNumber()); byte[] contents = createAcquisitionSubmissionDocument(acquisitionSubmission); WorkingCapitalAcquisitionSubmissionDocument document = new WorkingCapitalAcquisitionSubmissionDocument(acquisitionSubmission, contents, "SubmissionDocument" + txNumber + ".pdf", activityInformation.getProcess()); document.setFilename("Submission" + document.getOid() + document.getFilename()); if (activityInformation.isLastSubmission()) { TerminateWorkingCapitalActivity terminateWorkingCapitalActivity = new TerminateWorkingCapitalActivity(); terminateWorkingCapitalActivity.execute(activityInformation); } } private byte[] createAcquisitionSubmissionDocument(WorkingCapitalAcquisitionSubmission acquisitionSubmission) { final Map<String, Object> paramMap = new HashMap<String, Object>(); paramMap.put("workingCapital", acquisitionSubmission.getWorkingCapital()); paramMap.put("responsibleName", acquisitionSubmission.getPerson().getName()); paramMap.put("IBAN", acquisitionSubmission.getWorkingCapital().getWorkingCapitalInitialization() .getInternationalBankAccountNumber()); final String url = CoreConfiguration.getConfiguration().applicationUrl(); paramMap.put("logoFilename", "Logo_" + getLogoFileNamePart(url) + ".png"); paramMap.put("submissionTransactionNumber", acquisitionSubmission.getNumber()); paramMap.put("submissionDescription", acquisitionSubmission.getDescription()); paramMap.put("submissionValue", acquisitionSubmission.getValue()); paramMap.put("submissionAccumulatedValue", acquisitionSubmission.getAccumulatedValue()); paramMap.put("submissionBalance", acquisitionSubmission.getBalance()); paramMap.put("submissionDebt", acquisitionSubmission.getDebt()); paramMap.put("institutionSocialSecurityNumber", ExpenditureConfiguration.get().ssn()); paramMap.put("cae", ExpenditureConfiguration.get().cae()); paramMap.put("paymentRequired", BundleUtil.getString("resources/MyorgResources", acquisitionSubmission.getPaymentRequired().toString())); final ResourceBundle resourceBundle = ResourceBundle.getBundle(Bundle.WORKING_CAPITAL); try { byte[] byteArray = ReportUtils.exportToPdfFileAsByteArray("/reports/workingCapitalAcquisitionSubmissionDocument.jasper", paramMap, resourceBundle, acquisitionSubmission.getWorkingCapitalAcquisitionTransactionsSorted()); return byteArray; } catch (JRException e) { e.printStackTrace(); throw new DomainException(Bundle.WORKING_CAPITAL, "workingCapitalAcquisitionSubmissionDocument.exception.failedCreation"); } } private String getLogoFileNamePart(final String url) { final String s1 = url.substring(url.indexOf("://") + 3); int idd = s1.indexOf(':'); if (idd > 0) { return s1.substring(0, idd); } int ifs = s1.indexOf('/'); return ifs > 0 ? s1.substring(0, ifs) : s1; } @Override public String getUsedBundle() { return Bundle.WORKING_CAPITAL; } @Override protected String[] getArgumentsDescription(SubmitForValidationActivityInformation activityInformation) { if (activityInformation.isLastSubmission()) { return new String[] { "(" + BundleUtil.getString(Bundle.WORKING_CAPITAL, "label.module.workingCapital.initialization.lastSubmission") + ")" }; } return new String[] { "" }; } @Override public ActivityInformation<WorkingCapitalProcess> getActivityInformation(final WorkingCapitalProcess process) { return new SubmitForValidationActivityInformation(process, this); } @Override public boolean isUserAwarenessNeeded(final WorkingCapitalProcess process, final User user) { return false; } @Override public boolean isDefaultInputInterfaceUsed() { return false; } }