コード例 #1
0
 def handle(self, *args, **options):
     feedbacks = Feedback.objects.filter(expected_datetime__isnull=True)
     for f in feedbacks:
         fixing_time = timedelta(milliseconds=calc_fixing_time(f.service_code))
         if fixing_time.total_seconds() > 0:
             expected_datetime = f.requested_datetime + fixing_time
             f.expected_datetime = expected_datetime
             f.save()
     logger.info("Estimation calculation completed")
コード例 #2
0
def save_feedback(f):
    existing_feedback = get_existing_feedback(f['service_request_id'])

    expected_datetime = f.get('expected_datetime', None)
    requested_datetime = f.get('requested_datetime', None)
    if expected_datetime is None and requested_datetime is not None:
        requested_datetime = parse(requested_datetime)
        median = timedelta(milliseconds=calc_fixing_time(f.get('service_code', '')))
        if median.total_seconds() > 0:
            expected_datetime = requested_datetime + median

    updated_feedback = Feedback(
            service_request_id=f['service_request_id'],
            status_notes=f.get('status_notes', ''),
            status=f['status'],
            service_code=f.get('service_code', ''),
            service_name=f.get('service_name', ''),
            description=f.get('description', ''),
            agency_responsible=f.get('agency_responsible', ''),
            service_notice=f.get('service_notice', ''),
            requested_datetime=f.get('requested_datetime', ''),
            updated_datetime=f.get('updated_datetime', ''),
            expected_datetime=expected_datetime,
            address_string=f.get('address', ''),
            media_url=f.get('media_url', ''),

            email=f.get('email', ''),
            first_name=f.get('first_name', ''),
            last_name=f.get('last_name', ''),
            phone=f.get('phone', ''),

            # Extension information
            service_object_id=f.get('service_object_id', ''),
            service_object_type=f.get('service_object_type', ''),

            location=GEOSGeometry('SRID=4326;POINT(' + str(f.get('long', 0)) + ' ' + str(f.get('lat', 0)) + ')'),

            synchronized=True
    )

    if existing_feedback:
        updated_feedback.id = existing_feedback.id
        Task.objects.filter(feedback_id=existing_feedback.id).delete()
        MediaURL.objects.filter(feedback_id=existing_feedback.id).delete()

    extended_attributes = f.get('extended_attributes', None)
    if extended_attributes:
        updated_feedback.title = extended_attributes.get('title', '')
        updated_feedback.detailed_status = extended_attributes.get('detailed_status', '')

    updated_feedback.save()

    if extended_attributes:
        media_urls_json = extended_attributes.get('media_urls', None)
        if media_urls_json:
            for media_url_json in media_urls_json:
                media_url = MediaURL(feedback_id=updated_feedback.id, media_url=media_url_json)
                media_url.save()

        tasks_json = extended_attributes.get('tasks', None)
        if tasks_json:
            for task_json in tasks_json:
                task = Task(
                        feedback_id=updated_feedback.id,
                        task_state=task_json.get('task_state', ''),
                        task_type=task_json.get('task_type', ''),
                        owner_name=task_json.get('owner_name', ''),
                        task_modified=task_json.get('task_modified', ''),
                        task_created=task_json.get('task_created', '')
                )
                task.save()

    if settings.SEND_STATUS_UPDATE_NOTIFICATIONS \
            and existing_feedback and feedback_status_was_changed(existing_feedback, updated_feedback):
        send_email_notification(updated_feedback)
コード例 #3
0
 def test_estimation_for_all_closed_case(self):
     estimated_time = calc_fixing_time(177)
     self.assertTrue(estimated_time == 1000)
コード例 #4
0
 def test_estimation_for_all_open_case(self):
     estimated_time = calc_fixing_time(176)
     self.assertTrue(estimated_time == 0)
コード例 #5
0
 def test_estimation_two_closed_one_open_case(self):
     estimated_time = calc_fixing_time(175)
     self.assertTrue(estimated_time == 33000)
コード例 #6
0
 def test_estimation_unexisting_service_code(self):
     estimated_time = calc_fixing_time(100500)
     self.assertTrue(estimated_time == 0)
コード例 #7
0
 def test_estimation_for_one_record(self):
     estimated_time = calc_fixing_time(173)
     self.assertTrue(estimated_time == 2578233000)