Java tutorial
/* * Copyright 2003 - 2016 The eFaps Team * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * */ package org.efaps.esjp.accounting; import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.UUID; import org.efaps.admin.datamodel.Status; import org.efaps.admin.event.EventType; import org.efaps.admin.event.Parameter; import org.efaps.admin.event.Parameter.ParameterValues; import org.efaps.admin.event.Return; import org.efaps.admin.program.esjp.EFapsApplication; import org.efaps.admin.program.esjp.EFapsUUID; import org.efaps.admin.ui.Command; import org.efaps.db.AttributeQuery; import org.efaps.db.CachedPrintQuery; import org.efaps.db.Context; import org.efaps.db.Instance; import org.efaps.db.PrintQuery; import org.efaps.db.QueryBuilder; import org.efaps.esjp.ci.CIAccounting; import org.efaps.esjp.ci.CIERP; import org.efaps.esjp.ci.CISales; import org.efaps.esjp.common.AbstractCommon; import org.efaps.esjp.common.uitable.MultiPrint; import org.efaps.util.EFapsException; import org.joda.time.DateTime; /** * TODO comment! * * @author The eFaps Team */ @EFapsUUID("948a690d-9934-470a-b8fb-b1e4d212010a") @EFapsApplication("eFapsApp-Accounting") public abstract class SubPeriod_Base extends AbstractCommon { /** * CacheKey for SubPeriods. */ public static final String CACHEKEY = SubPeriod.class.getName() + ".CacheKey"; /** * Called from a tree menu command to present the documents that are not * included in accounting yet. * * @param _parameter Paremeter * @return List if Instances * @throws EFapsException on error */ public Return getDocuments(final Parameter _parameter) throws EFapsException { final MultiPrint multi = new MultiPrint() { @Override protected void add2QueryBldr(final Parameter _parameter, final QueryBuilder _queryBldr) throws EFapsException { final Instance instance = _parameter.getInstance(); final PrintQuery print = new CachedPrintQuery(instance, SubPeriod_Base.CACHEKEY); print.addAttribute(CIAccounting.SubPeriod.FromDate); print.addAttribute(CIAccounting.SubPeriod.ToDate); print.execute(); final DateTime from = print.<DateTime>getAttribute(CIAccounting.SubPeriod.FromDate); final DateTime to = print.<DateTime>getAttribute(CIAccounting.SubPeriod.ToDate); final QueryBuilder attrQueryBldr = new QueryBuilder(CIAccounting.Transaction2SalesDocument); final AttributeQuery attrQuery = attrQueryBldr .getAttributeQuery(CIAccounting.Transaction2SalesDocument.ToLink); _queryBldr.addWhereAttrGreaterValue(CISales.DocumentSumAbstract.Date, from.minusMinutes(1)); _queryBldr.addWhereAttrLessValue(CISales.DocumentSumAbstract.Date, to.plusDays(1)); _queryBldr.addWhereAttrNotInQuery(CISales.DocumentSumAbstract.ID, attrQuery); } }; return multi.execute(_parameter); } /** * Called from a tree menu command to present the documents that are already * included in accounting. * * @param _parameter Paremeter * @return List if Instances * @throws EFapsException on error */ public Return getDocumentsToBook(final Parameter _parameter) throws EFapsException { final MultiPrint multi = new MultiPrint() { @Override protected void add2QueryBldr(final Parameter _parameter, final QueryBuilder _queryBldr) throws EFapsException { final Instance periodInst = new Period().evaluateCurrentPeriod(_parameter); final Instance instance = _parameter.getInstance(); final PrintQuery print = new CachedPrintQuery(instance, SubPeriod_Base.CACHEKEY); print.addAttribute(CIAccounting.SubPeriod.FromDate); print.execute(); final DateTime from = print.<DateTime>getAttribute(CIAccounting.SubPeriod.FromDate); final QueryBuilder transQueryBldr = new QueryBuilder(CIAccounting.Transaction); transQueryBldr.addWhereAttrEqValue(CIAccounting.Transaction.PeriodLink, periodInst); final AttributeQuery tranAttrQuery = transQueryBldr.getAttributeQuery(CIAccounting.Transaction.ID); final QueryBuilder attrQueryBldr = new QueryBuilder(CIAccounting.Transaction2SalesDocument); attrQueryBldr.addWhereAttrInQuery(CIAccounting.Transaction2SalesDocument.FromLink, tranAttrQuery); final AttributeQuery attrQuery = attrQueryBldr .getAttributeQuery(CIAccounting.Transaction2SalesDocument.ToLink); _queryBldr.addWhereAttrInQuery(CISales.DocumentSumAbstract.ID, attrQuery); _queryBldr.addWhereAttrGreaterValue(CISales.DocumentSumAbstract.Date, from.minusMinutes(1)); } }; return multi.execute(_parameter); } /** * Called from a tree menu command to present the documents that are with status * booked and therefor must be worked on still. * * @param _parameter Paremeter * @return List if Instances * @throws EFapsException on error */ public Return getExternals(final Parameter _parameter) throws EFapsException { final MultiPrint multi = new MultiPrint() { @Override protected void add2QueryBldr(final Parameter _parameter, final QueryBuilder _queryBldr) throws EFapsException { final Instance instance = _parameter.getInstance(); final PrintQuery print = new CachedPrintQuery(instance, SubPeriod_Base.CACHEKEY); print.addAttribute(CIAccounting.SubPeriod.FromDate); print.addAttribute(CIAccounting.SubPeriod.ToDate); print.execute(); final DateTime from = print.<DateTime>getAttribute(CIAccounting.SubPeriod.FromDate); final DateTime to = print.<DateTime>getAttribute(CIAccounting.SubPeriod.ToDate); final QueryBuilder attrQueryBldr = new QueryBuilder(CIAccounting.Transaction2SalesDocument); final AttributeQuery attrQuery = attrQueryBldr .getAttributeQuery(CIAccounting.Transaction2SalesDocument.ToLink); _queryBldr.addWhereAttrGreaterValue(CISales.DocumentSumAbstract.Date, from.minusMinutes(1)); _queryBldr.addWhereAttrLessValue(CISales.DocumentSumAbstract.Date, to.plusDays(1)); _queryBldr.addWhereAttrNotInQuery(CISales.DocumentSumAbstract.ID, attrQuery); } }; return multi.execute(_parameter); } /** * Called from a tree menu command to present the documents that are with status * booked and therefor must be worked on still. * * @param _parameter Paremeter * @return List if Instances * @throws EFapsException on error */ public Return getExternalsToBook(final Parameter _parameter) throws EFapsException { final MultiPrint multi = new MultiPrint() { @Override protected void add2QueryBldr(final Parameter _parameter, final QueryBuilder _queryBldr) throws EFapsException { final Instance periodInst = new Period().evaluateCurrentPeriod(_parameter); final PrintQuery print = new CachedPrintQuery(_parameter.getInstance(), SubPeriod_Base.CACHEKEY); print.addAttribute(CIAccounting.SubPeriod.FromDate); print.execute(); final DateTime from = print.<DateTime>getAttribute(CIAccounting.SubPeriod.FromDate); final QueryBuilder transQueryBldr = new QueryBuilder(CIAccounting.Transaction); transQueryBldr.addWhereAttrEqValue(CIAccounting.Transaction.PeriodLink, periodInst); final AttributeQuery tranAttrQuery = transQueryBldr.getAttributeQuery(CIAccounting.Transaction.ID); final QueryBuilder attrQueryBldr = new QueryBuilder(CIAccounting.Transaction2SalesDocument); attrQueryBldr.addWhereAttrInQuery(CIAccounting.Transaction2SalesDocument.FromLink, tranAttrQuery); final AttributeQuery attrQuery = attrQueryBldr .getAttributeQuery(CIAccounting.Transaction2SalesDocument.ToLink); _queryBldr.addWhereAttrInQuery(CISales.DocumentSumAbstract.ID, attrQuery); _queryBldr.addWhereAttrGreaterValue(CISales.DocumentSumAbstract.Date, from.minusMinutes(1)); } }; return multi.execute(_parameter); } /** * Called from a tree menu command to present the reports related to this subperiod. * * @param _parameter Paremeter * @return List if Instances * @throws EFapsException on error */ public Return getReports(final Parameter _parameter) throws EFapsException { final MultiPrint multi = new MultiPrint() { @Override protected void add2QueryBldr(final Parameter _parameter, final QueryBuilder _queryBldr) throws EFapsException { final Instance instance = _parameter.getInstance(); final PrintQuery print = new CachedPrintQuery(instance, SubPeriod_Base.CACHEKEY); print.addAttribute(CIAccounting.SubPeriod.PeriodLink); print.execute(); _queryBldr.addWhereAttrEqValue(CIAccounting.ReportAbstract.PeriodLink, print.<Long>getAttribute(CIAccounting.SubPeriod.PeriodLink)); } }; return multi.execute(_parameter); } /** * @param _parameter Paremeter * @return List if Instances * @throws EFapsException on error */ public Return printReport(final Parameter _parameter) throws EFapsException { Return ret = new Return(); final String[] oids = (String[]) Context.getThreadContext().getSessionAttribute("selectedOIDs"); if (oids != null && oids.length > 0) { final Instance reportInstance = Instance.get(oids[0]); final Map<?, ?> properties = (Map<?, ?>) _parameter.get(ParameterValues.PROPERTIES); final String typeName = reportInstance.getType().getName(); final String typeUUID = reportInstance.getType().getUUID().toString(); String cmdKey = null; if (properties.containsKey(typeName)) { cmdKey = (String) properties.get(typeName); } else if (properties.containsKey(typeUUID)) { cmdKey = (String) properties.get(typeUUID); } if (cmdKey != null) { final Command cmd = isUUID(cmdKey) ? Command.get(UUID.fromString(cmdKey)) : Command.get(cmdKey); if (cmd != null) { final List<Return> tmp = cmd.executeEvents(EventType.UI_COMMAND_EXECUTE, ParameterValues.INSTANCE, reportInstance, ParameterValues.PARAMETERS, _parameter.getParameters()); if (!tmp.isEmpty()) { ret = tmp.get(0); } } } } return ret; } /** * @param _parameter Paremeter * @return List if Instances * @throws EFapsException on error */ public Return getPaymentToBook(final Parameter _parameter) throws EFapsException { final MultiPrint multi = new MultiPrint() { @Override protected void add2QueryBldr(final Parameter _parameter, final QueryBuilder _queryBldr) throws EFapsException { final PrintQuery print = new CachedPrintQuery(_parameter.getInstance(), SubPeriod_Base.CACHEKEY); print.addAttribute(CIAccounting.SubPeriod.FromDate); print.execute(); final DateTime from = print.<DateTime>getAttribute(CIAccounting.SubPeriod.FromDate); _queryBldr.addWhereAttrGreaterValue(CISales.DocumentSumAbstract.Date, from.minusMinutes(1)); } }; return multi.execute(_parameter); } public Return getPettyCashReceipt(final Parameter _parameter) throws EFapsException { final MultiPrint multi = new MultiPrint() { @Override protected void add2QueryBldr(final Parameter _parameter, final QueryBuilder _queryBldr) throws EFapsException { final PrintQuery print = new CachedPrintQuery(_parameter.getInstance(), SubPeriod_Base.CACHEKEY); print.addAttribute(CIAccounting.SubPeriod.FromDate); print.execute(); final DateTime from = print.<DateTime>getAttribute(CIAccounting.SubPeriod.FromDate); final List<Status> statusArrayBalance = new ArrayList<Status>(); final QueryBuilder queryBldr = new QueryBuilder(CISales.PettyCashBalance); if (containsProperty(_parameter, "PettyCashBalanceStatus")) { for (final String balanceStatus : analyseProperty(_parameter, "PettyCashBalanceStatus") .values()) { statusArrayBalance.add(Status.find(CISales.PettyCashBalanceStatus.uuid, balanceStatus)); } } else { statusArrayBalance.add(Status.find(CISales.PettyCashBalanceStatus.Closed)); } if (!statusArrayBalance.isEmpty()) { queryBldr.addWhereAttrEqValue(CISales.PettyCashBalance.Status, statusArrayBalance.toArray()); } final AttributeQuery attrQuery = queryBldr.getAttributeQuery(CISales.PettyCashBalance.ID); final QueryBuilder queryBldr2 = new QueryBuilder(CISales.PettyCashBalance2PettyCashReceipt); queryBldr2.addWhereAttrInQuery(CISales.PettyCashBalance2PettyCashReceipt.FromLink, attrQuery); final AttributeQuery attrQuery2 = queryBldr2 .getAttributeQuery(CISales.PettyCashBalance2PettyCashReceipt.ToLink); _queryBldr.addWhereAttrGreaterValue(CISales.PettyCashReceipt.Date, from.minusMinutes(1)); final QueryBuilder docTypeAttrQueryBldr = new QueryBuilder(CIERP.Document2DocumentTypeAbstract); docTypeAttrQueryBldr.addWhereAttrInQuery(CIERP.Document2DocumentTypeAbstract.DocumentLinkAbstract, attrQuery2); final AttributeQuery docTypeAttrQuery = docTypeAttrQueryBldr .getAttributeQuery(CIERP.Document2DocumentTypeAbstract.DocumentLinkAbstract); _queryBldr.addWhereAttrInQuery(CISales.PettyCashReceipt.ID, docTypeAttrQuery); } }; return multi.execute(_parameter); } }