Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
S
slapos.core
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
1
Merge Requests
1
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Romain Courteaud
slapos.core
Commits
37c4905e
Commit
37c4905e
authored
Mar 27, 2023
by
Romain Courteaud
🐸
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
slapos_subscription_request: WIP selling project subscription
parent
c5835275
Changes
1
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
129 additions
and
34 deletions
+129
-34
master/bt5/slapos_subscription_request/TestTemplateItem/portal_components/test.erp5.testSlapOSERP5VirtualMasterSubscriptionRequestScenario.py
...testSlapOSERP5VirtualMasterSubscriptionRequestScenario.py
+129
-34
No files found.
master/bt5/slapos_subscription_request/TestTemplateItem/portal_components/test.erp5.testSlapOSERP5VirtualMasterSubscriptionRequestScenario.py
View file @
37c4905e
...
...
@@ -110,7 +110,40 @@ class TestSlapOSVirtualMasterSubscriptionRequestScenario(TestSlapOSVirtualMaster
# the erp5 manager
self
.
addSaleManagerAssignment
(
person
)
# Remove customer project assignment
#person.manage_delObjects(ids=[x.getId() for x in person.contentValues(portal_type="Assignment") if x.getFunction() == 'customer'])
person
.
manage_delObjects
(
ids
=
[
x
.
getId
()
for
x
in
person
.
contentValues
(
portal_type
=
"Assignment"
)
if
x
.
getFunction
()
==
'customer'
])
self
.
tic
()
return
person
def
addAccountingManagerAssignment
(
self
,
person
):
person
.
newContent
(
portal_type
=
'Assignment'
,
function
=
'function/accounting/manager'
).
open
()
def
createAccountingAdministrator
(
self
,
web_site
):
self
.
logout
()
login
=
'accounting-%s'
%
self
.
generateNewId
()
self
.
joinSlapOS
(
web_site
,
login
)
self
.
login
()
person
=
self
.
portal
.
portal_catalog
.
getResultValue
(
portal_type
=
"ERP5 Login"
,
reference
=
login
).
getParentValue
()
# first slapos administrator assignment can only be created by
# the erp5 manager
self
.
addAccountingManagerAssignment
(
person
)
# Remove customer project assignment
person
.
manage_delObjects
(
ids
=
[
x
.
getId
()
for
x
in
person
.
contentValues
(
portal_type
=
"Assignment"
)
if
x
.
getFunction
()
==
'customer'
])
self
.
tic
()
return
person
def
createCustomer
(
self
,
web_site
):
self
.
logout
()
login
=
'customer-%s'
%
self
.
generateNewId
()
self
.
joinSlapOS
(
web_site
,
login
)
self
.
login
()
person
=
self
.
portal
.
portal_catalog
.
getResultValue
(
portal_type
=
"ERP5 Login"
,
reference
=
login
).
getParentValue
()
self
.
tic
()
return
person
...
...
@@ -153,32 +186,29 @@ class TestSlapOSVirtualMasterSubscriptionRequestScenario(TestSlapOSVirtualMaster
web_site
=
self
.
web_site
sale_person
=
self
.
createSaleAdministrator
(
web_site
)
accountant_person
=
self
.
createAccountingAdministrator
(
web_site
)
#################################
# Create accounting data
self
.
logout
()
self
.
login
(
accountant_person
.
getUserId
())
currency
=
self
.
portal
.
currency_module
.
newContent
(
portal_type
=
'Currency'
,
title
=
"fake currency"
)
currency
.
validate
()
return
web_site
,
currency
,
sale_person
def
test_virtual_master_subscribe_to_project
(
self
):
_
,
currency
,
sale_person
=
self
.
bootstrapSubscriptionRequestScenario
()
self
.
tic
()
#################################
# Prepare saling virtual master
#################################
# Prepare providing free virtual master to sale users
self
.
logout
()
self
.
login
(
sale_person
.
getUserId
())
now
=
DateTime
()
seller_organisation
=
self
.
portal
.
organisation_module
.
newContent
(
portal_type
=
"Organisation"
,
title
=
"seller-orga"
)
seller_organisation
.
validate
()
sale_person
.
setCareerSubordinationValue
(
seller_organisation
)
internal_trade_condition
=
self
.
portal
.
sale_trade_condition_module
.
newContent
(
portal_type
=
"Sale Trade Condition"
,
reference
=
'internal_for_%s'
%
seller_organisation
.
getTitle
(),
...
...
@@ -192,24 +222,36 @@ class TestSlapOSVirtualMasterSubscriptionRequestScenario(TestSlapOSVirtualMaster
)
internal_trade_condition
.
validate
()
"""
virtual_master_sale_supply = self.portal.sale_supply_module.newContent(
portal_type="Sale Supply"
)
virtual_master_sale_supply.validate()
"""
self
.
tic
()
self
.
tic
()
return
web_site
,
now
,
currency
,
sale_person
,
seller_organisation
def
checkSiteConsistency
(
self
):
self
.
logout
()
for
_
in
range
(
20
):
self
.
stepCallAlarmList
()
self
.
tic
()
self
.
login
()
self
.
stepcheckERP5Consistency
()
# after accept, an email is send containing the reset link
last_message
=
self
.
portal
.
MailHost
.
_last_message
assert
last_message
is
None
,
last_message
def
checkVirtualMasterSubscription
(
self
,
user_person
,
now
):
#################################
# Buy the first project
#################################
self
.
logout
()
self
.
login
(
user_person
.
getUserId
())
# XXX How to list possible service to sell?
# Search product with `time` unit ?
service
=
self
.
portal
.
restrictedTraverse
(
'service_module/slapos_virtual_master_subscription'
)
# XXX This is a script like: Product_submitSubscriptionRequest()
source_decision_value
=
self
.
portal
.
portal_membership
.
getAuthenticatedMember
().
getUserValue
()
source_section_value
=
s
eller_organisation
#source_decision_value#source_decision_value.getCareerSubordinationValue() or source_decision_value
source_section_value
=
s
ource_decision_value
.
getCareerSubordinationValue
(
source_decision_value
)
source_section_value
=
source_decision_value
.
getCareerSubordinationValue
(
source_decision_value
)
# Find trade condition / price
...
...
@@ -288,12 +330,6 @@ class TestSlapOSVirtualMasterSubscriptionRequestScenario(TestSlapOSVirtualMaster
"""
open_sale_order
.
SaleOrder_applySaleTradeCondition
(
batch_mode
=
1
,
force
=
1
)
price
=
open_order_line
.
getPrice
()
open_order_line
.
edit
(
price
=
price
)
subscription_request
=
self
.
portal
.
subscription_request_module
.
newContent
(
portal_type
=
'Subscription Request'
,
...
...
@@ -308,8 +344,8 @@ class TestSlapOSVirtualMasterSubscriptionRequestScenario(TestSlapOSVirtualMaster
specialise_value
=
open_sale_order
.
getSpecialiseValue
(),
destination_value
=
open_sale_order
.
getSourceValue
(),
destination_section_value
=
open_sale_order
.
getSourceSectionValue
(),
price_currency_value
=
open_sale_order
.
getPriceCurrencyValue
()
price_currency_value
=
open_sale_order
.
getPriceCurrencyValue
()
,
price
=
open_order_line
.
getPrice
()
)
"""
invoicing_type=invoicing_type,
...
...
@@ -349,6 +385,9 @@ class TestSlapOSVirtualMasterSubscriptionRequestScenario(TestSlapOSVirtualMaster
delivery_address_autocompleted=has_delivery_address and bool(int(request_form.get('field_your_delivery_address_autocompleted', "0"))),
)
"""
if
len
(
subscription_request
.
checkConsistency
())
!=
0
:
self
.
tic
()
raise
NotImplementedError
(
'nope'
)
subscription_request
.
submit
()
self
.
tic
()
...
...
@@ -365,11 +404,24 @@ class TestSlapOSVirtualMasterSubscriptionRequestScenario(TestSlapOSVirtualMaster
)
item
.
validate
()
subscription_trade_condition
=
subscription_request
.
getSpecialiseValue
()
project_trade_condition
=
self
.
portal
.
sale_trade_condition_module
.
newContent
(
portal_type
=
"Sale Trade Condition"
,
reference
=
'for_project_%s'
%
item
.
getTitle
(),
# XXX hardcoded
specialise
=
"business_process_module/slapos_ultimate_business_process"
,
source_value
=
subscription_trade_condition
.
getSourceValue
(),
source_section_value
=
subscription_trade_condition
.
getSourceSectionValue
(),
destination_project_value
=
item
,
effective_date
=
now
.
earliestTime
(),
price_currency_value
=
subscription_trade_condition
.
getPriceCurrencyValue
()
)
project_trade_condition
.
validate
()
subscription_request
.
getSourceDecisionValue
().
newContent
(
portal_type
=
"Assignment"
,
destination_project_value
=
item
,
function
=
'production/manager'
).
open
()
hosting_subscription
=
self
.
portal
.
hosting_subscription_module
.
newContent
(
...
...
@@ -475,13 +527,56 @@ class TestSlapOSVirtualMasterSubscriptionRequestScenario(TestSlapOSVirtualMaster
self.logout()
self.login(customer.getUserId())
"""
self
.
logout
()
for
_
in
range
(
20
):
self
.
stepCallAlarmList
()
return
subscription_request
def
test_virtual_master_sale_subscribe_to_project
(
self
):
_
,
now
,
_
,
sale_person
,
_
=
self
.
bootstrapSubscriptionRequestScenario
()
self
.
tic
()
self
.
checkVirtualMasterSubscription
(
sale_person
,
now
)
self
.
checkSiteConsistency
()
def
test_virtual_master_customer_subscribe_to_project
(
self
):
web_site
,
now
,
_
,
sale_person
,
_
=
self
.
bootstrapSubscriptionRequestScenario
()
self
.
tic
()
main_project_subscription
=
self
.
checkVirtualMasterSubscription
(
sale_person
,
now
)
self
.
logout
()
self
.
login
()
self
.
tic
()
project
=
main_project_subscription
.
getCausalityRelatedValue
(
portal_type
=
"Open Sale Order"
)
\
.
contentValues
(
portal_type
=
"Open Sale Order Line"
)[
0
]
\
.
getAggregateValue
(
portal_type
=
"Project"
)
# Setup preferences
preference
=
self
.
portal
.
portal_preferences
.
slapos_default_system_preference
preference
.
edit
(
preferred_subscription_assignment_category_list
=
[
'function/customer'
,
'role/client'
,
'destination_project/%s'
%
project
.
getRelativeUrl
()
]
)
self
.
stepcheckERP5Consistency
()
# after accept, an email is send containing the reset link
last_message
=
self
.
portal
.
MailHost
.
_last_message
assert
last_message
is
None
,
last_message
\ No newline at end of file
"""
sale_person.setCareerSubordinationValue(seller_organisation)
internal_trade_condition = self.portal.sale_trade_condition_module.newContent(
portal_type="Sale Trade Condition",
reference='internal_for_%s' % seller_organisation.getTitle(),
# XXX hardcoded
specialise="business_process_module/slapos_ultimate_business_process",
source_value=seller_organisation,
source_section_value=seller_organisation,
destination_section_value=seller_organisation,
effective_date=now.earliestTime(),
price_currency_value=currency
)
internal_trade_condition.validate()
"""
#################################
# Buy the first project
customer_person
=
self
.
createCustomer
(
web_site
)
self
.
logout
()
self
.
login
(
customer_person
.
getUserId
())
self
.
checkVirtualMasterSubscription
(
customer_person
,
now
)
self
.
checkSiteConsistency
()
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment