def test_getClosestDate(self): target_date = DateTime('2008/08/15 00:00:00 GMT+2') self.assertEqual('Aug. 1, 2008 12:00 am GMT+2', getClosestDate(target_date=target_date, precision='month', before=True).pCommonZ()) self.assertEqual('Sep. 1, 2008 12:00 am GMT+2', getClosestDate(target_date=target_date, precision='month', before=False).pCommonZ()) date = DateTime('2008/01/10 00:00:00 GMT-2') self.assertEqual('Aug. 10, 2008 12:00 am GMT-2', getClosestDate(date=date, target_date=target_date, precision='month', before=True).pCommonZ()) self.assertEqual('Sep. 10, 2008 12:00 am GMT-2', getClosestDate(date=date, target_date=target_date, precision='month', before=False).pCommonZ())
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 )
def stepCheckSubscriptionSalePackingListCoverage(self, sequence, **kw): hosting_subscription = self.portal.portal_catalog.getResultValue( uid=sequence['hosting_subscription_uid']) delivery_list = self.portal.portal_catalog( portal_type='Sale Packing List', causality_relative_url=hosting_subscription.getRelativeUrl(), sort_on=(('delivery.start_date', 'desc'),) ) # is next month covered? self.assertEqual(1, len(delivery_list)) instance_setup_delivery = self.portal.portal_catalog.getResultValue( portal_type='Sale Packing List Line', default_aggregate_uid=sequence['software_instance_uid'], resource=self.portal.portal_preferences\ .getPreferredInstanceSetupResource()).getParentValue() self.assertEqual('delivered', instance_setup_delivery.getSimulationState()) start_date = None for item in self.portal.portal_workflow.getInfoFor( ob=instance_setup_delivery, name='history', wf_id='packing_list_workflow'): if item.get('simulation_state') == 'stopped': start_date = item.get('time') break start_date = getClosestDate(target_date=start_date, precision='day') while start_date.day() >= 29: start_date = addToDate(start_date, to_add={'day': -1}) stop_date = addToDate(start_date, to_add={'month': 1}) idx = 0 for delivery in delivery_list: self.assertEqual(start_date, delivery.getStartDate()) self.assertEqual(stop_date, delivery.getStopDate()) self.assertEqual(hosting_subscription.getRelativeUrl(), delivery.getCausality()) delivery_line_list = \ delivery.contentValues(portal_type="Sale Packing List Line") self.assertEquals(1, len(delivery_line_list)) delivery_line = delivery_line_list[0] self.assertEquals("organisation_module/vifib_internet", delivery.getSource()) self.assertEquals("organisation_module/vifib_internet", delivery.getSourceSection()) self.assertEquals("person_module/test_vifib_customer", delivery.getDestination()) self.assertEquals("person_module/test_vifib_customer", delivery.getDestinationSection()) self.assertEquals("currency_module/EUR", delivery.getPriceCurrency()) # check sale packing list line related property self.assertEquals("service_module/vifib_instance_subscription", delivery_line.getResource()) self.assertEquals(1, delivery_line.getQuantity()) self.assertEquals("unit/piece", delivery_line.getQuantityUnit()) self.assertEquals(0.83612040133800003, delivery_line.getPrice()) # fetch open order, open order line and subscription person = self.portal.person_module['test_vifib_customer'] open_order = self.portal.portal_catalog.getResultValue( default_destination_decision_uid=person.getUid(), portal_type="Open Sale Order", validation_state='validated') open_order_line = \ open_order.contentValues(portal_type="Open Sale Order Line")[0] # check related property self.assertEquals(open_order_line.getSpecialise(), delivery.getSpecialise()) idx += 1
def stepInvoiceSetStartDatePreviousMonth(self, sequence, **kw): invoice = self.portal.portal_catalog.getResultValue( uid=sequence['invoice_uid']) invoice.setStartDate(getClosestDate(target_date=DateTime())-1)
from Products.ERP5Type.DateUtils import getClosestDate portal = context.getPortalObject() delivery_portal_type = "Sale Order" delivery_id = "erp5_trade_renderjs_ui_test_order" source_value = portal.restrictedTraverse( 'organisation_module/erp5_trade_renderjs_ui_test_source_node') destination_value = portal.restrictedTraverse( 'organisation_module/erp5_trade_renderjs_ui_test_destination_node') specialise_value = portal.restrictedTraverse( 'business_process_module/erp5_trade_renderjs_ui_test_business_process') resource_value = portal.restrictedTraverse( 'product_module/erp5_trade_renderjs_ui_test_product') module = portal.getDefaultModule(delivery_portal_type) delivery = module.newContent(portal_type=delivery_portal_type, id=delivery_id, title='%s_title' % delivery_id, start_date=getClosestDate(precision='day'), source_value=source_value, source_section_value=source_value, destination_value=destination_value, destination_section_value=destination_value, specialise_value=specialise_value) return "Sale Order Created."
from zExceptions import Unauthorized if REQUEST is not None: raise Unauthorized from Products.ERP5Type.DateUtils import addToDate, getClosestDate hosting_subscription = context portal = context.getPortalObject() start_date = context.HostingSubscription_calculateSubscriptionStartDate() workflow_item_list = portal.portal_workflow.getInfoFor( ob=hosting_subscription, name='history', wf_id='instance_slap_interface_workflow') result_date = None for item in workflow_item_list: if item.get('slap_state') == 'destroy_requested': end_date = item.get('time') result_date = getClosestDate(target_date=end_date, precision='day') if result_date <= end_date: result_date = addToDate(result_date, to_add={'day': 1}) break return result_date
from Products.ERP5Type.DateUtils import addToDate, getClosestDate hosting_subscription = state_change['object'] edit_kw = {} if hosting_subscription.getPeriodicityHour() is None: edit_kw['periodicity_hour_list'] = [0] if hosting_subscription.getPeriodicityMinute() is None: edit_kw['periodicity_minute_list'] = [0] if hosting_subscription.getPeriodicityMonthDay() is None: start_date = hosting_subscription.HostingSubscription_calculateSubscriptionStartDate() start_date = getClosestDate(target_date=start_date, precision='day') while start_date.day() >= 29: start_date = addToDate(start_date, to_add={'day': -1}) edit_kw['periodicity_month_day_list'] = [start_date.day()] if edit_kw: hosting_subscription.edit(**edit_kw)
def stepCheckSimulationMovement(self, sequence, **kw): # find related documents: open order, open order line, # subscription item, etc. person = self.portal.person_module['test_vifib_customer'] open_order = self.portal.portal_catalog.getResultValue( default_destination_decision_uid=person.getUid(), validation_state='validated', portal_type="Open Sale Order") open_order_line_list = \ open_order.contentValues(portal_type="Open Sale Order Line") self.assertEquals(1, len(open_order_line_list)) open_order_line = open_order_line_list[0] hosting_subscription = \ open_order_line.getAggregateValue(portal_type="Hosting Subscription") applied_rule = \ hosting_subscription.getCausalityRelatedValue(portal_type="Applied Rule") self.assertEquals( "portal_rules/vifib_subscription_item_rule", applied_rule.getSpecialise()) # check start date and stop date of the subscription item, # currently there is 1 month instance_setup_delivery = self.portal.portal_catalog.getResultValue( portal_type='Sale Packing List Line', default_aggregate_uid=sequence['software_instance_uid'], resource=self.portal.portal_preferences\ .getPreferredInstanceSetupResource()).getParentValue() self.assertEqual('delivered', instance_setup_delivery.getSimulationState()) start_date = None for item in self.portal.portal_workflow.getInfoFor( ob=instance_setup_delivery, name='history', wf_id='packing_list_workflow'): if item.get('simulation_state') == 'delivered': start_date = item.get('time') break start_date = getClosestDate(target_date=start_date, precision='day') while start_date.day() >= 29: start_date = addToDate(start_date, to_add={'day': -1}) stop_date = addToDate(start_date, to_add={'month': 1}) # check periodicity, should be first day of each month self.assertEquals( None, hosting_subscription.getPeriodicityMinuteFrequency()) self.assertEquals( [0], hosting_subscription.getPeriodicityMinuteList()) self.assertEquals( None, hosting_subscription.getPeriodicityHourFrequency()) self.assertEquals( [0], hosting_subscription.getPeriodicityHourList()) self.assertEquals( None, hosting_subscription.getPeriodicityDayFrequency()) self.assertEquals( None, hosting_subscription.getPeriodicityMonthFrequency()) self.assertEquals( [start_date.day()], hosting_subscription.getPeriodicityMonthDayList()) self.assertEquals( None, hosting_subscription.getPeriodicityWeekFrequency()) self.assertEqual(start_date, open_order_line.getStartDate()) self.assertEqual(stop_date, open_order_line.getStopDate()) simulation_movement_list = self.portal.portal_catalog( portal_type='Simulation Movement', parent_uid=applied_rule.getUid(), sort_on=(('movement.start_date', 'desc'),) ) # Check that simulation is created by the periodicity for one month self.assertEquals(1, len(simulation_movement_list)) # Check the list of expected simulation idx = 0 for simulation_movement in simulation_movement_list: # Check simulation movement property self.assertEquals(1.0, simulation_movement.getQuantity()) self.assertEquals("unit/piece", simulation_movement.getQuantityUnit()) self.assertEquals(0.83612040133800003, simulation_movement.getPrice()) self.assertEquals("currency_module/EUR", simulation_movement.getPriceCurrency()) # XXX supplier self.assertEquals("organisation_module/vifib_internet", simulation_movement.getSource()) self.assertEquals("organisation_module/vifib_internet", simulation_movement.getSourceSection()) # XXX customer self.assertEquals("person_module/test_vifib_customer", simulation_movement.getDestination()) self.assertEquals("person_module/test_vifib_customer", simulation_movement.getDestinationSection()) self.assertEquals(open_order_line.getSpecialise(), simulation_movement.getSpecialise()) self.assertEquals("service_module/vifib_instance_subscription", simulation_movement.getResource()) self.assertEquals("vifib/delivery", simulation_movement.getTradePhase()) self.assertEquals(None, simulation_movement.getAggregate( portal_type="Computer Partition")) self.assertEquals(None, simulation_movement.getAggregate( portal_type="Software Instance")) self.assertEquals(hosting_subscription.getRelativeUrl(), simulation_movement.getAggregate( portal_type="Hosting Subscription")) self.assertEquals(None, simulation_movement.getAggregate( portal_type="Software Release")) self.assertEqual(start_date, simulation_movement.getStartDate()) self.assertEqual(stop_date, simulation_movement.getStopDate()) # delivered already... self.assertNotEqual(None, simulation_movement.getDelivery()) self.assertEqual('Sale Packing List Line', simulation_movement.getDeliveryValue().getPortalType()) # ...so no buildable self.assertFalse(simulation_movement.isBuildable()) # delivered... self.assertEqual('delivered', simulation_movement.getSimulationState()) # ...so invoice rule applied self.assertEqual(1, len(simulation_movement.contentValues(portal_type="Applied Rule"))) # ...with one simulation movement invoice_applied_rule = simulation_movement.contentValues( portal_type="Applied Rule")[0] self.assertEqual(1, len(invoice_applied_rule.contentValues())) # check next simulation movement idx += 1
def stepIncreaseOpenOrderCoverage(self, sequence, **kw): self.portal.portal_alarms.vifib_person_update_open_order.\ Alarm_updatePersonOpenOrder( tag='test_tag', fixit=False, params={'stop_date': addToDate(getClosestDate(target_date=DateTime(), precision='month', before=1), month=3)})