From: Jeremy W. <jwi...@ea...> - 2008-08-27 07:26:59
|
Author: jwickers Date: 2008-08-27 00:27:08 -0700 (Wed, 27 Aug 2008) New Revision: 9431 Added: versions/1.0/trunk/hot-deploy/opentaps-common/src/org/opentaps/domain/inventory/ versions/1.0/trunk/hot-deploy/opentaps-common/src/org/opentaps/domain/inventory/InventoryDomainInterface.java versions/1.0/trunk/hot-deploy/opentaps-common/src/org/opentaps/domain/inventory/InventoryRepositoryInterface.java versions/1.0/trunk/hot-deploy/opentaps-common/src/org/opentaps/domain/inventory/InventoryServiceInterface.java versions/1.0/trunk/hot-deploy/warehouse/src/org/opentaps/warehouse/domain/ versions/1.0/trunk/hot-deploy/warehouse/src/org/opentaps/warehouse/domain/inventory/ versions/1.0/trunk/hot-deploy/warehouse/src/org/opentaps/warehouse/domain/inventory/InventoryDomain.java versions/1.0/trunk/hot-deploy/warehouse/src/org/opentaps/warehouse/domain/inventory/InventoryRepository.java versions/1.0/trunk/hot-deploy/warehouse/src/org/opentaps/warehouse/domain/inventory/InventoryService.java Modified: versions/1.0/trunk/hot-deploy/opentaps-common/config/domains-directory.xml versions/1.0/trunk/hot-deploy/opentaps-common/src/org/opentaps/domain/DomainsDirectory.java Log: #413 Added Inventory domain Modified: versions/1.0/trunk/hot-deploy/opentaps-common/config/domains-directory.xml =================================================================== --- versions/1.0/trunk/hot-deploy/opentaps-common/config/domains-directory.xml 2008-08-27 07:03:29 UTC (rev 9430) +++ versions/1.0/trunk/hot-deploy/opentaps-common/config/domains-directory.xml 2008-08-27 07:27:08 UTC (rev 9431) @@ -23,6 +23,7 @@ <bean id="opentapsBillingDomain" class="org.opentaps.financials.domain.billing.BillingDomain"/> <bean id="opentapsOrderDomain" class="org.opentaps.common.domain.order.OrderDomain"/> <bean id="opentapsPartyDomain" class="org.opentaps.common.domain.party.PartyDomain"/> + <bean id="opentapsInventoryDomain" class="org.opentaps.warehouse.domain.inventory.InventoryDomain"/> <!-- The bean id "domainsDirectory" is used by DomainsLoader, so do not change this.--> <bean id="domainsDirectory" class="org.opentaps.domain.DomainsDirectory"> @@ -30,6 +31,7 @@ <property name="billingDomain"><ref bean="opentapsBillingDomain"/></property> <property name="orderDomain"><ref bean="opentapsOrderDomain"/></property> <property name="partyDomain"><ref bean="opentapsPartyDomain"/></property> + <property name="inventoryDomain"><ref bean="opentapsInventoryDomain"/></property> </bean> </beans> Modified: versions/1.0/trunk/hot-deploy/opentaps-common/src/org/opentaps/domain/DomainsDirectory.java =================================================================== --- versions/1.0/trunk/hot-deploy/opentaps-common/src/org/opentaps/domain/DomainsDirectory.java 2008-08-27 07:03:29 UTC (rev 9430) +++ versions/1.0/trunk/hot-deploy/opentaps-common/src/org/opentaps/domain/DomainsDirectory.java 2008-08-27 07:27:08 UTC (rev 9431) @@ -3,6 +3,7 @@ import org.opentaps.domain.billing.BillingDomainInterface; import org.opentaps.domain.order.OrderDomainInterface; import org.opentaps.domain.party.PartyDomainInterface; +import org.opentaps.domain.inventory.InventoryDomainInterface; import org.opentaps.foundation.infrastructure.Infrastructure; import org.opentaps.foundation.infrastructure.User; @@ -27,6 +28,7 @@ private BillingDomainInterface billingDomain; private OrderDomainInterface orderDomain; private PartyDomainInterface partyDomain; + private InventoryDomainInterface inventoryDomain; private Infrastructure infrastructure; private User user; @@ -79,5 +81,15 @@ this.partyDomain = partyDomain; } + public InventoryDomainInterface getInventoryDomain() { + inventoryDomain.setInfrastructure(infrastructure); + inventoryDomain.setUser(user); + return inventoryDomain; + } + public void setInventoryDomain(InventoryDomainInterface inventoryDomain) { + this.inventoryDomain = inventoryDomain; + } + + } Added: versions/1.0/trunk/hot-deploy/opentaps-common/src/org/opentaps/domain/inventory/InventoryDomainInterface.java =================================================================== --- versions/1.0/trunk/hot-deploy/opentaps-common/src/org/opentaps/domain/inventory/InventoryDomainInterface.java (rev 0) +++ versions/1.0/trunk/hot-deploy/opentaps-common/src/org/opentaps/domain/inventory/InventoryDomainInterface.java 2008-08-27 07:27:08 UTC (rev 9431) @@ -0,0 +1,28 @@ +package org.opentaps.domain.inventory; + +import org.opentaps.domain.inventory.InventoryRepositoryInterface; +import org.opentaps.foundation.domain.DomainInterface; + +/* +* Copyright (c) 2007 Open Source Strategies, Inc. +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the Honest Public License. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* Honest Public License for more details. +* +* You should have received a copy of the Honest Public License +* along with this program; if not, write to Funambol, +* 643 Bair Island Road, Suite 305 - Redwood City, CA 94063, USA +*/ + +/** + * This is the interface of the Inventory domain. + */ +public interface InventoryDomainInterface extends DomainInterface { + + public InventoryRepositoryInterface getInventoryRepository(); +} Added: versions/1.0/trunk/hot-deploy/opentaps-common/src/org/opentaps/domain/inventory/InventoryRepositoryInterface.java =================================================================== --- versions/1.0/trunk/hot-deploy/opentaps-common/src/org/opentaps/domain/inventory/InventoryRepositoryInterface.java (rev 0) +++ versions/1.0/trunk/hot-deploy/opentaps-common/src/org/opentaps/domain/inventory/InventoryRepositoryInterface.java 2008-08-27 07:27:08 UTC (rev 9431) @@ -0,0 +1,31 @@ +package org.opentaps.domain.inventory; + +import org.opentaps.foundation.entity.EntityNotFoundException; +import org.opentaps.foundation.repository.RepositoryException; +import org.opentaps.foundation.repository.RepositoryInterface; +import org.opentaps.domain.base.entities.InventoryItem; + +import java.sql.Timestamp; +import java.util.List; + +/* + * Copyright (c) 2006 - 2007 Open Source Strategies, Inc. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the Honest Public License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * Honest Public License for more details. + * + * You should have received a copy of the Honest Public License + * along with this program; if not, write to Funambol, + * 643 Bair Island Road, Suite 305 - Redwood City, CA 94063, USA + */ +public interface InventoryRepositoryInterface extends RepositoryInterface { + + public InventoryItem getInventoryItemById(String inventoryItemId) throws RepositoryException, EntityNotFoundException; + public List<InventoryItem> getInventoryItemsForProductId(String productId) throws RepositoryException; + +} Added: versions/1.0/trunk/hot-deploy/opentaps-common/src/org/opentaps/domain/inventory/InventoryServiceInterface.java =================================================================== --- versions/1.0/trunk/hot-deploy/opentaps-common/src/org/opentaps/domain/inventory/InventoryServiceInterface.java (rev 0) +++ versions/1.0/trunk/hot-deploy/opentaps-common/src/org/opentaps/domain/inventory/InventoryServiceInterface.java 2008-08-27 07:27:08 UTC (rev 9431) @@ -0,0 +1,27 @@ +package org.opentaps.domain.inventory; + +import org.opentaps.foundation.service.ServiceException; + +/* + * Copyright (c) 2007 Open Source Strategies, Inc. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the Honest Public License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * Honest Public License for more details. + * + * You should have received a copy of the Honest Public License + * along with this program; if not, write to Funambol, + * 643 Bair Island Road, Suite 305 - Redwood City, CA 94063, USA + */ +public interface InventoryServiceInterface { + + public void setProductId(String productId); + public void setUseCache(Boolean useCache); + public Double getQuantityOnHandTotal(); + public Double getAvailableToPromiseTotal(); + public void getProductInventoryAvailable() throws ServiceException; +} Added: versions/1.0/trunk/hot-deploy/warehouse/src/org/opentaps/warehouse/domain/inventory/InventoryDomain.java =================================================================== --- versions/1.0/trunk/hot-deploy/warehouse/src/org/opentaps/warehouse/domain/inventory/InventoryDomain.java (rev 0) +++ versions/1.0/trunk/hot-deploy/warehouse/src/org/opentaps/warehouse/domain/inventory/InventoryDomain.java 2008-08-27 07:27:08 UTC (rev 9431) @@ -0,0 +1,35 @@ +package org.opentaps.warehouse.domain.inventory; + +import org.opentaps.domain.inventory.InventoryDomainInterface; +import org.opentaps.warehouse.domain.inventory.InventoryRepository; +import org.opentaps.foundation.domain.Domain; + +/* +* Copyright (c) 2007 Open Source Strategies, Inc. +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the Honest Public License. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* Honest Public License for more details. +* +* You should have received a copy of the Honest Public License +* along with this program; if not, write to Funambol, +* 643 Bair Island Road, Suite 305 - Redwood City, CA 94063, USA +*/ + +/** + * This is an implementation of the Inventory domain. + */ +public class InventoryDomain extends Domain implements InventoryDomainInterface { + + public InventoryRepository getInventoryRepository() { + InventoryRepository repository = new InventoryRepository(); + repository.setInfrastructure(getInfrastructure()); + repository.setUser(getUser()); + return repository; + } + +} Added: versions/1.0/trunk/hot-deploy/warehouse/src/org/opentaps/warehouse/domain/inventory/InventoryRepository.java =================================================================== --- versions/1.0/trunk/hot-deploy/warehouse/src/org/opentaps/warehouse/domain/inventory/InventoryRepository.java (rev 0) +++ versions/1.0/trunk/hot-deploy/warehouse/src/org/opentaps/warehouse/domain/inventory/InventoryRepository.java 2008-08-27 07:27:08 UTC (rev 9431) @@ -0,0 +1,82 @@ +/* + * Copyright (c) 2006 - 2007 Open Source Strategies, Inc. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the Honest Public License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * Honest Public License for more details. + * + * You should have received a copy of the Honest Public License + * along with this program; if not, write to Funambol, + * 643 Bair Island Road, Suite 305 - Redwood City, CA 94063, USA + */ +package org.opentaps.warehouse.domain.inventory; + +import javolution.util.FastList; +import org.ofbiz.base.util.GeneralException; +import org.ofbiz.base.util.UtilMisc; +import org.ofbiz.base.util.UtilValidate; +import org.ofbiz.entity.GenericDelegator; +import org.ofbiz.entity.GenericEntityException; +import org.ofbiz.entity.GenericValue; +import org.opentaps.domain.base.entities.InventoryItem; +import org.opentaps.domain.inventory.InventoryRepositoryInterface; +import org.opentaps.foundation.entity.EntityNotFoundException; +import org.opentaps.foundation.infrastructure.Infrastructure; +import org.opentaps.foundation.infrastructure.User; +import org.opentaps.foundation.repository.RepositoryException; +import org.opentaps.foundation.repository.ofbiz.Repository; + +import java.sql.Timestamp; +import java.util.List; + +/** + * Repository for Invoices to handle interaction of Invoice-related domain with the entity engine (database) and the service engine. + */ +public class InventoryRepository extends Repository implements InventoryRepositoryInterface { + + protected GenericDelegator delegator; + + public InventoryRepository() { + super(); + } + + public InventoryRepository(GenericDelegator delegator) { + super(delegator); + } + + public InventoryRepository(Infrastructure infrastructure, User user) throws RepositoryException { + super(infrastructure, user); + } + + public InventoryItem getInventoryItemById(String inventoryItemId) throws RepositoryException, EntityNotFoundException { + try { + GenericValue value = getDelegator().findByPrimaryKey("InventoryItem", UtilMisc.toMap("inventoryItemId", inventoryItemId)); + if (UtilValidate.isEmpty(value)) { + throw new EntityNotFoundException("InventoryItem [" + inventoryItemId + "] not found"); + } + return (InventoryItem) Repository.loadFromGeneric(InventoryItem.class, value, this); + } catch (GeneralException e) { + throw new RepositoryException(e); + } + } + + /** + * Lookup inventory items for the given product id + * @param productId + * @return + * @throws RepositoryException + */ + public List<InventoryItem> getInventoryItemsForProductId(String productId) throws RepositoryException { + try { + List<GenericValue> inventoryItems = getDelegator().findByAnd("InventoryItem", UtilMisc.toMap("productId", productId)); + return (List<InventoryItem>) Repository.loadFromGeneric(InventoryItem.class, inventoryItems); + } catch (GenericEntityException ex) { + throw new RepositoryException(ex); + } + } + +} Added: versions/1.0/trunk/hot-deploy/warehouse/src/org/opentaps/warehouse/domain/inventory/InventoryService.java =================================================================== --- versions/1.0/trunk/hot-deploy/warehouse/src/org/opentaps/warehouse/domain/inventory/InventoryService.java (rev 0) +++ versions/1.0/trunk/hot-deploy/warehouse/src/org/opentaps/warehouse/domain/inventory/InventoryService.java 2008-08-27 07:27:08 UTC (rev 9431) @@ -0,0 +1,108 @@ +/* + * Copyright (c) 2007 Open Source Strategies, Inc. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the Honest Public License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * Honest Public License for more details. + * + * You should have received a copy of the Honest Public License + * along with this program; if not, write to Funambol, + * 643 Bair Island Road, Suite 305 - Redwood City, CA 94063, USA + */ +package org.opentaps.warehouse.domain.inventory; + +import org.ofbiz.base.util.GeneralException; +import org.ofbiz.base.util.UtilMisc; +import org.ofbiz.base.util.UtilValidate; +import org.ofbiz.service.ServiceUtil; +import org.opentaps.domain.base.entities.InventoryItem; +import org.opentaps.domain.inventory.InventoryServiceInterface; +import org.opentaps.domain.inventory.InventoryDomainInterface; +import org.opentaps.domain.inventory.InventoryRepositoryInterface; +import org.opentaps.foundation.infrastructure.Infrastructure; +import org.opentaps.foundation.infrastructure.User; +import org.opentaps.foundation.service.Service; +import org.opentaps.foundation.service.ServiceException; + +import java.util.List; +import java.util.Locale; +import java.util.Map; + +/** + * POJO implementation of services which create invoices from orders using the opentaps Service foundation class + */ +public class InventoryService extends Service implements InventoryServiceInterface { + + private static final String module = InventoryService.class.getName(); + + protected String productId = null; + protected Boolean useCache = false; + + protected Double quantityOnHandTotal = null; + protected Double availableToPromiseTotal = null; + + public InventoryService() { + super(); + } + + public InventoryService(Infrastructure infrastructure, User user, Locale locale) throws ServiceException { + super(infrastructure, user, locale); + } + + public void setProductId(String productId) { + this.productId = productId; + } + + public void setUseCache(Boolean useCache) { + this.useCache = useCache; + } + + public Double getQuantityOnHandTotal() { + return this.quantityOnHandTotal; + } + + public Double getAvailableToPromiseTotal() { + return this.availableToPromiseTotal; + } + + public void getProductInventoryAvailable() throws ServiceException { + try { + // validate that the order actually exists and get list of non-physical + InventoryDomainInterface inventoryDomain = getDomainsDirectory().getInventoryDomain(); + InventoryRepositoryInterface inventoryRepository = inventoryDomain.getInventoryRepository(); + + List<InventoryItem> items = inventoryRepository.getInventoryItemsForProductId(productId); + + availableToPromiseTotal = 0.0; + quantityOnHandTotal = 0.0; + + for (InventoryItem item : items) { + String type = item.getInventoryItemTypeId(); + String statusId = item.getStatusId(); + if ("SERIALIZED_INV_ITEM".equals(type)) { + if ("INV_AVAILABLE".equals(statusId) || "INV_PROMISED".equals(statusId) || "INV_BEING_TRANSFERED".equals(statusId)) { + quantityOnHandTotal++; + } + if ("INV_AVAILABLE".equals(statusId)) { + availableToPromiseTotal++; + } + } else if ("NON_SERIAL_INV_ITEM".equals(type)) { + if (item.getQuantityOnHandTotal() != null) { + quantityOnHandTotal += item.getQuantityOnHandTotal().doubleValue(); + } + if (item.getAvailableToPromiseTotal() != null) { + availableToPromiseTotal += item.getAvailableToPromiseTotal().doubleValue(); + } + } + } + + + } catch (GeneralException ex) { + throw new ServiceException(ex) ; + } + } +} |