details: https://code.openbravo.com/erp/devel/pi/rev/57708817383a changeset: 20980:57708817383a user: Pandeeswari Ramakrishnan <pandeeswari.ramakrishnan <at> openbravo.com> date: Wed Aug 14 18:42:36 2013 +0530 summary: Fixes Issue 24473: In BOM Production part products could be produced
diffstat: src-db/database/model/functions/M_PRODUCTION_RUN.xml | 53 ++++++++++ src-db/database/sourcedata/AD_MESSAGE.xml | 36 +++++++ src/org/openbravo/event/ProductionLineEventHandler.java | 87 +++++++++++++++++ 3 files changed, 176 insertions(+), 0 deletions(-) diffs (221 lines): diff -r d6ba90dc64fa -r 57708817383a src-db/database/model/functions/M_PRODUCTION_RUN.xml --- a/src-db/database/model/functions/M_PRODUCTION_RUN.xml Tue Aug 13 11:58:10 2013 +0530 +++ b/src-db/database/model/functions/M_PRODUCTION_RUN.xml Wed Aug 14 18:42:36 2013 +0530 @@ -45,6 +45,7 @@ -- Parameter TYPE RECORD IS REF CURSOR; Cur_Parameter RECORD; + CUR_ProductionPlan RECORD; CUR_PP RECORD; CUR_PLineBOM RECORD; CUR_BOM_PRODUCT RECORD; @@ -456,6 +457,58 @@ v_Message:='@Product@'||' "' ||v_Product_Name ||'" ' || '@ProductWithoutAttributeSet@'; RAISE_APPLICATION_ERROR(-20000, v_Message); END IF; + + SELECT COUNT(M_ProductionPlan_ID) + INTO v_count + FROM M_ProductionPlan pp + WHERE pp.M_Production_ID = v_Record_ID + AND NOT EXISTS (SELECT 1 FROM M_ProductionLine WHERE M_ProductionPlan_ID = pp.M_ProductionPlan_ID AND MovementQty > 0); + + v_Message := NULL; + IF(v_count <> 0) THEN + FOR CUR_ProductionPlan IN ( + SELECT DISTINCT(pp.line) + FROM M_ProductionPlan pp + WHERE pp.M_Production_ID = v_Record_ID + AND NOT EXISTS (SELECT 1 FROM M_ProductionLine WHERE M_ProductionPlan_ID = pp.M_ProductionPlan_ID AND MovementQty > 0) + ORDER BY Line + ) + LOOP + IF v_Message IS NULL THEN + v_Message := CUR_ProductionPlan.line; + ELSE + v_Message := v_Message || ', ' || CUR_ProductionPlan.line; + END IF; + END LOOP; + v_Message := '@ProducedProductWithNegativeQty@' || ' @ReferProductionPlanLines@' || ': ' || v_Message; + RAISE_APPLICATION_ERROR(-20000, v_Message); + END IF; + + SELECT COUNT(M_ProductionPlan_ID) + INTO v_count + FROM M_ProductionPlan pp + WHERE pp.M_Production_ID = v_Record_ID + AND (SELECT COUNT(M_ProductionLine_ID) FROM M_ProductionLine WHERE M_ProductionPlan_ID = pp.M_ProductionPlan_ID AND movementQty > 0) > 1; + + IF (v_count <> 0) THEN + FOR CUR_ProductionPlan IN ( + SELECT DISTINCT(pp.line) + FROM M_ProductionPlan pp + WHERE pp.M_Production_ID = v_Record_ID + AND (SELECT COUNT(M_ProductionLine_ID) FROM M_ProductionLine WHERE M_ProductionPlan_ID = pp.M_ProductionPlan_ID AND movementQty > 0) > 1 + ORDER BY Line + ) + LOOP + IF v_Message IS NULL THEN + v_Message := CUR_ProductionPlan.line; + ELSE + v_Message := v_Message || ', ' || CUR_ProductionPlan.line; + END IF; + END LOOP; + v_Message:= '@ConsumedProductWithPostiveQty@' || ' @ReferProductionPlanLines@' || ': ' || v_Message; + RAISE_APPLICATION_ERROR(-20000, v_Message); + END IF; + SELECT count(*) INTO v_count FROM dual WHERE EXISTS ( diff -r d6ba90dc64fa -r 57708817383a src-db/database/sourcedata/AD_MESSAGE.xml --- a/src-db/database/sourcedata/AD_MESSAGE.xml Tue Aug 13 11:58:10 2013 +0530 +++ b/src-db/database/sourcedata/AD_MESSAGE.xml Wed Aug 14 18:42:36 2013 +0530 @@ -16908,6 +16908,18 @@ <!--1DCBDE7B658A4735A04DDE9F79B4DAC2--> <ISINCLUDEINI18N><![CDATA[N]]></ISINCLUDEINI18N> <!--1DCBDE7B658A4735A04DDE9F79B4DAC2--></AD_MESSAGE> +<!--1DDD7506273E4408820998C00EE2AC1D--><AD_MESSAGE> +<!--1DDD7506273E4408820998C00EE2AC1D--> <AD_MESSAGE_ID><![CDATA[1DDD7506273E4408820998C00EE2AC1D]]></AD_MESSAGE_ID> +<!--1DDD7506273E4408820998C00EE2AC1D--> <AD_CLIENT_ID><![CDATA[0]]></AD_CLIENT_ID> +<!--1DDD7506273E4408820998C00EE2AC1D--> <AD_ORG_ID><![CDATA[0]]></AD_ORG_ID> +<!--1DDD7506273E4408820998C00EE2AC1D--> <ISACTIVE><![CDATA[Y]]></ISACTIVE> +<!--1DDD7506273E4408820998C00EE2AC1D--> <VALUE><![CDATA[ConsumedProductWithPostiveQty]]></VALUE> +<!--1DDD7506273E4408820998C00EE2AC1D--> <MSGTEXT><![CDATA[Consumed products is not allowed to have positive quantities.]]></MSGTEXT> +<!--1DDD7506273E4408820998C00EE2AC1D--> <MSGTYPE><![CDATA[E]]></MSGTYPE> +<!--1DDD7506273E4408820998C00EE2AC1D--> <AD_MODULE_ID><![CDATA[0]]></AD_MODULE_ID> +<!--1DDD7506273E4408820998C00EE2AC1D--> <ISINCLUDEINI18N><![CDATA[N]]></ISINCLUDEINI18N> +<!--1DDD7506273E4408820998C00EE2AC1D--></AD_MESSAGE> + <!--1E0F1799B5F144778669B2D23FD9BA9E--><AD_MESSAGE> <!--1E0F1799B5F144778669B2D23FD9BA9E--> <AD_MESSAGE_ID><![CDATA[1E0F1799B5F144778669B2D23FD9BA9E]]></AD_MESSAGE_ID> <!--1E0F1799B5F144778669B2D23FD9BA9E--> <AD_CLIENT_ID><![CDATA[0]]></AD_CLIENT_ID> @@ -18466,6 +18478,18 @@ <!--47B524D00C99444EBB128AFF52F66225--> <ISINCLUDEINI18N><![CDATA[N]]></ISINCLUDEINI18N> <!--47B524D00C99444EBB128AFF52F66225--></AD_MESSAGE> +<!--4824BDCE0FDA46ADA4D79BA676791DFF--><AD_MESSAGE> +<!--4824BDCE0FDA46ADA4D79BA676791DFF--> <AD_MESSAGE_ID><![CDATA[4824BDCE0FDA46ADA4D79BA676791DFF]]></AD_MESSAGE_ID> +<!--4824BDCE0FDA46ADA4D79BA676791DFF--> <AD_CLIENT_ID><![CDATA[0]]></AD_CLIENT_ID> +<!--4824BDCE0FDA46ADA4D79BA676791DFF--> <AD_ORG_ID><![CDATA[0]]></AD_ORG_ID> +<!--4824BDCE0FDA46ADA4D79BA676791DFF--> <ISACTIVE><![CDATA[Y]]></ISACTIVE> +<!--4824BDCE0FDA46ADA4D79BA676791DFF--> <VALUE><![CDATA[ProducedProductWithNegativeQty]]></VALUE> +<!--4824BDCE0FDA46ADA4D79BA676791DFF--> <MSGTEXT><![CDATA[Produced products is not allowed to have negative quantities.]]></MSGTEXT> +<!--4824BDCE0FDA46ADA4D79BA676791DFF--> <MSGTYPE><![CDATA[E]]></MSGTYPE> +<!--4824BDCE0FDA46ADA4D79BA676791DFF--> <AD_MODULE_ID><![CDATA[0]]></AD_MODULE_ID> +<!--4824BDCE0FDA46ADA4D79BA676791DFF--> <ISINCLUDEINI18N><![CDATA[N]]></ISINCLUDEINI18N> +<!--4824BDCE0FDA46ADA4D79BA676791DFF--></AD_MESSAGE> + <!--48352ADE760D4352AFA5F36873BFB4C1--><AD_MESSAGE> <!--48352ADE760D4352AFA5F36873BFB4C1--> <AD_MESSAGE_ID><![CDATA[48352ADE760D4352AFA5F36873BFB4C1]]></AD_MESSAGE_ID> <!--48352ADE760D4352AFA5F36873BFB4C1--> <AD_CLIENT_ID><![CDATA[0]]></AD_CLIENT_ID> @@ -20361,6 +20385,18 @@ <!--804D6F47FC0041C09F86F21DDE1FFF4C--> <ISINCLUDEINI18N><![CDATA[N]]></ISINCLUDEINI18N> <!--804D6F47FC0041C09F86F21DDE1FFF4C--></AD_MESSAGE> +<!--805825FD800246FAA023E5D75B62919B--><AD_MESSAGE> +<!--805825FD800246FAA023E5D75B62919B--> <AD_MESSAGE_ID><![CDATA[805825FD800246FAA023E5D75B62919B]]></AD_MESSAGE_ID> +<!--805825FD800246FAA023E5D75B62919B--> <AD_CLIENT_ID><![CDATA[0]]></AD_CLIENT_ID> +<!--805825FD800246FAA023E5D75B62919B--> <AD_ORG_ID><![CDATA[0]]></AD_ORG_ID> +<!--805825FD800246FAA023E5D75B62919B--> <ISACTIVE><![CDATA[Y]]></ISACTIVE> +<!--805825FD800246FAA023E5D75B62919B--> <VALUE><![CDATA[ReferProductionPlanLines]]></VALUE> +<!--805825FD800246FAA023E5D75B62919B--> <MSGTEXT><![CDATA[Refer production plan line(s)]]></MSGTEXT> +<!--805825FD800246FAA023E5D75B62919B--> <MSGTYPE><![CDATA[I]]></MSGTYPE> +<!--805825FD800246FAA023E5D75B62919B--> <AD_MODULE_ID><![CDATA[0]]></AD_MODULE_ID> +<!--805825FD800246FAA023E5D75B62919B--> <ISINCLUDEINI18N><![CDATA[N]]></ISINCLUDEINI18N> +<!--805825FD800246FAA023E5D75B62919B--></AD_MESSAGE> + <!--80F0ED31B28B4523A83293151EF87EA5--><AD_MESSAGE> <!--80F0ED31B28B4523A83293151EF87EA5--> <AD_MESSAGE_ID><![CDATA[80F0ED31B28B4523A83293151EF87EA5]]></AD_MESSAGE_ID> <!--80F0ED31B28B4523A83293151EF87EA5--> <AD_CLIENT_ID><![CDATA[0]]></AD_CLIENT_ID> diff -r d6ba90dc64fa -r 57708817383a src/org/openbravo/event/ProductionLineEventHandler.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/org/openbravo/event/ProductionLineEventHandler.java Wed Aug 14 18:42:36 2013 +0530 @@ -0,0 +1,87 @@ +/* + ************************************************************************* + * The contents of this file are subject to the Openbravo Public License + * Version 1.1 (the "License"), being the Mozilla Public License + * Version 1.1 with a permitted attribution clause; you may not use this + * file except in compliance with the License. You may obtain a copy of + * the License at http://www.openbravo.com/legal/license.html + * Software distributed under the License is distributed on an "AS IS" + * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the + * License for the specific language governing rights and limitations + * under the License. + * The Original Code is Openbravo ERP. + * The Initial Developer of the Original Code is Openbravo SLU + * All portions are Copyright (C) 2013 Openbravo SLU + * All Rights Reserved. + * Contributor(s): ______________________________________. + ************************************************************************ + */ +package org.openbravo.event; + +import java.math.BigDecimal; + +import javax.enterprise.event.Observes; + +import org.apache.log4j.Logger; +import org.hibernate.criterion.Restrictions; +import org.openbravo.base.exception.OBException; +import org.openbravo.base.model.Entity; +import org.openbravo.base.model.ModelProvider; +import org.openbravo.base.model.Property; +import org.openbravo.client.kernel.event.EntityPersistenceEventObserver; +import org.openbravo.client.kernel.event.EntityUpdateEvent; +import org.openbravo.dal.core.OBContext; +import org.openbravo.dal.service.OBCriteria; +import org.openbravo.dal.service.OBDal; +import org.openbravo.database.ConnectionProvider; +import org.openbravo.erpCommon.utility.Utility; +import org.openbravo.model.materialmgmt.transaction.ProductionLine; +import org.openbravo.model.materialmgmt.transaction.ProductionPlan; +import org.openbravo.service.db.DalConnectionProvider; + +public class ProductionLineEventHandler extends EntityPersistenceEventObserver { + + private static Entity[] entities = { ModelProvider.getInstance().getEntity( + ProductionLine.ENTITY_NAME) }; + protected Logger logger = Logger.getLogger(this.getClass()); + + @Override + protected Entity[] getObservedEntities() { + return entities; + } + + public void onUpdate(@Observes + EntityUpdateEvent event) { + if (!isValidEvent(event)) { + return; + } + final Entity productionLineEntity = ModelProvider.getInstance().getEntity( + ProductionLine.ENTITY_NAME); + final BigDecimal ONE = new BigDecimal("1"); + final BigDecimal ZERO = new BigDecimal("0"); + final Property productionPlanProperty = productionLineEntity + .getProperty(ProductionLine.PROPERTY_PRODUCTIONPLAN); + final Property movementQtyProperty = productionLineEntity + .getProperty(ProductionLine.PROPERTY_MOVEMENTQUANTITY); + final ProductionPlan productionPlan = (ProductionPlan) event + .getCurrentState(productionPlanProperty); + final BigDecimal currentMovementQty = (BigDecimal) event.getCurrentState(movementQtyProperty); + final BigDecimal previousMovementQty = (BigDecimal) event.getPreviousState(movementQtyProperty); + OBCriteria<ProductionLine> productionLineCriteria = OBDal.getInstance().createCriteria( + ProductionLine.class); + productionLineCriteria.add(Restrictions.eq(ProductionLine.PROPERTY_PRODUCTIONPLAN, + productionPlan)); + productionLineCriteria.add(Restrictions.gt(ProductionLine.PROPERTY_MOVEMENTQUANTITY, ONE)); + if (productionLineCriteria.count() > 0 && previousMovementQty != currentMovementQty + && currentMovementQty.compareTo(ZERO) == 1) { + String language = OBContext.getOBContext().getLanguage().getLanguage(); + ConnectionProvider conn = new DalConnectionProvider(false); + throw new OBException(Utility.messageBD(conn, "@ConsumedProductWithPostiveQty@", language)); + } else if (productionLineCriteria.count() == 1 && previousMovementQty != currentMovementQty + && currentMovementQty.compareTo(ZERO) == -1) { + String language = OBContext.getOBContext().getLanguage().getLanguage(); + ConnectionProvider conn = new DalConnectionProvider(false); + throw new OBException(Utility.messageBD(conn, "@ProducedProductWithNegativeQty@", language)); + } + } +} ------------------------------------------------------------------------------ Get 100% visibility into Java/.NET code with AppDynamics Lite! It's a free troubleshooting tool designed for production. Get down to code-level detail for bottlenecks, with <2% overhead. Download for free and get started troubleshooting in minutes. http://pubads.g.doubleclick.net/gampad/clk?id=48897031&iu=/4140/ostg.clktrk _______________________________________________ Openbravo-commits mailing list Openbravo-commits@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/openbravo-commits