| <?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" map="parameters" to-map="newPerson"/> |
| <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" map="parameters" to-map="newPartyRole"/> |
| <call-service service-name="createPartyRole" in-map-name="newPartyRole"/> |
| |
| <set field="parameters.storeName" value="${parameters.userLoginId}_store"/> |
| <set-service-fields service-name="createProductStore" map="parameters" to-map="newProductStore"/> |
| <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" map="parameters" to-map="newPartyRole"/> |
| <call-service service-name="createPartyRole" in-map-name="newPartyRole"/> |
| |
| <set-service-fields service-name="createProductStoreRole" map="parameters" to-map="newProductStoreRole"/> |
| <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 field-name="productStoreId" from-field="productStore.productStoreId"/> |
| <field-map field-name="facilityId" from-field="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 field-name="facilityId" from-field="facilityId"/> |
| <field-map field-name="productId" from-field="parameters.productId"/> |
| </entity-and> |
| <if-empty field="productFacilityList"> |
| <add-error> |
| <fail-property resource="ProductUiLabels" property="FacilityNoAssociatedWithProcuctStore"/> |
| </add-error> |
| <check-errors/> |
| </if-empty> |
| |
| <set-service-fields service-name="reserveEbayProductInventoryByStoreFacility" map="parameters" to-map="callServiceMap"/> |
| <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 list="inventoryItems" entry="inventoryItem"> |
| <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 list="inventoryItemDetails" entry="inventoryItemDetail"> |
| <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> |