Added: ofbiz/ofbiz-framework/trunk/applications/order/widget/ordermgr/AllocationPlanScreens.xml
URL: http://svn.apache.org/viewvc/ofbiz/ofbiz-framework/trunk/applications/order/widget/ordermgr/AllocationPlanScreens.xml?rev=1858270&view=auto ============================================================================== --- ofbiz/ofbiz-framework/trunk/applications/order/widget/ordermgr/AllocationPlanScreens.xml (added) +++ ofbiz/ofbiz-framework/trunk/applications/order/widget/ordermgr/AllocationPlanScreens.xml Sat Apr 27 13:05:30 2019 @@ -0,0 +1,173 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +Licensed to the Apache Software Foundation (ASF) under one +or more contributor license agreements. See the NOTICE file +distributed with this work for additional information +regarding copyright ownership. The ASF licenses this file +to you 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. +--> + +<screens xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xmlns="http://ofbiz.apache.org/Widget-Screen" xsi:schemaLocation="http://ofbiz.apache.org/Widget-Screen http://ofbiz.apache.org/dtds/widget-screen.xsd"> + <screen name="CommonAllocationPlanDecorator"> + <section> + <widgets> + <decorator-screen name="main-decorator" location="${parameters.mainDecoratorLocation}"> + <decorator-section name="body"> + <section> + <!-- do check for ALLOCPLAN, _VIEW permission --> + <condition> + <if-has-permission permission="ALLOCPLAN" action="_VIEW"/> + </condition> + <widgets> + <decorator-section-include name="body"/> + </widgets> + <fail-widgets> + <label style="h3">${uiLabelMap.OrderAllocationPlanViewPermissionError}</label> + </fail-widgets> + </section> + </decorator-section> + </decorator-screen> + </widgets> + </section> + </screen> + <screen name="CreateAllocationPlan"> + <section> + <actions> + <set field="titleProperty" value="PageTitleCreateAllocationPlan"/> + <set field="headerItem" value="allocationPlan"/> + <set field="tabButtonItem" value="CreateAllocationPlan"/> + <!-- <set field="viewIndex" from-field="parameters.VIEW_INDEX" type="Integer"/> + <set field="viewSizeDefaultValue" value="${groovy: modelTheme.getDefaultViewSize()}" type="Integer"/> + <set field="viewSize" from-field="parameters.VIEW_SIZE" type="Integer" default-value="${viewSizeDefaultValue}"/>--> + <script location="component://order/groovyScripts/allocationplan/CreateAllocationPlan.groovy"/> + </actions> + <widgets> + <decorator-screen name="CommonAllocationPlanDecorator" location="${parameters.commonAllocationPlanDecoratorLocation}"> + <decorator-section name="body"> + <platform-specific> + <html><html-template location="component://common-theme/template/includes/SetMultipleSelectJs.ftl"/></html> + </platform-specific> + <platform-specific> + <html><html-template location="component://order/template/order/CreateAllocationPlan.ftl"/></html> + </platform-specific> + </decorator-section> + </decorator-screen> + </widgets> + </section> + </screen> + <screen name="FindAllocationPlan"> + <section> + <actions> + <set field="titleProperty" value="PageTitleFindAllocationPlan"/> + <set field="headerItem" value="allocationPlan"/> + <set field="tabButtonItem" value="FindAllocatoinPlan"/> + <set field="viewIndex" from-field="parameters.VIEW_INDEX" type="Integer"/> + <set field="viewSizeDefaultValue" value="${groovy: modelTheme.getDefaultViewSize()}" type="Integer"/> + <set field="viewSize" from-field="parameters.VIEW_SIZE" type="Integer" default-value="${viewSizeDefaultValue}"/> + <script location="component://order/groovyScripts/allocationplan/ListAllocationPlan.groovy"/> + </actions> + <widgets> + <decorator-screen name="CommonAllocationPlanDecorator" location="${parameters.commonAllocationPlanDecoratorLocation}"> + <decorator-section name="body"> + <section> + <condition> + <if-has-permission permission="ALLOCPLAN" action="_CREATE"/> + </condition> + <widgets> + <container style="button-bar"> + <link target="CreateAllocationPlan" text="${uiLabelMap.OrderNewAllocationPlan}" style="buttontext"/> + </container> + </widgets> + </section> + <decorator-screen name="FindScreenDecorator" location="component://common/widget/CommonScreens.xml"> + <decorator-section name="search-options"> + <include-form name="FindAllocationPlan" location="component://order/widget/ordermgr/AllocationPlanForms.xml"/> + </decorator-section> + <decorator-section name="search-results"> + <include-grid name="ListAllocationPlan" location="component://order/widget/ordermgr/AllocationPlanForms.xml"/> + </decorator-section> + </decorator-screen> + </decorator-section> + </decorator-screen> + </widgets> + </section> + </screen> + <screen name="ViewAllocationPlan"> + <section> + <actions> + <set field="titleProperty" value="PageTitleViewAllocationPlan"/> + <set field="headerItem" value="allocationPlan"/> + <set field="tabButtonItem" value="ViewAllocationPlan"/> + <set field="planId" from-field="parameters.planId"/> + <script location="component://order/groovyScripts/allocationplan/ViewAllocationPlan.groovy"/> + </actions> + <widgets> + <decorator-screen name="CommonAllocationPlanDecorator" location="${parameters.commonAllocationPlanDecorator}"> + <decorator-section name="body"> + <section> + <condition> + <if-has-permission permission="ALLOCPLAN" action="_CREATE"/> + </condition> + <widgets> + <container style="button-bar"> + <link target="CreateAllocationPlan" text="${uiLabelMap.OrderNewAllocationPlan}" style="buttontext"/> + </container> + </widgets> + </section> + <platform-specific> + <html><html-template location="component://order/template/order/ViewAllocationPlan.ftl"/></html> + </platform-specific> + </decorator-section> + </decorator-screen> + </widgets> + </section> + </screen> + <screen name="EditAllocationPlan"> + <section> + <actions> + <set field="titleProperty" value="PageTitleViewAllocationPlan"/> + <set field="headerItem" value="allocationPlan"/> + <set field="tabButtonItem" value="EditAllocationPlan"/> + <set field="planId" from-field="parameters.planId"/> + <set field="editMode" value="true" type="Boolean"/> + <!-- asmselect parameters, must be prefixed by asm_ for SetMultipleSelectJs.ftl --> + <set field="asm_multipleSelectForm" value="updateAllocationPlanItems"/> + <set field="asm_formSize" value="1000"/> + <set field="asm_asmListItemPercentOfForm" value="95"/> + <set field="asm_sortable" value="false"/> + <script location="component://order/groovyScripts/allocationplan/ViewAllocationPlan.groovy"/> + </actions> + <widgets> + <decorator-screen name="CommonAllocationPlanDecorator" location="${parameters.commonAllocationPlanDecorator}"> + <decorator-section name="body"> + <section> + <widgets> + <container style="button-bar"> + <link target="CreateAllocationPlan" text="${uiLabelMap.OrderNewAllocationPlan}" style="buttontext"/> + </container> + </widgets> + </section> + <platform-specific> + <html><html-template location="component://common-theme/template/includes/SetMultipleSelectJs.ftl"/></html> + </platform-specific> + <platform-specific> + <html><html-template location="component://order/template/order/ViewAllocationPlan.ftl"/></html> + </platform-specific> + </decorator-section> + </decorator-screen> + </widgets> + </section> + </screen> +</screens> \ No newline at end of file Propchange: ofbiz/ofbiz-framework/trunk/applications/order/widget/ordermgr/AllocationPlanScreens.xml ------------------------------------------------------------------------------ svn:eol-style = native Propchange: ofbiz/ofbiz-framework/trunk/applications/order/widget/ordermgr/AllocationPlanScreens.xml ------------------------------------------------------------------------------ svn:keywords = Date Rev Author URL Id Propchange: ofbiz/ofbiz-framework/trunk/applications/order/widget/ordermgr/AllocationPlanScreens.xml ------------------------------------------------------------------------------ svn:mime-type = text/xml Modified: ofbiz/ofbiz-framework/trunk/applications/order/widget/ordermgr/OrderMenus.xml URL: http://svn.apache.org/viewvc/ofbiz/ofbiz-framework/trunk/applications/order/widget/ordermgr/OrderMenus.xml?rev=1858270&r1=1858269&r2=1858270&view=diff ============================================================================== --- ofbiz/ofbiz-framework/trunk/applications/order/widget/ordermgr/OrderMenus.xml (original) +++ ofbiz/ofbiz-framework/trunk/applications/order/widget/ordermgr/OrderMenus.xml Sat Apr 27 13:05:30 2019 @@ -87,6 +87,10 @@ under the License. <menu-item name="stats" title="${uiLabelMap.CommonStats}"> <link target="orderstats"/> </menu-item> + + <menu-item name="allocationPlan" title="${uiLabelMap.OrderAllocationPlan}"> + <link target="FindAllocationPlan"/> + </menu-item> </menu> <menu name="RequirementsTabBar" extends="CommonTabBarMenu" extends-resource="component://common/widget/CommonMenus.xml"> Modified: ofbiz/ofbiz-framework/trunk/applications/product/minilang/product/inventory/InventoryServices.xml URL: http://svn.apache.org/viewvc/ofbiz/ofbiz-framework/trunk/applications/product/minilang/product/inventory/InventoryServices.xml?rev=1858270&r1=1858269&r2=1858270&view=diff ============================================================================== --- ofbiz/ofbiz-framework/trunk/applications/product/minilang/product/inventory/InventoryServices.xml (original) +++ ofbiz/ofbiz-framework/trunk/applications/product/minilang/product/inventory/InventoryServices.xml Sat Apr 27 13:05:30 2019 @@ -747,7 +747,21 @@ under the License. <set field="reassignInventoryReservationsCtx.productId" from-field="inventoryItem.productId"/> <set field="reassignInventoryReservationsCtx.facilityId" from-field="inventoryItem.facilityId"/> <set field="reassignInventoryReservationsCtx.fromDate" from-field="nowTimestamp"/> - <call-service service-name="reassignInventoryReservations" in-map-name="reassignInventoryReservationsCtx"/> + <entity-condition entity-name="AllocationPlanAndItem" list="allocationPlanAndItemList"> + <condition-list combine="and"> + <condition-expr field-name="productId" operator="equals" from-field="inventoryItem.productId"/> + <condition-expr field-name="planItemStatusId" operator="equals" value="ALLOC_PLAN_ITEM_APRV"/> + <condition-expr field-name="planMethodEnumId" operator="equals" value="MANUAL"/> + </condition-list> + <order-by field-name="prioritySeqId"/> + </entity-condition> + <if-empty field="allocationPlanAndItemList"> + <call-service service-name="reassignInventoryReservations" in-map-name="reassignInventoryReservationsCtx"/> + <else> + <set field="reassignInventoryReservationsCtx.allocationPlanAndItemList" from-field="allocationPlanAndItemList"/> + <call-service service-name="reassignInventoryReservationsByAllocationPlan" in-map-name="reassignInventoryReservationsCtx"/> + </else> + </if-empty> </simple-method> <simple-method method-name="reassignInventoryReservations" short-description="Balances available-to-promise on inventory items"> @@ -852,6 +866,98 @@ under the License. <!-- now go through touchedOrderIdMap keys and make a Set/Map of orderIds that are no longer on back-order --> <iterate-map key="touchedOrderId" value="throwAwayValue" map="touchedOrderIdMap"> <set field="checkOrderIsOnBackOrderMap.orderId" from-field="touchedOrderId"/> + <call-service service-name="checkOrderIsOnBackOrder" in-map-name="checkOrderIsOnBackOrderMap"> + <result-to-field result-name="isBackOrder"/> + </call-service> + + <if-compare field="isBackOrder" operator="equals" value="false" type="Boolean"> + <set field="noLongerOnBackOrderIdMap[touchedOrderId]" value="Y"/> + </if-compare> + </iterate-map> + <if-not-empty field="noLongerOnBackOrderIdMap"> + <call-object-method obj-field="noLongerOnBackOrderIdMap" method-name="keySet" ret-field="noLongerOnBackOrderIdSet"/> + <field-to-result field="noLongerOnBackOrderIdSet"/> + </if-not-empty> + </simple-method> + + <simple-method method-name="reassignInventoryReservationsByAllocationPlan" short-description="Balances available-to-promise on inventory items"> + <now-timestamp field="nowTimestamp"/> + <iterate list="parameters.allocationPlanAndItemList" entry="allocationPlanAndItem"> + <entity-one entity-name="OrderHeader" value-field="orderHeader"> + <field-map field-name="orderId" from-field="allocationPlanAndItem.orderId"/> + </entity-one> + <get-related-one value-field="orderHeader" relation-name="ProductStore" to-value-field="productStore"/> + <if-compare field="productStore.allocateInventory" operator="not-equals" value="Y"> + <continue></continue> + </if-compare> + <entity-one entity-name="OrderItem" value-field="orderItem"> + <field-map field-name="orderId" from-field="allocationPlanAndItem.orderId"/> + <field-map field-name="orderItemSeqId" from-field="allocationPlanAndItem.orderItemSeqId"/> + </entity-one> + <if-not-empty field="orderItem.reserveAfterDate"> + <if-compare-field field="orderItem.reserveAfterDate" operator="greater" to-field="nowTimestamp" type="Timestamp"> + <continue></continue> + </if-compare-field> + </if-not-empty> + + <!-- maintain a Set (in a Map) of orderIds that we have inventory allocated--> + <if-not-empty field="allocationPlanAndItem.allocatedQuantity"> + <if-compare field="allocationPlanAndItem.allocatedQuantity" operator="greater" value="0" type="BigDecimal"> + <set field="touchedOrderIdMap[allocationPlanAndItem.orderId]" value="Y"/> + <log level="verbose" message="Adding ${allocationPlanAndItem.orderId} to touchedOrderIdMap"/> + </if-compare> + </if-not-empty> + + <entity-and entity-name="OrderItemShipGroup" list="orderItemShipGroups"> + <field-map field-name="orderId" from-field="allocationPlanAndItem.orderId"/> + </entity-and> + <first-from-list list="orderItemShipGroups" entry="orderItemShipGroup"/> + + <!-- Check for existing reservations of the order item --> + <entity-condition entity-name="OrderItemShipGrpInvRes" list="orderItemShipGrpInvResList"> + <condition-list combine="and"> + <condition-expr field-name="orderId" operator="equals" from-field="allocationPlanAndItem.orderId"/> + <condition-expr field-name="orderItemSeqId" operator="equals" from-field="allocationPlanAndItem.orderItemSeqId"/> + <condition-expr field-name="shipGroupSeqId" operator="equals" from-field="orderItemShipGroup.shipGroupSeqId"/> + </condition-list> + </entity-condition> + + <!-- Calculated already reserved quantity for the order item --> + <set field="totalReservedQuantity" value="0.0"/> + <iterate list="orderItemShipGrpInvResList" entry="orderItemShipGrpInvRes"> + <calculate field="reservedQuantity" decimal-scale="6"> + <calcop operator="add" field="orderItemShipGrpInvRes.quantity"/> + <calcop operator="subtract" field="orderItemShipGrpInvRes.quantityNotAvailable"/> + </calculate> + <calculate field="totalReservedQuantity" decimal-scale="6"> + <calcop operator="add" field="reservedQuantity"/> + <calcop operator="add" field="totalReservedQuantity"/> + </calculate> + </iterate> + <calculate field="toBeRservedQuantity"> + <calcop operator="subtract"> + <calcop operator="get" field="allocationPlanAndItem.allocatedQuantity"/> + <calcop operator="get" field="totalReservedQuantity"/> + </calcop> + </calculate> + + <!-- require inventory is N because it had to be N to begin with to have a negative ATP --> + <clear-field field="resMap"/> + <set field="resMap.productId" from-field="parameters.productId"/> + <set field="resMap.orderId" from-field="allocationPlanAndItem.orderId"/> + <set field="resMap.orderItemSeqId" from-field="allocationPlanAndItem.orderItemSeqId"/> + <set field="resMap.quantity" from-field="toBeRservedQuantity"/> + <set field="resMap.reservedDatetime" value="${nowTimestamp}"/> + <set field="resMap.requireInventory" value="Y"/> + <set field="resMap.shipGroupSeqId" from-field="orderItemShipGroup.shipGroupSeqId"/> + <set field="resMap.facilityId" from-field="parameters.facilityId"/> + <set field="resMap.priority" from-field="allocationPlanAndItem.prioritySeqId" type="String"/> + <log level="info" message="Reserving product [${resMap.productId}] for order item [${resMap.orderId}:${resMap.orderItemSeqId}] quantity [${toBeRservedQuantity}]; facility [${parameters.facilityId}]"/> + <call-service service-name="reserveProductInventoryByFacility" in-map-name="resMap"/> + </iterate> + <!-- now go through touchedOrderIdMap keys and make a Set/Map of orderIds that are no longer on back-order --> + <iterate-map key="touchedOrderId" value="throwAwayValue" map="touchedOrderIdMap"> + <set field="checkOrderIsOnBackOrderMap.orderId" from-field="touchedOrderId"/> <call-service service-name="checkOrderIsOnBackOrder" in-map-name="checkOrderIsOnBackOrderMap"> <result-to-field result-name="isBackOrder"/> </call-service> Modified: ofbiz/ofbiz-framework/trunk/applications/product/servicedef/services_facility.xml URL: http://svn.apache.org/viewvc/ofbiz/ofbiz-framework/trunk/applications/product/servicedef/services_facility.xml?rev=1858270&r1=1858269&r2=1858270&view=diff ============================================================================== --- ofbiz/ofbiz-framework/trunk/applications/product/servicedef/services_facility.xml (original) +++ ofbiz/ofbiz-framework/trunk/applications/product/servicedef/services_facility.xml Sat Apr 27 13:05:30 2019 @@ -430,6 +430,24 @@ under the License. <attribute name="noLongerOnBackOrderIdSet" type="Set" mode="OUT" optional="true"/> <attribute name="priority" type="String" mode="IN" optional="true"/> </service> + <service name="reassignInventoryReservationsByAllocationPlan" engine="simple" transaction-timeout="600" + location="component://product/minilang/product/inventory/InventoryServices.xml" invoke="reassignInventoryReservationsByAllocationPlan" auth="true"> + <description>Balance inventory reservations for a given product/facility, considering all the reservations with promised date greater than fromDate.</description> + <attribute name="productId" type="String" mode="IN" optional="false"> + <type-validate> + <fail-property resource="ProductErrorUiLabels" property="facility.productId"/> + </type-validate> + </attribute> + <attribute name="facilityId" type="String" mode="IN" optional="false"> + <type-validate> + <fail-property resource="ProductErrorUiLabels" property="facility.facilityId"/> + </type-validate> + </attribute> + <attribute name="fromDate" type="Timestamp" mode="IN" optional="true"/> + <attribute name="noLongerOnBackOrderIdSet" type="Set" mode="OUT" optional="true"/> + <attribute name="priority" type="String" mode="IN" optional="true"/> + <attribute name="allocationPlanAndItemList" mode="IN" type="List"/> + </service> <service name="balanceOrderItemsWithNegativeReservations" engine="simple" location="component://product/minilang/product/inventory/InventoryServices.xml" invoke="balanceOrderItemsWithNegativeReservations"> <description>For each product with a negative reservation in the order, calls reassignInventoryReservations</description> |
Free forum by Nabble | Edit this page |