blob: bbe3ac04516de1379bfa0924fdb6685894fe156d [file] [log] [blame]
<?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.
-->
<simple-methods xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://ofbiz.apache.org/Simple-Method" xsi:schemaLocation="http://ofbiz.apache.org/Simple-Method http://ofbiz.apache.org/dtds/simple-methods.xsd">
<simple-method method-name="createEbayAccount" short-description="Create Ebay Account">
<set-service-fields service-name="createPersonAndUserLogin" to-map="newPerson" map="parameters"/>
<call-service service-name="createPersonAndUserLogin" in-map-name="newPerson">
<result-to-field result-name="partyId" field="parameters.partyId"/>
</call-service>
<set field="parameters.roleTypeId" value="VENDOR" />
<set-service-fields service-name="createPartyRole" to-map="newPartyRole" map="parameters"/>
<call-service service-name="createPartyRole" in-map-name="newPartyRole"/>
<set field="parameters.storeName" value="${parameters.userLoginId}_store"/>
<set-service-fields service-name="createProductStore" to-map="newProductStore" map="parameters"/>
<call-service service-name="createProductStore" in-map-name="newProductStore">
<result-to-field result-name="productStoreId" field="parameters.productStoreId"/>
</call-service>
<set field="parameters.roleTypeId" value="EBAY_ACCOUNT"/>
<set-service-fields service-name="createPartyRole" to-map="newPartyRole" map="parameters"/>
<call-service service-name="createPartyRole" in-map-name="newPartyRole"/>
<set-service-fields service-name="createProductStoreRole" to-map="newProductStoreRole" map="parameters"/>
<call-service service-name="createProductStoreRole" in-map-name="newProductStoreRole"/>
<field-to-result field="parameters.productStoreId" result-name="productStoreId"/>
</simple-method>
<!-- ebay Store Inventory Services -->
<simple-method method-name="reserveEbayProductInventory" short-description="Reserve product from ofbiz Store Inventory">
<entity-one entity-name="Product" value-field="product" use-cache="true"/>
<entity-one entity-name="ProductStore" value-field="productStore" >
<field-map field-name="productStoreId" from-field="parameters.productStoreId"/>
</entity-one>
<if-empty field="productStore">
<add-error>
<fail-property resource="ProductUiLabels" property="ProductProductStoreNotFound"/>
</add-error>
<check-errors/>
</if-empty>
<!-- if prodCatalog is set to not reserve inventory, break here -->
<if-compare value="N" operator="equals" field="productStore.reserveInventory">
<!-- note: if not set, defaults to yes, reserve inventory -->
<log level="verbose" message="ProductStore with id ${productStore.productStoreId}, is set to NOT reserve inventory, not reserving inventory"/>
<field-to-result field="parameters.quantity" result-name="quantityNotReserved"/>
<return response-code="success"/>
</if-compare>
<set from-field="product.requireInventory" field="requireInventory"/>
<if-empty field="requireInventory">
<set from-field="productStore.requireInventory" field="requireInventory"/>
</if-empty>
<if-empty field="requireInventory">
<set value="Y" field="requireInventory"/>
</if-empty>
<set from-field="parameters.facilityId" field="facilityId"/>
<if-not-empty field="facilityId">
<entity-and entity-name="ProductStoreFacility" list="productStoreFacilities" use-cache="true">
<field-map from-field="productStore.productStoreId" field-name="productStoreId"/>
<field-map from-field="facilityId" field-name="facilityId"/>
<order-by field-name="sequenceNum"/>
</entity-and>
<iterate list="productStoreFacilities" entry="productStoreFacility">
<!-- Search Product Store Facilities to insure the facility passed in is associated to the Product Store passed in -->
<set field="facilityFound" from-field="productStoreFacility"/>
<log level="info" message="ProductStoreService:Facility Found : [${facilityFound}]"/>
</iterate>
<if-empty field="facilityFound">
<add-error>
<fail-property resource="ProductUiLabels" property="FacilityNoAssociatedWithProcuctStore"/>
</add-error>
<check-errors/>
</if-empty>
<!-- verifly that product was store in facility -->
<entity-and entity-name="ProductFacility" list="productFacilityList">
<field-map from-field="facilityId" field-name="facilityId"/>
<field-map from-field="parameters.productId" field-name="productId"/>
</entity-and>
<if-empty field="productFacilityList">
<add-error>
<fail-property resource="ProductUiLabels" property="FacilityNoAssociatedWithProcuctStore"/>
</add-error>
<check-errors/>
</if-empty>
<set-service-fields map="parameters" to-map="callServiceMap" service-name="reserveEbayProductInventoryByStoreFacility"/>
<set from-field="facilityId" field="callServiceMap.facilityId"/>
<set from-field="requireInventory" field="callServiceMap.requireInventory"/>
<set from-field="productStore.reserveOrderEnumId" field="callServiceMap.reserveOrderEnumId"/>
<set value="EBAY_INV_RES" field="callServiceMap.reserveReasonEnumId"/>
<call-service service-name="reserveEbayProductInventoryByStoreFacility" in-map-name="callServiceMap">
<results-to-map map-name="resultMap"/>
<result-to-field result-name="quantityNotReserved" field="qtyNotReserve"/>
<result-to-field result-name="successMessage" field="returnSuccessMessage"/>
</call-service>
<set field="defaultReserve" default-value="0"/>
<!-- if quantityNotReserved greater than 0 then ATP in ofbiz stock not have, it should be return message or log warring-->
<if-compare-field field="qtyNotReserve" operator="equals" type="BigDecimal" to-field="defaultReserve">
<call-simple-method method-name="editEbayProductStoreInventory"/>
<set field="successMessage" value="${returnSuccessMessage} quantity Reserved:${parameters.quantity} quantityNotReserved:${qtyNotReserve} "/>
<field-to-result field="successMessage"/>
<set field="quantityNotReserved" default-value="0" type="BigDecimal"/>
<field-to-result field="quantityNotReserved"/>
<else>
<!-- find qty which can reserved -->
<set field="requiredQty" from-field="parameters.quantity"/>
<calculate field="reservedQty" type="BigDecimal" >
<calcop operator="get">
<calcop operator="get" field="requiredQty"/>
<calcop operator="negative" field="qtyNotReserve"/>
</calcop>
</calculate>
<set field="parameters.quantity" from-field="reservedQty"/>
<if-compare-field field="reservedQty" operator="greater" to-field="defaultReserve">
<call-simple-method method-name="editEbayProductStoreInventory"/>
</if-compare-field>
<!-- then show only qty was already reserved and show difference value that can not reserve -->
<set field="successMessage" value="${returnSuccessMessage} Quantity Reserved : ${reservedQty} Quantity Not Reserved : ${qtyNotReserve} "/>
<field-to-result field="successMessage"/>
<set field="quantityNotReserved" value="${qtyNotReserve}" default-value="0" type="BigDecimal"/>
<field-to-result field="quantityNotReserved"/>
</else>
</if-compare-field>
</if-not-empty>
</simple-method>
<simple-method method-name="editEbayProductStoreInventory" short-description="add qty reserve from ofbiz Store product Inventory and combine with ebay store inventory">
<entity-one entity-name="EbayProductStoreInventory" value-field="ebayProductStoreInventory" >
<field-map field-name="productStoreId" from-field="parameters.productStoreId"/>
<field-map field-name="facilityId" from-field="parameters.facilityId"/>
<field-map field-name="productId" from-field="parameters.productId"/>
</entity-one>
<if-empty field="ebayProductStoreInventory">
<!-- add new reserved product -->
<make-value value-field="newEbayProductStoreInven" entity-name="EbayProductStoreInventory"/>
<set field="newEbayProductStoreInven.productStoreId" from-field="parameters.productStoreId"/>
<set field="newEbayProductStoreInven.facilityId" from-field="parameters.facilityId"/>
<set field="newEbayProductStoreInven.productId" from-field="parameters.productId"/>
<set field="newEbayProductStoreInven.quantityReserved" default-value="0" from-field="parameters.quantity"/>
<set field="newEbayProductStoreInven.availableToPromiseListing" default-value="0" from-field="parameters.quantity"/>
<set field="newEbayProductStoreInven.scheduled" default-value="0" type="BigDecimal"/>
<set field="newEbayProductStoreInven.activeListing" default-value="0" type="BigDecimal"/>
<set field="newEbayProductStoreInven.sold" default-value="0" type="BigDecimal"/>
<set field="newEbayProductStoreInven.unSold" default-value="0" type="BigDecimal"/>
<now-timestamp field="newEbayProductStoreInven.reservedDate" />
<create-value value-field="newEbayProductStoreInven"/>
<else><!-- update reserved qty -->
<set field="qtyNow" default-value="0" from-field="ebayProductStoreInventory.quantityReserved"/>
<set field="atpListingNow" default-value="0" from-field="ebayProductStoreInventory.availableToPromiseListing"/>
<set field="reserveQty" default-value="0" from-field="parameters.quantity"/>
<calculate field="sumQtyReserved" type="BigDecimal" >
<calcop operator="add">
<calcop operator="get" field="qtyNow"/>
<calcop operator="get" field="reserveQty"/>
</calcop>
</calculate>
<calculate field="sumQtyATPListing" type="BigDecimal" >
<calcop operator="add">
<calcop operator="get" field="atpListingNow"/>
<calcop operator="get" field="reserveQty"/>
</calcop>
</calculate>
<now-timestamp field="ebayProductStoreInventory.reservedDate" />
<set field="ebayProductStoreInventory.quantityReserved" from-field="sumQtyReserved"/>
<set field="ebayProductStoreInventory.availableToPromiseListing" from-field="sumQtyATPListing"/>
<store-value value-field="ebayProductStoreInventory"/>
</else>
</if-empty>
</simple-method>
<simple-method method-name="updateEbayProductQtyReserved" short-description="Update or cancel an Product which are reserved quantity from inventory">
<entity-one entity-name="EbayProductStoreInventory" value-field="ebayProductStoreInventory">
<field-map field-name="productStoreId" from-field="parameters.productStoreId"/>
<field-map field-name="facilityId" from-field="parameters.facilityId"/>
<field-map field-name="productId" from-field="parameters.productId"/>
</entity-one>
<if-empty field="ebayProductStoreInventory">
<add-error>
<fail-property resource="ProductUiLabels" property="ProductNotFindProductId"/>
</add-error>
<check-errors/>
</if-empty>
<set field="actionType" from-field="parameters.actionType"/>
<set field="qtyInp" default-value="0" from-field="parameters.quantity"/>
<set field="atpListing" default-value="0" from-field="ebayProductStoreInventory.availableToPromiseListing"/>
<set field="qohReserved" default-value="0" from-field="ebayProductStoreInventory.quantityReserved"/>
<!--check qty input for increase or decrease -->
<!--field-to-result field="parameters.productStoreId" result-name="productStoreId"/>
<field-to-result field="parameters.facilityId" result-name="facilityId"/>
<field-to-result field="parameters.productId" result-name="productId"/-->
<if-compare field="actionType" value="ADD" operator="equals">
<set-service-fields service-name="reserveEbayProductInventory" map="parameters" to-map="reservedEbayProduct"/>
<call-service service-name="reserveEbayProductInventory" in-map-name="reservedEbayProduct"></call-service>
<return/>
<else>
<!-- calculate for qty is used to create listing already, can not remove that qty until list is end or cancel listing-->
<calculate field="qtyToUsed" type="BigDecimal" >
<calcop operator="add">
<calcop operator="get" field="qohReserved"/>
<calcop operator="negative" field="atpListing"/>
</calcop>
</calculate>
<calculate field="qtyCanRemv" type="BigDecimal" >
<calcop operator="add">
<calcop operator="get" field="qohReserved"/>
<calcop operator="negative" field="qtyToUsed"/>
</calcop>
</calculate>
<if-compare field="qtyCanRemv" operator="greater" value="0">
<!-- auto remove only real qtys that we can remove then return quantity are remove to stock follow productStore, facility and productId -->
<set field="qtyToRemove" type="BigDecimal" default-value="0" value="${qtyInp}"/>
<if-compare field="qtyCanRemv" value="${qtyToRemove}" operator="greater-equals">
<call-simple-method method-name="removeEbayProductQtyReserved"/>
<log level="info" message="(${qtyToRemove}) product quantity was cancel from inventory with this transaction"></log>
<else>
<!-- calculate for over qty want to remove -->
<calculate field="qtyOverRemv" type="BigDecimal" >
<calcop operator="add">
<calcop operator="get" field="qtyToRemove"/>
<calcop operator="negative" field="qtyCanRemv"/>
</calcop>
</calculate>
<set field="qtyToRemove" type="BigDecimal" default-value="0" from-field="qtyCanRemv"/>
<call-simple-method method-name="removeEbayProductQtyReserved"/>
<set field="successMessage" value="${returnSuccessMessage} (${qtyToRemove}) product qty was canceled from this transaction and (${qtyOverRemv}) was fail because you reserved in inventory only ${qtyToRemove}. "/>
<field-to-result field="successMessage"/>
</else>
</if-compare>
<!-- update values in EbayProductStoreInventory -->
<calculate field="ebayProductStoreInventory.quantityReserved" type="BigDecimal" >
<calcop operator="add">
<calcop operator="get" field="qohReserved"/>
<calcop operator="negative" field="qtyToRemove"/>
</calcop>
</calculate>
<calculate field="ebayProductStoreInventory.availableToPromiseListing" type="BigDecimal" >
<calcop operator="add">
<calcop operator="get" field="atpListing"/>
<calcop operator="negative" field="qtyToRemove"/>
</calcop>
</calculate>
<store-value value-field="ebayProductStoreInventory"/>
<else>
<add-error>
<fail-property resource="ProductUiLabels" property="EbayStoreCannotDecreaseQuantity"/>
</add-error>
<return/>
</else>
</if-compare>
</else>
</if-compare>
</simple-method>
<simple-method method-name="removeEbayProductQtyReserved" short-description="remove reserved product qty and return quantity to inventory">
<!--for InventoryItems that have no locationSeqId -->
<set value="+datetimeReceived" field="orderByString"/>
<entity-condition entity-name="InventoryItem" list="inventoryItems">
<condition-list combine="and">
<condition-expr field-name="productId" from-field="parameters.productId"/>
<condition-expr field-name="facilityId" from-field="parameters.facilityId"/>
<condition-expr field-name="containerId" from-field="parameters.containerId" ignore-if-empty="true" ignore-if-null="true"/>
<condition-expr field-name="quantityOnHandTotal" operator="greater" value="0.0"/>
<condition-expr field-name="locationSeqId" operator="equals" from-field="nullField"/>
</condition-list>
<order-by field-name="${orderByString}"/>
</entity-condition>
<set field="qtyless" type="BigDecimal" default-value="0" from-field="qtyToRemove"/>
<iterate entry="inventoryItem" list="inventoryItems">
<if>
<condition>
<and>
<if-empty field="inventoryItem.locationSeqId"/>
</and>
</condition>
<then>
<get-related value-field="inventoryItem" relation-name="InventoryItemDetail" list="inventoryItemDetails"/>
<if-not-empty field="inventoryItemDetails">
<iterate entry="inventoryItemDetail" list="inventoryItemDetails">
<if>
<condition>
<and>
<if-compare field="inventoryItemDetail.reasonEnumId" value="EBAY_INV_RES" operator="equals"></if-compare>
<if-empty field="inventoryItemDetail.orderId"></if-empty>
<if-empty field="inventoryItemDetail.orderItemSeqId"></if-empty>
<if-compare field="inventoryItemDetail.availableToPromiseDiff" value="0" operator="not-equals"></if-compare>
</and>
</condition>
<then>
<if-compare field="qtyless" value="0" operator="greater">
<calculate field="qtyResult" type="BigDecimal" >
<calcop operator="add">
<calcop operator="get" field="inventoryItemDetail.availableToPromiseDiff"/>
<calcop operator="get" field="${qtyless}"/>
</calcop>
</calculate>
<if-compare field="qtyResult" value="0" operator="greater-equals">
<remove-value value-field="inventoryItemDetail"/>
<else>
<set field="inventoryItemDetail.availableToPromiseDiff" type="BigDecimal" from-field="qtyResult"/>
<store-value value-field="inventoryItemDetail"/>
</else>
</if-compare>
<set field="qtyless" type="BigDecimal" value="${qtyResult}"/>
<else>
<return/>
</else>
</if-compare>
</then>
</if>
</iterate>
</if-not-empty>
</then>
</if>
</iterate>
</simple-method>
</simple-methods>