def _get_start_stop_datetime(self, form_config): """ Returns a start datetime for the Visit and the Encounter, and a stop_datetime for the Visit """ if form_config.openmrs_start_datetime: cc_start_datetime_str = form_config.openmrs_start_datetime._get_commcare_value(self.info) if cc_start_datetime_str is None: raise ConfigurationError( 'A form config for form XMLNS "{}" uses "openmrs_start_datetime" to get the start of ' 'the visit but no value was found in the form.'.format(form_config.xmlns) ) try: cc_start_datetime = string_to_utc_datetime(cc_start_datetime_str) except ValueError: raise ConfigurationError( 'A form config for form XMLNS "{}" uses "openmrs_start_datetime" to get the start of ' 'the visit but an invalid value was found in the form.'.format(form_config.xmlns) ) cc_stop_datetime = cc_start_datetime + timedelta(days=1) - timedelta(seconds=1) # We need to use openmrs_start_datetime.serialize() # for both values because they could be either # OpenMRS datetimes or OpenMRS dates, and their data # types must match. start_datetime = form_config.openmrs_start_datetime.serialize(cc_start_datetime) stop_datetime = form_config.openmrs_start_datetime.serialize(cc_stop_datetime) else: cc_start_datetime = string_to_utc_datetime(self.form_json['form']['meta']['timeEnd']) cc_stop_datetime = cc_start_datetime + timedelta(days=1) - timedelta(seconds=1) start_datetime = to_omrs_datetime(cc_start_datetime) stop_datetime = to_omrs_datetime(cc_stop_datetime) return start_datetime, stop_datetime
def test_to_timestamp_datetime(self): class CAT(datetime.tzinfo): def utcoffset(self, dt): return datetime.timedelta(hours=2) def tzname(self, dt): return "CAT" def dst(self, dt): return datetime.timedelta(0) dt = datetime.datetime(2017, 6, 27, 9, 36, 47, tzinfo=CAT()) openmrs_datetime = to_omrs_datetime(dt) self.assertEqual(openmrs_datetime, '2017-06-27T09:36:47.000+0200')
def test_to_timestamp_int(self): day_int = 1 openmrs_timestamp = to_omrs_datetime(day_int) self.assertIsNone(openmrs_timestamp)
def test_to_timestamp_day_num(self): day_str = '1' with self.assertRaisesMessage( ValueError, '"1" is not recognised as a date or a datetime'): to_omrs_datetime(day_str)
def test_to_timestamp_date(self): date = datetime.date(2017, 6, 27) openmrs_datetime = to_omrs_datetime(date) self.assertEqual(openmrs_datetime, '2017-06-27T00:00:00.000+0000')
def test_to_timestamp_datetime_str(self): datetime_str = '2017-06-27T09:36:47.396000Z' openmrs_datetime = to_omrs_datetime(datetime_str) self.assertEqual(openmrs_datetime, '2017-06-27T09:36:47.396+0000')
def test_to_timestamp_day_num(self): day_str = '1' with self.assertRaisesMessage(ValueError, '"1" is not recognised as a date or a datetime'): to_omrs_datetime(day_str)