Commit 5520e999 authored by Cédric de Saint Martin's avatar Cédric de Saint Martin

Merge branch 'master' into ui_test

parents 672eb2f4 70dd1be7
Changes Changes
======= =======
0.19 (unreleased) 0.22 (unreleased)
----------------- -----------------
* No changes yet. * No changes yet.
0.21 (2011-12-23)
-----------------
* slap: Add renaming API. [Antoine Catton]
0.20 (2011-11-24)
-----------------
* slapgrid: Support service-less parttions. [Antoine Catton]
* slapgrid: Avoid gid collision while dropping privileges. [Antoine Catton]
* slapgrid: Drop down network usage during usage reporting. [Łukasz Nowak]
* general: Add sphinx documentation. [Romain Courteaud]
0.19 (2011-11-07)
-----------------
* bang: Executable to be called by being banged computer. [Łukasz Nowak]
0.18 (2011-10-18) 0.18 (2011-10-18)
----------------- -----------------
......
0.21
- have only one file with current version
- move more documentation to sphinx (for tools)
- cleanup pypi page formatting
# -*- coding: utf-8 -*-
#
# slapos.core documentation build configuration file, created by
# sphinx-quickstart on Mon Nov 14 17:03:02 2011.
#
# This file is execfile()d with the current directory set to its containing dir.
#
# Note that not all possible configuration values are present in this
# autogenerated file.
#
# All configuration values have a default; values that are commented out
# serve to show the default.
import sys, os
# If extensions (or modules to document with autodoc) are in another directory,
# add these directories to sys.path here. If the directory is relative to the
# documentation root, use os.path.abspath to make it absolute, like shown here.
sys.path.append(os.path.abspath('../../'))
# -- General configuration -----------------------------------------------------
# Add any Sphinx extension module names here, as strings. They can be extensions
# coming with Sphinx (named 'sphinx.ext.*') or your custom ones.
extensions = ['sphinx.ext.autodoc', 'sphinx.ext.intersphinx', 'sphinx.ext.ifconfig', 'repoze.sphinx.autointerface']
# Add any paths that contain templates here, relative to this directory.
# templates_path = ['_templates']
# The suffix of source filenames.
source_suffix = '.rst'
# The encoding of source files.
#source_encoding = 'utf-8'
# The master toctree document.
master_doc = 'index'
# General information about the project.
project = u'slapos.core'
copyright = u'2011, Vifib'
# The version info for the project you're documenting, acts as replacement for
# |version| and |release|, also used in various other places throughout the
# built documents.
#
# The short X.Y version.
version = '0.21-dev'
# The full version, including alpha/beta/rc tags.
release = '0.21-dev'
# The language for content autogenerated by Sphinx. Refer to documentation
# for a list of supported languages.
#language = None
# There are two options for replacing |today|: either, you set today to some
# non-false value, then it is used:
#today = ''
# Else, today_fmt is used as the format for a strftime call.
#today_fmt = '%B %d, %Y'
# List of documents that shouldn't be included in the build.
#unused_docs = []
# List of directories, relative to source directory, that shouldn't be searched
# for source files.
exclude_trees = []
# The reST default role (used for this markup: `text`) to use for all documents.
#default_role = None
# If true, '()' will be appended to :func: etc. cross-reference text.
#add_function_parentheses = True
# If true, the current module name will be prepended to all description
# unit titles (such as .. function::).
#add_module_names = True
# If true, sectionauthor and moduleauthor directives will be shown in the
# output. They are ignored by default.
#show_authors = False
# The name of the Pygments (syntax highlighting) style to use.
pygments_style = 'sphinx'
# A list of ignored prefixes for module index sorting.
#modindex_common_prefix = []
# -- Options for HTML output ---------------------------------------------------
# The theme to use for HTML and HTML Help pages. Major themes that come with
# Sphinx are currently 'default' and 'sphinxdoc'.
html_theme = 'default'
# Theme options are theme-specific and customize the look and feel of a theme
# further. For a list of options available for each theme, see the
# documentation.
#html_theme_options = {}
# Add any paths that contain custom themes here, relative to this directory.
#html_theme_path = []
# The name for this set of Sphinx documents. If None, it defaults to
# "<project> v<release> documentation".
#html_title = None
# A shorter title for the navigation bar. Default is the same as html_title.
#html_short_title = None
# The name of an image file (relative to this directory) to place at the top
# of the sidebar.
#html_logo = None
# The name of an image file (within the static path) to use as favicon of the
# docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32
# pixels large.
#html_favicon = None
# Add any paths that contain custom static files (such as style sheets) here,
# relative to this directory. They are copied after the builtin static files,
# so a file named "default.css" will overwrite the builtin "default.css".
# html_static_path = ['_static']
# If not '', a 'Last updated on:' timestamp is inserted at every page bottom,
# using the given strftime format.
#html_last_updated_fmt = '%b %d, %Y'
# If true, SmartyPants will be used to convert quotes and dashes to
# typographically correct entities.
#html_use_smartypants = True
# Custom sidebar templates, maps document names to template names.
#html_sidebars = {}
# Additional templates that should be rendered to pages, maps page names to
# template names.
#html_additional_pages = {}
# If false, no module index is generated.
#html_use_modindex = True
# If false, no index is generated.
#html_use_index = True
# If true, the index is split into individual pages for each letter.
#html_split_index = False
# If true, links to the reST sources are added to the pages.
#html_show_sourcelink = True
# If true, an OpenSearch description file will be output, and all pages will
# contain a <link> tag referring to it. The value of this option must be the
# base URL from which the finished HTML is served.
#html_use_opensearch = ''
# If nonempty, this is the file name suffix for HTML files (e.g. ".xhtml").
#html_file_suffix = ''
# Output file base name for HTML help builder.
htmlhelp_basename = 'slaposcoredoc'
# -- Options for LaTeX output --------------------------------------------------
# The paper size ('letter' or 'a4').
#latex_paper_size = 'letter'
# The font size ('10pt', '11pt' or '12pt').
#latex_font_size = '10pt'
# Grouping the document tree into LaTeX files. List of tuples
# (source start file, target name, title, author, documentclass [howto/manual]).
latex_documents = [
('index', 'slaposcore.tex', u'slapos.core Documentation',
u'Vifib', 'manual'),
]
# The name of an image file (relative to this directory) to place at the top of
# the title page.
#latex_logo = None
# For "manual" documents, if this is true, then toplevel headings are parts,
# not chapters.
#latex_use_parts = False
# Additional stuff for the LaTeX preamble.
#latex_preamble = ''
# Documents to append as an appendix to all manuals.
#latex_appendices = []
# If false, no module index is generated.
#latex_use_modindex = True
# Example configuration for intersphinx: refer to the Python standard library.
intersphinx_mapping = {'http://docs.python.org/': None}
.. slapos.core documentation master file, created by
sphinx-quickstart on Mon Nov 14 17:03:02 2011.
You can adapt this file completely to your liking, but it should at least
contain the root `toctree` directive.
Welcome to slapos.core's documentation!
=======================================
Contents:
.. toctree::
:maxdepth: 2
rest.rst
slap.rst
tioformat.rst
Indices and tables
==================
* :ref:`genindex`
* :ref:`modindex`
* :ref:`search`
This diff is collapsed.
slap interface documentation
****************************
.. autointerface:: slapos.slap.interface.slap.IException
:members:
:undoc-members:
.. autointerface:: slapos.slap.interface.slap.INotFoundError
:members:
:undoc-members:
.. autointerface:: slapos.slap.interface.slap.IUnauthorized
:members:
:undoc-members:
.. autointerface:: slapos.slap.interface.slap.IRequester
:members:
:undoc-members:
.. autointerface:: slapos.slap.interface.slap.IBuildoutController
:members:
:undoc-members:
.. autointerface:: slapos.slap.interface.slap.ISoftwareRelease
:members:
:undoc-members:
.. autointerface:: slapos.slap.interface.slap.IComputerPartition
:members:
:undoc-members:
.. autointerface:: slapos.slap.interface.slap.IComputer
:members:
:undoc-members:
.. autointerface:: slapos.slap.interface.slap.IOpenOrder
:members:
:undoc-members:
.. autointerface:: slapos.slap.interface.slap.ISupply
:members:
:undoc-members:
.. autointerface:: slapos.slap.interface.slap.slap
:members:
:undoc-members:
Tio Format
**********
What is TioFormat?
------------------
TIO is a data format used to provide informations about consumption, invoicing
and state history.
XSD
---
`TioFormat XSD`::
<?xml version="1.0" encoding="utf-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<!-- Define the XML Schema of a transaction -->
<xs:element name="journal">
<xs:complexType>
<xs:sequence>
<xs:element name="transaction" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="title" type="xs:string" minOccurs="0"/>
<xs:element name="start_date" type="xs:string"/>
<xs:element name="stop_date" type="xs:string"/>
<xs:element name="reference" type="xs:string"/>
<xs:element name="currency" type="xs:string"/>
<xs:element name="payment_mode" type="xs:string"/>
<xs:element name="category" type="xs:string" minOccurs="0" maxOccurs="unbounded"/>
<xs:element name="arrow" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="source" type="xs:string" minOccurs="0"/>
<xs:element name="destination" type="xs:string" minOccurs="0"/>
</xs:sequence>
<xs:attribute name="type" use="required"/>
</xs:complexType>
</xs:element>
<xs:element name="movement" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="resource" type="xs:string"/>
<xs:element name="title" type="xs:string" minOccurs="0"/>
<xs:element name="reference" type="xs:string" minOccurs="0"/>
<xs:element name="quantity" type="xs:float"/>
<xs:element name="price" type="xs:float"/>
<xs:element name="VAT" type="xs:string"/>
<xs:element name="category" type="xs:string" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute name="type" use="required"/>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
Schema Components
-----------------
Element: ``journal``
++++++++++++++++++++
=============== =======
`Name` journal
`Type` journal
`Documentation` journal is the root element in the XML file
=============== =======
`Schema Component Representation`::
<xs:element name="journal">
Complex Type: ``journal``
+++++++++++++++++++++++++
=============== =======
`Name` journal
`Documentation` Tio document contains transactions
=============== =======
`Schema Component Representation`::
<xs:complexType>
<xs:sequence>
<xs:element name="transaction" maxOccurs="unbounded">
</xs:element>
</xs:sequence>
</xs:complexType>
Complex Type: ``transaction``
+++++++++++++++++++++++++++++
=============== =======
`Name` transaction
`Documentation` transaction contains a title, a start_date, a stop_date, a reference, a currency, a payment mode, some categories, some arrows and a list of movement.
=============== =======
`Schema Component Representation`::
<xs:complexType>
<xs:sequence>
<xs:element name="title" type="xs:string" minOccurs="0"/>
<xs:element name="start_date" type="xs:string"/>
<xs:element name="stop_date" type="xs:string"/>
<xs:element name="reference" type="xs:string"/>
<xs:element name="currency" type="xs:string"/>
<xs:element name="payment_mode" type="xs:string"/>
<xs:element name="category" type="xs:string" minOccurs="0" maxOccurs="unbounded"/>
<xs:element name="arrow" maxOccurs="unbounded">
</xs:element>
<xs:element name="movement" maxOccurs="unbounded">
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute name="type" use="required"/>
</xs:complexType>
Element: ``title``
++++++++++++++++++
=============== =======
`Name` title
`Type` string
`Documentation` title is the name of the transaction
=============== =======
`Schema Component Representation`::
<xs:element name="title" type="xs:string" minOccurs="0"/>
Element: ``start_date``
+++++++++++++++++++++++
=============== =======
`Name` start_date
`Type` string
`Documentation` the date at which a service started
=============== =======
`Schema Component Representation`::
<xs:element name="start_date" type="xs:string"/>
Element: ``stop_date``
++++++++++++++++++++++
=============== =======
`Name` stop_date
`Type` string
`Documentation` the date at which a service was completed
=============== =======
`Schema Component Representation`::
<xs:element name="stop_date" type="xs:string"/>
Element: ``reference``
++++++++++++++++++++++
=============== =======
`Name` reference
`Type` string
`Documentation` absolute reference of the transaction
=============== =======
`Schema Component Representation`::
<xs:element name="reference" type="xs:string"/>
Element: ``currency``
+++++++++++++++++++++
=============== =======
`Name` currency
`Type` string
`Documentation` currency used in the transaction
=============== =======
`Schema Component Representation`::
<xs:element name="currency" type="xs:string"/>
Element: ``payment_mode``
+++++++++++++++++++++++++
=============== =======
`Name` payment_mode
`Type` string
`Documentation` payment mode of the transaction
=============== =======
`Schema Component Representation`::
<xs:element name="payment_mode" type="xs:string"/>
Element: ``category``
+++++++++++++++++++++
=============== =======
`Name` category
`Type` string
`Documentation` To add your own category section in the transaction
=============== =======
`Schema Component Representation`::
<xs:element name="category" type="xs:string" minOccurs="0" maxOccurs="unbounded"/>
Element: ``arrow``
++++++++++++++++++
=============== =======
`Name` arrow
`Type` arrow
`Documentation` represents who provided a service to somebody else
=============== =======
`Schema Component Representation`::
<xs:element name="arrow" maxOccurs="unbounded">
Complex Type: ``arrow``
+++++++++++++++++++++++
=============== =======
`Name` arrow
`Documentation` contains a source and a destination.
=============== =======
`Schema Component Representation`::
<xs:complexType>
<xs:sequence>
<xs:element name="source" type="xs:string" minOccurs="0"/>
<xs:element name="destination" type="xs:string" minOccurs="0"/>
</xs:sequence>
<xs:attribute name="type" use="required"/>
</xs:complexType>
Element: ``source``
+++++++++++++++++++
=============== =======
`Name` source
`Type` string
`Documentation` who provided the service
=============== =======
`Schema Component Representation`::
<xs:element name="source" type="xs:string" minOccurs="0"/>
Element: ``destination``
++++++++++++++++++++++++
=============== =======
`Name` destination
`Type` string
`Documentation` who received the service
=============== =======
`Schema Component Representation`::
<xs:element name="destination" type="xs:string" minOccurs="0"/>
Element: ``movement``
+++++++++++++++++++++
=============== =======
`Name` movement
`Type` movement
`Documentation` represents how much service exchanged in the transaction
=============== =======
`Schema Component Representation`::
<xs:element name="movement" maxOccurs="unbounded">
Complex Type: ``movement``
++++++++++++++++++++++++++
=============== =======
`Name` movement
`Documentation` contains a resource, a title, a reference, a quantity, a price, a VAT and some categories
=============== =======
`Schema Component Representation`::
<xs:complexType>
<xs:sequence>
<xs:element name="resource" type="xs:string"/>
<xs:element name="title" type="xs:string" minOccurs="0"/>
<xs:element name="reference" type="xs:string" minOccurs="0"/>
<xs:element name="quantity" type="xs:float"/>
<xs:element name="price" type="xs:float"/>
<xs:element name="VAT" type="xs:string"/>
<xs:element name="category" type="xs:string" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
Element: ``resource``
+++++++++++++++++++++
=============== =======
`Name` resource
`Type` string
`Documentation` represents the kind of service provided
=============== =======
`Schema Component Representation`::
<xs:element name="resource" type="xs:string"/>
Element: ``quantity``
+++++++++++++++++++++
=============== =======
`Name` quantity
`Type` float
`Documentation` represents the amount of service exchanged
=============== =======
`Schema Component Representation`::
<xs:element name="quantity" type="xs:string"/>
Element: ``price``
++++++++++++++++++
=============== =======
`Name` price
`Type` float
`Documentation` represents the price of service exchanged
=============== =======
`Schema Component Representation`::
<xs:element name="price" type="xs:string"/>
Element: ``VAT``
++++++++++++++++
=============== =======
`Name` VAT
`Type` string
`Documentation` represents the VAT of service exchanged
=============== =======
`Schema Component Representation`::
<xs:element name="VAT" type="xs:string"/>
...@@ -58,7 +58,7 @@ portal = context.getPortalObject() \n ...@@ -58,7 +58,7 @@ portal = context.getPortalObject() \n
\n \n
## Create new portal tool for Vifib\n ## Create new portal tool for Vifib\n
if getattr(portal, "portal_certificate_authority", None ) is None:\n if getattr(portal, "portal_certificate_authority", None ) is None:\n
portal.manage_addProduct[\'Vifib\'].manage_addTool(\'ERP5 Certificate Authority Tool\', None)\n portal.manage_addProduct[\'ERP5\'].manage_addTool(\'ERP5 Certificate Authority Tool\', None)\n
print "Created portal_certificate_authority"\n print "Created portal_certificate_authority"\n
else:\n else:\n
print "portal_certificate_authority already exists."\n print "portal_certificate_authority already exists."\n
......
...@@ -52,61 +52,70 @@ ...@@ -52,61 +52,70 @@
<key> <string>_body</string> </key> <key> <string>_body</string> </key>
<value> <string>configuration_save = context.restrictedTraverse(configuration_save_url)\n <value> <string>configuration_save = context.restrictedTraverse(configuration_save_url)\n
\n \n
bt5_installation_list = ( \n bt5_installation_list = (\n
\'erp5_simulation\', \n \'erp5_simulation\',\n
\'erp5_administration\', \n \'erp5_administration\',\n
\'erp5_pdm\', \n \'erp5_pdm\',\n
\'erp5_trade\', \n \'erp5_trade\',\n
\'erp5_simulation_test\', \n \'erp5_simulation_test\',\n
\'erp5_item\', \n \'erp5_item\',\n
\'erp5_open_trade\',\n \'erp5_open_trade\',\n
\'erp5_forge\', \n \'erp5_forge\',\n
\'erp5_ingestion_mysql_innodb_catalog\', \n \'erp5_ingestion_mysql_innodb_catalog\',\n
\'erp5_ingestion\', \n \'erp5_ingestion\',\n
\'erp5_crm\', \n \'erp5_crm\',\n
\'erp5_jquery\', \n \'erp5_jquery\',\n
\'erp5_jquery_ui\', \n \'erp5_jquery_ui\',\n
\'erp5_knowledge_pad\', \n \'erp5_dhtml_style\',\n
\'erp5_web\', \n \'erp5_knowledge_pad\',\n
\'erp5_dms\', \n \'erp5_web\',\n
\'erp5_l10n_fr\', \n \'erp5_dms\',\n
\'erp5_content_translation\', \n \'erp5_l10n_fr\',\n
\'erp5_software_pdm\', \n \'erp5_content_translation\',\n
\'erp5_computer_immobilisation\', \n \'erp5_software_pdm\',\n
\'erp5_accounting\', \n \'erp5_computer_immobilisation\',\n
\'erp5_accounting_l10n_fr\', \n \'erp5_accounting\',\n
\'erp5_tax_resource\', \n \'erp5_accounting_l10n_fr\',\n
\'erp5_discount_resource\', \n \'erp5_tax_resource\',\n
\'erp5_invoicing\', \n \'erp5_discount_resource\',\n
\'erp5_ods_style\', \n \'erp5_invoicing\',\n
\'erp5_odt_style\', \n \'erp5_ods_style\',\n
\'erp5_ooo_import\', \n \'erp5_odt_style\',\n
\'erp5_simplified_invoicing\', \n \'erp5_ooo_import\',\n
\'erp5_legacy_tax_system\', \n \'erp5_simplified_invoicing\',\n
\'erp5_commerce\', \n \'erp5_legacy_tax_system\',\n
\'erp5_project\', \n \'erp5_commerce\',\n
\'erp5_xhtml_jquery_style\', \n \'erp5_project\',\n
\'erp5_credential\', \n \'erp5_xhtml_jquery_style\',\n
\'erp5_km\', \n \'erp5_credential\',\n
\'erp5_web_download_theme\', \n \'erp5_km\',\n
\'vifib_mysql_innodb_catalog\', \n \'erp5_web_download_theme\',\n
\'vifib_core\', \n \'erp5_tiosafe_core\',\n
\'vifib_base\', \n \'erp5_system_event\',\n
\'vifib_slap\', \n \'erp5_secure_payment\',\n
\'vifib_crm\', \n \'erp5_payzen_secure_payment\',\n
\'vifib_forge_release\', \n \'vifib_mysql_innodb_catalog\',\n
\'vifib_software_pdm\', \n \'vifib_core\',\n
\'vifib_base\',\n
\'vifib_slap\',\n
\'vifib_crm\',\n
\'vifib_forge_release\',\n
\'vifib_software_pdm\',\n
\'vifib_web\',\n \'vifib_web\',\n
\'vifib_open_trade\', \n \'vifib_open_trade\',\n
\'vifib_l10n_fr\',\n \'vifib_l10n_fr\',\n
\'vifib_data\',\n \'vifib_data\',\n
\'vifib_data_web\',\n
\'vifib_data_category\',\n \'vifib_data_category\',\n
\'vifib_erp5\'\n \'vifib_data_web\',\n
\'vifib_payzen\',\n
\'vifib_data_payzen\',\n
\'vifib_data_simulation\',\n
\'vifib_erp5\',\n
\'vifib_test\',\n
)\n )\n
\n \n
bt5_update_catalog = (\'erp5_ingestion_mysql_innodb_catalog\', \n bt5_update_catalog = (\'erp5_ingestion_mysql_innodb_catalog\',\n
\'vifib_mysql_innodb_catalog\', \n \'vifib_mysql_innodb_catalog\',\n
\'erp5_content_translation\')\n \'erp5_content_translation\')\n
\n \n
for name in bt5_installation_list:\n for name in bt5_installation_list:\n
......
15 24
\ No newline at end of file \ No newline at end of file
Vifib 0.2 Vifib 0.5
\ No newline at end of file \ No newline at end of file
...@@ -13,5 +13,6 @@ ...@@ -13,5 +13,6 @@
<item>SoftwareInstance</item> <item>SoftwareInstance</item>
<item>SoftwareInstanceConstraint</item> <item>SoftwareInstanceConstraint</item>
<item>TextDocument</item> <item>TextDocument</item>
<item>VariationRange</item>
</portal_type> </portal_type>
</property_sheet_list> </property_sheet_list>
\ No newline at end of file
...@@ -85,6 +85,12 @@ ...@@ -85,6 +85,12 @@
<key> <string>type_class</string> </key> <key> <string>type_class</string> </key>
<value> <string>SoftwareInstance</string> </value> <value> <string>SoftwareInstance</string> </value>
</item> </item>
<item>
<key> <string>type_interface</string> </key>
<value>
<tuple/>
</value>
</item>
<item> <item>
<key> <string>type_mixin</string> </key> <key> <string>type_mixin</string> </key>
<value> <value>
......
...@@ -62,10 +62,11 @@ elif slap_state == \'busy\':\n ...@@ -62,10 +62,11 @@ elif slap_state == \'busy\':\n
\n \n
# Partition under destruction does not accept new slave\n # Partition under destruction does not accept new slave\n
try:\n try:\n
delivery_line = context.Item_getInstancePackingListLine(service_relative_url=portal_preferences.getPreferredInstanceCleanupResource())\n delivery_line = context.Item_getInstancePackingListLine(service_relative_url=portal_preferences.getPreferredInstanceCleanupResource(), aggregate_portal_type=\'Software Instance\')\n
except ValueError:\n except ValueError:\n
pass\n pass\n
else:\n else:\n
if delivery_line.getSimulationState() != \'delivered\':\n
return []\n return []\n
\n \n
try:\n try:\n
......
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="ERP5Form" module="Products.ERP5Form.Form"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_bind_names</string> </key>
<value>
<object>
<klass>
<global name="NameAssignments" module="Shared.DC.Scripts.Bindings"/>
</klass>
<tuple/>
<state>
<dictionary>
<item>
<key> <string>_asgns</string> </key>
<value>
<dictionary/>
</value>
</item>
</dictionary>
</state>
</object>
</value>
</item>
<item>
<key> <string>_objects</string> </key>
<value>
<tuple/>
</value>
</item>
<item>
<key> <string>action</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>description</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>edit_order</string> </key>
<value>
<list/>
</value>
</item>
<item>
<key> <string>encoding</string> </key>
<value> <string>UTF-8</string> </value>
</item>
<item>
<key> <string>enctype</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>group_list</string> </key>
<value>
<list>
<string>left</string>
<string>right</string>
<string>center</string>
<string>bottom</string>
<string>hidden</string>
</list>
</value>
</item>
<item>
<key> <string>groups</string> </key>
<value>
<dictionary>
<item>
<key> <string>bottom</string> </key>
<value>
<list>
<string>listbox</string>
</list>
</value>
</item>
<item>
<key> <string>center</string> </key>
<value>
<list/>
</value>
</item>
<item>
<key> <string>hidden</string> </key>
<value>
<list>
<string>listbox_link</string>
</list>
</value>
</item>
<item>
<key> <string>left</string> </key>
<value>
<list/>
</value>
</item>
<item>
<key> <string>right</string> </key>
<value>
<list/>
</value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>ERP5Site_viewWorklist</string> </value>
</item>
<item>
<key> <string>method</string> </key>
<value> <string>POST</string> </value>
</item>
<item>
<key> <string>name</string> </key>
<value> <string>ERP5Site_viewWorklist</string> </value>
</item>
<item>
<key> <string>pt</string> </key>
<value> <string>form_list</string> </value>
</item>
<item>
<key> <string>row_length</string> </key>
<value> <int>4</int> </value>
</item>
<item>
<key> <string>stored_encoding</string> </key>
<value> <string>UTF-8</string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>Worklists</string> </value>
</item>
<item>
<key> <string>unicode_mode</string> </key>
<value> <int>0</int> </value>
</item>
<item>
<key> <string>update_action</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>update_action_title</string> </key>
<value> <string></string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
...@@ -61,6 +61,9 @@ portal = item.getPortalObject()\n ...@@ -61,6 +61,9 @@ portal = item.getPortalObject()\n
portal_preferences = portal.portal_preferences\n portal_preferences = portal.portal_preferences\n
service_uid_list = []\n service_uid_list = []\n
\n \n
if aggregate_portal_type is None:\n
aggregate_portal_type = [\'Software Instance\', \'Slave Instance\']\n
\n
if service_relative_url is None:\n if service_relative_url is None:\n
for service_relative_url in \\\n for service_relative_url in \\\n
(portal_preferences.getPreferredInstanceSetupResource(),\n (portal_preferences.getPreferredInstanceSetupResource(),\n
...@@ -86,6 +89,7 @@ packing_list_line = portal.portal_catalog.getResultValue(\n ...@@ -86,6 +89,7 @@ packing_list_line = portal.portal_catalog.getResultValue(\n
default_resource_uid=service_uid_list,\n default_resource_uid=service_uid_list,\n
sort_on=((\'movement.start_date\', \'DESC\'),),\n sort_on=((\'movement.start_date\', \'DESC\'),),\n
limit=1,\n limit=1,\n
aggregate_portal_type=aggregate_portal_type\n
)\n )\n
\n \n
if packing_list_line is None:\n if packing_list_line is None:\n
...@@ -97,7 +101,7 @@ else:\n ...@@ -97,7 +101,7 @@ else:\n
</item> </item>
<item> <item>
<key> <string>_params</string> </key> <key> <string>_params</string> </key>
<value> <string>service_relative_url=None</string> </value> <value> <string>service_relative_url=None, aggregate_portal_type=None</string> </value>
</item> </item>
<item> <item>
<key> <string>id</string> </key> <key> <string>id</string> </key>
......
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="Folder" module="OFS.Folder"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_local_properties</string> </key>
<value>
<tuple>
<dictionary>
<item>
<key> <string>id</string> </key>
<value> <string>business_template_skin_layer_priority</string> </value>
</item>
<item>
<key> <string>type</string> </key>
<value> <string>float</string> </value>
</item>
</dictionary>
</tuple>
</value>
</item>
<item>
<key> <string>_objects</string> </key>
<value>
<tuple/>
</value>
</item>
<item>
<key> <string>business_template_skin_layer_priority</string> </key>
<value> <float>60.0</float> </value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>vifib_simulation</string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string></string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="PythonScript" module="Products.PythonScripts.PythonScript"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>Script_magic</string> </key>
<value> <int>3</int> </value>
</item>
<item>
<key> <string>_bind_names</string> </key>
<value>
<object>
<klass>
<global name="NameAssignments" module="Shared.DC.Scripts.Bindings"/>
</klass>
<tuple/>
<state>
<dictionary>
<item>
<key> <string>_asgns</string> </key>
<value>
<dictionary>
<item>
<key> <string>name_container</string> </key>
<value> <string>container</string> </value>
</item>
<item>
<key> <string>name_context</string> </key>
<value> <string>context</string> </value>
</item>
<item>
<key> <string>name_m_self</string> </key>
<value> <string>script</string> </value>
</item>
<item>
<key> <string>name_subpath</string> </key>
<value> <string>traverse_subpath</string> </value>
</item>
</dictionary>
</value>
</item>
</dictionary>
</state>
</object>
</value>
</item>
<item>
<key> <string>_body</string> </key>
<value> <string>from Products.ERP5Type.Message import translateString\n
\n
if REQUEST is not None:\n
from zExceptions import Unauthorized\n
raise Unauthorized(script.id)\n
\n
packing_list = context\n
\n
# Modify state\n
packing_list_state = packing_list.getSimulationState()\n
if packing_list_state == "confirmed":\n
packing_list.start()\n
</string> </value>
</item>
<item>
<key> <string>_params</string> </key>
<value> <string>REQUEST=None, **kw</string> </value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>Delivery_startConfirmedSalePackingList</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="PythonScript" module="Products.PythonScripts.PythonScript"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>Script_magic</string> </key>
<value> <int>3</int> </value>
</item>
<item>
<key> <string>_bind_names</string> </key>
<value>
<object>
<klass>
<global name="NameAssignments" module="Shared.DC.Scripts.Bindings"/>
</klass>
<tuple/>
<state>
<dictionary>
<item>
<key> <string>_asgns</string> </key>
<value>
<dictionary>
<item>
<key> <string>name_container</string> </key>
<value> <string>container</string> </value>
</item>
<item>
<key> <string>name_context</string> </key>
<value> <string>context</string> </value>
</item>
<item>
<key> <string>name_m_self</string> </key>
<value> <string>script</string> </value>
</item>
<item>
<key> <string>name_subpath</string> </key>
<value> <string>traverse_subpath</string> </value>
</item>
</dictionary>
</value>
</item>
</dictionary>
</state>
</object>
</value>
</item>
<item>
<key> <string>_body</string> </key>
<value> <string>movement = context\n
\n
if movement.getExplanationValue().getPortalType().startswith(\'Purchase\'):\n
# Vifib case: Purchase Business Process is minimalistic and does not care about\n
# invoice (and deeper parts of tree)\n
# But when this rule would get applied, it will try to create 0 simulation movements\n
# and code inside of BusinessProcess.py would raise "ValueError: A Business Process can not erase amounts"\n
# So just do not apply the rule in such case.\n
return False\n
source_section = movement.getSourceSection()\n
destination_section = movement.getDestinationSection()\n
if source_section == destination_section or source_section is None \\\n
or destination_section is None:\n
return False\n
\n
return True\n
</string> </value>
</item>
<item>
<key> <string>_params</string> </key>
<value> <string>rule</string> </value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>SimulationMovement_testInvoiceSimulationRule</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="PythonScript" module="Products.PythonScripts.PythonScript"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>Script_magic</string> </key>
<value> <int>3</int> </value>
</item>
<item>
<key> <string>_bind_names</string> </key>
<value>
<object>
<klass>
<global name="NameAssignments" module="Shared.DC.Scripts.Bindings"/>
</klass>
<tuple/>
<state>
<dictionary>
<item>
<key> <string>_asgns</string> </key>
<value>
<dictionary>
<item>
<key> <string>name_container</string> </key>
<value> <string>container</string> </value>
</item>
<item>
<key> <string>name_context</string> </key>
<value> <string>context</string> </value>
</item>
<item>
<key> <string>name_m_self</string> </key>
<value> <string>script</string> </value>
</item>
<item>
<key> <string>name_subpath</string> </key>
<value> <string>traverse_subpath</string> </value>
</item>
</dictionary>
</value>
</item>
</dictionary>
</state>
</object>
</value>
</item>
<item>
<key> <string>_body</string> </key>
<value> <string>movement = context\n
\n
delivery_movement = movement.getDeliveryValue()\n
if delivery_movement is not None and (\n
delivery_movement.getPortalType() not in movement.getPortalInvoiceMovementTypeList()\n
and delivery_movement.getPortalType() not in movement.getPortalTaxMovementTypeList()):\n
return False\n
\n
return True\n
</string> </value>
</item>
<item>
<key> <string>_params</string> </key>
<value> <string>rule</string> </value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>SimulationMovement_testInvoiceTransactionSimulationRule</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="PythonScript" module="Products.PythonScripts.PythonScript"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>Script_magic</string> </key>
<value> <int>3</int> </value>
</item>
<item>
<key> <string>_bind_names</string> </key>
<value>
<object>
<klass>
<global name="NameAssignments" module="Shared.DC.Scripts.Bindings"/>
</klass>
<tuple/>
<state>
<dictionary>
<item>
<key> <string>_asgns</string> </key>
<value>
<dictionary>
<item>
<key> <string>name_container</string> </key>
<value> <string>container</string> </value>
</item>
<item>
<key> <string>name_context</string> </key>
<value> <string>context</string> </value>
</item>
<item>
<key> <string>name_m_self</string> </key>
<value> <string>script</string> </value>
</item>
<item>
<key> <string>name_subpath</string> </key>
<value> <string>traverse_subpath</string> </value>
</item>
</dictionary>
</value>
</item>
</dictionary>
</state>
</object>
</value>
</item>
<item>
<key> <string>_body</string> </key>
<value> <string>movement = context\n
\n
# XXX hardcoded\n
receivable_account_type_list = (\'asset/receivable\',)\n
payable_account_type_list = (\'liability/payable\',)\n
\n
for account in (movement.getSourceValue(portal_type=\'Account\'),\n
movement.getDestinationValue(portal_type=\'Account\')):\n
if account is not None:\n
account_type = account.getAccountType()\n
if account_type in receivable_account_type_list or \\\n
account_type in payable_account_type_list:\n
return True\n
\n
return False\n
</string> </value>
</item>
<item>
<key> <string>_params</string> </key>
<value> <string>rule</string> </value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>SimulationMovement_testPaymentSimulationRule</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="PythonScript" module="Products.PythonScripts.PythonScript"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>Script_magic</string> </key>
<value> <int>3</int> </value>
</item>
<item>
<key> <string>_bind_names</string> </key>
<value>
<object>
<klass>
<global name="NameAssignments" module="Shared.DC.Scripts.Bindings"/>
</klass>
<tuple/>
<state>
<dictionary>
<item>
<key> <string>_asgns</string> </key>
<value>
<dictionary>
<item>
<key> <string>name_container</string> </key>
<value> <string>container</string> </value>
</item>
<item>
<key> <string>name_context</string> </key>
<value> <string>context</string> </value>
</item>
<item>
<key> <string>name_m_self</string> </key>
<value> <string>script</string> </value>
</item>
<item>
<key> <string>name_subpath</string> </key>
<value> <string>traverse_subpath</string> </value>
</item>
</dictionary>
</value>
</item>
</dictionary>
</state>
</object>
</value>
</item>
<item>
<key> <string>_body</string> </key>
<value> <string>portal_type = context.getDeliveryPortalType()\n
simulation_state = \'planned\'\n
# use catalog to prefetch, but check later in ZODB\n
return [x.getObject() for x in context.getPortalObject().portal_catalog(\n
portal_type=portal_type,\n
simulation_state=simulation_state) if x.getSimulationState() == simulation_state]\n
</string> </value>
</item>
<item>
<key> <string>_params</string> </key>
<value> <string>**kw</string> </value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>VifibDeliveryBuilder_selectPlannedDeliveryList</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
...@@ -50,22 +50,11 @@ ...@@ -50,22 +50,11 @@
</item> </item>
<item> <item>
<key> <string>_body</string> </key> <key> <string>_body</string> </key>
<value> <string encoding="cdata"><![CDATA[ <value> <string>"""This script is called on the Invoice after the delivery builder has created\n
"""This script is called on the Invoice after the delivery builder has created\n
the new Invoice.\n the new Invoice.\n
"""\n """\n
from Products.ERP5Type.Message import translateString\n from Products.ERP5Type.Message import translateString\n
\n from DateTime import DateTime\n
try:\n
from Products.CMFCore.WorkflowCore import WorkflowException\n
except ImportError:\n
# WorkflowException has not always been allowed in restricted\n
# environment, in this case, make sure WorkflowException is \n
# defined \n
class WorkflowException(Exception):\n
pass\n
\n
if related_simulation_movement_path_list is None:\n if related_simulation_movement_path_list is None:\n
raise RuntimeError, \'related_simulation_movement_path_list is missing. Update ERP5 Product.\'\n raise RuntimeError, \'related_simulation_movement_path_list is missing. Update ERP5 Product.\'\n
\n \n
...@@ -76,42 +65,43 @@ if not invoice.Invoice_isAdvanced():\n ...@@ -76,42 +65,43 @@ if not invoice.Invoice_isAdvanced():\n
if not invoice.getResource():\n if not invoice.getResource():\n
invoice.setResource(invoice.getPriceCurrency())\n invoice.setResource(invoice.getPriceCurrency())\n
\n \n
related_packing_list = invoice.getDefaultCausalityValue()\n if invoice.getStartDate() is None:\n
related_order = related_packing_list.getDefaultCausalityValue()\n invoice.setStartDate(DateTime())\n
\n
# copy payment conditions from packing list\n
# if missing, try to copy from order (for compatibility)\n
if not invoice.contentValues(portal_type=\'Payment Condition\'):\n
payment_condition_copy_id_list = []\n
if related_packing_list is not None:\n
payment_condition_copy_id_list = related_packing_list.contentIds(filter={\'portal_type\':\'Payment Condition\'})\n
if len(payment_condition_copy_id_list) > 0:\n
clipboard = related_packing_list.manage_copyObjects(ids=payment_condition_copy_id_list)\n
invoice.manage_pasteObjects(clipboard)\n
elif related_order is not None:\n
payment_condition_copy_id_list = related_order.contentIds(\n
filter={\'portal_type\':\'Payment Condition\'})\n
if len(payment_condition_copy_id_list) > 0:\n
clipboard = related_order.manage_copyObjects(ids=payment_condition_copy_id_list)\n
invoice.manage_pasteObjects(clipboard)\n
\n
# copy title, if not updating a new delivery\n
if not invoice.hasTitle() and related_packing_list.hasTitle():\n
invoice.setTitle(related_packing_list.getTitle())\n
\n \n
# initialize accounting_workflow to confirmed state\n # initialize accounting_workflow to planned state\n
plan_tag = \'%s_plan\' % invoice.getPath()\n
if invoice.getSimulationState() == \'draft\':\n if invoice.getSimulationState() == \'draft\':\n
invoice.plan(comment=translateString(\'Initialised by Delivery Builder.\'),)\n invoice.activate(after_path_and_method_id=(related_simulation_movement_path_list,\n
(\'immediateReindexObject\',\'recursiveImmediateReindexObject\')),\n
tag=plan_tag).plan(comment=translateString(\'Initialised by Delivery Builder.\'))\n
else:\n
# call builder just same as after script of \'plan\' transition\n
invoice.activate(after_path_and_method_id=(related_simulation_movement_path_list,\n
(\'immediateReindexObject\',\'recursiveImmediateReindexObject\')),\n
tag=plan_tag).Delivery_expandAndBuild()\n
\n \n
# First set the invoice in the building state on the causality workflow\n # First set the invoice in the building state on the causality workflow\n
invoice.startBuilding()\n invoice.startBuilding()\n
\n \n
# Then an activity should put the causality state in diverged or solved\n # Then an activity should put the causality state in diverged or solved\n
invoice.activate(after_path_and_method_id=(related_simulation_movement_path_list,\n invoice.activate(after_path_and_method_id=(related_simulation_movement_path_list,\n
(\'immediateReindexObject\',\'recursiveImmediateReindexObject\'))).updateCausalityState()\n (\'immediateReindexObject\',\'recursiveImmediateReindexObject\')),\n
after_tag=plan_tag).updateCausalityState()\n
\n
]]></string> </value> # update casuality from movements\n
causality_list = invoice.getCausalityList()\n
causality_list.sort()\n
modified = 0\n
for movement in invoice.getMovementList(portal_type=\'Invoice Line\'):\n
movement_causality = movement.getCausality()\n
if movement_causality not in causality_list:\n
modified = 1\n
causality_list.append(movement_causality)\n
\n
if modified:\n
causality_list.sort()\n
invoice.setCausalityList(causality_list)\n
</string> </value>
</item> </item>
<item> <item>
<key> <string>_params</string> </key> <key> <string>_params</string> </key>
...@@ -119,7 +109,7 @@ invoice.activate(after_path_and_method_id=(related_simulation_movement_path_list ...@@ -119,7 +109,7 @@ invoice.activate(after_path_and_method_id=(related_simulation_movement_path_list
</item> </item>
<item> <item>
<key> <string>id</string> </key> <key> <string>id</string> </key>
<value> <string>InvoiceTransaction_postGeneration</string> </value> <value> <string>VifibInvoiceTransaction_postGeneration</string> </value>
</item> </item>
</dictionary> </dictionary>
</pickle> </pickle>
......
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="PythonScript" module="Products.PythonScripts.PythonScript"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>Script_magic</string> </key>
<value> <int>3</int> </value>
</item>
<item>
<key> <string>_bind_names</string> </key>
<value>
<object>
<klass>
<global name="NameAssignments" module="Shared.DC.Scripts.Bindings"/>
</klass>
<tuple/>
<state>
<dictionary>
<item>
<key> <string>_asgns</string> </key>
<value>
<dictionary>
<item>
<key> <string>name_container</string> </key>
<value> <string>container</string> </value>
</item>
<item>
<key> <string>name_context</string> </key>
<value> <string>context</string> </value>
</item>
<item>
<key> <string>name_m_self</string> </key>
<value> <string>script</string> </value>
</item>
<item>
<key> <string>name_subpath</string> </key>
<value> <string>traverse_subpath</string> </value>
</item>
</dictionary>
</value>
</item>
</dictionary>
</state>
</object>
</value>
</item>
<item>
<key> <string>_body</string> </key>
<value> <string>#\n
# this script is called on the Invoice Transaction\n
# after the invoice_transaction_builder delivery builder\n
# created accounting lines in the invoice\n
# \n
\n
# Accounting specific: \n
# if every lines have the same resource, then copy the resource \n
# on the Transaction and delete resource on the lines.\n
# TODO: this is a Property Assignment Movement Group\n
\n
accounting_line_portal_type = context.getPortalAccountingMovementTypeList()\n
resources_keys = {}\n
for line in context.contentValues(portal_type=accounting_line_portal_type):\n
resources_keys[line.getResource()] = 1\n
\n
if len(resources_keys.keys()) == 1 :\n
# set the resource on the transaction\n
context.setResource(resources_keys.keys()[0])\n
# and delete on the invoice lines, so that if the user\n
# changes the ressource on the transaction, it also change on \n
# the lines. \n
for line in context.contentValues(portal_type=accounting_line_portal_type):\n
line.setResource(None)\n
assert(line.getResource() == context.getResource())\n
else :\n
raise ValueError, "%s doesn\'t have only one resource %s" % (\n
context.getPath(), resources_keys.keys())\n
\n
# round debit / credit on created transaction.\n
context.AccountingTransaction_roundDebitCredit()\n
</string> </value>
</item>
<item>
<key> <string>_params</string> </key>
<value> <string>related_simulation_movement_path_list=None, **kw</string> </value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>VifibInvoiceTransaction_postTransactionLineGeneration</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="PythonScript" module="Products.PythonScripts.PythonScript"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>Script_magic</string> </key>
<value> <int>3</int> </value>
</item>
<item>
<key> <string>_bind_names</string> </key>
<value>
<object>
<klass>
<global name="NameAssignments" module="Shared.DC.Scripts.Bindings"/>
</klass>
<tuple/>
<state>
<dictionary>
<item>
<key> <string>_asgns</string> </key>
<value>
<dictionary>
<item>
<key> <string>name_container</string> </key>
<value> <string>container</string> </value>
</item>
<item>
<key> <string>name_context</string> </key>
<value> <string>context</string> </value>
</item>
<item>
<key> <string>name_m_self</string> </key>
<value> <string>script</string> </value>
</item>
<item>
<key> <string>name_subpath</string> </key>
<value> <string>traverse_subpath</string> </value>
</item>
</dictionary>
</value>
</item>
</dictionary>
</state>
</object>
</value>
</item>
<item>
<key> <string>_body</string> </key>
<value> <string>#\n
# This method is used by the invoice_transaction_builder\n
# delivery builder to select the Invoice Transaction \n
# in which creating new Invoice Transaction Lines.\n
#\n
\n
deliveries_keys = {}\n
for movement in movement_list:\n
ar = movement.getParentValue()\n
line = None\n
\n
# case of tax movement \n
if ar.getSpecialiseValue().getPortalType() in (\'Tax Rule\', \'Tax Simulation Rule\'):\n
for other_rule in ar.getParentValue().contentValues():\n
if other_rule == ar:\n
continue\n
for sm in other_rule.contentValues():\n
line = sm.getDeliveryValue()\n
\n
# case of trade model movement\n
if ar.getParentValue().getParentValue().getSpecialiseValue().getPortalType() in (\'Trade Model Rule\', \'Trade Model Simulation Rule\'):\n
line = ar.getParentValue().getParentValue().getParentValue().getDeliveryValue()\n
\n
# in case of invoice rule (ie. starting from Invoice)\n
if line is None:\n
line = ar.getParentValue().getOrderValue()\n
\n
# in case of invoicing rule (ie. starting from Order)\n
if line is None:\n
line = movement.getParentValue().getParentValue().getDeliveryValue()\n
\n
if line is not None:\n
deliveries_keys[line.getExplanationValue()] = 1\n
\n
return filter(lambda x : x is not None, deliveries_keys.keys())\n
</string> </value>
</item>
<item>
<key> <string>_params</string> </key>
<value> <string>movement_list, **kw</string> </value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>VifibInvoiceTransaction_selectDelivery</string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string></string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="PythonScript" module="Products.PythonScripts.PythonScript"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>Script_magic</string> </key>
<value> <int>3</int> </value>
</item>
<item>
<key> <string>_bind_names</string> </key>
<value>
<object>
<klass>
<global name="NameAssignments" module="Shared.DC.Scripts.Bindings"/>
</klass>
<tuple/>
<state>
<dictionary>
<item>
<key> <string>_asgns</string> </key>
<value>
<dictionary>
<item>
<key> <string>name_container</string> </key>
<value> <string>container</string> </value>
</item>
<item>
<key> <string>name_context</string> </key>
<value> <string>context</string> </value>
</item>
<item>
<key> <string>name_m_self</string> </key>
<value> <string>script</string> </value>
</item>
<item>
<key> <string>name_subpath</string> </key>
<value> <string>traverse_subpath</string> </value>
</item>
</dictionary>
</value>
</item>
</dictionary>
</state>
</object>
</value>
</item>
<item>
<key> <string>_body</string> </key>
<value> <string>from Products.ERP5Type.Message import translateString\n
from DateTime import DateTime\n
\n
payment_transaction = context\n
\n
# initialize accounting_workflow to planned state\n
if payment_transaction.getSimulationState() == "draft":\n
payment_transaction.plan(comment=translateString("Initialised by Delivery Builder."))\n
\n
if payment_transaction.getStartDate() is None:\n
payment_transaction.setStartDate(DateTime())\n
\n
# First set the payment transaction in the building state on the causality workflow\n
payment_transaction.startBuilding()\n
\n
# Then an activity should put the causality state in diverged or solved\n
payment_transaction.activate(after_path_and_method_id=(related_simulation_movement_path_list,\n
(\'immediateReindexObject\',\'recursiveImmediateReindexObject\'))).updateCausalityState()\n
\n
# update casuality from movements\n
causality_list = payment_transaction.getCausalityList()\n
causality_list.sort()\n
modified = 0\n
for movement in payment_transaction.getMovementList():\n
movement_causality = movement.getCausality()\n
if movement_causality not in causality_list:\n
modified = 1\n
causality_list.append(movement_causality)\n
\n
if modified:\n
causality_list.sort()\n
payment_transaction.setCausalityList(causality_list)\n
</string> </value>
</item>
<item>
<key> <string>_params</string> </key>
<value> <string>related_simulation_movement_path_list=None, **kw</string> </value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>VifibPaymentTransaction_postGeneration</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="PythonScript" module="Products.PythonScripts.PythonScript"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>Script_magic</string> </key>
<value> <int>3</int> </value>
</item>
<item>
<key> <string>_bind_names</string> </key>
<value>
<object>
<klass>
<global name="NameAssignments" module="Shared.DC.Scripts.Bindings"/>
</klass>
<tuple/>
<state>
<dictionary>
<item>
<key> <string>_asgns</string> </key>
<value>
<dictionary>
<item>
<key> <string>name_container</string> </key>
<value> <string>container</string> </value>
</item>
<item>
<key> <string>name_context</string> </key>
<value> <string>context</string> </value>
</item>
<item>
<key> <string>name_m_self</string> </key>
<value> <string>script</string> </value>
</item>
<item>
<key> <string>name_subpath</string> </key>
<value> <string>traverse_subpath</string> </value>
</item>
</dictionary>
</value>
</item>
</dictionary>
</state>
</object>
</value>
</item>
<item>
<key> <string>_body</string> </key>
<value> <string>if related_simulation_movement_path_list is None:\n
raise RuntimeError, \'related_simulation_movement_path_list is missing. Update ERP5 Product.\'\n
\n
from Products.ERP5Type.Message import translateString\n
\n
packing_list = context\n
\n
try:\n
packing_list.PackingList_copyOrderProperties()\n
except AttributeError:\n
# does not come from Order\n
pass\n
\n
# Then, modify state\n
confirm_tag = \'%s_confirm\' % packing_list.getPath()\n
packing_list.activate(after_path_and_method_id=(related_simulation_movement_path_list,\n
(\'immediateReindexObject\',\'recursiveImmediateReindexObject\')),\n
tag=confirm_tag).Delivery_confirm()\n
\n
# First set the packing_list in the building state\n
packing_list.startBuilding()\n
# Then an activity should put the causality state in diverged or solved\n
packing_list.activate(after_path_and_method_id=(related_simulation_movement_path_list,\n
(\'immediateReindexObject\',\'recursiveImmediateReindexObject\')),\n
after_tag=confirm_tag).updateCausalityState()\n
</string> </value>
</item>
<item>
<key> <string>_params</string> </key>
<value> <string>related_simulation_movement_path_list=None</string> </value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>VifibSalePackingList_postGeneration</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
...@@ -62,6 +62,10 @@ for software_instance in context.portal_catalog(\n ...@@ -62,6 +62,10 @@ for software_instance in context.portal_catalog(\n
portal_type=\'Software Instance\',\n portal_type=\'Software Instance\',\n
root_uid=root_software_instance.getUid()):\n root_uid=root_software_instance.getUid()):\n
software_instance = software_instance.getObject()\n software_instance = software_instance.getObject()\n
try:\n
software_instance.Item_getInstancePackingListLine(service_relative_url=portal.portal_preferences.getPreferredInstanceCleanupResource())\n
except ValueError:\n
#no instance cleanup, there is sense to try to update\n
software_instance.activate().requestUpdateComputerPartition()\n software_instance.activate().requestUpdateComputerPartition()\n
</string> </value> </string> </value>
</item> </item>
......
...@@ -50,20 +50,27 @@ ...@@ -50,20 +50,27 @@
</item> </item>
<item> <item>
<key> <string>_body</string> </key> <key> <string>_body</string> </key>
<value> <string>software_instance = state_change[\'object\']\n <value> <string>from Products.ZSQLCatalog.SQLCatalog import Query, ComplexQuery\n
\n
software_instance = state_change[\'object\']\n
# mark destroy is requested\n # mark destroy is requested\n
portal = context.getPortalObject()\n
if software_instance.getPortalType() == "Software Instance":\n
software_instance.SoftwareInstance_destroySlaveInstanceRelated()\n
\n
software_instance.destroyRequested()\n software_instance.destroyRequested()\n
# deliver proper packing list\n # deliver proper packing list\n
packing_list_line = context.SoftwareInstance_getInstanceDestroyPackingListLine(state_change)\n packing_list_line = context.SoftwareInstance_getInstanceDestroyPackingListLine(state_change)\n
\n
packing_list = packing_list_line.getParentValue()\n packing_list = packing_list_line.getParentValue()\n
if packing_list.getPortalObject().portal_workflow.isTransitionPossible(packing_list, \'start\'):\n if portal.portal_workflow.isTransitionPossible(packing_list, \'start\'):\n
packing_list.start()\n packing_list.start()\n
if packing_list.getPortalObject().portal_workflow.isTransitionPossible(packing_list, \'deliver\'):\n if portal.portal_workflow.isTransitionPossible(packing_list, \'deliver\'):\n
packing_list.deliver()\n packing_list.deliver()\n
\n \n
# revoke certificate\n # revoke certificate\n
try:\n try:\n
context.getPortalObject().portal_certificate_authority\\\n portal.portal_certificate_authority\\\n
.revokeCertificate(software_instance.getDestinationReference())\n .revokeCertificate(software_instance.getDestinationReference())\n
except ValueError:\n except ValueError:\n
# Ignore already revoked certificates, as OpenSSL backend is\n # Ignore already revoked certificates, as OpenSSL backend is\n
......
...@@ -63,6 +63,9 @@ service_relative_url = software_instance.portal_preferences.\\\n ...@@ -63,6 +63,9 @@ service_relative_url = software_instance.portal_preferences.\\\n
getPreferredInstanceCleanupResource()\n getPreferredInstanceCleanupResource()\n
sale_packing_list = context.SoftwareInstance_createSalePackingList(state_change, service_relative_url, tag=tag)\n sale_packing_list = context.SoftwareInstance_createSalePackingList(state_change, service_relative_url, tag=tag)\n
sale_packing_list.confirm(activate_kw={\'tag\':tag})\n sale_packing_list.confirm(activate_kw={\'tag\':tag})\n
\n
if software_instance.getPortalType() == "Software Instance":\n
software_instance.SoftwareInstance_requestDestroySlaveInstanceRelated()\n
]]></string> </value> ]]></string> </value>
......
...@@ -121,13 +121,41 @@ if (request_software_instance is None):\n ...@@ -121,13 +121,41 @@ if (request_software_instance is None):\n
**portal.Base_getNewSoftwareInstanceCoordinate()\n **portal.Base_getNewSoftwareInstanceCoordinate()\n
)\n )\n
request_software_instance.portal_workflow.doActionFor(request_software_instance, \'validate_action\')\n request_software_instance.portal_workflow.doActionFor(request_software_instance, \'validate_action\')\n
sale_packing_list_line = context.SoftwareInstance_getInstanceSetupPackingListLine(state_change)\n if state == "started":\n
hosting_subscription_uid = sale_packing_list_line.getAggregateValue(portal_type=\'Hosting Subscription\').getUid()\n request_software_instance.startRequested()\n
request_software_instance.requestComputerPartition(\n if state == "stopped":\n
software_release=software_release_url_string,\n request_software_instance.stopRequested()\n
hosting_subscription_uid=hosting_subscription_uid,\n setup_service_relative_url = portal.portal_preferences.getPreferredInstanceSetupResource()\n
software_type=software_type,\n packing_list_line = software_instance.getAggregateRelatedValue(portal_type="Sale Packing List Line")\n
tag=tag)\n subscription = packing_list_line.getAggregateValue(portal_type="Hosting Subscription")\n
software_release_document = context.portal_catalog.getResultValue(\n
portal_type=\'Software Release\',\n
url_string=software_release_url_string)\n
base_sale_packing_list = packing_list_line.getParentValue()\n
trade_condition = packing_list_line.getSpecialise(portal_type="Sale Trade Condition")\n
sale_order = portal.getDefaultModule(portal_type="Sale Order").newContent(\n
portal_type="Sale Order",\n
destination=base_sale_packing_list.getDestination(),\n
destination_section=base_sale_packing_list.getDestinationSection(),\n
destination_decision=base_sale_packing_list.getDestinationDecision(),\n
start_date=DateTime(),\n
received_date=DateTime(),\n
# XXX Hardcoded values\n
source="organisation_module/vifib_internet",\n
source_section="organisation_module/vifib_internet",\n
price_currency="currency_module/EUR",\n
activate_kw={\'tag\': tag},\n
)\n
\n
sale_order.setSpecialise(trade_condition, portal_type="Sale Trade Condition")\n
sale_order_line = sale_order.newContent(\n
portal_type="Sale Order Line",\n
resource=setup_service_relative_url,\n
quantity=1,\n
aggregate_value_list=[request_software_instance,subscription,software_release_document],\n
activate_kw={\'tag\': tag},\n
)\n
sale_order.order()\n
else:\n else:\n
# Update existing software instance\n # Update existing software instance\n
# Sale Packing List interaction has to be requested automatically with an interaction workflow\n # Sale Packing List interaction has to be requested automatically with an interaction workflow\n
......
...@@ -67,7 +67,12 @@ packing_list = packing_list_line.getParentValue()\n ...@@ -67,7 +67,12 @@ packing_list = packing_list_line.getParentValue()\n
if packing_list.getSimulationState() == \'delivered\':\n if packing_list.getSimulationState() == \'delivered\':\n
if context.SoftwareInstance_deliverActiveInstanceUpdatePackingListLine(state_change):\n if context.SoftwareInstance_deliverActiveInstanceUpdatePackingListLine(state_change):\n
return\n return\n
packing_list.deliver()\n \n
try:\n
context.SoftwareInstance_getInstanceDestroyPackingListLine(state_change)\n
except ValueError:\n
# no instance cleanup, it is ok to deliver\n
packing_list.deliver()\n
</string> </value> </string> </value>
</item> </item>
<item> <item>
......
erp5_computer_immobilisation erp5_computer_immobilisation
erp5_software_pdm erp5_software_pdm
erp5_knowledge_pad
erp5_rss_style
\ No newline at end of file
317 352
\ No newline at end of file \ No newline at end of file
...@@ -7,3 +7,4 @@ Software Instance | Reference ...@@ -7,3 +7,4 @@ Software Instance | Reference
Software Instance | SoftwareInstance Software Instance | SoftwareInstance
Software Instance | SoftwareInstanceConstraint Software Instance | SoftwareInstanceConstraint
Software Instance | TextDocument Software Instance | TextDocument
Software Instance | VariationRange
\ No newline at end of file
vifib_base vifib_base
vifib_simulation
\ No newline at end of file
Vifib 0.5
\ No newline at end of file
33 34
\ No newline at end of file \ No newline at end of file
Vifib 0.2 Vifib 0.5
\ No newline at end of file \ No newline at end of file
13 14
\ No newline at end of file \ No newline at end of file
Vifib 0.2 Vifib 0.5
\ No newline at end of file \ No newline at end of file
<local_roles_item> <local_roles_item>
<local_roles> <local_roles>
<role id='G-COMPANY'>
<item>Assignor</item>
</role>
<role id='R-MEMBER'> <role id='R-MEMBER'>
<item>Auditor</item> <item>Auditor</item>
</role> </role>
......
...@@ -3,6 +3,9 @@ ...@@ -3,6 +3,9 @@
<role id='ERP5TypeTestCase'> <role id='ERP5TypeTestCase'>
<item>Owner</item> <item>Owner</item>
</role> </role>
<role id='G-COMPANY'>
<item>Assignor</item>
</role>
<role id='R-COMPUTER'> <role id='R-COMPUTER'>
<item>Auditor</item> <item>Auditor</item>
</role> </role>
......
...@@ -3,6 +3,9 @@ ...@@ -3,6 +3,9 @@
<role id='ERP5TypeTestCase'> <role id='ERP5TypeTestCase'>
<item>Owner</item> <item>Owner</item>
</role> </role>
<role id='G-COMPANY'>
<item>Assignor</item>
</role>
<role id='R-COMPUTER'> <role id='R-COMPUTER'>
<item>Auditor</item> <item>Auditor</item>
</role> </role>
......
<local_roles_item> <local_roles_item>
<local_roles> <local_roles>
<role id='G-COMPANY'>
<item>Assignor</item>
</role>
<role id='R-COMPUTER'> <role id='R-COMPUTER'>
<item>Auditor</item> <item>Auditor</item>
</role> </role>
......
<local_roles_item> <local_roles_item>
<local_roles> <local_roles>
<role id='G-COMPANY'>
<item>Assignor</item>
</role>
<role id='R-COMPUTER'> <role id='R-COMPUTER'>
<item>Auditor</item> <item>Auditor</item>
</role> </role>
......
<local_roles_item> <local_roles_item>
<local_roles> <local_roles>
<role id='G-COMPANY'>
<item>Assignor</item>
</role>
<role id='R-COMPUTER'> <role id='R-COMPUTER'>
<item>Auditor</item> <item>Auditor</item>
</role> </role>
......
<local_roles_item>
<local_roles>
<role id='G-COMPANY'>
<item>Assignor</item>
</role>
<role id='R-COMPUTER'>
<item>Auditor</item>
</role>
<role id='R-INSTANCE'>
<item>Auditor</item>
</role>
<role id='R-MEMBER'>
<item>Auditor</item>
</role>
<role id='zope'>
<item>Owner</item>
</role>
</local_roles>
</local_roles_item>
\ No newline at end of file
...@@ -3,6 +3,9 @@ ...@@ -3,6 +3,9 @@
<role id='ERP5TypeTestCase'> <role id='ERP5TypeTestCase'>
<item>Owner</item> <item>Owner</item>
</role> </role>
<role id='G-COMPANY'>
<item>Assignor</item>
</role>
<role id='R-COMPUTER'> <role id='R-COMPUTER'>
<item>Auditor</item> <item>Auditor</item>
</role> </role>
......
<local_roles_item> <local_roles_item>
<local_roles> <local_roles>
<role id='G-COMPANY'>
<item>Assignor</item>
</role>
<role id='R-COMPUTER'> <role id='R-COMPUTER'>
<item>Auditor</item> <item>Auditor</item>
</role> </role>
......
<local_roles_item> <local_roles_item>
<local_roles> <local_roles>
<role id='G-COMPANY'>
<item>Assignor</item>
</role>
<role id='R-COMPUTER'> <role id='R-COMPUTER'>
<item>Auditor</item> <item>Auditor</item>
</role> </role>
......
...@@ -57,6 +57,7 @@ ...@@ -57,6 +57,7 @@
<value> <value>
<tuple> <tuple>
<string>quantity_unit/unit/piece</string> <string>quantity_unit/unit/piece</string>
<string>product_line/cloud/usage</string>
</tuple> </tuple>
</value> </value>
</item> </item>
...@@ -88,7 +89,192 @@ ...@@ -88,7 +89,192 @@
<key> <string>title</string> </key> <key> <string>title</string> </key>
<value> <string>CPU Consumption</string> </value> <value> <string>CPU Consumption</string> </value>
</item> </item>
<item>
<key> <string>workflow_history</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent>
</value>
</item>
</dictionary>
</pickle>
</record>
<record id="2" aka="AAAAAAAAAAI=">
<pickle>
<global name="PersistentMapping" module="Persistence.mapping"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>data</string> </key>
<value>
<dictionary>
<item>
<key> <string>edit_workflow</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAM=</string> </persistent>
</value>
</item>
<item>
<key> <string>validation_workflow</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAQ=</string> </persistent>
</value>
</item>
</dictionary>
</value>
</item>
</dictionary>
</pickle>
</record>
<record id="3" aka="AAAAAAAAAAM=">
<pickle>
<global name="WorkflowHistoryList" module="Products.ERP5Type.patches.WorkflowTool"/>
</pickle>
<pickle>
<tuple>
<none/>
<list>
<dictionary>
<item>
<key> <string>action</string> </key>
<value> <string>edit</string> </value>
</item>
<item>
<key> <string>actor</string> </key>
<value> <string>zope</string> </value>
</item>
<item>
<key> <string>comment</string> </key>
<value>
<none/>
</value>
</item>
<item>
<key> <string>error_message</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>serial</string> </key>
<value> <string>915.27360.39415.51234</string> </value>
</item>
<item>
<key> <string>state</string> </key>
<value> <string>current</string> </value>
</item>
<item>
<key> <string>time</string> </key>
<value>
<object>
<klass>
<global name="DateTime" module="DateTime.DateTime"/>
</klass>
<tuple>
<none/>
</tuple>
<state>
<tuple>
<float>1325175965.82</float>
<string>GMT+1</string>
</tuple>
</state>
</object>
</value>
</item>
</dictionary>
</list>
</tuple>
</pickle>
</record>
<record id="4" aka="AAAAAAAAAAQ=">
<pickle>
<global name="WorkflowHistoryList" module="Products.ERP5Type.patches.WorkflowTool"/>
</pickle>
<pickle>
<tuple>
<none/>
<list>
<dictionary>
<item>
<key> <string>action</string> </key>
<value> <string>validate_action</string> </value>
</item>
<item>
<key> <string>actor</string> </key>
<value> <string>zope</string> </value>
</item>
<item>
<key> <string>comment</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>error_message</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>time</string> </key>
<value>
<object>
<klass>
<global id="4.1" name="DateTime" module="DateTime.DateTime"/>
</klass>
<tuple>
<none/>
</tuple>
<state>
<tuple>
<float>1325176059.39</float>
<string>GMT+1</string>
</tuple>
</state>
</object>
</value>
</item>
<item>
<key> <string>validation_state</string> </key>
<value> <string>draft</string> </value>
</item>
</dictionary>
<dictionary>
<item>
<key> <string>action</string> </key>
<value> <string>validate</string> </value>
</item>
<item>
<key> <string>actor</string> </key>
<value> <string>zope</string> </value>
</item>
<item>
<key> <string>comment</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>error_message</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>time</string> </key>
<value>
<object>
<klass> <reference id="4.1"/> </klass>
<tuple>
<none/>
</tuple>
<state>
<tuple>
<float>1325176059.4</float>
<string>GMT+1</string>
</tuple>
</state>
</object>
</value>
</item>
<item>
<key> <string>validation_state</string> </key>
<value> <string>validated</string> </value>
</item>
</dictionary> </dictionary>
</list>
</tuple>
</pickle> </pickle>
</record> </record>
</ZopeData> </ZopeData>
...@@ -57,6 +57,7 @@ ...@@ -57,6 +57,7 @@
<value> <value>
<tuple> <tuple>
<string>quantity_unit/unit/piece</string> <string>quantity_unit/unit/piece</string>
<string>product_line/cloud/usage</string>
</tuple> </tuple>
</value> </value>
</item> </item>
...@@ -88,7 +89,192 @@ ...@@ -88,7 +89,192 @@
<key> <string>title</string> </key> <key> <string>title</string> </key>
<value> <string>Memory Consumption</string> </value> <value> <string>Memory Consumption</string> </value>
</item> </item>
<item>
<key> <string>workflow_history</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent>
</value>
</item>
</dictionary>
</pickle>
</record>
<record id="2" aka="AAAAAAAAAAI=">
<pickle>
<global name="PersistentMapping" module="Persistence.mapping"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>data</string> </key>
<value>
<dictionary>
<item>
<key> <string>edit_workflow</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAM=</string> </persistent>
</value>
</item>
<item>
<key> <string>validation_workflow</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAQ=</string> </persistent>
</value>
</item>
</dictionary>
</value>
</item>
</dictionary>
</pickle>
</record>
<record id="3" aka="AAAAAAAAAAM=">
<pickle>
<global name="WorkflowHistoryList" module="Products.ERP5Type.patches.WorkflowTool"/>
</pickle>
<pickle>
<tuple>
<none/>
<list>
<dictionary>
<item>
<key> <string>action</string> </key>
<value> <string>edit</string> </value>
</item>
<item>
<key> <string>actor</string> </key>
<value> <string>zope</string> </value>
</item>
<item>
<key> <string>comment</string> </key>
<value>
<none/>
</value>
</item>
<item>
<key> <string>error_message</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>serial</string> </key>
<value> <string>915.27360.39415.51234</string> </value>
</item>
<item>
<key> <string>state</string> </key>
<value> <string>current</string> </value>
</item>
<item>
<key> <string>time</string> </key>
<value>
<object>
<klass>
<global name="DateTime" module="DateTime.DateTime"/>
</klass>
<tuple>
<none/>
</tuple>
<state>
<tuple>
<float>1325175959.47</float>
<string>GMT+1</string>
</tuple>
</state>
</object>
</value>
</item>
</dictionary>
</list>
</tuple>
</pickle>
</record>
<record id="4" aka="AAAAAAAAAAQ=">
<pickle>
<global name="WorkflowHistoryList" module="Products.ERP5Type.patches.WorkflowTool"/>
</pickle>
<pickle>
<tuple>
<none/>
<list>
<dictionary>
<item>
<key> <string>action</string> </key>
<value> <string>validate_action</string> </value>
</item>
<item>
<key> <string>actor</string> </key>
<value> <string>zope</string> </value>
</item>
<item>
<key> <string>comment</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>error_message</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>time</string> </key>
<value>
<object>
<klass>
<global id="4.1" name="DateTime" module="DateTime.DateTime"/>
</klass>
<tuple>
<none/>
</tuple>
<state>
<tuple>
<float>1325176053.07</float>
<string>GMT+1</string>
</tuple>
</state>
</object>
</value>
</item>
<item>
<key> <string>validation_state</string> </key>
<value> <string>draft</string> </value>
</item>
</dictionary>
<dictionary>
<item>
<key> <string>action</string> </key>
<value> <string>validate</string> </value>
</item>
<item>
<key> <string>actor</string> </key>
<value> <string>zope</string> </value>
</item>
<item>
<key> <string>comment</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>error_message</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>time</string> </key>
<value>
<object>
<klass> <reference id="4.1"/> </klass>
<tuple>
<none/>
</tuple>
<state>
<tuple>
<float>1325176053.07</float>
<string>GMT+1</string>
</tuple>
</state>
</object>
</value>
</item>
<item>
<key> <string>validation_state</string> </key>
<value> <string>validated</string> </value>
</item>
</dictionary> </dictionary>
</list>
</tuple>
</pickle> </pickle>
</record> </record>
</ZopeData> </ZopeData>
...@@ -57,9 +57,9 @@ ...@@ -57,9 +57,9 @@
<value> <value>
<tuple> <tuple>
<string>Computer Partition</string> <string>Computer Partition</string>
<string>Hosting Subscription</string>
<string>Software Instance</string> <string>Software Instance</string>
<string>Software Release</string> <string>Software Release</string>
<string>Subscription Item</string>
</tuple> </tuple>
</value> </value>
</item> </item>
...@@ -68,6 +68,7 @@ ...@@ -68,6 +68,7 @@
<value> <value>
<tuple> <tuple>
<string>quantity_unit/unit/piece</string> <string>quantity_unit/unit/piece</string>
<string>product_line/cloud/configuration</string>
</tuple> </tuple>
</value> </value>
</item> </item>
...@@ -79,9 +80,7 @@ ...@@ -79,9 +80,7 @@
</item> </item>
<item> <item>
<key> <string>default_reference</string> </key> <key> <string>default_reference</string> </key>
<value> <value> <string>instance_hosting</string> </value>
<none/>
</value>
</item> </item>
<item> <item>
<key> <string>description</string> </key> <key> <string>description</string> </key>
...@@ -102,9 +101,9 @@ ...@@ -102,9 +101,9 @@
<value> <value>
<tuple> <tuple>
<string>Computer Partition</string> <string>Computer Partition</string>
<string>Hosting Subscription</string>
<string>Software Instance</string> <string>Software Instance</string>
<string>Software Release</string> <string>Software Release</string>
<string>Subscription Item</string>
</tuple> </tuple>
</value> </value>
</item> </item>
...@@ -112,7 +111,237 @@ ...@@ -112,7 +111,237 @@
<key> <string>title</string> </key> <key> <string>title</string> </key>
<value> <string>Instance Hosting</string> </value> <value> <string>Instance Hosting</string> </value>
</item> </item>
<item>
<key> <string>workflow_history</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent>
</value>
</item>
</dictionary>
</pickle>
</record>
<record id="2" aka="AAAAAAAAAAI=">
<pickle>
<global name="PersistentMapping" module="Persistence.mapping"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>data</string> </key>
<value>
<dictionary>
<item>
<key> <string>edit_workflow</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAM=</string> </persistent>
</value>
</item>
<item>
<key> <string>validation_workflow</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAQ=</string> </persistent>
</value>
</item>
</dictionary>
</value>
</item>
</dictionary>
</pickle>
</record>
<record id="3" aka="AAAAAAAAAAM=">
<pickle>
<global name="WorkflowHistoryList" module="Products.ERP5Type.patches.WorkflowTool"/>
</pickle>
<pickle>
<tuple>
<none/>
<list>
<dictionary>
<item>
<key> <string>action</string> </key>
<value> <string>edit</string> </value>
</item>
<item>
<key> <string>actor</string> </key>
<value> <string>zope</string> </value>
</item>
<item>
<key> <string>comment</string> </key>
<value>
<none/>
</value>
</item>
<item>
<key> <string>error_message</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>serial</string> </key>
<value> <string>915.27360.39415.51234</string> </value>
</item>
<item>
<key> <string>state</string> </key>
<value> <string>current</string> </value>
</item>
<item>
<key> <string>time</string> </key>
<value>
<object>
<klass>
<global id="3.1" name="DateTime" module="DateTime.DateTime"/>
</klass>
<tuple>
<none/>
</tuple>
<state>
<tuple>
<float>1325175531.25</float>
<string>GMT+1</string>
</tuple>
</state>
</object>
</value>
</item>
</dictionary>
<dictionary>
<item>
<key> <string>action</string> </key>
<value> <string>edit</string> </value>
</item>
<item>
<key> <string>actor</string> </key>
<value> <string>zope</string> </value>
</item>
<item>
<key> <string>comment</string> </key>
<value>
<none/>
</value>
</item>
<item>
<key> <string>error_message</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>serial</string> </key>
<value> <string>915.27378.55986.59357</string> </value>
</item>
<item>
<key> <string>state</string> </key>
<value> <string>current</string> </value>
</item>
<item>
<key> <string>time</string> </key>
<value>
<object>
<klass> <reference id="3.1"/> </klass>
<tuple>
<none/>
</tuple>
<state>
<tuple>
<float>1325175923.91</float>
<string>GMT+1</string>
</tuple>
</state>
</object>
</value>
</item>
</dictionary> </dictionary>
</list>
</tuple>
</pickle>
</record>
<record id="4" aka="AAAAAAAAAAQ=">
<pickle>
<global name="WorkflowHistoryList" module="Products.ERP5Type.patches.WorkflowTool"/>
</pickle>
<pickle>
<tuple>
<none/>
<list>
<dictionary>
<item>
<key> <string>action</string> </key>
<value> <string>validate_action</string> </value>
</item>
<item>
<key> <string>actor</string> </key>
<value> <string>zope</string> </value>
</item>
<item>
<key> <string>comment</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>error_message</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>time</string> </key>
<value>
<object>
<klass>
<global id="4.1" name="DateTime" module="DateTime.DateTime"/>
</klass>
<tuple>
<none/>
</tuple>
<state>
<tuple>
<float>1325176039.93</float>
<string>GMT+1</string>
</tuple>
</state>
</object>
</value>
</item>
<item>
<key> <string>validation_state</string> </key>
<value> <string>draft</string> </value>
</item>
</dictionary>
<dictionary>
<item>
<key> <string>action</string> </key>
<value> <string>validate</string> </value>
</item>
<item>
<key> <string>actor</string> </key>
<value> <string>zope</string> </value>
</item>
<item>
<key> <string>comment</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>error_message</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>time</string> </key>
<value>
<object>
<klass> <reference id="4.1"/> </klass>
<tuple>
<none/>
</tuple>
<state>
<tuple>
<float>1325176039.94</float>
<string>GMT+1</string>
</tuple>
</state>
</object>
</value>
</item>
<item>
<key> <string>validation_state</string> </key>
<value> <string>validated</string> </value>
</item>
</dictionary>
</list>
</tuple>
</pickle> </pickle>
</record> </record>
</ZopeData> </ZopeData>
...@@ -105,6 +105,10 @@ ...@@ -105,6 +105,10 @@
<key> <string>preferred_instance_setup_resource</string> </key> <key> <string>preferred_instance_setup_resource</string> </key>
<value> <string>service_module/vifib_instance_setup</string> </value> <value> <string>service_module/vifib_instance_setup</string> </value>
</item> </item>
<item>
<key> <string>preferred_instance_subscription_resource</string> </key>
<value> <string>service_module/vifib_instance_subscription</string> </value>
</item>
<item> <item>
<key> <string>preferred_instance_update_resource</string> </key> <key> <string>preferred_instance_update_resource</string> </key>
<value> <string>service_module/vifib_instance_update</string> </value> <value> <string>service_module/vifib_instance_update</string> </value>
...@@ -117,6 +121,14 @@ ...@@ -117,6 +121,14 @@
<key> <string>preferred_ooodoc_server_port_number</string> </key> <key> <string>preferred_ooodoc_server_port_number</string> </key>
<value> <int>23000</int> </value> <value> <int>23000</int> </value>
</item> </item>
<item>
<key> <string>preferred_organisation_credential_update_automatic_approval</string> </key>
<value> <int>1</int> </value>
</item>
<item>
<key> <string>preferred_payzen_integration_site</string> </key>
<value> <string>portal_integrations/vifib_payzen_integration</string> </value>
</item>
<item> <item>
<key> <string>preferred_software_setup_resource</string> </key> <key> <string>preferred_software_setup_resource</string> </key>
<value> <string>service_module/vifib_software_setup</string> </value> <value> <string>service_module/vifib_software_setup</string> </value>
...@@ -125,7 +137,7 @@ ...@@ -125,7 +137,7 @@
<key> <string>preferred_subscription_assignment_category</string> </key> <key> <string>preferred_subscription_assignment_category</string> </key>
<value> <value>
<tuple> <tuple>
<string>function/customer</string> <string>role/member</string>
</tuple> </tuple>
</value> </value>
</item> </item>
......
83 91
\ No newline at end of file \ No newline at end of file
service_module/cpu_consumption
service_module/memory_consumption
service_module/vifib_instance_cleanup
service_module/vifib_instance_hosting
service_module/vifib_instance_setup
service_module/vifib_instance_subscription
service_module/vifib_instance_update
service_module/vifib_software_setup
service_module/vifib_usage_report
\ No newline at end of file
...@@ -4,6 +4,7 @@ service_module/memory_consumption ...@@ -4,6 +4,7 @@ service_module/memory_consumption
service_module/vifib_instance_cleanup service_module/vifib_instance_cleanup
service_module/vifib_instance_hosting service_module/vifib_instance_hosting
service_module/vifib_instance_setup service_module/vifib_instance_setup
service_module/vifib_instance_subscription
service_module/vifib_instance_update service_module/vifib_instance_update
service_module/vifib_software_setup service_module/vifib_software_setup
service_module/vifib_usage_report service_module/vifib_usage_report
\ No newline at end of file
...@@ -2,8 +2,9 @@ currency_module/EUR ...@@ -2,8 +2,9 @@ currency_module/EUR
service_module/cpu_consumption service_module/cpu_consumption
service_module/memory_consumption service_module/memory_consumption
service_module/vifib_instance_cleanup service_module/vifib_instance_cleanup
service_module/vifib_instance_subscription
service_module/vifib_instance_hosting service_module/vifib_instance_hosting
service_module/vifib_instance_setup service_module/vifib_instance_setup
service_module/vifib_instance_update
service_module/vifib_software_setup service_module/vifib_software_setup
service_module/vifib_usage_report service_module/vifib_usage_report
\ No newline at end of file
service_module/vifib_instance_update
\ No newline at end of file
...@@ -6,6 +6,7 @@ service_module/memory_consumption ...@@ -6,6 +6,7 @@ service_module/memory_consumption
service_module/vifib_instance_cleanup service_module/vifib_instance_cleanup
service_module/vifib_instance_hosting service_module/vifib_instance_hosting
service_module/vifib_instance_setup service_module/vifib_instance_setup
service_module/vifib_instance_subscription
service_module/vifib_instance_update service_module/vifib_instance_update
service_module/vifib_software_setup service_module/vifib_software_setup
service_module/vifib_usage_report service_module/vifib_usage_report
\ No newline at end of file
Vifib 0.2 Vifib 0.5
\ No newline at end of file \ No newline at end of file
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment