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")
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)
def test_estimation_for_all_closed_case(self): estimated_time = calc_fixing_time(177) self.assertTrue(estimated_time == 1000)
def test_estimation_for_all_open_case(self): estimated_time = calc_fixing_time(176) self.assertTrue(estimated_time == 0)
def test_estimation_two_closed_one_open_case(self): estimated_time = calc_fixing_time(175) self.assertTrue(estimated_time == 33000)
def test_estimation_unexisting_service_code(self): estimated_time = calc_fixing_time(100500) self.assertTrue(estimated_time == 0)
def test_estimation_for_one_record(self): estimated_time = calc_fixing_time(173) self.assertTrue(estimated_time == 2578233000)