Commit ab229f2e authored by Romain Courteaud's avatar Romain Courteaud 🐙

slapos_subscription_request:

* automated ledger path
* add ledger to the accounting template
* only add a project assignment for the existing admin user
* create normal user with the project customer assignment
* update cdn subscription test
  project reference needed
* add project for chinese subscription
* project needed for scenario tests
* all Subscription/Trial object must be linked to a Project
* test: user need to be linked to a project
* propagate source project
* delivery/movement must use source_project instead of follow_up
* set source_project on event
* delivery/movement must use source_project instead of follow_up
* use source_project instead of follow_up
* use source_project instead of follow_up
* test set server allocation_scope/open
parent 4dd5cbca
...@@ -6,12 +6,6 @@ ...@@ -6,12 +6,6 @@
</pickle> </pickle>
<pickle> <pickle>
<dictionary> <dictionary>
<item>
<key> <string>_recorded_property_dict</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent>
</value>
</item>
<item> <item>
<key> <string>default_reference</string> </key> <key> <string>default_reference</string> </key>
<value> <string>testSlapOSContractAlarm</string> </value> <value> <string>testSlapOSContractAlarm</string> </value>
...@@ -55,28 +49,13 @@ ...@@ -55,28 +49,13 @@
<item> <item>
<key> <string>workflow_history</string> </key> <key> <string>workflow_history</string> </key>
<value> <value>
<persistent> <string encoding="base64">AAAAAAAAAAM=</string> </persistent> <persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent>
</value> </value>
</item> </item>
</dictionary> </dictionary>
</pickle> </pickle>
</record> </record>
<record id="2" aka="AAAAAAAAAAI="> <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> <pickle>
<global name="PersistentMapping" module="Persistence.mapping"/> <global name="PersistentMapping" module="Persistence.mapping"/>
</pickle> </pickle>
...@@ -89,7 +68,7 @@ ...@@ -89,7 +68,7 @@
<item> <item>
<key> <string>component_validation_workflow</string> </key> <key> <string>component_validation_workflow</string> </key>
<value> <value>
<persistent> <string encoding="base64">AAAAAAAAAAQ=</string> </persistent> <persistent> <string encoding="base64">AAAAAAAAAAM=</string> </persistent>
</value> </value>
</item> </item>
</dictionary> </dictionary>
...@@ -98,7 +77,7 @@ ...@@ -98,7 +77,7 @@
</dictionary> </dictionary>
</pickle> </pickle>
</record> </record>
<record id="4" aka="AAAAAAAAAAQ="> <record id="3" aka="AAAAAAAAAAM=">
<pickle> <pickle>
<global name="WorkflowHistoryList" module="Products.ERP5Type.Workflow"/> <global name="WorkflowHistoryList" module="Products.ERP5Type.Workflow"/>
</pickle> </pickle>
......
...@@ -97,6 +97,7 @@ ...@@ -97,6 +97,7 @@
<string>source/organisation_module/slapos</string> <string>source/organisation_module/slapos</string>
<string>price_currency/currency_module/EUR</string> <string>price_currency/currency_module/EUR</string>
<string>specialise/sale_trade_condition_module/slapos_aggregated_trade_condition</string> <string>specialise/sale_trade_condition_module/slapos_aggregated_trade_condition</string>
<string>ledger/automated</string>
</tuple> </tuple>
</value> </value>
</item> </item>
......
...@@ -97,6 +97,7 @@ ...@@ -97,6 +97,7 @@
<string>specialise/sale_trade_condition_module/slapos_aggregated_trade_condition</string> <string>specialise/sale_trade_condition_module/slapos_aggregated_trade_condition</string>
<string>resource/currency_module/CNY</string> <string>resource/currency_module/CNY</string>
<string>payment_mode/wechat</string> <string>payment_mode/wechat</string>
<string>ledger/automated</string>
</tuple> </tuple>
</value> </value>
</item> </item>
......
...@@ -95,6 +95,7 @@ ...@@ -95,6 +95,7 @@
<string>price_currency/currency_module/EUR</string> <string>price_currency/currency_module/EUR</string>
<string>resource/currency_module/EUR</string> <string>resource/currency_module/EUR</string>
<string>payment_mode/payzen</string> <string>payment_mode/payzen</string>
<string>ledger/automated</string>
<string>specialise/sale_trade_condition_module/slapos_aggregated_trade_condition</string> <string>specialise/sale_trade_condition_module/slapos_aggregated_trade_condition</string>
</tuple> </tuple>
</value> </value>
......
...@@ -91,6 +91,7 @@ ...@@ -91,6 +91,7 @@
<value> <value>
<tuple> <tuple>
<string>source_section/organisation_module/slapos</string> <string>source_section/organisation_module/slapos</string>
<string>ledger/automated</string>
<string>source/organisation_module/slapos</string> <string>source/organisation_module/slapos</string>
<string>payment_mode/wechat</string> <string>payment_mode/wechat</string>
<string>specialise/sale_trade_condition_module/slapos_aggregated_trade_condition</string> <string>specialise/sale_trade_condition_module/slapos_aggregated_trade_condition</string>
......
...@@ -3,6 +3,7 @@ ...@@ -3,6 +3,7 @@
<item>InstanceTree</item> <item>InstanceTree</item>
<item>Price</item> <item>Price</item>
<item>SlapOSSubscriptionCondition</item> <item>SlapOSSubscriptionCondition</item>
<item>SlapOSVirtualMasterSourceProjectConstraint</item>
<item>SoftwareInstance</item> <item>SoftwareInstance</item>
<item>TextDocument</item> <item>TextDocument</item>
<item>Url</item> <item>Url</item>
...@@ -15,9 +16,10 @@ ...@@ -15,9 +16,10 @@
<item>Person</item> <item>Person</item>
<item>Price</item> <item>Price</item>
<item>Reference</item> <item>Reference</item>
<item>SlapOSVirtualMasterSourceProjectConstraint</item>
<item>SlaposSubscriptionRequestAuditConstraint</item> <item>SlaposSubscriptionRequestAuditConstraint</item>
<item>Task</item> <item>Task</item>
<item>Url</item> <item>Url</item>
<item>VariationRange</item> <item>VariationRange</item>
</portal_type> </portal_type>
</property_sheet_list> </property_sheet_list>
\ No newline at end of file
...@@ -82,6 +82,7 @@ subscription_request = context.subscription_request_module.newContent( ...@@ -82,6 +82,7 @@ subscription_request = context.subscription_request_module.newContent(
quantity=user_input_dict["amount"], quantity=user_input_dict["amount"],
language=target_language, language=target_language,
specialise_value=subscription_condition, specialise_value=subscription_condition,
source_project_value=subscription_condition.getSourceProjectValue()
) )
subscription_request.setDefaultEmailText(email) subscription_request.setDefaultEmailText(email)
......
...@@ -39,7 +39,8 @@ if current_invoice is None: ...@@ -39,7 +39,8 @@ if current_invoice is None:
payment_transaction = portal.restrictedTraverse(payment) payment_transaction = portal.restrictedTraverse(payment)
current_invoice.edit( current_invoice.edit(
title="Reservation Fee", title="Reservation Fee",
ledger_value=portal.portal_categories.ledger.accounting.automated, ledger_value=portal.portal_categories.ledger.automated,
source_project_value=context.getSourceProjectValue(),
destination_value=context.getDestinationSection(), destination_value=context.getDestinationSection(),
destination_section_value=context.getDestinationSection(), destination_section_value=context.getDestinationSection(),
destination_decision_value=context.getDestinationSection(), destination_decision_value=context.getDestinationSection(),
......
...@@ -62,7 +62,8 @@ delivery.edit( ...@@ -62,7 +62,8 @@ delivery.edit(
price_currency=sale_invoice_transaction.getPriceCurrency(), price_currency=sale_invoice_transaction.getPriceCurrency(),
source=sale_invoice_transaction.getSource(), source=sale_invoice_transaction.getSource(),
source_section=sale_invoice_transaction.getSourceSection(), source_section=sale_invoice_transaction.getSourceSection(),
ledger_value=portal.portal_categories.ledger.accounting.automated, ledger_value=portal.portal_categories.ledger.automated,
source_project_value=sale_invoice_transaction.getSourceProjectValue(),
) )
line = delivery.newContent( line = delivery.newContent(
......
...@@ -32,7 +32,7 @@ request_kw.update( ...@@ -32,7 +32,7 @@ request_kw.update(
sla_xml=subscription_condition.getSlaXml(default_xml).strip(), sla_xml=subscription_condition.getSlaXml(default_xml).strip(),
shared=bool(subscription_condition.getRootSlave(0)), shared=bool(subscription_condition.getRootSlave(0)),
state="started", state="started",
project_reference=subscription_condition.getFollowUpReference() project_reference=subscription_condition.getSourceProjectReference()
) )
person.requestSoftwareInstance(**request_kw) person.requestSoftwareInstance(**request_kw)
......
...@@ -33,7 +33,8 @@ if current_invoice is None: ...@@ -33,7 +33,8 @@ if current_invoice is None:
now = DateTime() now = DateTime()
current_payment.edit( current_payment.edit(
title="Payment for Reservation Fee", title="Payment for Reservation Fee",
ledger_value=portal.portal_categories.ledger.accounting.automated, ledger_value=portal.portal_categories.ledger.automated,
source_project_value=context.getSourceProjectValue(),
specialise_value=trade_condition, specialise_value=trade_condition,
destination_value=context.getDestinationSection(), destination_value=context.getDestinationSection(),
destination_section_value=context.getDestinationSection(), destination_section_value=context.getDestinationSection(),
......
...@@ -62,13 +62,14 @@ class TestSlapOSSubscriptionCDNScenarioMixin(TestSlapOSSubscriptionScenarioMixin ...@@ -62,13 +62,14 @@ class TestSlapOSSubscriptionCDNScenarioMixin(TestSlapOSSubscriptionScenarioMixin
# now instantiate it on compute_node and set some nice connection dict # now instantiate it on compute_node and set some nice connection dict
self.setServerOpenPersonal(subscription_server) self.setServerOpenPublic(subscription_server)
self.login(self.admin_user.getUserId()) self.login(self.admin_user.getUserId())
self.personRequestInstanceNotReady( self.personRequestInstanceNotReady(
software_release=self.subscription_condition.getUrlString(), software_release=self.subscription_condition.getUrlString(),
software_type=self.subscription_condition.getSourceReference(), software_type=self.subscription_condition.getSourceReference(),
partition_reference="InstanceForSlave%s" % self.new_id partition_reference="InstanceForSlave%s" % self.new_id,
project_reference=self.subscription_project.getReference()
) )
self.stepCallSlaposAllocateInstanceAlarm() self.stepCallSlaposAllocateInstanceAlarm()
...@@ -77,7 +78,8 @@ class TestSlapOSSubscriptionCDNScenarioMixin(TestSlapOSSubscriptionScenarioMixin ...@@ -77,7 +78,8 @@ class TestSlapOSSubscriptionCDNScenarioMixin(TestSlapOSSubscriptionScenarioMixin
self.personRequestInstance( self.personRequestInstance(
software_release=self.subscription_condition.getUrlString(), software_release=self.subscription_condition.getUrlString(),
software_type=self.subscription_condition.getSourceReference(), software_type=self.subscription_condition.getSourceReference(),
partition_reference="InstanceForSlave%s" % self.new_id partition_reference="InstanceForSlave%s" % self.new_id,
project_reference=self.subscription_project.getReference()
) )
# now instantiate it on compute_node and set some nice connection dict # now instantiate it on compute_node and set some nice connection dict
...@@ -85,7 +87,7 @@ class TestSlapOSSubscriptionCDNScenarioMixin(TestSlapOSSubscriptionScenarioMixin ...@@ -85,7 +87,7 @@ class TestSlapOSSubscriptionCDNScenarioMixin(TestSlapOSSubscriptionScenarioMixin
self.tic() self.tic()
self.login() self.login()
self.setServerOpenSubscription(subscription_server) #self.setServerOpenSubscription(subscription_server)
self.setAccessToMemcached(subscription_server) self.setAccessToMemcached(subscription_server)
self.tic() self.tic()
self.simulateSlapgridCP(subscription_server) self.simulateSlapgridCP(subscription_server)
......
...@@ -171,7 +171,7 @@ class testSlapOSSubscriptionDualOrganisationScenario(TestSlapOSSubscriptionScena ...@@ -171,7 +171,7 @@ class testSlapOSSubscriptionDualOrganisationScenario(TestSlapOSSubscriptionScena
name="ABC %s" % self.new_id name="ABC %s" % self.new_id
self.login() self.login()
self.createNormalUser(default_email_text, name, language) self.createNormalUser(default_email_text, name, language, self.subscription_project)
self.tic() self.tic()
......
...@@ -58,7 +58,7 @@ class testSlapOSSubscriptionPerUserTradeConditionScenario(TestSlapOSSubscription ...@@ -58,7 +58,7 @@ class testSlapOSSubscriptionPerUserTradeConditionScenario(TestSlapOSSubscription
name="ABC %s" % self.new_id name="ABC %s" % self.new_id
self.login() self.login()
self.createNormalUser(default_email_text, name, language) self.createNormalUser(default_email_text, name, language, self.subscription_project)
self.createCustomUserSaleTradeCondition(self.normal_user) self.createCustomUserSaleTradeCondition(self.normal_user)
self.tic() self.tic()
...@@ -144,7 +144,7 @@ class testSlapOSSubscriptionPerUserTradeConditionScenarioDetaxed(TestSlapOSSubsc ...@@ -144,7 +144,7 @@ class testSlapOSSubscriptionPerUserTradeConditionScenarioDetaxed(TestSlapOSSubsc
name="ABC %s" % self.new_id name="ABC %s" % self.new_id
self.login() self.login()
self.createNormalUser(default_email_text, name, language) self.createNormalUser(default_email_text, name, language, self.subscription_project)
self.createDetaxedUserSaleTradeCondition(self.normal_user) self.createDetaxedUserSaleTradeCondition(self.normal_user)
self.tic() self.tic()
......
...@@ -6,12 +6,6 @@ ...@@ -6,12 +6,6 @@
</pickle> </pickle>
<pickle> <pickle>
<dictionary> <dictionary>
<item>
<key> <string>_recorded_property_dict</string> </key>
<value>
<persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent>
</value>
</item>
<item> <item>
<key> <string>default_reference</string> </key> <key> <string>default_reference</string> </key>
<value> <string>testSlapOSSubscriptionPerUserTradeConditionScenario</string> </value> <value> <string>testSlapOSSubscriptionPerUserTradeConditionScenario</string> </value>
...@@ -61,28 +55,13 @@ ...@@ -61,28 +55,13 @@
<item> <item>
<key> <string>workflow_history</string> </key> <key> <string>workflow_history</string> </key>
<value> <value>
<persistent> <string encoding="base64">AAAAAAAAAAM=</string> </persistent> <persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent>
</value> </value>
</item> </item>
</dictionary> </dictionary>
</pickle> </pickle>
</record> </record>
<record id="2" aka="AAAAAAAAAAI="> <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> <pickle>
<global name="PersistentMapping" module="Persistence.mapping"/> <global name="PersistentMapping" module="Persistence.mapping"/>
</pickle> </pickle>
...@@ -95,7 +74,7 @@ ...@@ -95,7 +74,7 @@
<item> <item>
<key> <string>component_validation_workflow</string> </key> <key> <string>component_validation_workflow</string> </key>
<value> <value>
<persistent> <string encoding="base64">AAAAAAAAAAQ=</string> </persistent> <persistent> <string encoding="base64">AAAAAAAAAAM=</string> </persistent>
</value> </value>
</item> </item>
</dictionary> </dictionary>
...@@ -104,7 +83,7 @@ ...@@ -104,7 +83,7 @@
</dictionary> </dictionary>
</pickle> </pickle>
</record> </record>
<record id="4" aka="AAAAAAAAAAQ="> <record id="3" aka="AAAAAAAAAAM=">
<pickle> <pickle>
<global name="WorkflowHistoryList" module="Products.ERP5Type.Workflow"/> <global name="WorkflowHistoryList" module="Products.ERP5Type.Workflow"/>
</pickle> </pickle>
......
...@@ -163,14 +163,6 @@ return dict(vads_url_already_registered="%s/already_registered" % (payment_trans ...@@ -163,14 +163,6 @@ return dict(vads_url_already_registered="%s/already_registered" % (payment_trans
if str(notification_message.getVersion("")) == "999": if str(notification_message.getVersion("")) == "999":
notification_message.invalidate() notification_message.invalidate()
def createProject(self):
project = self.portal.project_module.newContent(
portal_type='Project',
title='project-%s' % self.generateNewId()
)
project.validate()
return project
def createNotificationMessage(self, reference, def createNotificationMessage(self, reference,
content_type='text/html', language="en", text_content='${name} ${login_name} ${login_password}'): content_type='text/html', language="en", text_content='${name} ${login_name} ${login_password}'):
...@@ -187,40 +179,7 @@ return dict(vads_url_already_registered="%s/already_registered" % (payment_trans ...@@ -187,40 +179,7 @@ return dict(vads_url_already_registered="%s/already_registered" % (payment_trans
notification_message.validate() notification_message.validate()
return notification_message return notification_message
def createAdminUser(self, project): def createNormalUser(self, email, name, language, project):
""" Create a Admin user, to manage compute_nodes and instances eventually """
admin_user_login = self.portal.portal_catalog.getResultValue(
portal_type="ERP5 Login",
reference="admin_user",
validation_state="validated"
)
if admin_user_login is None:
admin_user = self.portal.person_module.template_member.\
Base_createCloneDocument(batch_mode=1)
admin_user.newContent(
portal_type="ERP5 Login",
reference="admin_user").validate()
admin_user.newContent(
portal_type='Assignment',
destination_project_value=project,
function='computer/manager'
).open()
admin_user.edit(
first_name="Admin User",
reference="Admin_user",
default_email_text="do_not_reply_to_admin@example.org",
)
admin_user.validate()
self.admin_user = admin_user
else:
self.admin_user = admin_user_login.getParentValue()
def createNormalUser(self, email, name, language):
""" Create a Normal user """ """ Create a Normal user """
normal_user_login = self.portal.portal_catalog.getResultValue( normal_user_login = self.portal.portal_catalog.getResultValue(
portal_type="ERP5 Login", portal_type="ERP5 Login",
...@@ -246,9 +205,16 @@ return dict(vads_url_already_registered="%s/already_registered" % (payment_trans ...@@ -246,9 +205,16 @@ return dict(vads_url_already_registered="%s/already_registered" % (payment_trans
assignment.open() assignment.open()
normal_user.validate() normal_user.validate()
self.normal_user = normal_user
else: else:
self.normal_user = normal_user_login.getParentValue() normal_user = normal_user_login.getParentValue()
normal_user.newContent(
portal_type='Assignment',
destination_project_value=project,
function='customer'
).open()
self.normal_user = normal_user
self.normal_user.setLanguage(language) self.normal_user.setLanguage(language)
def createChineseSubscriptionCondition(self, slave=False): def createChineseSubscriptionCondition(self, slave=False):
...@@ -288,7 +254,8 @@ return dict(vads_url_already_registered="%s/already_registered" % (payment_trans ...@@ -288,7 +254,8 @@ return dict(vads_url_already_registered="%s/already_registered" % (payment_trans
sla_xml='<?xml version="1.0" encoding="utf-8"?>\n<instance>\n</instance>', sla_xml='<?xml version="1.0" encoding="utf-8"?>\n<instance>\n</instance>',
text_content='<?xml version="1.0" encoding="utf-8"?>\n<instance>\n</instance>', text_content='<?xml version="1.0" encoding="utf-8"?>\n<instance>\n</instance>',
user_input={}, user_input={},
specialise_value=sale_trade_condition specialise_value=sale_trade_condition,
source_project_value=self.subscription_project
) )
subscription_condition.validate() subscription_condition.validate()
self.tic() self.tic()
...@@ -304,7 +271,7 @@ return dict(vads_url_already_registered="%s/already_registered" % (payment_trans ...@@ -304,7 +271,7 @@ return dict(vads_url_already_registered="%s/already_registered" % (payment_trans
price_currency="currency_module/EUR", price_currency="currency_module/EUR",
payment_mode='payzen', payment_mode='payzen',
specialise="sale_trade_condition_module/slapos_subscription_trade_condition", specialise="sale_trade_condition_module/slapos_subscription_trade_condition",
#follow_up_value=self.subscription_project source_project_value=self.subscription_project
) )
# XXX TODO clarify the with / without tax # XXX TODO clarify the with / without tax
sale_trade_condition.newContent( sale_trade_condition.newContent(
...@@ -333,7 +300,7 @@ return dict(vads_url_already_registered="%s/already_registered" % (payment_trans ...@@ -333,7 +300,7 @@ return dict(vads_url_already_registered="%s/already_registered" % (payment_trans
text_content='<?xml version="1.0" encoding="utf-8"?>\n<instance>\n</instance>', text_content='<?xml version="1.0" encoding="utf-8"?>\n<instance>\n</instance>',
user_input={}, user_input={},
specialise_value=sale_trade_condition, specialise_value=sale_trade_condition,
follow_up_value=self.subscription_project source_project_value=self.subscription_project
) )
self.subscription_condition.validate() self.subscription_condition.validate()
self.tic() self.tic()
...@@ -1256,6 +1223,7 @@ return dict(vads_url_already_registered="%s/already_registered" % (payment_trans ...@@ -1256,6 +1223,7 @@ return dict(vads_url_already_registered="%s/already_registered" % (payment_trans
portal_type='Compute Node', reference=subscription_server_id) portal_type='Compute Node', reference=subscription_server_id)
self.setAccessToMemcached(subscription_server) self.setAccessToMemcached(subscription_server)
self.assertNotEqual(None, subscription_server) self.assertNotEqual(None, subscription_server)
self.setServerOpenPublic(subscription_server)
self.assertEqual('open', subscription_server.getCapacityScope()) self.assertEqual('open', subscription_server.getCapacityScope())
# and install some software on them # and install some software on them
...@@ -1661,9 +1629,10 @@ return dict(vads_url_already_registered="%s/already_registered" % (payment_trans ...@@ -1661,9 +1629,10 @@ return dict(vads_url_already_registered="%s/already_registered" % (payment_trans
# Call as anonymous... check response? # Call as anonymous... check response?
default_email_text = "abc%s@nexedi.com" % self.new_id default_email_text = "abc%s@nexedi.com" % self.new_id
name="ABC %s" % self.new_id name="ABC %s" % self.new_id
project_reference = self.subscription_project.getReference()
self.login() self.login()
self.createNormalUser(default_email_text, name, language) self.createNormalUser(default_email_text, name, language, self.subscription_project)
self.tic() self.tic()
self.subscription_server = self.createPublicServerForAdminUser() self.subscription_server = self.createPublicServerForAdminUser()
...@@ -1692,7 +1661,7 @@ return dict(vads_url_already_registered="%s/already_registered" % (payment_trans ...@@ -1692,7 +1661,7 @@ return dict(vads_url_already_registered="%s/already_registered" % (payment_trans
name="ABC %s" % self.new_id name="ABC %s" % self.new_id
self.login() self.login()
self.createNormalUser(default_email_text, name, language) self.createNormalUser(default_email_text, name, language, self.subscription_project)
self.tic() self.tic()
self.subscription_server = self.createPublicServerForAdminUser() self.subscription_server = self.createPublicServerForAdminUser()
...@@ -1712,6 +1681,7 @@ return dict(vads_url_already_registered="%s/already_registered" % (payment_trans ...@@ -1712,6 +1681,7 @@ return dict(vads_url_already_registered="%s/already_registered" % (payment_trans
software_release=self.subscription_condition.getUrlString(), software_release=self.subscription_condition.getUrlString(),
software_type="default", software_type="default",
partition_reference="_test_subscription_scenario_with_existing_user_extra_instance", partition_reference="_test_subscription_scenario_with_existing_user_extra_instance",
project_reference=project_reference
) )
self.non_subscription_related_instance_amount = 1 self.non_subscription_related_instance_amount = 1
......
Subscription Condition | InstanceTree Subscription Condition | InstanceTree
Subscription Condition | Price Subscription Condition | Price
Subscription Condition | SlapOSSubscriptionCondition Subscription Condition | SlapOSSubscriptionCondition
Subscription Condition | SlapOSVirtualMasterSourceProjectConstraint
Subscription Condition | SoftwareInstance Subscription Condition | SoftwareInstance
Subscription Condition | TextDocument Subscription Condition | TextDocument
Subscription Condition | Url Subscription Condition | Url
...@@ -11,7 +12,8 @@ Subscription Request | InstanceTree ...@@ -11,7 +12,8 @@ Subscription Request | InstanceTree
Subscription Request | Person Subscription Request | Person
Subscription Request | Price Subscription Request | Price
Subscription Request | Reference Subscription Request | Reference
Subscription Request | SlapOSVirtualMasterSourceProjectConstraint
Subscription Request | SlaposSubscriptionRequestAuditConstraint Subscription Request | SlaposSubscriptionRequestAuditConstraint
Subscription Request | Task Subscription Request | Task
Subscription Request | Url Subscription Request | Url
Subscription Request | VariationRange Subscription Request | VariationRange
\ 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