Commit 83ff9883 authored by Romain Courteaud's avatar Romain Courteaud

slapos_accounting:

* disable packing list generation from tioxml
  Everything is broken currently...
* drop testSlapOSContractAlarm
* drop create_new_cloud_contract action
* drop jump_to_cloud_contract action
* test: SoftwareInstance_requestValidationPayment was dropped
* drop CloudContractLine_getRemainingInvoiceCredit
* drop Person_isAllowedToAllocate
* drop Entity_statSlapOSOutstandingAmount
* test: change class inheritance
  do not inherit from a class with existing test, as it forces subclass to keep exactly the same test function name
* lint: do not redefine id variable
parent cc8ae8bf
<?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_jio_action</string>
</tuple>
</value>
</item>
<item>
<key> <string>category</string> </key>
<value> <string>object_jio_action</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>create_new_cloud_contract</string> </value>
</item>
<item>
<key> <string>permissions</string> </key>
<value>
<tuple>
<string>View</string>
</tuple>
</value>
</item>
<item>
<key> <string>priority</string> </key>
<value> <float>50.0</float> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>Create Cloud Contract</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}/Person_generateCloudContract</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?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_jio_jump</string>
</tuple>
</value>
</item>
<item>
<key> <string>category</string> </key>
<value> <string>object_jio_jump</string> </value>
</item>
<item>
<key> <string>condition</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAM=</string> </persistent>
</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>jump_to_cloud_contract</string> </value>
</item>
<item>
<key> <string>permissions</string> </key>
<value>
<tuple>
<string>View</string>
</tuple>
</value>
</item>
<item>
<key> <string>priority</string> </key>
<value> <float>21.0</float> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>Cloud Contract</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 encoding="cdata"><![CDATA[
string:${object_url}/Base_jumpToRelatedObject?base_category=destination_section&portal_type=Cloud+Contract
]]></string> </value>
</item>
</dictionary>
</pickle>
</record>
<record id="3" aka="AAAAAAAAAAM=">
<pickle>
<global name="Expression" module="Products.CMFCore.Expression"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>text</string> </key>
<value> <string>python: portal.Base_checkPermission(\'cloud_contract_module\', \'View\')</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
...@@ -10,6 +10,10 @@ ...@@ -10,6 +10,10 @@
<key> <string>active_sense_method_id</string> </key> <key> <string>active_sense_method_id</string> </key>
<value> <string>Alarm_searchSubmittedConsumptionTioXMLFileList</string> </value> <value> <string>Alarm_searchSubmittedConsumptionTioXMLFileList</string> </value>
</item> </item>
<item>
<key> <string>automatic_solve</string> </key>
<value> <int>0</int> </value>
</item>
<item> <item>
<key> <string>description</string> </key> <key> <string>description</string> </key>
<value> <value>
...@@ -18,7 +22,7 @@ ...@@ -18,7 +22,7 @@
</item> </item>
<item> <item>
<key> <string>enabled</string> </key> <key> <string>enabled</string> </key>
<value> <int>1</int> </value> <value> <int>0</int> </value>
</item> </item>
<item> <item>
<key> <string>id</string> </key> <key> <string>id</string> </key>
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
specific use. Returns the Account object specific use. Returns the Account object
''' '''
id = { account_id = {
'asset_receivable_subscriber': 'receivable', 'asset_receivable_subscriber': 'receivable',
'asset_deposit_subscriber': 'deposit', 'asset_deposit_subscriber': 'deposit',
'collection': 'payment_to_encash', 'collection': 'payment_to_encash',
...@@ -12,7 +12,7 @@ id = { ...@@ -12,7 +12,7 @@ id = {
account, = context.getPortalObject().portal_catalog( account, = context.getPortalObject().portal_catalog(
portal_type='Account', portal_type='Account',
id=id, id=account_id,
validation_state='validated', validation_state='validated',
limit=2, limit=2,
) )
......
person = context.getParentValue().getDestinationSectionValue()
amount = person.Entity_statOutstandingAmount(
resource_uid=context.getPriceCurrencyUid())
return context.getMaximumInvoiceCredit() - amount
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="PythonScript" module="Products.PythonScripts.PythonScript"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_bind_names</string> </key>
<value>
<object>
<klass>
<global name="_reconstructor" module="copy_reg"/>
</klass>
<tuple>
<global name="NameAssignments" module="Shared.DC.Scripts.Bindings"/>
<global name="object" module="__builtin__"/>
<none/>
</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>_params</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>CloudContractLine_getRemainingInvoiceCredit</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
...@@ -409,10 +409,6 @@ ...@@ -409,10 +409,6 @@
<string>maximum_invoice_credit</string> <string>maximum_invoice_credit</string>
<string>Maximum Invoice Credit</string> <string>Maximum Invoice Credit</string>
</tuple> </tuple>
<tuple>
<string>CloudContractLine_getRemainingInvoiceCredit</string>
<string>Remaining Credit</string>
</tuple>
</list> </list>
</value> </value>
</item> </item>
......
portal = context.getPortalObject()
from DateTime import DateTime
if contract is None:
contract = portal.portal_catalog.getResultValue(
portal_type="Cloud Contract",
default_destination_section_uid=context.getUid(),
validation_state=['invalidated', 'validated'],
)
if contract is None:
return context.Entity_statOutstandingAmount()
# We evaluate Multiple scenarios
amount = context.Entity_statOutstandingAmount()
# All payed so just return
if not amount:
return amount
maximum_invoice_delay = contract.getMaximumInvoiceDelay()
maximum_invoice_credit = 0.0
# For now we only support those 2 currencies
currency_uid_list = [
portal.currency_module.EUR.getUid(),
portal.currency_module.CNY.getUid(),
]
contract_line_list = contract.objectValues(
portal_type="Cloud Contract Line")
if not len(contract_line_list):
return context.Entity_statOutstandingAmount(
at_date=at_date)
for currency_uid in currency_uid_list:
for line in contract_line_list:
if line.getPriceCurrencyUid() == currency_uid:
maximum_invoice_credit = line.getMaximumInvoiceCredit()
amount_per_currency = context.Entity_statOutstandingAmount(
at_date=at_date, resource_uid=currency_uid)
if amount_per_currency > maximum_invoice_credit:
return amount_per_currency - maximum_invoice_credit
# We exceed maximum amount because
# user already requested too much
if maximum_invoice_delay:
# Recalculate now ignoring the all invoices from lastest days.
at_date = DateTime()-maximum_invoice_delay
return context.Entity_statOutstandingAmount(
at_date=at_date)
return amount
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="PythonScript" module="Products.PythonScripts.PythonScript"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_bind_names</string> </key>
<value>
<object>
<klass>
<global name="_reconstructor" module="copy_reg"/>
</klass>
<tuple>
<global name="NameAssignments" module="Shared.DC.Scripts.Bindings"/>
<global name="object" module="__builtin__"/>
<none/>
</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>_params</string> </key>
<value> <string>contract=None, at_date=None, **kw</string> </value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>Entity_statSlapOSOutstandingAmount</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
portal = context.getPortalObject()
if context.getPortalType() != "Person":
raise ValueError("This script can only be called under person context")
payment_portal_type = "Payment Transaction"
contract_portal_type = "Cloud Contract"
tag = "%s_requestValidationPayment_inProgress" % context.getUid()
if (portal.portal_activities.countMessageWithTag(tag) > 0):
# The cloud contract is already under creation but can not be fetched from catalog
# As it is not possible to fetch informations, it is better to raise an error
return None
contract = portal.portal_catalog.getResultValue(
portal_type=contract_portal_type,
default_destination_section_uid=context.getUid(),
validation_state=['invalidated', 'validated'],
)
msg = context.Base_translateString("Cloud Contract related to %s" % context.getTitle())
if (contract is None):
# Prevent concurrent transaction to create 2 contracts for the same person
context.serialize()
# Time to create the contract
contract = portal.cloud_contract_module.newContent(
portal_type=contract_portal_type,
title='Contract for "%s"' % context.getTitle(),
destination_section_value=context
)
contract.validate(comment='New automatic contract for %s' % context.getTitle())
contract.invalidate(comment='New automatic contract for %s' % context.getTitle())
contract.reindexObject(activate_kw={'tag': tag})
msg = context.Base_translateString("Cloud Contract created.")
if (contract.getValidationState() == "invalidated"):
# search if the user already paid anything
payment = portal.portal_catalog.getResultValue(
portal_type=payment_portal_type,
default_destination_section_uid=context.getUid(),
simulation_state=['stopped'],
)
if (payment is not None):
# Found one payment, the contract can be validated
comment = "Contract validated as paid payment %s found" % payment.getRelativeUrl()
contract.validate(comment=comment)
contract.reindexObject(activate_kw={'tag': tag})
if batch:
return contract
return contract.Base_redirect(
keep_items={"portal_status_message": msg})
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="PythonScript" module="Products.PythonScripts.PythonScript"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_bind_names</string> </key>
<value>
<object>
<klass>
<global name="_reconstructor" module="copy_reg"/>
</klass>
<tuple>
<global name="NameAssignments" module="Shared.DC.Scripts.Bindings"/>
<global name="object" module="__builtin__"/>
<none/>
</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>_params</string> </key>
<value> <string>batch=False</string> </value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>Person_generateCloudContract</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
# XXX TODO cloud contract is not global to ERP5, but per virtual master
return True
portal = context.getPortalObject()
if not portal.portal_preferences.getPreferredCloudContractEnabled():
return True
person = context
contract_portal_type = "Cloud Contract"
contract = portal.portal_catalog.getResultValue(
portal_type=contract_portal_type,
default_destination_section_uid=person.getUid(),
validation_state='validated',
)
if (contract is not None) and (contract.getValidationState() == "validated"):
return True
else:
return False
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="PythonScript" module="Products.PythonScripts.PythonScript"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_bind_names</string> </key>
<value>
<object>
<klass>
<global name="_reconstructor" module="copy_reg"/>
</klass>
<tuple>
<global name="NameAssignments" module="Shared.DC.Scripts.Bindings"/>
<global name="object" module="__builtin__"/>
<none/>
</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>_params</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>Person_isAllowedToAllocate</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
...@@ -11,7 +11,8 @@ from DateTime import DateTime ...@@ -11,7 +11,8 @@ from DateTime import DateTime
def convertCategoryList(base, l): def convertCategoryList(base, l):
return ['%s/%s' % (base, q) for q in l] return ['%s/%s' % (base, q) for q in l]
class TestSlapOSSalePackingListBuilder(SlapOSTestCaseMixin):
class TestSlapOSBuilderMixin(SlapOSTestCaseMixin):
def checkSimulationMovement(self, simulation_movement): def checkSimulationMovement(self, simulation_movement):
self.assertEqual(1.0, simulation_movement.getDeliveryRatio()) self.assertEqual(1.0, simulation_movement.getDeliveryRatio())
...@@ -88,6 +89,9 @@ class TestSlapOSSalePackingListBuilder(SlapOSTestCaseMixin): ...@@ -88,6 +89,9 @@ class TestSlapOSSalePackingListBuilder(SlapOSTestCaseMixin):
+ category_list, + category_list,
delivery.getCategoryList()) delivery.getCategoryList())
class TestSlapOSSalePackingListBuilder(TestSlapOSBuilderMixin):
def test(self): def test(self):
resource, _, _, _, _, instance_tree = self.bootstrapAllocableInstanceTree(is_accountable=True) resource, _, _, _, _, instance_tree = self.bootstrapAllocableInstanceTree(is_accountable=True)
project = instance_tree.getFollowUpValue() project = instance_tree.getFollowUpValue()
...@@ -172,7 +176,7 @@ class TestSlapOSSalePackingListBuilder(SlapOSTestCaseMixin): ...@@ -172,7 +176,7 @@ class TestSlapOSSalePackingListBuilder(SlapOSTestCaseMixin):
self.checkDelivery(simulation_movement_2, delivery_2, **delivery_kw) self.checkDelivery(simulation_movement_2, delivery_2, **delivery_kw)
class TestSlapOSSaleInvoiceBuilder(TestSlapOSSalePackingListBuilder): class TestSlapOSSaleInvoiceBuilder(TestSlapOSBuilderMixin):
def test(self, causality1=None, causality2=None): # pylint: disable=arguments-differ def test(self, causality1=None, causality2=None): # pylint: disable=arguments-differ
resource, _, _, _, _, instance_tree = self.bootstrapAllocableInstanceTree(is_accountable=True) resource, _, _, _, _, instance_tree = self.bootstrapAllocableInstanceTree(is_accountable=True)
...@@ -1105,7 +1109,7 @@ class TestSlapOSSaleInvoiceBuilder(TestSlapOSSalePackingListBuilder): ...@@ -1105,7 +1109,7 @@ class TestSlapOSSaleInvoiceBuilder(TestSlapOSSalePackingListBuilder):
) )
class TestSlapOSSaleInvoiceTransactionBuilder(TestSlapOSSalePackingListBuilder): class TestSlapOSSaleInvoiceTransactionBuilder(TestSlapOSBuilderMixin):
def checkSimulationMovement(self, simulation_movement): def checkSimulationMovement(self, simulation_movement):
self.assertNotEqual(0.0, simulation_movement.getDeliveryRatio()) self.assertNotEqual(0.0, simulation_movement.getDeliveryRatio())
self.assertEqual(0.0, simulation_movement.getDeliveryError()) self.assertEqual(0.0, simulation_movement.getDeliveryError())
...@@ -1635,7 +1639,7 @@ class TestSlapOSSaleInvoiceTransactionBuilder(TestSlapOSSalePackingListBuilder): ...@@ -1635,7 +1639,7 @@ class TestSlapOSSaleInvoiceTransactionBuilder(TestSlapOSSalePackingListBuilder):
self.assertEqual('solved', invoice_2.getCausalityState()) self.assertEqual('solved', invoice_2.getCausalityState())
self.assertEqual('confirmed', invoice_2.getSimulationState()) self.assertEqual('confirmed', invoice_2.getSimulationState())
class TestSlapOSSaleInvoiceTransactionTradeModelBuilder(TestSlapOSSalePackingListBuilder): class TestSlapOSSaleInvoiceTransactionTradeModelBuilder(TestSlapOSBuilderMixin):
def checkSimulationMovement(self, simulation_movement): def checkSimulationMovement(self, simulation_movement):
self.assertNotEqual(0.0, simulation_movement.getDeliveryRatio()) self.assertNotEqual(0.0, simulation_movement.getDeliveryRatio())
self.assertEqual(0.0, simulation_movement.getDeliveryError()) self.assertEqual(0.0, simulation_movement.getDeliveryError())
......
# Copyright (c) 2013 Nexedi SA and Contributors. All Rights Reserved.
from erp5.component.test.SlapOSTestCaseMixin import SlapOSTestCaseMixin
class TestSlapOSRequestValidationPayment(SlapOSTestCaseMixin):
def test_alarm_software_instance_unallocated(self):
self._makeTree()
preference = self.portal.portal_preferences.getActiveSystemPreference()
preference.setPreferredCloudContractEnabled(True)
self.tic()
script_name = "SoftwareInstance_requestValidationPayment"
alarm = self.portal.portal_alarms.slapos_contract_request_validation_payment
self._test_alarm(
alarm, self.software_instance, script_name)
def test_alarm_slave_instance_unallocated(self):
self._makeSlaveTree()
preference = self.portal.portal_preferences.getActiveSystemPreference()
preference.setPreferredCloudContractEnabled(True)
self.tic()
script_name = "SoftwareInstance_requestValidationPayment"
alarm = self.portal.portal_alarms.slapos_contract_request_validation_payment
self._test_alarm(
alarm, self.software_instance, script_name)
def test_alarm_software_instance_unallocated_disable_cloud_contract(self):
self._makeTree()
preference = self.portal.portal_preferences.getActiveSystemPreference()
preference.setPreferredCloudContractEnabled(False)
self.tic()
script_name = "SoftwareInstance_requestValidationPayment"
alarm = self.portal.portal_alarms.slapos_contract_request_validation_payment
self._test_alarm_not_visited(
alarm, self.software_instance, script_name)
def test_alarm_slave_instance_unallocated_disable_cloud_contract(self):
self._makeSlaveTree()
preference = self.portal.portal_preferences.getActiveSystemPreference()
preference.setPreferredCloudContractEnabled(False)
self.tic()
script_name = "SoftwareInstance_requestValidationPayment"
alarm = self.portal.portal_alarms.slapos_contract_request_validation_payment
self._test_alarm_not_visited(
alarm, self.software_instance, script_name)
def test_alarm_software_instance_allocated(self):
self._makeTree()
preference = self.portal.portal_preferences.getActiveSystemPreference()
preference.setPreferredCloudContractEnabled(True)
self.tic()
self._makeComputeNode()
self.software_instance.setAggregate(self.partition.getRelativeUrl())
self.tic()
script_name = "SoftwareInstance_requestValidationPayment"
alarm = self.portal.portal_alarms.slapos_contract_request_validation_payment
self._test_alarm_not_visited(
alarm, self.software_instance, script_name)
def test_alarm_slave_instance_allocated(self):
self._makeSlaveTree()
preference = self.portal.portal_preferences.getActiveSystemPreference()
preference.setPreferredCloudContractEnabled(True)
self.tic()
self._makeComputeNode()
self.software_instance.setAggregate(self.partition.getRelativeUrl())
self.tic()
script_name = "SoftwareInstance_requestValidationPayment"
alarm = self.portal.portal_alarms.slapos_contract_request_validation_payment
self._test_alarm_not_visited(
alarm, self.software_instance, script_name)
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="Test Component" module="erp5.portal_type"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>default_reference</string> </key>
<value> <string>testSlapOSContractAlarm</string> </value>
</item>
<item>
<key> <string>description</string> </key>
<value>
<none/>
</value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>test.erp5.testSlapOSContractAlarm</string> </value>
</item>
<item>
<key> <string>portal_type</string> </key>
<value> <string>Test Component</string> </value>
</item>
<item>
<key> <string>sid</string> </key>
<value>
<none/>
</value>
</item>
<item>
<key> <string>text_content_error_message</string> </key>
<value>
<tuple/>
</value>
</item>
<item>
<key> <string>text_content_warning_message</string> </key>
<value>
<tuple/>
</value>
</item>
<item>
<key> <string>version</string> </key>
<value> <string>erp5</string> </value>
</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>component_validation_workflow</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAM=</string> </persistent>
</value>
</item>
</dictionary>
</value>
</item>
</dictionary>
</pickle>
</record>
<record id="3" aka="AAAAAAAAAAM=">
<pickle>
<global name="WorkflowHistoryList" module="Products.ERP5Type.Workflow"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_log</string> </key>
<value>
<list>
<dictionary>
<item>
<key> <string>action</string> </key>
<value> <string>validate</string> </value>
</item>
<item>
<key> <string>validation_state</string> </key>
<value> <string>validated</string> </value>
</item>
</dictionary>
</list>
</value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="Test Component" module="erp5.portal_type"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_recorded_property_dict</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent>
</value>
</item>
<item>
<key> <string>default_reference</string> </key>
<value> <string>testSlapOSContractSkins</string> </value>
</item>
<item>
<key> <string>description</string> </key>
<value>
<none/>
</value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>test.erp5.testSlapOSContractSkins</string> </value>
</item>
<item>
<key> <string>portal_type</string> </key>
<value> <string>Test Component</string> </value>
</item>
<item>
<key> <string>sid</string> </key>
<value>
<none/>
</value>
</item>
<item>
<key> <string>text_content_error_message</string> </key>
<value>
<tuple/>
</value>
</item>
<item>
<key> <string>text_content_warning_message</string> </key>
<value>
<tuple/>
</value>
</item>
<item>
<key> <string>version</string> </key>
<value> <string>erp5</string> </value>
</item>
<item>
<key> <string>workflow_history</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAM=</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/>
</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>
<item>
<key> <string>component_validation_workflow</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAQ=</string> </persistent>
</value>
</item>
</dictionary>
</value>
</item>
</dictionary>
</pickle>
</record>
<record id="4" aka="AAAAAAAAAAQ=">
<pickle>
<global name="WorkflowHistoryList" module="Products.ERP5Type.Workflow"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>_log</string> </key>
<value>
<list>
<dictionary>
<item>
<key> <string>action</string> </key>
<value> <string>validate</string> </value>
</item>
<item>
<key> <string>validation_state</string> </key>
<value> <string>validated</string> </value>
</item>
</dictionary>
</list>
</value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
...@@ -8,8 +8,6 @@ Consumption Document Module | view ...@@ -8,8 +8,6 @@ Consumption Document Module | view
Hosting Subscription | periodicity Hosting Subscription | periodicity
Instance Tree | jump_to_related_open_order_line Instance Tree | jump_to_related_open_order_line
Payment Transaction | related_payzen_event Payment Transaction | related_payzen_event
Person | create_new_cloud_contract
Person | jump_to_cloud_contract
Root Applied Rule Causality Causality Movement Group | view Root Applied Rule Causality Causality Movement Group | view
Sale Invoice Transaction | create_slapos_reversal Sale Invoice Transaction | create_slapos_reversal
Sale Packing List | jump_related_aggregated_packing_list Sale Packing List | jump_related_aggregated_packing_list
......
test.erp5.testSlapOSConsumptionSkins test.erp5.testSlapOSAccountingAlarm
test.erp5.testSlapOSSaleSupply
test.erp5.testSlapOSAccountingConstraint
test.erp5.testSlapOSAccountingRule
test.erp5.testSlapOSAccountingBuilder test.erp5.testSlapOSAccountingBuilder
test.erp5.testSlapOSContractSkins test.erp5.testSlapOSAccountingConstraint
test.erp5.testSlapOSAccountingInteractionWorkflow test.erp5.testSlapOSAccountingInteractionWorkflow
test.erp5.testSlapOSAccountingRule
test.erp5.testSlapOSAccountingSkins test.erp5.testSlapOSAccountingSkins
test.erp5.testSlapOSAccountingAlarm test.erp5.testSlapOSConsumptionSkins
test.erp5.testSlapOSContractAlarm test.erp5.testSlapOSEntityCreatePayment
test.erp5.testSlapOSEntityCreatePayment test.erp5.testSlapOSSaleSupply
\ No newline at end of file \ No newline at end of file
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