Commit 148367e5 authored by Łukasz Nowak's avatar Łukasz Nowak

Avoid External method decoration.

It just does not work [tm].
parent b734cf39
......@@ -91,163 +91,166 @@ def fixSaleOrder(slap_document):
sale_packing_list.getParentValue().deleteContent(sale_packing_list.getId())
return new_sale_order.contentValues(portal_type='Sale Order Line')[0]
@WorkflowMethod.disable
def SlapDocument_migrateSlapState(self):
from Products.ZSQLCatalog.SQLCatalog import Query, ComplexQuery
def setUpPeriodicity(hosting_subscription):
from Products.ERP5Type.DateUtils import addToDate, getClosestDate
start_date = hosting_subscription.getCreationDate()
start_date = getClosestDate(target_date=start_date, precision='day')
while start_date.day() >= 29:
start_date = addToDate(start_date, to_add={'day': -1})
periodicity_month_day_list = [start_date.day()]
periodicity_hour_list=[0]
periodicity_minute_list=[0]
hosting_subscription.edit(
periodicity_month_day_list=periodicity_month_day_list,
periodicity_hour_list=periodicity_hour_list,
periodicity_minute_list=periodicity_minute_list
)
slap_document = self
portal = self.getPortalObject()
portal_type_list = ('Hosting Subscription', 'Software Instance', 'Slave Instance')
portal_type = slap_document.getPortalType()
if portal_type not in portal_type_list:
raise TypeError('%s is not %s' % (slap_document.getPath(), portal_type_list))
explanation_delivery_line = portal.portal_catalog.getResultValue(
portal_type='Sale Packing List Line',
simulation_state=['ready', 'confirmed', 'started', 'stopped', 'delivered'],
query=ComplexQuery(
Query(default_aggregate_uid=slap_document.getUid()),
Query(default_resource_uid=[
portal.restrictedTraverse(portal.portal_preferences.getPreferredInstanceSetupResource()).getUid(),
portal.restrictedTraverse(portal.portal_preferences.getPreferredInstanceHostingResource()).getUid(),
portal.restrictedTraverse(portal.portal_preferences.getPreferredInstanceCleanupResource()).getUid(),
]),
operator='AND',
),
sort_on=(('movement.start_date', 'DESC'),)
)
if explanation_delivery_line is None:
explanation_delivery_line = slap_document.getAggregateRelatedValue(portal_type='Sale Order Line')
if slap_document.getRelativeUrl() == 'hosting_subscription_module/20120521-C46CA2':
# special case of destroyed data
explanation_delivery_line = fixSaleOrder(slap_document)
if portal_type == 'Hosting Subscription':
current_periodicity = slap_document.getPeriodicityMonthDayList()
if current_periodicity is None or len(current_periodicity) == 0:
setUpPeriodicity(slap_document)
# Person is now directly associated on the HS
slap_document.edit(
destination_section_value=explanation_delivery_line.getDestinationSectionValue(portal_type="Person"),
)
assert(slap_document.getDestinationSection() == explanation_delivery_line.getDestinationSectionValue().getRelativeUrl())
else:
hosting_subscription = explanation_delivery_line.getAggregateValue(portal_type='Hosting Subscription')
slap_document.edit(
specialise_value=hosting_subscription,
root_software_release_url=explanation_delivery_line.getAggregateValue(portal_type='Software Release').getUrlString()
@WorkflowMethod.disable
def real(self):
from Products.ZSQLCatalog.SQLCatalog import Query, ComplexQuery
def setUpPeriodicity(hosting_subscription):
from Products.ERP5Type.DateUtils import addToDate, getClosestDate
start_date = hosting_subscription.getCreationDate()
start_date = getClosestDate(target_date=start_date, precision='day')
while start_date.day() >= 29:
start_date = addToDate(start_date, to_add={'day': -1})
periodicity_month_day_list = [start_date.day()]
periodicity_hour_list=[0]
periodicity_minute_list=[0]
hosting_subscription.edit(
periodicity_month_day_list=periodicity_month_day_list,
periodicity_hour_list=periodicity_hour_list,
periodicity_minute_list=periodicity_minute_list
)
slap_document = self
portal = self.getPortalObject()
portal_type_list = ('Hosting Subscription', 'Software Instance', 'Slave Instance')
portal_type = slap_document.getPortalType()
if portal_type not in portal_type_list:
raise TypeError('%s is not %s' % (slap_document.getPath(), portal_type_list))
explanation_delivery_line = portal.portal_catalog.getResultValue(
portal_type='Sale Packing List Line',
simulation_state=['ready', 'confirmed', 'started', 'stopped', 'delivered'],
query=ComplexQuery(
Query(default_aggregate_uid=slap_document.getUid()),
Query(default_resource_uid=[
portal.restrictedTraverse(portal.portal_preferences.getPreferredInstanceSetupResource()).getUid(),
portal.restrictedTraverse(portal.portal_preferences.getPreferredInstanceHostingResource()).getUid(),
portal.restrictedTraverse(portal.portal_preferences.getPreferredInstanceCleanupResource()).getUid(),
]),
operator='AND',
),
sort_on=(('movement.start_date', 'DESC'),)
)
assert(slap_document.getSpecialise() == hosting_subscription.getRelativeUrl())
# Migrate slap state
if portal_type == 'Hosting Subscription':
state = slap_document.getRootState()
promise_kw = {
'instance_xml': slap_document.getTextContent(),
'software_type': slap_document.getSourceReference(),
'sla_xml': slap_document.getSlaXml(),
'software_release': slap_document.getRootSoftwareReleaseUrl(),
'shared': slap_document.isRootSlave()
}
else:
if explanation_delivery_line.getPortalType() == 'Sale Packing List Line':
resource = explanation_delivery_line.getResource()
if resource == portal.portal_preferences.getPreferredInstanceSetupResource():
state = 'stopped'
elif resource == portal.portal_preferences.getPreferredInstanceCleanupResource():
state = 'destroyed'
elif resource == portal.portal_preferences.getPreferredInstanceHostingResource():
if explanation_delivery_line.getSimulationState() in ('confirmed', 'started'):
state = 'started'
else:
if explanation_delivery_line is None:
explanation_delivery_line = slap_document.getAggregateRelatedValue(portal_type='Sale Order Line')
if slap_document.getRelativeUrl() == 'hosting_subscription_module/20120521-C46CA2':
# special case of destroyed data
explanation_delivery_line = fixSaleOrder(slap_document)
if portal_type == 'Hosting Subscription':
current_periodicity = slap_document.getPeriodicityMonthDayList()
if current_periodicity is None or len(current_periodicity) == 0:
setUpPeriodicity(slap_document)
# Person is now directly associated on the HS
slap_document.edit(
destination_section_value=explanation_delivery_line.getDestinationSectionValue(portal_type="Person"),
)
assert(slap_document.getDestinationSection() == explanation_delivery_line.getDestinationSectionValue().getRelativeUrl())
else:
hosting_subscription = explanation_delivery_line.getAggregateValue(portal_type='Hosting Subscription')
slap_document.edit(
specialise_value=hosting_subscription,
root_software_release_url=explanation_delivery_line.getAggregateValue(portal_type='Software Release').getUrlString()
)
assert(slap_document.getSpecialise() == hosting_subscription.getRelativeUrl())
# Migrate slap state
if portal_type == 'Hosting Subscription':
state = slap_document.getRootState()
promise_kw = {
'instance_xml': slap_document.getTextContent(),
'software_type': slap_document.getSourceReference(),
'sla_xml': slap_document.getSlaXml(),
'software_release': slap_document.getRootSoftwareReleaseUrl(),
'shared': slap_document.isRootSlave()
}
else:
if explanation_delivery_line.getPortalType() == 'Sale Packing List Line':
resource = explanation_delivery_line.getResource()
if resource == portal.portal_preferences.getPreferredInstanceSetupResource():
state = 'stopped'
elif resource == portal.portal_preferences.getPreferredInstanceCleanupResource():
state = 'destroyed'
elif resource == portal.portal_preferences.getPreferredInstanceHostingResource():
if explanation_delivery_line.getSimulationState() in ('confirmed', 'started'):
state = 'started'
else:
state = 'stopped'
pass
else:
raise TypeError('Bad resource %s' % resource)
pass
else:
raise TypeError('Bad resource %s' % resource)
pass
else:
if explanation_delivery_line.getSimulationState() == 'cancelled':
state = 'destroyed'
else:
assert(explanation_delivery_line.getSimulationState() in ['ordered', 'confirmed'])
previous_workflow_state = self.workflow_history[
'software_instance_slap_interface_workflow'][-1]['slap_state']
if previous_workflow_state == 'start_requested':
state = 'started'
elif previous_workflow_state == 'stop_requested':
state = 'stopped'
if explanation_delivery_line.getSimulationState() == 'cancelled':
state = 'destroyed'
else:
raise NotImplementedError("Previous state %r not supported" % previous_workflow_state)
promise_kw = {
'instance_xml': slap_document.getTextContent(),
'software_type': slap_document.getSourceReference(),
'sla_xml': slap_document.getSlaXml(),
'software_release': slap_document.getRootSoftwareReleaseUrl(),
'shared': slap_document.getPortalType() == 'Slave Instance'
assert(explanation_delivery_line.getSimulationState() in ['ordered', 'confirmed'])
previous_workflow_state = self.workflow_history[
'software_instance_slap_interface_workflow'][-1]['slap_state']
if previous_workflow_state == 'start_requested':
state = 'started'
elif previous_workflow_state == 'stop_requested':
state = 'stopped'
else:
raise NotImplementedError("Previous state %r not supported" % previous_workflow_state)
promise_kw = {
'instance_xml': slap_document.getTextContent(),
'software_type': slap_document.getSourceReference(),
'sla_xml': slap_document.getSlaXml(),
'software_release': slap_document.getRootSoftwareReleaseUrl(),
'shared': slap_document.getPortalType() == 'Slave Instance'
}
slap_document.setCausalityValue(explanation_delivery_line.getParentValue())
if state != 'destroyed' or explanation_delivery_line.getSimulationState() != 'delivered':
slap_document.setAggregateValue(explanation_delivery_line.getAggregateValue(portal_type='Computer Partition'))
assert(slap_document.getAggregate() == explanation_delivery_line.getAggregate(portal_type='Computer Partition'))
state_map = {
'started': 'start_requested',
'stopped': 'stop_requested',
'destroyed': 'destroy_requested'
}
slap_document.setCausalityValue(explanation_delivery_line.getParentValue())
if state != 'destroyed' or explanation_delivery_line.getSimulationState() != 'delivered':
slap_document.setAggregateValue(explanation_delivery_line.getAggregateValue(portal_type='Computer Partition'))
assert(slap_document.getAggregate() == explanation_delivery_line.getAggregate(portal_type='Computer Partition'))
state_map = {
'started': 'start_requested',
'stopped': 'stop_requested',
'destroyed': 'destroy_requested'
}
required_state = state_map[state]
_jumpToStateFor = portal.portal_workflow._jumpToStateFor
if slap_document.getSlapState() != required_state:
_jumpToStateFor(slap_document, required_state, 'instance_slap_interface_workflow')
if not(slap_document.getSlapState() == required_state):
raise ValueError('%s: %s != %s' % (state, slap_document.getSlapState(), required_state))
# Migrate validation state
if portal_type == 'Hosting Subscription':
if state == 'destroyed':
_jumpToStateFor(slap_document, 'archived', 'hosting_subscription_workflow')
assert(slap_document.getValidationState() == 'archived')
else:
_jumpToStateFor(slap_document, 'validated', 'hosting_subscription_workflow')
assert(slap_document.getValidationState() == 'validated')
else:
if state == 'destroyed' and \
(explanation_delivery_line.getPortalType() == 'Sale Order Line' or \
explanation_delivery_line.getSimulationState() == 'delivered'):
_jumpToStateFor(slap_document, 'invalidated', 'item_workflow')
required_state = state_map[state]
_jumpToStateFor = portal.portal_workflow._jumpToStateFor
if slap_document.getSlapState() != required_state:
_jumpToStateFor(slap_document, required_state, 'instance_slap_interface_workflow')
if not(slap_document.getSlapState() == required_state):
raise ValueError('%s: %s != %s' % (state, slap_document.getSlapState(), required_state))
# Migrate validation state
if portal_type == 'Hosting Subscription':
if state == 'destroyed':
_jumpToStateFor(slap_document, 'archived', 'hosting_subscription_workflow')
assert(slap_document.getValidationState() == 'archived')
else:
_jumpToStateFor(slap_document, 'validated', 'hosting_subscription_workflow')
assert(slap_document.getValidationState() == 'validated')
else:
if not(slap_document.getValidationState() == 'validated'):
raise ValueError('%s != %s' % (slap_document.getValidationState(), 'validated'))
if state == 'destroyed' and \
(explanation_delivery_line.getPortalType() == 'Sale Order Line' or \
explanation_delivery_line.getSimulationState() == 'delivered'):
_jumpToStateFor(slap_document, 'invalidated', 'item_workflow')
else:
if not(slap_document.getValidationState() == 'validated'):
raise ValueError('%s != %s' % (slap_document.getValidationState(), 'validated'))
# Update Local Roles
slap_document.updateLocalRolesOnSecurityGroups()
# Update Local Roles
slap_document.updateLocalRolesOnSecurityGroups()
@WorkflowMethod.disable
def SalePackingListLine_deliver(self):
portal = self.getPortalObject()
assert(self.getResource() in [portal.portal_preferences.getPreferredInstanceSetupResource(),
portal.portal_preferences.getPreferredInstanceUpdateResource()])
if self.getSimulationState() != 'delivered':
portal.portal_workflow._jumpToStateFor(self.getParentValue(), 'delivered')
self.recursiveReindexObject()
@WorkflowMethod.disable
def real(self):
portal = self.getPortalObject()
assert(self.getResource() in [portal.portal_preferences.getPreferredInstanceSetupResource(),
portal.portal_preferences.getPreferredInstanceUpdateResource()])
if self.getSimulationState() != 'delivered':
portal.portal_workflow._jumpToStateFor(self.getParentValue(), 'delivered')
self.recursiveReindexObject()
real(self)
def Computer_updateLocalRoles(self):
self.updateLocalRolesOnSecurityGroups(reindex=False)
......
113
\ No newline at end of file
114
\ 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