Commit 08ec3218 authored by Antoine Catton's avatar Antoine Catton

Merge branch 'master' into promise_bugfixes

Conflicts:
	slapos/grid/slapgrid.py
parents 17cfb258 07fb6e64
Changes Changes
======= =======
0.19 (unreleased) 0.21 (unreleased)
----------------- -----------------
* No changes yet. * No changes yet.
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"/>
...@@ -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_erp5\',\n
\'vifib_test\',\n
\'vifib_invoicing\',\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 19
\ 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
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="ActionInformation" module="Products.CMFCore.ActionInformation"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>action</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent>
</value>
</item>
<item>
<key> <string>categories</string> </key>
<value>
<tuple>
<string>action_type/object_view</string>
</tuple>
</value>
</item>
<item>
<key> <string>category</string> </key>
<value> <string>object_view</string> </value>
</item>
<item>
<key> <string>condition</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>description</string> </key>
<value>
<none/>
</value>
</item>
<item>
<key> <string>icon</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>unfiltered_tracking_list</string> </value>
</item>
<item>
<key> <string>permissions</string> </key>
<value>
<tuple>
<string>View</string>
</tuple>
</value>
</item>
<item>
<key> <string>portal_type</string> </key>
<value> <string>Action Information</string> </value>
</item>
<item>
<key> <string>priority</string> </key>
<value> <float>2.0</float> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>Item Tracking</string> </value>
</item>
<item>
<key> <string>visible</string> </key>
<value> <int>1</int> </value>
</item>
</dictionary>
</pickle>
</record>
<record id="2" aka="AAAAAAAAAAI=">
<pickle>
<global name="Expression" module="Products.CMFCore.Expression"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>text</string> </key>
<value> <string>string:${object_url}/Item_viewTrackingList?current:int=0</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
...@@ -50,10 +50,35 @@ ...@@ -50,10 +50,35 @@
</item> </item>
<item> <item>
<key> <string>_body</string> </key> <key> <string>_body</string> </key>
<value> <string>computer = context.getParentValue()\n <value> <string>slap_state = context.getSlapState()\n
if computer.getPortalType() != \'Computer\':\n portal = context.getPortalObject()\n
computer = computer.getParentValue()\n portal_preferences = portal.portal_preferences\n
return computer.Computer_getSoftwareReleaseUrlStringList([\'stopped\'])\n \n
if slap_state == \'free\':\n
computer = context.getParentValue()\n
return computer.Computer_getSoftwareReleaseUrlStringList([\'stopped\'])\n
\n
elif slap_state == \'busy\':\n
\n
# Partition under destruction does not accept new slave\n
try:\n
delivery_line = context.Item_getInstancePackingListLine(service_relative_url=portal_preferences.getPreferredInstanceCleanupResource(), aggregate_portal_type=\'Software Instance\')\n
except ValueError:\n
pass\n
else:\n
if delivery_line.getSimulationState() != \'delivered\':\n
return []\n
\n
try:\n
delivery_line = context.Item_getInstancePackingListLine()\n
except ValueError:\n
pass\n
else:\n
software_release = delivery_line.getAggregateValue(portal_type=\'Software Release\')\n
return [software_release.getUrlString()]\n
\n
else:\n
return []\n
</string> </value> </string> </value>
</item> </item>
<item> <item>
......
...@@ -55,9 +55,9 @@ ...@@ -55,9 +55,9 @@
except ValueError:\n except ValueError:\n
pass\n pass\n
else:\n else:\n
software_instance = delivery_line.getAggregateValue(portal_type=\'Software Instance\')\n software_instance = delivery_line.getAggregateValue(portal_type=[\'Software Instance\', \'Slave Instance\'])\n
if software_instance is not None:\n if software_instance is not None:\n
return software_instance.getTitle()\n return software_instance.getSourceReference()\n
return ""\n return ""\n
</string> </value> </string> </value>
</item> </item>
......
...@@ -50,7 +50,9 @@ ...@@ -50,7 +50,9 @@
</item> </item>
<item> <item>
<key> <string>_body</string> </key> <key> <string>_body</string> </key>
<value> <string>return context.getPortalObject().portal_workflow.isTransitionPossible(context, \'mark_busy\') and 1 or 0\n <value> <string>if context.getPortalObject().portal_workflow.isTransitionPossible(context, \'mark_busy\') and context.getParentValue().isMemberOf(\'allocation_scope/open\'):\n
return 1\n
return 0\n
</string> </value> </string> </value>
</item> </item>
<item> <item>
......
...@@ -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="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 encoding="cdata"><![CDATA[
import random\n
open_sale_order = context\n
\n
computer_partition = None\n
query_kw = {\n
\'software_release_url\': software_release_url,\n
\'portal_type\': \'Computer Partition\',\n
}\n
if software_instance_portal_type == "Slave Instance":\n
query_kw[\'free_for_request\'] = 0\n
query_kw[\'software_type\'] = software_type\n
elif software_instance_portal_type == "Software Instance":\n
query_kw[\'free_for_request\'] = 1\n
else:\n
raise NotImplementedError, "Unknown portal type %s" % \\\n
software_instance_portal_type \n
# support SLA\n
if "computer_guid" in filter_kw:\n
query_kw["parent_reference"] = filter_kw["computer_guid"]\n
\n
SQL_WINDOW_SIZE = 50\n
\n
# fetch at mot 50 random Computer Partitions, and check if they are ok\n
isTransitionPossible = open_sale_order.getPortalObject().portal_workflow.isTransitionPossible\n
result_count = open_sale_order.portal_catalog.countResults(**query_kw)[0][0]\n
offset = max(0, result_count-1)\n
if offset >= SQL_WINDOW_SIZE:\n
limit = (random.randint(0, offset), SQL_WINDOW_SIZE)\n
else:\n
limit = (0, SQL_WINDOW_SIZE)\n
\n
for computer_partition_candidate in context.portal_catalog(\n
limit=limit, **query_kw):\n
computer_partition_candidate = computer_partition_candidate.getObject() \n
if software_instance_portal_type == "Software Instance":\n
# Check if the computer partition can be marked as busy\n
if isTransitionPossible(computer_partition_candidate, \'mark_busy\'):\n
computer_partition = computer_partition_candidate\n
computer_partition.markBusy()\n
break\n
elif computer_partition_candidate.getSlapState() == "busy":\n
# Only assign slave instance on busy partition\n
computer_partition = computer_partition_candidate\n
break\n
\n
if computer_partition is None:\n
raise ValueError(\'It was not possible to find free Computer Partition\')\n
\n
# lock computer partition\n
computer_partition.serialize()\n
\n
return computer_partition.getRelativeUrl()\n
]]></string> </value>
</item>
<item>
<key> <string>_params</string> </key>
<value> <string>software_release_url, software_type, software_instance_portal_type, filter_kw</string> </value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>OpenSaleOrder_findPartition</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
...@@ -82,6 +82,10 @@ ...@@ -82,6 +82,10 @@
<string>reference</string> <string>reference</string>
<string>Reference</string> <string>Reference</string>
</tuple> </tuple>
<tuple>
<string>translated_portal_type</string>
<string>Type</string>
</tuple>
<tuple> <tuple>
<string>source_reference</string> <string>source_reference</string>
<string>Software Type</string> <string>Software Type</string>
...@@ -113,6 +117,10 @@ ...@@ -113,6 +117,10 @@
<string>reference</string> <string>reference</string>
<string>Reference</string> <string>Reference</string>
</tuple> </tuple>
<tuple>
<string>translated_portal_type</string>
<string>Type</string>
</tuple>
</list> </list>
</value> </value>
</item> </item>
......
...@@ -62,7 +62,11 @@ for software_instance in context.portal_catalog(\n ...@@ -62,7 +62,11 @@ 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
software_instance.activate().requestUpdateComputerPartition()\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
</string> </value> </string> </value>
</item> </item>
<item> <item>
......
...@@ -50,48 +50,12 @@ ...@@ -50,48 +50,12 @@
</item> </item>
<item> <item>
<key> <string>_body</string> </key> <key> <string>_body</string> </key>
<value> <string encoding="cdata"><![CDATA[ <value> <string>from DateTime import DateTime\n
from DateTime import DateTime\n
import random\n
\n
def checkSoftwareInstanceIsInstalledOnComputerPartition(software_release,\n
computer_partition):\n
from Products.ZSQLCatalog.SQLCatalog import Query, ComplexQuery\n
resource_relative_url = (\n
portal.portal_preferences.getPreferredInstanceSetupResource(),\n
portal.portal_preferences.getPreferredInstanceHostingResource(),\n
)\n
query = ComplexQuery(Query(aggregate_relative_url=software_release.getRelativeUrl()),\n
Query(aggregate_relative_url=computer_partition.getRelativeUrl()),\n
operator="AND",\n
)\n
sale_packing_list_line_list = portal.portal_catalog(\n
portal_type=\'Sale Packing List Line\',\n
query=query,\n
resource_relative_url=resource_relative_url,\n
limit=1)\n
\n
if len(sale_packing_list_line_list) == 1:\n
resource_relative_url = (\n
portal.portal_preferences.getPreferredInstanceCleanupResource(),\n
)\n
sale_packing_list_line_list = portal.portal_catalog(\n
portal_type=\'Sale Packing List Line\',\n
query=query,\n
resource_relative_url=resource_relative_url,\n
limit=1)\n
if len(sale_packing_list_line_list) == 0:\n
return True\n
return False\n
\n \n
portal = context.getPortalObject()\n portal = context.getPortalObject()\n
software_instance = state_change[\'object\']\n software_instance = state_change[\'object\']\n
software_release_url_string = state_change.kwargs[\'software_release\']\n software_release_url_string = state_change.kwargs[\'software_release\']\n
hosting_subscription_uid = state_change.kwargs[\'hosting_subscription_uid\']\n hosting_subscription_uid = state_change.kwargs[\'hosting_subscription_uid\']\n
software_type = state_change.kwargs["software_type"]\n
tag = state_change.kwargs[\'tag\']\n
filter_kw = software_instance.getSlaXmlAsDict()\n
\n \n
# Assertion: No packing list line should be related to this software instance\n # Assertion: No packing list line should be related to this software instance\n
packing_list_line = software_instance.getAggregateRelatedValue(portal_type=\'Sale Packing List Line\')\n packing_list_line = software_instance.getAggregateRelatedValue(portal_type=\'Sale Packing List Line\')\n
...@@ -101,55 +65,6 @@ if packing_list_line is not None:\n ...@@ -101,55 +65,6 @@ if packing_list_line is not None:\n
# Find a free computer partition. This means:\n # Find a free computer partition. This means:\n
# Computer Partition which doesn\'t have non delivered sale packing list related\n # Computer Partition which doesn\'t have non delivered sale packing list related\n
\n \n
SQL_WINDOW_SIZE = 50\n
\n
computer_partition = None\n
query_kw = {\n
\'software_release_url\': software_release_url_string,\n
\'portal_type\': \'Computer Partition\',\n
\'free_for_request\': 1,\n
}\n
\n
if software_instance.getPortalType() == "Slave Instance":\n
query_kw[\'free_for_request\'] = 0\n
\n
# support SLA\n
if "computer_guid" in filter_kw:\n
query_kw["parent_reference"] = filter_kw["computer_guid"]\n
\n
# fetch at mot 50 random Computer Partitions, and check if they are ok\n
isTransitionPossible = software_instance.getPortalObject().portal_workflow.isTransitionPossible\n
result_count = software_instance.portal_catalog.countResults(**query_kw)[0][0]\n
offset = max(0, result_count-1)\n
if offset >= SQL_WINDOW_SIZE:\n
limit = (random.randint(0, offset), SQL_WINDOW_SIZE)\n
else:\n
limit = (0, SQL_WINDOW_SIZE)\n
\n
software_release = context.portal_catalog.getResultValue(\n
portal_type=\'Software Release\',\n
url_string=software_release_url_string)\n
\n
for computer_partition_candidate in software_instance.portal_catalog(\n
limit=limit, **query_kw):\n
computer_partition_candidate = computer_partition_candidate.getObject()\n
# Check if the computer partition can be marked as busy (done by an interaction workflow on sale packing list level)\n
software_instance_portal_type = software_instance.getPortalType()\n
if isTransitionPossible(computer_partition_candidate, \'mark_busy\') and \\\n
software_instance_portal_type == "Software Instance":\n
computer_partition = computer_partition_candidate\n
break\n
elif software_instance_portal_type == "Slave Instance" and \\\n
checkSoftwareInstanceIsInstalledOnComputerPartition(software_release, computer_partition_candidate):\n
computer_partition = computer_partition_candidate\n
break\n
\n
if computer_partition is None:\n
raise ValueError(\'It was not possible to find free Computer Partition\')\n
\n
# lock computer partition\n
computer_partition.serialize()\n
\n
software_release_document = context.portal_catalog.getResultValue(\n software_release_document = context.portal_catalog.getResultValue(\n
portal_type=\'Software Release\',\n portal_type=\'Software Release\',\n
url_string=software_release_url_string)\n url_string=software_release_url_string)\n
...@@ -158,6 +73,16 @@ software_release_document = context.portal_catalog.getResultValue(\n ...@@ -158,6 +73,16 @@ software_release_document = context.portal_catalog.getResultValue(\n
portal = context.getPortalObject()\n portal = context.getPortalObject()\n
\n \n
hosting_subscription = software_instance.portal_catalog.getResultValue(uid=hosting_subscription_uid)\n hosting_subscription = software_instance.portal_catalog.getResultValue(uid=hosting_subscription_uid)\n
\n
open_order = portal.portal_catalog.getResultValue(\n
portal_type="Open Sale Order",\n
validation_state="validated")\n
computer_partition_relative_url = open_order.OpenSaleOrder_restrictMethodAsShadowUser(\n
open_order=open_order,\n
callable_object=open_order.OpenSaleOrder_findPartition,\n
argument_list=[software_release_url_string, software_instance.getSourceReference(),\n
software_instance.getPortalType(), software_instance.getSlaXmlAsDict()])\n
\n
sale_packing_list_line = context.HostingSubscription_getInstancePackingListLine(state_change)\n sale_packing_list_line = context.HostingSubscription_getInstancePackingListLine(state_change)\n
base_sale_packing_list = sale_packing_list_line.getParentValue()\n base_sale_packing_list = sale_packing_list_line.getParentValue()\n
# XXX: SoftwareInstance_createSalePackingList shall be used to create new Sale Packing List\n # XXX: SoftwareInstance_createSalePackingList shall be used to create new Sale Packing List\n
...@@ -176,14 +101,13 @@ sale_packing_list = sale_packing_list_module.newContent(\n ...@@ -176,14 +101,13 @@ sale_packing_list = sale_packing_list_module.newContent(\n
sale_packing_list_line = sale_packing_list.newContent(\n sale_packing_list_line = sale_packing_list.newContent(\n
portal_type=\'Sale Packing List Line\',\n portal_type=\'Sale Packing List Line\',\n
resource=context.portal_preferences.getPreferredInstanceSetupResource(),\n resource=context.portal_preferences.getPreferredInstanceSetupResource(),\n
aggregate_value_list=[software_instance, software_release_document, computer_partition, hosting_subscription]\n aggregate_list=[software_instance.getRelativeUrl(), software_release_document.getRelativeUrl(), \n
computer_partition_relative_url, hosting_subscription.getRelativeUrl()]\n
)\n )\n
\n \n
# confirm Sale Packing List\n # confirm Sale Packing List\n
sale_packing_list.confirm()\n sale_packing_list.confirm()\n
</string> </value>
]]></string> </value>
</item> </item>
<item> <item>
<key> <string>_params</string> </key> <key> <string>_params</string> </key>
......
...@@ -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>
......
...@@ -3,6 +3,7 @@ Computer | computer_usage ...@@ -3,6 +3,7 @@ Computer | computer_usage
Person | get_certificate Person | get_certificate
Person | revoke_certificate Person | revoke_certificate
Slave Instance | jump_to_software_instance Slave Instance | jump_to_software_instance
Slave Instance | unfiltered_tracking_list
Slave Instance | view Slave Instance | view
Slave Instance | web_view Slave Instance | web_view
Software Instance Module | view Software Instance Module | view
......
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
83 84
\ 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
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="Category" module="erp5.portal_type"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_Add_portal_content_Permission</string> </key>
<value>
<tuple>
<string>Assignor</string>
<string>Manager</string>
</tuple>
</value>
</item>
<item>
<key> <string>_Add_portal_folders_Permission</string> </key>
<value>
<tuple>
<string>Assignor</string>
<string>Manager</string>
</tuple>
</value>
</item>
<item>
<key> <string>_Copy_or_Move_Permission</string> </key>
<value>
<tuple>
<string>Assignor</string>
<string>Manager</string>
</tuple>
</value>
</item>
<item>
<key> <string>_Delete_objects_Permission</string> </key>
<value>
<tuple>
<string>Assignor</string>
<string>Manager</string>
</tuple>
</value>
</item>
<item>
<key> <string>_Modify_portal_content_Permission</string> </key>
<value>
<tuple>
<string>Assignee</string>
<string>Assignor</string>
<string>Manager</string>
<string>Owner</string>
</tuple>
</value>
</item>
<item>
<key> <string>codification</string> </key>
<value> <string>R-OPENORDER</string> </value>
</item>
<item>
<key> <string>description</string> </key>
<value>
<none/>
</value>
</item>
<item>
<key> <string>effective_date</string> </key>
<value>
<none/>
</value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>open_order</string> </value>
</item>
<item>
<key> <string>portal_type</string> </key>
<value> <string>Category</string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>Open Order</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="Category" module="erp5.portal_type"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_Add_portal_content_Permission</string> </key>
<value>
<tuple>
<string>Assignor</string>
<string>Manager</string>
</tuple>
</value>
</item>
<item>
<key> <string>_Add_portal_folders_Permission</string> </key>
<value>
<tuple>
<string>Assignor</string>
<string>Manager</string>
</tuple>
</value>
</item>
<item>
<key> <string>_Copy_or_Move_Permission</string> </key>
<value>
<tuple>
<string>Assignor</string>
<string>Manager</string>
</tuple>
</value>
</item>
<item>
<key> <string>_Delete_objects_Permission</string> </key>
<value>
<tuple>
<string>Assignor</string>
<string>Manager</string>
</tuple>
</value>
</item>
<item>
<key> <string>_Modify_portal_content_Permission</string> </key>
<value>
<tuple>
<string>Assignee</string>
<string>Assignor</string>
<string>Manager</string>
<string>Owner</string>
</tuple>
</value>
</item>
<item>
<key> <string>categories</string> </key>
<value>
<tuple>
<string>role/shadow</string>
</tuple>
</value>
</item>
<item>
<key> <string>codification</string> </key>
<value> <string>R-SHADOW</string> </value>
</item>
<item>
<key> <string>description</string> </key>
<value>
<none/>
</value>
</item>
<item>
<key> <string>effective_date</string> </key>
<value>
<none/>
</value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>shadow</string> </value>
</item>
<item>
<key> <string>portal_type</string> </key>
<value> <string>Category</string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>Shadow</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
82 85
\ 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
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="Integration Site" module="erp5.portal_type"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_Access_contents_information_Permission</string> </key>
<value>
<tuple>
<string>Assignee</string>
<string>Assignor</string>
<string>Associate</string>
<string>Auditor</string>
<string>Author</string>
<string>Manager</string>
<string>Owner</string>
</tuple>
</value>
</item>
<item>
<key> <string>_Add_portal_content_Permission</string> </key>
<value>
<tuple>
<string>Assignee</string>
<string>Assignor</string>
<string>Associate</string>
<string>Author</string>
<string>Manager</string>
<string>Owner</string>
</tuple>
</value>
</item>
<item>
<key> <string>_Modify_portal_content_Permission</string> </key>
<value>
<tuple>
<string>Assignee</string>
<string>Assignor</string>
<string>Associate</string>
<string>Author</string>
<string>Manager</string>
<string>Owner</string>
</tuple>
</value>
</item>
<item>
<key> <string>_View_Permission</string> </key>
<value>
<tuple>
<string>Assignee</string>
<string>Assignor</string>
<string>Associate</string>
<string>Auditor</string>
<string>Author</string>
<string>Manager</string>
<string>Owner</string>
</tuple>
</value>
</item>
<item>
<key> <string>_count</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent>
</value>
</item>
<item>
<key> <string>_mt_index</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAM=</string> </persistent>
</value>
</item>
<item>
<key> <string>_tree</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAQ=</string> </persistent>
</value>
</item>
<item>
<key> <string>categories</string> </key>
<value>
<tuple>
<string>source_trade/sale_trade_condition_module/payzen_sale_trade_condition</string>
</tuple>
</value>
</item>
<item>
<key> <string>default_reference</string> </key>
<value> <string>payzen</string> </value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>vifib_payzen_integration</string> </value>
</item>
<item>
<key> <string>language</string> </key>
<value>
<none/>
</value>
</item>
<item>
<key> <string>last_id</string> </key>
<value> <string>5</string> </value>
</item>
<item>
<key> <string>portal_type</string> </key>
<value> <string>Integration Site</string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>Vifib Payzen Integration</string> </value>
</item>
</dictionary>
</pickle>
</record>
<record id="2" aka="AAAAAAAAAAI=">
<pickle>
<global name="Length" module="BTrees.Length"/>
</pickle>
<pickle> <int>0</int> </pickle>
</record>
<record id="3" aka="AAAAAAAAAAM=">
<pickle>
<global name="OOBTree" module="BTrees.OOBTree"/>
</pickle>
<pickle>
<none/>
</pickle>
</record>
<record id="4" aka="AAAAAAAAAAQ=">
<pickle>
<global name="OOBTree" module="BTrees.OOBTree"/>
</pickle>
<pickle>
<none/>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="Integration Base Category Mapping" module="erp5.portal_type"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_count</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent>
</value>
</item>
<item>
<key> <string>_mt_index</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAM=</string> </persistent>
</value>
</item>
<item>
<key> <string>_tree</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAQ=</string> </persistent>
</value>
</item>
<item>
<key> <string>default_destination_reference</string> </key>
<value> <string>causality</string> </value>
</item>
<item>
<key> <string>default_source_reference</string> </key>
<value> <string>Causality</string> </value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>Causality</string> </value>
</item>
<item>
<key> <string>portal_type</string> </key>
<value> <string>Integration Base Category Mapping</string> </value>
</item>
</dictionary>
</pickle>
</record>
<record id="2" aka="AAAAAAAAAAI=">
<pickle>
<global name="Length" module="BTrees.Length"/>
</pickle>
<pickle> <int>0</int> </pickle>
</record>
<record id="3" aka="AAAAAAAAAAM=">
<pickle>
<global name="OOBTree" module="BTrees.OOBTree"/>
</pickle>
<pickle>
<none/>
</pickle>
</record>
<record id="4" aka="AAAAAAAAAAQ=">
<pickle>
<global name="OOBTree" module="BTrees.OOBTree"/>
</pickle>
<pickle>
<none/>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="Integration Base Category Mapping" module="erp5.portal_type"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_count</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent>
</value>
</item>
<item>
<key> <string>_mt_index</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAM=</string> </persistent>
</value>
</item>
<item>
<key> <string>_tree</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAQ=</string> </persistent>
</value>
</item>
<item>
<key> <string>default_destination_reference</string> </key>
<value> <string>resource</string> </value>
</item>
<item>
<key> <string>default_source_reference</string> </key>
<value> <string>Resource</string> </value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>Resource</string> </value>
</item>
<item>
<key> <string>last_id</string> </key>
<value> <string>1</string> </value>
</item>
<item>
<key> <string>portal_type</string> </key>
<value> <string>Integration Base Category Mapping</string> </value>
</item>
</dictionary>
</pickle>
</record>
<record id="2" aka="AAAAAAAAAAI=">
<pickle>
<global name="Length" module="BTrees.Length"/>
</pickle>
<pickle> <int>0</int> </pickle>
</record>
<record id="3" aka="AAAAAAAAAAM=">
<pickle>
<global name="OOBTree" module="BTrees.OOBTree"/>
</pickle>
<pickle>
<none/>
</pickle>
</record>
<record id="4" aka="AAAAAAAAAAQ=">
<pickle>
<global name="OOBTree" module="BTrees.OOBTree"/>
</pickle>
<pickle>
<none/>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="Integration Category Mapping" module="erp5.portal_type"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>default_destination_reference</string> </key>
<value> <string>resource/currency_module/EUR</string> </value>
</item>
<item>
<key> <string>default_source_reference</string> </key>
<value> <string>978</string> </value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>978</string> </value>
</item>
<item>
<key> <string>portal_type</string> </key>
<value> <string>Integration Category Mapping</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="Secure Payment Tool" module="erp5.portal_type"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>id</string> </key>
<value> <string>portal_secure_payments</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="Sale Trade Condition" module="erp5.portal_type"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_Access_contents_information_Permission</string> </key>
<value>
<tuple>
<string>Assignee</string>
<string>Assignor</string>
<string>Associate</string>
<string>Auditor</string>
<string>Author</string>
<string>Manager</string>
<string>Owner</string>
</tuple>
</value>
</item>
<item>
<key> <string>_Add_portal_content_Permission</string> </key>
<value>
<tuple>
<string>Assignee</string>
<string>Assignor</string>
<string>Associate</string>
<string>Author</string>
<string>Manager</string>
<string>Owner</string>
</tuple>
</value>
</item>
<item>
<key> <string>_Modify_portal_content_Permission</string> </key>
<value>
<tuple>
<string>Assignee</string>
<string>Assignor</string>
<string>Associate</string>
<string>Author</string>
<string>Manager</string>
<string>Owner</string>
</tuple>
</value>
</item>
<item>
<key> <string>_View_Permission</string> </key>
<value>
<tuple>
<string>Assignee</string>
<string>Assignor</string>
<string>Associate</string>
<string>Auditor</string>
<string>Author</string>
<string>Manager</string>
<string>Owner</string>
</tuple>
</value>
</item>
<item>
<key> <string>_identity_criterion</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent>
</value>
</item>
<item>
<key> <string>_range_criterion</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAM=</string> </persistent>
</value>
</item>
<item>
<key> <string>categories</string> </key>
<value>
<tuple>
<string>specialise/sale_trade_condition_module/vifib_trade_condition</string>
</tuple>
</value>
</item>
<item>
<key> <string>comment</string> </key>
<value>
<none/>
</value>
</item>
<item>
<key> <string>description</string> </key>
<value>
<none/>
</value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>payzen_sale_trade_condition</string> </value>
</item>
<item>
<key> <string>portal_type</string> </key>
<value> <string>Sale Trade Condition</string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>PayZen Sale Trade Condition</string> </value>
</item>
<item>
<key> <string>version</string> </key>
<value>
<none/>
</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/>
</value>
</item>
</dictionary>
</pickle>
</record>
<record id="3" aka="AAAAAAAAAAM=">
<pickle>
<global name="PersistentMapping" module="Persistence.mapping"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>data</string> </key>
<value>
<dictionary/>
</value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
2011/10/06 Łukasz Nowak
* Initial release.
\ No newline at end of file
Vifib
\ No newline at end of file
vifib_payzen
vifib_data
\ No newline at end of file
Payzen integration data for Vifib.net
\ No newline at end of file
GPL
\ No newline at end of file
7
\ No newline at end of file
portal_integrations/vifib_payzen_integration
portal_integrations/vifib_payzen_integration/Causality
portal_integrations/vifib_payzen_integration/Resource
portal_integrations/vifib_payzen_integration/Resource/**
portal_secure_payments
sale_trade_condition_module/payzen_sale_trade_condition
\ No newline at end of file
vifib_data_payzen
\ No newline at end of file
Vifib 0.5
\ No newline at end of file
80 81
\ 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
...@@ -26,6 +26,54 @@ ...@@ -26,6 +26,54 @@
############################################################################## ##############################################################################
from Products.ERP5Security.ERP5GroupManager import ConsistencyError from Products.ERP5Security.ERP5GroupManager import ConsistencyError
from AccessControl.SecurityManagement import getSecurityManager, \
setSecurityManager, newSecurityManager
from AccessControl import Unauthorized
def restrictMethodAsShadowUser(self, open_order=None, callable_object=None,
argument_list=None, argument_dict=None):
"""
Restrict the security access of a method to the unaccessible shadow user
associated to the current user.
"""
if argument_list is None:
argument_list = []
if argument_dict is None:
argument_dict = {}
if open_order is None or callable_object is None:
raise TypeError('open_order and callable_object cannot be None')
relative_url = open_order.getRelativeUrl()
if open_order.getPortalType() != 'Open Sale Order':
raise Unauthorized("%s is not an Open Sale Order" % relative_url)
else:
# Check that open order is the validated one for the current user
if open_order.getValidationState() != 'validated':
raise Unauthorized('Open Sale Order %s is not validated.' % relative_url)
acl_users = open_order.getPortalObject().acl_users
# Switch to the shadow user temporarily, so that the behavior would not
# change even if this method is invoked by random users.
sm = getSecurityManager()
newSecurityManager(None, acl_users.getUserById(open_order.getReference()))
try:
return callable_object(*argument_list, **argument_dict)
finally:
# Restore the original user.
setSecurityManager(sm)
def SoftwareInstance_bangAsSelf(self, relative_url=None, reference=None,
comment=None):
"""Call bang on self."""
# micro security: can caller access software instance?
software_instance = self.restrictedTraverse(relative_url)
sm = getSecurityManager()
newSecurityManager(None, self.getPortalObject().acl_users.getUserById(
reference))
try:
software_instance.reportComputerPartitionBang(comment=comment)
finally:
# Restore the original user.
setSecurityManager(sm)
def getComputerSecurityCategory(self, base_category_list, user_name, def getComputerSecurityCategory(self, base_category_list, user_name,
object, portal_type): object, portal_type):
...@@ -82,7 +130,7 @@ def getSoftwareInstanceSecurityCategory(self, base_category_list, user_name, ...@@ -82,7 +130,7 @@ def getSoftwareInstanceSecurityCategory(self, base_category_list, user_name,
self.getPortalFutureInventoryStateList() + \ self.getPortalFutureInventoryStateList() + \
self.getPortalReservedInventoryStateList() + \ self.getPortalReservedInventoryStateList() + \
self.getPortalTransitInventoryStateList(), self.getPortalTransitInventoryStateList(),
sort_on=(('creation_date', 'DESC'),) sort_on=(('movement.start_date', 'DESC'),)
) )
if current_delivery_line is not None: if current_delivery_line is not None:
hosting_item = current_delivery_line.getAggregateValue(portal_type='Hosting Subscription') hosting_item = current_delivery_line.getAggregateValue(portal_type='Hosting Subscription')
...@@ -94,3 +142,4 @@ def getSoftwareInstanceSecurityCategory(self, base_category_list, user_name, ...@@ -94,3 +142,4 @@ def getSoftwareInstanceSecurityCategory(self, base_category_list, user_name,
"with reference %r" % user_name "with reference %r" % user_name
return category_list return category_list
<local_roles_item>
<local_roles>
<role id='G-COMPANY'>
<item>Auditor</item>
<item>Author</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
<local_roles_item> <local_roles_item>
<local_roles> <local_roles>
<role id='G-COMPANY'>
<item>Auditor</item>
<item>Author</item>
</role>
<role id='R-MEMBER'>
<item>Auditor</item>
<item>Author</item>
</role>
<role id='zope'> <role id='zope'>
<item>Owner</item> <item>Owner</item>
</role> </role>
......
<local_roles_item> <local_roles_item>
<local_roles> <local_roles>
<role id='F-SALE_G-COMPANY'> <role id='G-COMPANY'>
<item>Auditor</item> <item>Auditor</item>
<item>Author</item> <item>Author</item>
</role> </role>
......
<local_roles_item>
<local_roles>
<role id='G-COMPANY'>
<item>Auditor</item>
<item>Author</item>
</role>
<role id='zope'>
<item>Owner</item>
</role>
</local_roles>
</local_roles_item>
\ No newline at end of file
...@@ -3,13 +3,13 @@ ...@@ -3,13 +3,13 @@
<role id='R-COMPUTER'> <role id='R-COMPUTER'>
<item>Auditor</item> <item>Auditor</item>
</role> </role>
<role id='R-INSTANCE'>
<item>Auditor</item>
</role>
<role id='R-MEMBER'> <role id='R-MEMBER'>
<item>Auditor</item> <item>Auditor</item>
<item>Author</item> <item>Author</item>
</role> </role>
<role id='R-SHADOW'>
<item>Auditor</item>
</role>
<role id='devel'> <role id='devel'>
<item>Owner</item> <item>Owner</item>
</role> </role>
......
...@@ -3,15 +3,6 @@ ...@@ -3,15 +3,6 @@
<role id='ERP5TypeTestCase'> <role id='ERP5TypeTestCase'>
<item>Owner</item> <item>Owner</item>
</role> </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='test_computer'> <role id='test_computer'>
<item>Assignor</item> <item>Assignor</item>
</role> </role>
......
<local_roles_item> <local_roles_item>
<local_roles> <local_roles>
<role id='G-COMPANY'>
<item>Auditor</item>
<item>Author</item>
</role>
<role id='R-MEMBER'> <role id='R-MEMBER'>
<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-MEMBER'> <role id='R-MEMBER'>
<item>Auditor</item> <item>Auditor</item>
</role> </role>
......
<local_roles_item>
<local_roles>
<role id='G-COMPANY'>
<item>Auditor</item>
<item>Author</item>
</role>
<role id='zope'>
<item>Owner</item>
</role>
</local_roles>
</local_roles_item>
\ No newline at end of file
<local_roles_item>
<local_roles>
<role id='G-COMPANY'>
<item>Auditor</item>
<item>Author</item>
</role>
<role id='zope'>
<item>Owner</item>
</role>
</local_roles>
</local_roles_item>
\ No newline at end of file
<local_roles_item> <local_roles_item>
<local_roles> <local_roles>
<role id='F-SALE_G-COMPANY'> <role id='G-COMPANY'>
<item>Auditor</item> <item>Auditor</item>
<item>Author</item> <item>Author</item>
</role> </role>
......
<local_roles_item>
<local_roles>
<role id='G-COMPANY'>
<item>Auditor</item>
<item>Author</item>
</role>
<role id='zope'>
<item>Owner</item>
</role>
</local_roles>
</local_roles_item>
\ No newline at end of file
<local_roles_item> <local_roles_item>
<local_roles> <local_roles>
<role id='G-COMPANY'>
<item>Auditor</item>
<item>Author</item>
</role>
<role id='R-MEMBER'> <role id='R-MEMBER'>
<item>Auditor</item> <item>Auditor</item>
<item>Author</item> <item>Author</item>
......
<local_roles_item>
<local_roles>
<role id='G-COMPANY'>
<item>Auditor</item>
<item>Author</item>
</role>
<role id='zope'>
<item>Owner</item>
</role>
</local_roles>
</local_roles_item>
\ No newline at end of file
<local_roles_item>
<local_roles>
<role id='G-COMPANY'>
<item>Auditor</item>
<item>Author</item>
</role>
<role id='zope'>
<item>Owner</item>
</role>
</local_roles>
</local_roles_item>
\ No newline at end of file
<local_roles_item>
<local_roles>
<role id='G-COMPANY'>
<item>Auditor</item>
<item>Author</item>
</role>
<role id='zope'>
<item>Owner</item>
</role>
</local_roles>
</local_roles_item>
\ No newline at end of file
<local_roles_item> <local_roles_item>
<local_roles> <local_roles>
<role id='F-SALE_G-COMPANY'> <role id='G-COMPANY'>
<item>Auditor</item> <item>Auditor</item>
<item>Author</item> <item>Author</item>
</role> </role>
......
<local_roles_item> <local_roles_item>
<local_roles> <local_roles>
<role id='G-COMPANY'>
<item>Auditor</item>
<item>Author</item>
</role>
<role id='R-MEMBER'> <role id='R-MEMBER'>
<item>Auditor</item> <item>Auditor</item>
<item>Author</item> <item>Author</item>
......
<local_roles_item> <local_roles_item>
<local_roles> <local_roles>
<role id='F-PRODUCTION_G-COMPANY'> <role id='G-COMPANY'>
<item>Auditor</item>
<item>Author</item>
</role>
<role id='F-SALE_G-COMPANY'>
<item>Auditor</item> <item>Auditor</item>
<item>Author</item> <item>Author</item>
</role> </role>
......
<local_roles_item> <local_roles_item>
<local_roles> <local_roles>
<role id='F-PRODUCTION_G-COMPANY'> <role id='G-COMPANY'>
<item>Assignor</item>
</role>
<role id='F-SALE_G-COMPANY'>
<item>Assignor</item> <item>Assignor</item>
</role> </role>
<role id='R-MEMBER'> <role id='R-MEMBER'>
......
<local_roles_item> <local_roles_item>
<local_roles> <local_roles>
<role id='F-PRODUCTION_G-COMPANY'> <role id='G-COMPANY'>
<item>Auditor</item>
<item>Author</item>
</role>
<role id='F-SALE_G-COMPANY'>
<item>Auditor</item> <item>Auditor</item>
<item>Author</item> <item>Author</item>
</role> </role>
......
<local_roles_item> <local_roles_item>
<local_roles> <local_roles>
<role id='F-PRODUCTION_G-COMPANY'> <role id='G-COMPANY'>
<item>Assignor</item> <item>Assignor</item>
</role> </role>
<role id='F-SALE_G-COMPANY'>
<item>Assignor</item>
</role>
<role id='romain'>
<item>Owner</item>
</role>
<role id='test_hr_admin'> <role id='test_hr_admin'>
<item>Associate</item> <item>Associate</item>
</role> </role>
<role id='zope'>
<item>Owner</item>
</role>
</local_roles> </local_roles>
</local_roles_item> </local_roles_item>
\ No newline at end of file
<local_roles_item> <local_roles_item>
<local_roles> <local_roles>
<role id='F-PRODUCTION_G-COMPANY'> <role id='G-COMPANY'>
<item>Assignor</item>
</role>
<role id='F-SALE_G-COMPANY'>
<item>Assignor</item> <item>Assignor</item>
</role> </role>
<role id='romain'> <role id='romain'>
......
<local_roles_item> <local_roles_item>
<local_roles> <local_roles>
<role id='F-PRODUCTION_G-COMPANY'> <role id='G-COMPANY'>
<item>Assignor</item> <item>Assignor</item>
</role> </role>
<role id='F-SALE_G-COMPANY'>
<item>Assignor</item>
</role>
<role id='romain'>
<item>Owner</item>
</role>
<role id='test_vifib_admin'> <role id='test_vifib_admin'>
<item>Associate</item> <item>Associate</item>
</role> </role>
<role id='zope'>
<item>Owner</item>
</role>
</local_roles> </local_roles>
</local_roles_item> </local_roles_item>
\ No newline at end of file
<local_roles_item> <local_roles_item>
<local_roles> <local_roles>
<role id='F-PRODUCTION_G-COMPANY'> <role id='G-COMPANY'>
<item>Assignor</item> <item>Assignor</item>
</role> </role>
<role id='F-SALE_G-COMPANY'>
<item>Assignor</item>
</role>
<role id='romain'>
<item>Owner</item>
</role>
<role id='test_vifib_customer'> <role id='test_vifib_customer'>
<item>Associate</item> <item>Associate</item>
</role> </role>
<role id='zope'>
<item>Owner</item>
</role>
</local_roles> </local_roles>
</local_roles_item> </local_roles_item>
\ No newline at end of file
<local_roles_item> <local_roles_item>
<local_roles> <local_roles>
<role id='F-PRODUCTION_G-COMPANY'> <role id='G-COMPANY'>
<item>Assignor</item> <item>Assignor</item>
</role> </role>
<role id='F-SALE_G-COMPANY'>
<item>Assignor</item>
</role>
<role id='supergabriel'>
<item>Owner</item>
</role>
<role id='test_vifib_customer_a'> <role id='test_vifib_customer_a'>
<item>Associate</item> <item>Associate</item>
</role> </role>
<role id='zope'>
<item>Owner</item>
</role>
</local_roles> </local_roles>
</local_roles_item> </local_roles_item>
\ No newline at end of file
<local_roles_item> <local_roles_item>
<local_roles> <local_roles>
<role id='F-PRODUCTION_G-COMPANY'> <role id='G-COMPANY'>
<item>Assignor</item> <item>Assignor</item>
</role> </role>
<role id='F-SALE_G-COMPANY'>
<item>Assignor</item>
</role>
<role id='romain'>
<item>Owner</item>
</role>
<role id='test_vifib_developer'> <role id='test_vifib_developer'>
<item>Associate</item> <item>Associate</item>
</role> </role>
<role id='zope'>
<item>Owner</item>
</role>
</local_roles> </local_roles>
</local_roles_item> </local_roles_item>
\ No newline at end of file
<local_roles_item> <local_roles_item>
<local_roles> <local_roles>
<role id='F-PRODUCTION_G-COMPANY'> <role id='G-COMPANY'>
<item>Assignor</item> <item>Assignor</item>
</role> </role>
<role id='F-SALE_G-COMPANY'>
<item>Assignor</item>
</role>
<role id='romain'>
<item>Owner</item>
</role>
<role id='test_vifib_member'> <role id='test_vifib_member'>
<item>Associate</item> <item>Associate</item>
</role> </role>
<role id='zope'>
<item>Owner</item>
</role>
</local_roles> </local_roles>
</local_roles_item> </local_roles_item>
\ No newline at end of file
<local_roles_item> <local_roles_item>
<local_roles> <local_roles>
<role id='F-PRODUCTION_G-COMPANY'> <role id='G-COMPANY'>
<item>Assignor</item> <item>Assignor</item>
</role> </role>
<role id='F-SALE_G-COMPANY'>
<item>Assignor</item>
</role>
<role id='romain'>
<item>Owner</item>
</role>
<role id='test_vifib_user_admin'> <role id='test_vifib_user_admin'>
<item>Associate</item> <item>Associate</item>
</role> </role>
<role id='zope'>
<item>Owner</item>
</role>
</local_roles> </local_roles>
</local_roles_item> </local_roles_item>
\ No newline at end of file
<local_roles_item> <local_roles_item>
<local_roles> <local_roles>
<role id='F-PRODUCTION_G-COMPANY'> <role id='G-COMPANY'>
<item>Assignor</item> <item>Assignor</item>
</role> </role>
<role id='F-SALE_G-COMPANY'>
<item>Assignor</item>
</role>
<role id='romain'>
<item>Owner</item>
</role>
<role id='test_vifib_user_developer'> <role id='test_vifib_user_developer'>
<item>Associate</item> <item>Associate</item>
</role> </role>
<role id='zope'>
<item>Owner</item>
</role>
</local_roles> </local_roles>
</local_roles_item> </local_roles_item>
\ No newline at end of file
<local_roles_item>
<local_roles>
<role id='zope'>
<item>Owner</item>
</role>
</local_roles>
</local_roles_item>
\ No newline at end of file
<local_roles_item>
<local_roles>
<role id='G-COMPANY'>
<item>Auditor</item>
<item>Author</item>
</role>
<role id='zope'>
<item>Owner</item>
</role>
</local_roles>
</local_roles_item>
\ No newline at end of file
<local_roles_item>
<local_roles>
<role id='ERP5TypeTestCase'>
<item>Owner</item>
</role>
<role id='R-MEMBER'>
<item>Auditor</item>
</role>
</local_roles>
</local_roles_item>
\ No newline at end of file
<local_roles_item>
<local_roles>
<role id='G-COMPANY'>
<item>Auditor</item>
<item>Author</item>
</role>
<role id='zope'>
<item>Owner</item>
</role>
</local_roles>
</local_roles_item>
\ No newline at end of file
<local_roles_item>
<local_roles>
<role id='G-COMPANY'>
<item>Auditor</item>
<item>Author</item>
</role>
<role id='zope'>
<item>Owner</item>
</role>
</local_roles>
</local_roles_item>
\ No newline at end of file
<local_roles_item> <local_roles_item>
<local_roles> <local_roles>
<role id='G-COMPANY'>
<item>Auditor</item>
<item>Author</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>Auditor</item>
<item>Author</item>
</role>
<role id='zope'>
<item>Owner</item>
</role>
</local_roles>
</local_roles_item>
\ No newline at end of file
<local_roles_item>
<local_roles>
<role id='G-COMPANY'>
<item>Auditor</item>
<item>Author</item>
</role>
<role id='zope'>
<item>Owner</item>
</role>
</local_roles>
</local_roles_item>
\ No newline at end of file
<local_roles_item>
<local_roles>
<role id='G-COMPANY'>
<item>Auditor</item>
<item>Author</item>
</role>
<role id='zope'>
<item>Owner</item>
</role>
</local_roles>
</local_roles_item>
\ No newline at end of file
<local_roles_item> <local_roles_item>
<local_roles> <local_roles>
<role id='G-COMPANY'>
<item>Auditor</item>
<item>Author</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>Auditor</item>
<item>Author</item>
</role>
<role id='R-COMPUTER'> <role id='R-COMPUTER'>
<item>Auditor</item> <item>Auditor</item>
<item>Author</item> <item>Author</item>
......
<local_roles_item> <local_roles_item>
<local_roles> <local_roles>
<role id='R-COMPUTER'> <role id='G-COMPANY'>
<item>Auditor</item> <item>Auditor</item>
<item>Author</item>
</role> </role>
<role id='R-MEMBER'> <role id='R-MEMBER'>
<item>Auditor</item> <item>Auditor</item>
......
...@@ -3,8 +3,5 @@ ...@@ -3,8 +3,5 @@
<role id='ERP5TypeTestCase'> <role id='ERP5TypeTestCase'>
<item>Owner</item> <item>Owner</item>
</role> </role>
<role id='R-COMPUTER'>
<item>Auditor</item>
</role>
</local_roles> </local_roles>
</local_roles_item> </local_roles_item>
\ No newline at end of file
<local_roles_item> <local_roles_item>
<local_roles> <local_roles>
<role id='G-COMPANY'>
<item>Auditor</item>
<item>Author</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='F-SOFTDEV_G-COMPANY'> <role id='G-COMPANY'>
<item>Auditor</item> <item>Auditor</item>
<item>Author</item> <item>Author</item>
</role> </role>
......
<local_roles_item> <local_roles_item>
<local_roles> <local_roles>
<role id='G-COMPANY'>
<item>Auditor</item>
<item>Author</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='F-SALE_G-COMPANY'> <role id='G-COMPANY'>
<item>Auditor</item> <item>Auditor</item>
<item>Author</item> <item>Author</item>
</role> </role>
......
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