[Erp5-report] r26596 - /erp5/trunk/products/ERP5/Interface/
nobody at svn.erp5.org
nobody at svn.erp5.org
Wed Apr 22 17:56:26 CEST 2009
Author: jp
Date: Wed Apr 22 17:56:25 2009
New Revision: 26596
URL: http://svn.erp5.org?rev=26596&view=rev
Log:
Early revisions of interfaces - experimental
Added:
erp5/trunk/products/ERP5/Interface/IAmount.py
erp5/trunk/products/ERP5/Interface/IMovement.py
erp5/trunk/products/ERP5/Interface/ISimulationMovement.py
Modified:
erp5/trunk/products/ERP5/Interface/IArrow.py
Added: erp5/trunk/products/ERP5/Interface/IAmount.py
URL: http://svn.erp5.org/erp5/trunk/products/ERP5/Interface/IAmount.py?rev=26596&view=auto
==============================================================================
--- erp5/trunk/products/ERP5/Interface/IAmount.py (added)
+++ erp5/trunk/products/ERP5/Interface/IAmount.py [utf8] Wed Apr 22 17:56:25 2009
@@ -1,0 +1,154 @@
+##############################################################################
+#
+# Copyright (c) 2009 Nexedi SARL and Contributors. All Rights Reserved.
+# Jean-Paul Smets-Solanes <jp at nexedi.com>
+#
+# WARNING: This program as such is intended to be used by professional
+# programmers who take the whole responsability of assessing all potential
+# consequences resulting from its eventual inadequacies and bugs
+# End users who are looking for a ready-to-use solution with commercial
+# garantees and support are strongly adviced to contract a Free Software
+# Service Company
+#
+# This program is Free Software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# 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
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+#
+##############################################################################
+
+from Interface import Interface
+
+class IAmount(Interface):
+ """
+ An amount represents a quantity of a given resource
+ in a given quantity unit. Optional efficiency
+ or (exclusive) profit/loss quantity can be specified
+ in order to represent a profit or loss ratio to take
+ into account in calculations.
+
+ The Amount interface is useful each time
+ we need to add or substract amounts of resources
+ independently of a movement. This is the case for example
+ for all Transformation related classes.
+
+ Equations:
+ net_quantity = quantity * efficiency
+
+ TODO:
+ consider how to make Interface compatible
+ with accessor generation (ex. getResource)
+
+ Addition:
+ target_quantity is obsolete, it is never defined.
+ """
+
+ # Core API
+ def getQuantity():
+ """
+ Returns the quantity of the resource
+ in the unit specified by the Amount
+ """
+
+ def getResource():
+ """
+ Returns the resource category relative URL
+ of the Amount
+ """
+
+ def getQuantityUnit():
+ """
+ Returns the quantity unit category relative URL
+ of the Amount
+ """
+
+ def isCancellationAmount():
+ """
+ A cancellation amount must be interpreted
+ reversely write to the sign of qauntity.
+
+ For example, a negative credit for a cancellation
+ amount is a negative credit, not a positive
+ debit.
+
+ A negative production quantity for a cancellation
+ amount is a cancelled production, not
+ a consumption
+ """
+
+ # Net Quantity API
+ def getEfficiency():
+ """
+ Returns a value which is rate affect to the net quantity
+ Only used for transformation for now.
+ """
+
+ def getNetQuantity():
+ """
+ Returns affected quantity by some optional effects.
+ """
+
+ # Price API
+
+ def getPrice():
+ """
+ Returns price
+ """
+
+ def getTotalPrice():
+ """
+ Returns total price for the number of items
+ """
+
+ # Conversion API
+ def getConvertedQuantity():
+ """
+ Returns the quantity converted by the resource
+ """
+
+ def getNetConvertedQuantity():
+ """
+ Returns the net quantity converted by the resource
+ """
+
+ # Make it possible to add amounts
+ def __add__(value):
+ """
+ Add
+
+ If the amount can understands argument as amount for addition,
+ returns calculated
+ """
+
+ def __sub__(value):
+ """
+ Substract
+
+ If the amount can understands argument as amount for substraction,
+ returns calculated
+ """
+
+ def __mul__(value):
+ """
+ Multiply
+
+ If the amount can understands argument as efficiency for multiplication,
+ returns calculated
+ """
+
+ def __div__(value):
+ """
+ Devide
+
+ If the amount can understands argument as efficiency for division,
+ returns calculated
+ """
Modified: erp5/trunk/products/ERP5/Interface/IArrow.py
URL: http://svn.erp5.org/erp5/trunk/products/ERP5/Interface/IArrow.py?rev=26596&r1=26595&r2=26596&view=diff
==============================================================================
--- erp5/trunk/products/ERP5/Interface/IArrow.py [utf8] (original)
+++ erp5/trunk/products/ERP5/Interface/IArrow.py [utf8] Wed Apr 22 17:56:25 2009
@@ -29,33 +29,16 @@
from zope.interface import Interface
class IArrow(Interface):
- """
- The Arrow lists the methods which are available to
- access all source and destination categories of
- a movement or of a delivery.
+ """The Arrow lists the methods which are available to
+ access all source and destination categories of
+ a movement or of a delivery.
"""
def getSourceArrowBaseCategoryList():
- """
- Returns all categories which are used to define the source
- of this Arrow
+ """Returns all categories which are used to define the source
+ of this Arrow
"""
def getDestinationArrowBaseCategoryList():
- """
- Returns all categories which are used to define the destination
- of this Arrow
- """
-
- def _getSourceArrowList(spec=(), filter=None, portal_type=(), base=0,
- keep_default=1, checked_permission=None):
- """
- Returns all categories which define the source of the
- document (ex. source, source_section, etc.)
- """
-
- def _getDestinationArrowList(spec=(), filter=None, portal_type=(), base=0,
- keep_default=1, checked_permission=None):
- """
- Returns all categories which define the destination of the
- document (ex. destination, destination_section, etc.)
- """
+ """Returns all categories which are used to define the destination
+ of this Arrow
+ """
Added: erp5/trunk/products/ERP5/Interface/IMovement.py
URL: http://svn.erp5.org/erp5/trunk/products/ERP5/Interface/IMovement.py?rev=26596&view=auto
==============================================================================
--- erp5/trunk/products/ERP5/Interface/IMovement.py (added)
+++ erp5/trunk/products/ERP5/Interface/IMovement.py [utf8] Wed Apr 22 17:56:25 2009
@@ -1,0 +1,253 @@
+##############################################################################
+#
+# Copyright (c) 2009 Nexedi SARL and Contributors. All Rights Reserved.
+# Jean-Paul Smets-Solanes <jp at nexedi.com>
+#
+# WARNING: This program as such is intended to be used by professional
+# programmers who take the whole responsability of assessing all potential
+# consequences resulting from its eventual inadequacies and bugs
+# End users who are looking for a ready-to-use solution with commercial
+# garantees and support are strongly adviced to contract a Free Software
+# Service Company
+#
+# This program is Free Software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# 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
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+#
+##############################################################################
+
+from Interface import Interface
+
+class IMovement(Interface):
+ """
+ A movement represents amount of resource how are changed
+ on the path. The movement should be ables to provide how
+ amount is/was existed on node both source and destination.
+ Because of movement may be affected on path.
+
+ The movement interface can be represents any kind of delivery.
+ It is useful to represent changed of between nodes.
+
+ Equations:
+ destination_quantity = source_quantity * efficiency
+ (These values can be calculated by Amount)
+
+
+ Production/Consumption
+
+ (A -> B)
+ if source_quantity > 0 and destination_quantity > 0
+ production_quantity = destination_quantity
+ consumption_quantity = source_quantity
+
+ if source_quantity < 0 and destination_quantity < 0
+ production_quantity = - source_quantity
+ consumption_quantity = - destination_quantity
+
+ if source_quantity < 0 and destination_quantity > 0
+ or
+ source_quantity > 0 and destination_quantity < 0
+ raise
+
+
+ (A -> Nothing)
+ if source_quantity > 0
+ consumption_quantity = source_quantity
+ production_quantity = 0
+
+ if source_quantity < 0
+ consumption_quantity = 0
+ production_quantity = - source_quantity
+
+ (Nothing -> B)
+ if destination_quantity > 0
+ consumption_quantity = 0
+ production_quantity = destination_quantity
+
+ if destination_quantity < 0
+ consumption_quantity = - destination_quantity
+ production_quantity = 0
+
+
+ Credit/Debit
+
+ (A -> B)
+ if source_quantity > 0 and destination_quantity > 0
+ source_credit = - source_quantity
+ source_debit = source_quantity
+ destination_credit = destination_quantity
+ destination_debit = - destination_quantity
+
+ if source_quantity < 0 and destination_quantity < 0
+ source_credit = source_quantity
+ source_debit = - source_quantity
+ destination_credit = - destination_quantity
+ destination_debit = destination_quantity
+
+ if source_quantity < 0 and destination_quantity > 0
+ or
+ source_quantity > 0 and destination_quantity < 0
+ raise
+
+ (A -> Nothing)
+ if source_quantity > 0
+ source_credit = source_quantity
+ source_debit = - source_quantity
+ destination_credit = 0
+ destination_debit = 0
+
+ if source_quantity < 0
+ source_credit = - source_quantity
+ source_debit = source_quantity
+ destination_credit = 0
+ destination_debit = 0
+
+ (Nothing -> B)
+ if destination_quantity > 0
+ source_credit = 0
+ source_debit = 0
+ destination_credit = destination_quantity
+ destination_debit = - destination_quantity
+
+ if destination_quantity < 0
+ source_credit = 0
+ source_debit = 0
+ destination_credit = - destination_quantity
+ destination_debit = destination_quantity
+
+ source_asset_price = price
+ destination_asset_price = price
+ """
+
+ # Conversion API for cataloging
+ def getConvertedSourceQuantity():
+ """
+ Returns the quantity how are removed
+ from source by the movement
+ """
+
+ def getConvertedDestinationQuantity():
+ """
+ Returns the quantity how are reached
+ to destination by the movement
+ """
+
+ # Helper methods for Production
+ def getConsumptionQuantity():
+ """
+ Returns the quantity how are consumed
+ on the path by the movement
+ """
+
+ def getProductionQuantity():
+ """
+ Returns the quantity how are produced
+ on the path by the movement
+ """
+
+ # Helper methods for Accounting
+ def getSourceDebit():
+ """
+ Returns the quantity how are debited
+ from source node by the movement
+ """
+
+ def getSourceCredit():
+ """
+ Returns the quantity how are credited
+ from source node by the movement
+ """
+
+ def getDestinationDebit():
+ """
+ Returns the quantity how are debited
+ to destination node by the movement
+ """
+
+ def getDestinationCredit():
+ """
+ Returns the quantity how are credited
+ to destination node by the movement
+ """
+
+ def getSourceAssetPrice():
+ """
+ Returns the price how are taken
+ from source by the movement
+ """
+
+ def getSourceInventoriatedTotalAssetPrice():
+ """
+ Returns a price which can be used
+ to calculate stock value (asset)
+ """
+
+ def getSourceInventoriatedTotalAssetDebit():
+ """
+ Returns the debit part of inventoriated
+ source total asset price.
+ """
+
+ def getSourceInventoriatedTotalAssetCredit():
+ """
+ Returns the credit part of inventoriated
+ source total asset price.
+ """
+
+ def getSourceAssetDebit():
+ """
+ Return the debit part of the source total
+ asset price.
+ """
+
+ def getSourceAssetCredit():
+ """
+ Return the credit part of the source total
+ asset price.
+ """
+
+ def getDestinationAssetPrice():
+ """
+ Returns the price how are given
+ to destination by the movement
+ """
+
+ def getDestinationInventoriatedTotalAssetPrice():
+ """
+ Returns a price which can be used
+ to calculate stock value (asset)
+ """
+
+ def getDestinationInventoriatedTotalAssetDebit():
+ """
+ Returns the debit part of inventoriated
+ destination total asset price.
+ """
+
+ def getDestinationInventoriatedTotalAssetCredit():
+ """
+ Returns the credit part of inventoriated
+ destination total asset price.
+ """
+
+ def getDestinationAssetDebit():
+ """
+ Return the debit part of the destination total
+ asset price.
+ """
+
+ def getDestinationAssetCredit():
+ """
+ Return the credit part of the destination total
+ asset price.
+ """
Added: erp5/trunk/products/ERP5/Interface/ISimulationMovement.py
URL: http://svn.erp5.org/erp5/trunk/products/ERP5/Interface/ISimulationMovement.py?rev=26596&view=auto
==============================================================================
--- erp5/trunk/products/ERP5/Interface/ISimulationMovement.py (added)
+++ erp5/trunk/products/ERP5/Interface/ISimulationMovement.py [utf8] Wed Apr 22 17:56:25 2009
@@ -1,0 +1,118 @@
+##############################################################################
+#
+# Copyright (c) 2009 Nexedi SARL and Contributors. All Rights Reserved.
+# Jean-Paul Smets-Solanes <jp at nexedi.com>
+#
+# WARNING: This program as such is intended to be used by professional
+# programmers who take the whole responsability of assessing all potential
+# consequences resulting from its eventual inadequacies and bugs
+# End users who are looking for a ready-to-use solution with commercial
+# garantees and support are strongly adviced to contract a Free Software
+# Service Company
+#
+# This program is Free Software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# 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
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+#
+##############################################################################
+
+from Interface import Interface
+
+class ISimulationMovement(Interface):
+ """
+ The SimulationMovement interface
+ introduces the possibility to define
+ quantity errors between the simulation
+ and the reality.
+
+ In short: parent applied rules use the Movement
+ API to define quantity.
+
+ Child applied rules use the Delivered API
+ to use appropriate values which include
+ the delivery_error.
+
+ DeliverySolver either solve divergence by
+ setting the delivery_error (then no target
+ solver needed, at least for quantity) or
+ by changing the quantity (then TargetSolver
+ is needed to backtrack the quantity).
+
+ quantity(SM) + delivery_error (SM) =
+ quantity(DL) * delivery_ratio(SM)
+ """
+
+ # Delivery API
+ def getDeliveryRatio():
+ """
+ Returns ratio to apply on the quantity
+ property of the corresponding delivery
+ to obtain the current quantity
+ """
+
+ def getDeliveryError():
+ """
+ Returns correction to make the match
+ between delivery quantity and simulation
+ quantity consistent
+ """
+
+ def getDeliveryQuantity():
+ """
+ Returns quantity which was actually
+ shipped, taking into account the errors
+ of the simulation fixed by the delivery
+
+ quantity + delivery_error
+ """
+
+ def getDeliveryConvertedQuantity():
+ """
+ Returns delivery quantity converted by the resource
+ """
+
+ # Divergence API
+ def isConvergent():
+ """
+ Returns the simulation movement is convergent
+ or not, with related the delivery
+ """
+
+ def isDivergent():
+ """
+ Returns the simulation movement is divergent
+ or not, to related the delivery
+ """
+
+ def getDivergenceList():
+ """
+ Returns listed divergences which is made by tester
+ of parent applied rule
+ Each divergence has why the delivery was judged
+ """
+
+ def isFrozen():
+ """
+ Returns status of the simulation movement, it is
+ frozen or not, once it is frozen, all operations
+ can not change anything of the simulation movement
+ """
+
+ def isSimulated():
+ """
+ Returns the simulation movement is simulated or not
+ When the simulation movement is simulated, all operations
+ can not remove it, but can update, because related delivery
+ to be orphan, if can remove it
+ """
+
More information about the Erp5-report
mailing list