⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 proposedorder.java

📁 Sequoia ERP是一个真正的企业级开源ERP解决方案。它提供的模块包括:电子商务应用(e-commerce), POS系统(point of sales),知识管理,存货与仓库管理
💻 JAVA
字号:
/* * $Id: ProposedOrder.java 7238 2006-04-08 07:30:54Z jacopo $ * Copyright (c) 2003, 2004 The Open For Business Project - www.ofbiz.org * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), * to deal in the Software without restriction, including without limitation * the rights to use, copy, modify, merge, publish, distribute, sublicense, * and/or sell copies of the Software, and to permit persons to whom the * Software is furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included * in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT * OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * THE USE OR OTHER DEALINGS IN THE SOFTWARE. */package org.ofbiz.manufacturing.mrp;import java.sql.Timestamp;import java.util.HashMap;import java.util.Iterator;import java.util.List;import java.util.ArrayList;import java.util.ListIterator;import java.util.Map;import org.ofbiz.base.util.Debug;import org.ofbiz.base.util.UtilMisc;import org.ofbiz.entity.GenericDelegator;import org.ofbiz.entity.GenericEntityException;import org.ofbiz.entity.GenericValue;import org.ofbiz.entity.util.EntityUtil;import org.ofbiz.manufacturing.jobshopmgt.ProductionRun;import org.ofbiz.manufacturing.techdata.ProductHelper;import org.ofbiz.manufacturing.techdata.TechDataServices;import org.ofbiz.service.DispatchContext;import org.ofbiz.service.GenericServiceException;import org.ofbiz.service.LocalDispatcher;import org.ofbiz.manufacturing.bom.BOMTree;/** * Proposed Order Object generated by the MRP process or other re-Order process * * @author     <a href="mailto:olivier.heintz@nereide.biz">Olivier Heintz</a> * @author     <a href=mailto:thierry.grauss@etu.univ-tours.fr">Thierry GRAUSS</a> */public class ProposedOrder {        public static final String module = ProposedOrder.class.getName();    public static final String resource = "ManufacturingUiLabels";        protected GenericValue product;    protected boolean isbuild;    protected String productId;    protected String facilityId;    protected String mrpName;    protected Timestamp requiredByDate;    protected Timestamp requirementStartDate;    protected double quantity;            public ProposedOrder(GenericValue product, String facilityId, boolean isbuild, Timestamp requiredByDate, double quantity) {        this.product = product;        this.productId = product.getString("productId");        this.facilityId = facilityId;        this.isbuild = isbuild;        this.requiredByDate = requiredByDate;        this.quantity = quantity;        this.requirementStartDate = null;    }    /**     * get the quantity property.     * @return the quantity property     **/    public double getQuantity(){        return quantity;    }    /**     * get the requirementStartDate property.     * @return the quantity property     **/    public Timestamp getRequirementStartDate(){        return requirementStartDate;    }    /**     * calculate the ProposedOrder requirementStartDate and update the requirementStartDate property.     * <li>For the build product, <ul>     *         <li>read the routing associated to the product,     *         <li>read the routingTask associated to the routing     *         <li> step by step calculate from the endDate the startDate</ul>     * <li>For the bought product, the first ProductFacility.daysToShip is used to calculated the startDate     * @return <ul>     * <li>if ProposedOrder.isBuild a Map with all the routingTaskId as keys and estimatedStartDate as value.     * <li>else null.     **/    public Map calculateStartDate(int daysToShip, GenericValue routing, GenericDelegator delegator, LocalDispatcher dispatcher, GenericValue userLogin){        Map result = null;        Timestamp endDate = (Timestamp) requiredByDate.clone();        Timestamp startDate = endDate;        if (isbuild) {            List listRoutingTaskAssoc = null;            if (routing == null) {                try {                    Map routingInMap = UtilMisc.toMap("productId", product.getString("productId"), "ignoreDefaultRouting", "Y", "userLogin", userLogin);                    Map routingOutMap = dispatcher.runSync("getProductRouting", routingInMap);                    routing = (GenericValue)routingOutMap.get("routing");                    if (routing == null) {                        // try to find a routing linked to the virtual product                        BOMTree tree = null;                        ArrayList components = new ArrayList();                        try {                            tree = new BOMTree(product.getString("productId"), "MANUF_COMPONENT", requiredByDate, BOMTree.EXPLOSION_SINGLE_LEVEL, delegator, dispatcher, userLogin);                            tree.setRootQuantity(quantity);                            tree.print(components, true);                            if (components.size() > 0) components.remove(0);                        } catch(Exception exc) {                            Debug.logWarning(exc.getMessage(), module);                            tree = null;                        }                        if (tree != null && tree.getRoot() != null && tree.getRoot().getProduct() != null) {                            routingInMap = UtilMisc.toMap("productId", tree.getRoot().getProduct().getString("productId"), "userLogin", userLogin);                            routingOutMap = dispatcher.runSync("getProductRouting", routingInMap);                            routing = (GenericValue)routingOutMap.get("routing");                        }                    }                    listRoutingTaskAssoc = (List)routingOutMap.get("tasks");                } catch(GenericServiceException gse) {                    Debug.logWarning(gse.getMessage(), module);                }            }            if (routing != null && listRoutingTaskAssoc != null) {                result = new HashMap();                //Looks for all the routingTask (ordered by inversed (begin from the end) sequence number)                for (int i = 1; i <= listRoutingTaskAssoc.size(); i++) {                    GenericValue routingTaskAssoc = (GenericValue) listRoutingTaskAssoc.get(listRoutingTaskAssoc.size() - i);                    if (EntityUtil.isValueActive(routingTaskAssoc, endDate)) {                        GenericValue routingTask = null;                        try {                            routingTask = routingTaskAssoc.getRelatedOneCache("ToWorkEffort");                        } catch (GenericEntityException e) {                            Debug.logError(e.getMessage(),  module);                        }                        // Calculate the estimatedStartDate                        long totalTime = ProductionRun.getEstimatedTaskTime(routingTask, quantity, dispatcher);                        startDate = TechDataServices.addBackward(TechDataServices.getTechDataCalendar(routingTask),endDate, totalTime);                        // record the routingTask with the startDate associated                        result.put(routingTask.getString("workEffortId"),startDate);                        endDate = startDate;                        /*                         * This is a work in progress                        GenericValue routingTask = null;                        try {                            Map timeInMap = UtilMisc.toMap("taskId", routingTaskAssoc.getString("workEffortIdTo"), "quantity", new Double(quantity), "userLogin", userLogin);                            Map timeOutMap = dispatcher.runSync("getEstimatedTaskTime", timeInMap);                            routingTask = (GenericValue)timeOutMap.get("routing");                        } catch (GenericServiceException gse) {                            Debug.logError(gse.getMessage(),  module);                        }                        */                    }                }            } else {                 // routing is null                // TODO : write an error message for the endUser to say "Build product without routing"                Debug.logError("Build product without routing for product = "+product.getString("productId"), module);            }        } else {            // the product is purchased            // TODO: REVIEW this code            long duringTime = daysToShip * 8 * 60 * 60 * 1000;            try {                GenericValue techDataCalendar = product.getDelegator().findByPrimaryKeyCache("TechDataCalendar",UtilMisc.toMap("calendarId", "SUPPLIER"));                startDate = TechDataServices.addBackward(techDataCalendar, endDate, duringTime);            } catch(GenericEntityException e) {                Debug.logError(e, "Error : reading SUPPLIER TechDataCalendar"+"--"+e.getMessage(), module);            }        }        requirementStartDate = startDate;        return result;    }            /**     * calculate the ProposedOrder quantity and update the quantity property.     * Read the first ProductFacility.reorderQuantity and calculate the quantity : if (quantity < reorderQuantity) quantity = reorderQuantity;     **/    // FIXME: facilityId    public void calculateQuantityToSupply(double reorderQuantity, double minimumStock, ListIterator  listIterIEP){        //      TODO : use a better algorithm using Order management cost et Product Stock cost to calculate the re-order quantity        //                     the variable listIterIEP will be used for that        if (quantity < reorderQuantity) {            quantity = reorderQuantity;        }        if (quantity < minimumStock) {            quantity = minimumStock;        }    }        /**     * create a ProposedOrder in the Requirement Entity calling the createRequirement service.     * @param ctx The DispatchContext used to call service to create the Requirement Entity record.     * @return String the requirementId     **/    public String create(DispatchContext ctx, GenericValue userLogin) {        LocalDispatcher dispatcher = ctx.getDispatcher();        Map parameters = UtilMisc.toMap("userLogin", userLogin);                parameters.put("productId", productId);        parameters.put("facilityId", facilityId);        parameters.put("requiredByDate", requiredByDate);        parameters.put("requirementStartDate", requirementStartDate);        parameters.put("quantity", new Double(quantity));        parameters.put("requirementTypeId", (isbuild? "MRP_PRO_PROD_ORDER" : "MRP_PRO_PURCH_ORDER"));        if (mrpName != null) {            parameters.put("description", "MRP_" + mrpName);        } else {            parameters.put("description", "Automatically generated by MRP");        }        try{            Map result = dispatcher.runSync("createRequirement", parameters);            return (String) result.get("requirementId");        } catch (GenericServiceException e) {            Debug.logError(e,"Error : createRequirement with parameters = "+parameters+"--"+e.getMessage(), module);            return null;        }    }        public void setMrpName(String mrpName) {        this.mrpName = mrpName;    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -