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
b12323d6
Commit
b12323d6
authored
Apr 11, 2023
by
Romain Courteaud
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
slapos_subscription_request: create Subscription Requuest manually from a resource
parent
3fc1d1b6
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
179 additions
and
102 deletions
+179
-102
master/bt5/slapos_subscription_request/SkinTemplateItem/portal_skins/slapos_subscription_request/Item_createSubscriptionRequest.py
...os_subscription_request/Item_createSubscriptionRequest.py
+5
-102
master/bt5/slapos_subscription_request/SkinTemplateItem/portal_skins/slapos_subscription_request/Resource_createSubscriptionRequest.py
...ubscription_request/Resource_createSubscriptionRequest.py
+112
-0
master/bt5/slapos_subscription_request/SkinTemplateItem/portal_skins/slapos_subscription_request/Resource_createSubscriptionRequest.xml
...bscription_request/Resource_createSubscriptionRequest.xml
+62
-0
No files found.
master/bt5/slapos_subscription_request/SkinTemplateItem/portal_skins/slapos_subscription_request/Item_createSubscriptionRequest.py
View file @
b12323d6
...
...
@@ -30,12 +30,10 @@ if subscription_request is not None:
# Find matching Service
service
=
None
source_decision_value
=
None
project_value
=
None
resource_vcl
=
[]
if
item
.
getPortalType
()
==
'Instance Tree'
:
service
,
software_release
,
software_type
=
item
.
InstanceTree_getSoftwareProduct
()
source_decision_value
=
item
.
getDestinationSectionValue
(
portal_type
=
"Person"
)
project_value
=
item
.
getFollowUpValue
(
portal_type
=
"Project"
)
if
service
is
not
None
:
resource_vcl
=
[
'software_release/%s'
%
software_release
.
getRelativeUrl
(),
...
...
@@ -54,107 +52,12 @@ if source_decision_value is None:
storeWorkflowComment
(
item
,
'Can not find the person to contact to generate the Subscription Request'
)
return
#################################################################
# Find Sale Trade Condition and price
source_section_value
=
source_decision_value
.
getCareerSubordinationValue
(
source_decision_value
)
source_section_value
=
source_decision_value
.
getCareerSubordinationValue
(
source_decision_value
)
# Create a temp Sale Order to calculate the real price and find the trade condition
now
=
DateTime
()
module
=
portal
.
sale_order_module
#aggregate_value_list = []
tmp_sale_order
=
module
.
newContent
(
portal_type
=
'Sale Order'
,
temp_object
=
True
,
#effective_date=now+1,
start_date
=
now
,
# Ensure stop date value is higher than start date
# it will be updated by OpenSaleOrder_updatePeriod
# stop_date=now + 2,
destination_value
=
source_decision_value
,
destination_section_value
=
source_section_value
,
#destination_decision_value=source_decision_value,
destination_project_value
=
project_value
,
ledger_value
=
portal
.
portal_categories
.
ledger
.
automated
,
# XXX XXX destination_project_value=instance_tree.getFollowUpValue(),
)
tmp_sale_order
.
SaleOrder_applySaleTradeCondition
(
batch_mode
=
1
,
force
=
1
)
if
tmp_sale_order
.
getSpecialise
(
None
)
is
None
:
storeWorkflowComment
(
item
,
'Can not find a trade condition to generate the Subscription Request'
)
try
:
subscription_request
=
service
.
Resource_createSubscriptionRequest
(
source_decision_value
,
resource_vcl
)
except
AssertionError
,
error
:
storeWorkflowComment
(
item
,
str
(
error
))
return
# If no accounting is needed, no need to check the price
if
tmp_sale_order
.
getSourceSection
(
None
)
==
tmp_sale_order
.
getDestinationSection
(
None
):
price
=
0
else
:
# Add line
tmp_order_line
=
tmp_sale_order
.
newContent
(
portal_type
=
'Sale Order Line'
,
temp_object
=
True
,
resource_value
=
service
,
variation_category_list
=
resource_vcl
,
quantity_unit
=
service
.
getQuantityUnit
(),
base_contribution_list
=
service
.
getBaseContributionList
(),
use
=
service
.
getUse
(),
quantity
=
1
)
if
resource_vcl
:
base_id
=
'movement'
cell_key
=
list
(
tmp_order_line
.
getCellKeyList
(
base_id
=
base_id
))[
0
]
tmp_order_cell
=
tmp_order_line
.
newCell
(
base_id
=
base_id
,
portal_type
=
'Sale Order Cell'
,
temp_object
=
True
,
*
cell_key
)
tmp_order_cell
.
edit
(
mapped_value_property_list
=
[
'price'
,
'quantity'
],
quantity
=
1
,
predicate_category_list
=
cell_key
,
variation_category_list
=
cell_key
)
price
=
tmp_order_cell
.
getPrice
(
0
)
else
:
price
=
tmp_order_line
.
getPrice
(
0
)
if
not
price
:
storeWorkflowComment
(
item
,
'Can not find a price to generate the Subscription Request'
)
return
subscription_request
.
setAggregateValue
(
item
)
# Prevent concurrent transactions which could create the Subscription Request
item
.
serialize
()
subscription_request
=
portal
.
subscription_request_module
.
newContent
(
portal_type
=
'Subscription Request'
,
source_value
=
source_decision_value
,
source_section_value
=
source_section_value
,
source_decision_value
=
source_decision_value
,
start_date
=
now
,
effective_date
=
now
,
resource_value
=
service
,
variation_category_list
=
resource_vcl
,
aggregate_value
=
item
,
quantity_unit
=
tmp_order_line
.
getQuantityUnit
(),
quantity
=
1
,
ledger
=
"automated"
,
specialise_value
=
tmp_sale_order
.
getSpecialiseValue
(),
destination
=
tmp_sale_order
.
getSource
(),
destination_section
=
tmp_sale_order
.
getSourceSection
(),
price_currency
=
tmp_sale_order
.
getPriceCurrency
(),
price
=
price
,
activate_kw
=
activate_kw
)
subscription_request
.
submit
()
if
len
(
subscription_request
.
checkConsistency
())
!=
0
:
raise
NotImplementedError
(
subscription_request
.
checkConsistency
())
subscription_request
.
SubscriptionRequest_createOpenSaleOrder
()
subscription_request
.
validate
()
return
subscription_request
master/bt5/slapos_subscription_request/SkinTemplateItem/portal_skins/slapos_subscription_request/Resource_createSubscriptionRequest.py
0 → 100644
View file @
b12323d6
portal
=
context
.
getPortalObject
()
resource
=
context
if
subscriber_person_value
is
None
:
raise
AssertionError
(
'Can not find a person profile'
)
project_value
=
None
if
resource
.
getPortalType
()
==
"Software Product"
:
project_value
=
resource
.
getFollowUpValue
(
portal_type
=
"Project"
)
elif
resource
.
getPortalType
()
==
"Service"
:
if
resource
.
getRelativeUrl
()
!=
"service_module/slapos_virtual_master_subscription"
:
raise
NotImplementedError
(
'Unsupported resource: %s'
%
resource
.
getRelativeUrl
())
else
:
raise
NotImplementedError
(
'Unsupported resource: %s'
%
resource
.
getRelativeUrl
())
######################################################
# Find Sale Trade Condition and price
source_section
=
subscriber_person_value
.
getCareerSubordination
(
subscriber_person_value
.
getRelativeUrl
())
# Create a temp Sale Order to calculate the real price and find the trade condition
now
=
DateTime
()
module
=
portal
.
portal_trash
#aggregate_value_list = []
tmp_sale_order
=
module
.
newContent
(
portal_type
=
'Sale Order'
,
temp_object
=
True
,
#effective_date=now+1,
start_date
=
now
,
# Ensure stop date value is higher than start date
# it will be updated by OpenSaleOrder_updatePeriod
# stop_date=now + 2,
destination_value
=
subscriber_person_value
,
destination_section
=
source_section
,
#destination_decision_value=source_decision_value,
destination_project_value
=
project_value
,
ledger_value
=
portal
.
portal_categories
.
ledger
.
automated
,
# XXX XXX destination_project_value=instance_tree.getFollowUpValue(),
)
tmp_sale_order
.
SaleOrder_applySaleTradeCondition
(
batch_mode
=
1
,
force
=
1
)
if
tmp_sale_order
.
getSpecialise
(
None
)
is
None
:
raise
AssertionError
(
'Can not find a trade condition to generate the Subscription Request'
)
# If no accounting is needed, no need to check the price
if
(
tmp_sale_order
.
getSourceSection
(
None
)
==
tmp_sale_order
.
getDestinationSection
(
None
))
or
\
(
tmp_sale_order
.
getSourceSection
(
None
)
is
None
):
price
=
0
else
:
# Add line
tmp_order_line
=
tmp_sale_order
.
newContent
(
portal_type
=
'Sale Order Line'
,
temp_object
=
True
,
resource_value
=
resource
,
variation_category_list
=
variation_category_list
,
quantity_unit
=
resource
.
getQuantityUnit
(),
base_contribution_list
=
resource
.
getBaseContributionList
(),
use
=
resource
.
getUse
(),
quantity
=
1
)
if
0
:
# XXX resource_vcl:
base_id
=
'movement'
cell_key
=
list
(
tmp_order_line
.
getCellKeyList
(
base_id
=
base_id
))[
0
]
tmp_order_cell
=
tmp_order_line
.
newCell
(
base_id
=
base_id
,
portal_type
=
'Sale Order Cell'
,
temp_object
=
True
,
*
cell_key
)
tmp_order_cell
.
edit
(
mapped_value_property_list
=
[
'price'
,
'quantity'
],
quantity
=
1
,
predicate_category_list
=
cell_key
,
variation_category_list
=
cell_key
)
price
=
tmp_order_cell
.
getPrice
(
0
)
else
:
price
=
tmp_order_line
.
getPrice
(
0
)
if
not
price
:
raise
AssertionError
(
'Can not find a price to generate the Subscription Request'
)
subscription_request
=
portal
.
subscription_request_module
.
newContent
(
portal_type
=
'Subscription Request'
,
source_value
=
subscriber_person_value
,
source_section_value
=
source_section
,
source_decision_value
=
subscriber_person_value
,
start_date
=
now
,
effective_date
=
now
,
resource_value
=
resource
,
variation_category_list
=
variation_category_list
,
# XXX aggregate_value=item,
quantity_unit
=
resource
.
getQuantityUnit
(),
quantity
=
1
,
ledger
=
"automated"
,
specialise_value
=
tmp_sale_order
.
getSpecialiseValue
(),
destination
=
tmp_sale_order
.
getSource
(),
destination_section
=
tmp_sale_order
.
getSourceSection
(),
price_currency
=
tmp_sale_order
.
getPriceCurrency
(),
price
=
price
,
# XXX activate_kw=activate_kw
)
"""
if len(subscription_request.checkConsistency()) != 0:
raise NotImplementedError(subscription_request.checkConsistency())
"""
subscription_request
.
submit
()
return
subscription_request
master/bt5/slapos_subscription_request/SkinTemplateItem/portal_skins/slapos_subscription_request/Resource_createSubscriptionRequest.xml
0 → 100644
View file @
b12323d6
<?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>
subscriber_person_value, variation_category_list
</string>
</value>
</item>
<item>
<key>
<string>
id
</string>
</key>
<value>
<string>
Resource_createSubscriptionRequest
</string>
</value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
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