Commit d058b2a9 authored by Rafael Monnerat's avatar Rafael Monnerat

Updates on Regularisation Request Auto Cancellation

See merge request nexedi/slapos.core!439
parents 6cf5c4d9 bf9b3c26
portal = context.getPortalObject() portal = context.getPortalObject()
portal.portal_catalog.searchAndActivate( portal.portal_catalog.searchAndActivate(
portal_type="Regularisation Request", portal_type="Regularisation Request",
simulation_state=["suspended"], simulation_state=["suspended", "validated"],
method_id='RegularisationRequest_invalidateIfPersonBalanceIsOk', method_id='RegularisationRequest_invalidateIfPersonBalanceIsOk',
activate_kw={'tag': tag} activate_kw={'tag': tag}
) )
......
...@@ -42,7 +42,7 @@ if (event is None) and (ticket.getSimulationState() == 'suspended'): ...@@ -42,7 +42,7 @@ if (event is None) and (ticket.getSimulationState() == 'suspended'):
text_content=text_content, text_content=text_content,
) )
portal.portal_workflow.doActionFor(event, 'start_action', send_mail=True, comment=comment) event.start(send_mail=True, comment=comment)
event.stop(comment=comment) event.stop(comment=comment)
event.deliver(comment=comment) event.deliver(comment=comment)
event.reindexObject(activate_kw={'tag': tag}) event.reindexObject(activate_kw={'tag': tag})
......
...@@ -4,7 +4,7 @@ if REQUEST is not None: ...@@ -4,7 +4,7 @@ if REQUEST is not None:
state = context.getSimulationState() state = context.getSimulationState()
person = context.getSourceProjectValue(portal_type="Person") person = context.getSourceProjectValue(portal_type="Person")
if (state != 'suspended') or \ if (state not in ('suspended', 'validated')) or \
(person is None): (person is None):
return return
...@@ -19,10 +19,10 @@ for payment in person.Person_getSubscriptionRequestFirstUnpaidPaymentList(): ...@@ -19,10 +19,10 @@ for payment in person.Person_getSubscriptionRequestFirstUnpaidPaymentList():
# It can't be smaller, we are considernig all open invoices are from unpaid_payment_amount # It can't be smaller, we are considernig all open invoices are from unpaid_payment_amount
if round(float(outstanding_amount), 2) == round(-float(unpaid_payment_amount), 2): if round(float(outstanding_amount), 2) == round(-float(unpaid_payment_amount), 2):
context.invalidate(comment="Automatically disabled as balance is %s" % person.Entity_statOutstandingAmount()) context.invalidate(comment="Automatically disabled as balance is %s" % outstanding_amount)
return return
if (int(outstanding_amount) > 0): if (int(outstanding_amount) > 0):
return return
context.invalidate(comment="Automatically disabled as balance is %s" % person.Entity_statOutstandingAmount()) context.invalidate(comment="Automatically disabled as balance is %s" % outstanding_amount)
portal = context.getPortalObject() portal = context.getPortalObject()
default_resource_uid = portal.restrictedTraverse("service_module/slapos_crm_monitoring", None).getUid() default_resource_uid = portal.restrictedTraverse("service_module/slapos_crm_monitoring", None).getUid()
portal.portal_catalog.searchAndActivate( portal.portal_catalog.searchAndActivate(
portal_type='Support Request', portal_type='Support Request',
simulation_state='validated', simulation_state=['validated', 'suspended'],
default_resource_uid=default_resource_uid, default_resource_uid=default_resource_uid,
default_aggregate_portal_type=["Instance Tree"], default_aggregate_portal_type=["Instance Tree"],
method_id='SupportRequest_updateMonitoringState', method_id='SupportRequest_updateMonitoringState',
......
...@@ -127,13 +127,13 @@ class TestSlapOSCrmInvalidateSuspendedRegularisationRequest(SlapOSTestCaseMixinW ...@@ -127,13 +127,13 @@ class TestSlapOSCrmInvalidateSuspendedRegularisationRequest(SlapOSTestCaseMixinW
reference="TESTREGREQ-%s" % new_id, reference="TESTREGREQ-%s" % new_id,
) )
def test_alarm_not_suspended_regularisation_request(self): def test_alarm_validated_regularisation_request(self):
ticket = self.createRegularisationRequest() ticket = self.createRegularisationRequest()
ticket.validate() ticket.validate()
self.tic() self.tic()
alarm = self.portal.portal_alarms.\ alarm = self.portal.portal_alarms.\
slapos_crm_invalidate_suspended_regularisation_request slapos_crm_invalidate_suspended_regularisation_request
self._test_alarm_not_visited(alarm, ticket, "RegularisationRequest_invalidateIfPersonBalanceIsOk") self._test_alarm(alarm, ticket, "RegularisationRequest_invalidateIfPersonBalanceIsOk")
def test_alarm_suspended_regularisation_request(self): def test_alarm_suspended_regularisation_request(self):
ticket = self.createRegularisationRequest() ticket = self.createRegularisationRequest()
...@@ -144,6 +144,16 @@ class TestSlapOSCrmInvalidateSuspendedRegularisationRequest(SlapOSTestCaseMixinW ...@@ -144,6 +144,16 @@ class TestSlapOSCrmInvalidateSuspendedRegularisationRequest(SlapOSTestCaseMixinW
slapos_crm_invalidate_suspended_regularisation_request slapos_crm_invalidate_suspended_regularisation_request
self._test_alarm(alarm, ticket, "RegularisationRequest_invalidateIfPersonBalanceIsOk") self._test_alarm(alarm, ticket, "RegularisationRequest_invalidateIfPersonBalanceIsOk")
def test_alarm_invalidated_regularisation_request(self):
ticket = self.createRegularisationRequest()
ticket.validate()
ticket.invalidate()
self.tic()
alarm = self.portal.portal_alarms.\
slapos_crm_invalidate_suspended_regularisation_request
self._test_alarm_not_visited(alarm, ticket, "RegularisationRequest_invalidateIfPersonBalanceIsOk")
class TestSlapOSCrmTriggerEscalationOnAcknowledgmentRegularisationRequest(SlapOSTestCaseMixinWithAbort): class TestSlapOSCrmTriggerEscalationOnAcknowledgmentRegularisationRequest(SlapOSTestCaseMixinWithAbort):
def createRegularisationRequest(self): def createRegularisationRequest(self):
......
...@@ -239,13 +239,13 @@ class TestSlapOSRegularisationRequest_invalidateIfPersonBalanceIsOk( ...@@ -239,13 +239,13 @@ class TestSlapOSRegularisationRequest_invalidateIfPersonBalanceIsOk(
self.assertEqual(ticket.getSimulationState(), 'invalidated') self.assertEqual(ticket.getSimulationState(), 'invalidated')
@simulate('Entity_statOutstandingAmount', '*args, **kwargs', 'return "0"') @simulate('Entity_statOutstandingAmount', '*args, **kwargs', 'return "0"')
def test_invalidateIfPersonBalanceIsOk_not_suspended(self): def test_invalidateIfPersonBalanceIsOk_validated(self):
person = self.makePerson(index=0, user=0) person = self.makePerson(index=0, user=0)
ticket = self.createRegularisationRequest() ticket = self.createRegularisationRequest()
ticket.edit(source_project_value=person) ticket.edit(source_project_value=person)
ticket.validate() ticket.validate()
ticket.RegularisationRequest_invalidateIfPersonBalanceIsOk() ticket.RegularisationRequest_invalidateIfPersonBalanceIsOk()
self.assertEqual(ticket.getSimulationState(), 'validated') self.assertEqual(ticket.getSimulationState(), 'invalidated')
@simulate('Entity_statOutstandingAmount', '*args, **kwargs', 'return "0"') @simulate('Entity_statOutstandingAmount', '*args, **kwargs', 'return "0"')
def test_invalidateIfPersonBalanceIsOk_no_person(self): def test_invalidateIfPersonBalanceIsOk_no_person(self):
......
...@@ -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>testSlapOSCRMRegularisationRequestSkins</string> </value> <value> <string>testSlapOSCRMRegularisationRequestSkins</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>
......
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