def do_import_adjustment_time(task, csv_lines, request): gevent.sleep(0) count_success = 0 rts = record_time_store() for i, line in enumerate(csv_lines): tasklog = ImportTaskLog() tasklog.create_date = datetime.now(UTC) tasklog.line = i + 1 tasklog.task = task tasklog.import_data = line try: task.process_lines = i + 1 validate_adjustment_time_cvs_line(line, tasklog) email = line[ADJUSTMENT_TIME_CSV_COLS.index('email')] adjustment_time = int(line[ADJUSTMENT_TIME_CSV_COLS.index('time')]) * 60 adjustment_type = line[ADJUSTMENT_TIME_CSV_COLS.index('type')] course_number = line[ADJUSTMENT_TIME_CSV_COLS.index('course_number')] try: comments = line[ADJUSTMENT_TIME_CSV_COLS.index('comments')] except: comments = '' user_id = str(User.objects.get(email=email).id) course_id = str(get_course_id(course_number)) success = validate_adjustment_time(rts, user_id, adjustment_type, adjustment_time, course_id) if success: rts.set_adjustment_time(user_id, adjustment_type, adjustment_time, course_id) save_adjustment_log(request, user_id, adjustment_type, adjustment_time, course_number, comments) tasklog.error = 'ok' except Exception as e: tasklog.error = "%s" % e log.debug("import error %s" % e) finally: count_success += 1 task.success_lines = count_success task.update_time = datetime.now(UTC) task.save() tasklog.save() tasklogs = ImportTaskLog.objects.filter(task=task).exclude(error='ok') if len(tasklogs): FIELDS = ["line", "username", "import_data", "create_date", "error"] TITLES = ["Line", "Useremail", "Import Data", "Create Date", "Error"] output = StringIO() writer = csv.DictWriter(output, fieldnames=FIELDS) writer.writerow(dict(zip(FIELDS, TITLES))) for d in tasklogs: row = {"line": d.line, "username": d.username, "import_data": d.import_data, "create_date": d.create_date, "error": d.error } writer.writerow(row) output.seek(0) attach = [{'filename': 'log.csv', 'mimetype': 'text/csv', 'data': output.read()}] send_html_mail("Adjustment Time Import Report", "Report of importing %s, see attachment." % task.filename, settings.SUPPORT_EMAIL, [request.user.email], attach) output.close()
def save_adjustment_time(request): rts = record_time_store() adjustment_type = request.POST.get('type') adjustment_time = request.POST.get('time') course_id = request.POST.get('course_id') user_id = str(request.POST.get('user_id')) comments = request.POST.get('comments', None) success = validate_adjustment_time(rts, user_id, adjustment_type, adjustment_time, course_id) if success: rts.set_adjustment_time(user_id, adjustment_type, adjustment_time, course_id) save_adjustment_log(request, user_id, adjustment_type, adjustment_time, course_id, comments) return HttpResponse(json.dumps({'success': success}), content_type="application/json")
def load_single_user_time(request): user = User.objects.get(id=request.POST.get('user_id')) row = {} rts = record_time_store() external_time = 0 all_external_time = 0 user_id = str(user.id) course_id = str(request.POST.get('course_id', None)) if course_id: for enrollment in CourseEnrollment.enrollments_for_user(user): try: course = course_from_id(enrollment.course_id) all_external_time += rts.get_external_time(user_id, course.id) except ItemNotFoundError: #log.error("User {0} enrolled in non-existent course {1}".format(p.user.username, enrollment.course_id)) pass all_course_time, all_discussion_time, portfolio_time = rts.get_stats_time(user_id) adjustment_time_totle = rts.get_adjustment_time(user_id, 'total', None) external_time = rts.get_external_time(user_id, course_id) course_time = rts.get_course_time(user_id, course_id, 'courseware') discussion_time = rts.get_course_time(user_id, course_id, 'discussion') collaboration_time = all_discussion_time + portfolio_time all_course_time = all_course_time + all_external_time total_time = all_course_time + collaboration_time + adjustment_time_totle else: for enrollment in CourseEnrollment.enrollments_for_user(user): try: course = course_from_id(enrollment.course_id) external_time += rts.get_external_time(user_id, course.id) except ItemNotFoundError: #log.error("User {0} enrolled in non-existent course {1}".format(p.user.username, enrollment.course_id)) pass adjustment_time_totle = rts.get_adjustment_time(user_id, 'total', None) course_time, discussion_time, portfolio_time = rts.get_stats_time(user_id) all_course_time = course_time + external_time collaboration_time = discussion_time + portfolio_time total_time = all_course_time + collaboration_time + adjustment_time_totle row = {"id": user_id, "total_time": study_time_format(total_time, True), "collaboration_time": study_time_format(collaboration_time, True), "discussion_time": study_time_format(discussion_time, True), "portfolio_time": study_time_format(portfolio_time, True), "external_time": study_time_format(external_time, True), "course_time": study_time_format(course_time, True) } return HttpResponse(json.dumps({'row': row}), content_type="application/json")
def get_allcoursetime(user_id, course_id): user = User.objects.get(id=str(user_id)) course_time = 0 external_time = 0 rts = record_time_store() all_course_time = 0 all_course_time_unit = "" try: c = course_from_id(course_id) external_time = rts.get_external_time(str(user.id), c.id) except ItemNotFoundError: log.error("User {0} enrolled in non-existent course {1}" .format(user.username, course_id)) course_time = rts.get_course_time(str(user.id), course_id, 'courseware') all_course_time = course_time + external_time all_course_time_unit = recorded_time_format(all_course_time) return all_course_time_unit
def time_report_download_excel(request): import xlsxwriter output = StringIO() workbook = xlsxwriter.Workbook(output, {'in_memory': True}) worksheet = workbook.add_worksheet() FIELDS = ["user_first_name", "user_last_name", "user_email", "district", "school", "total_time", "collaboration_time", "discussion_time", "portfolio_time", "external_time", "course_time", "complete_course_num", "current_course_num"] TITLES = ["First Name", "Last Name", "Email", "District", "School", "Total Time", "Collaboration Time", "Discussion Time", "Portfolio Time", "External Time", "Course Units Time", "Completed Course", "Current Courses"] for i, k in enumerate(TITLES): worksheet.write(0, i, k) row = 1 rts = record_time_store() results = rts.get_time_report_result(str(request.user.id)) for p in results: for i, k in enumerate(FIELDS): worksheet.write(row, i, p[k]) row += 1 response = HttpResponse(content_type='application/vnd.openxmlformats-officedocument.spreadsheetml.sheet') response['Content-Disposition'] = datetime.now().strftime('attachment; filename=users-time-report-%Y-%m-%d-%H-%M-%S.xlsx') workbook.close() response.write(output.getvalue()) return response
def load_adjustment_time(request): rts = record_time_store() user_id = str(request.POST.get('user_id')) adjustment_time = rts.get_adjustment_time(user_id, request.POST.get('type'), request.POST.get('course_id')) return HttpResponse(json.dumps({'time': study_time_format(adjustment_time, True)}), content_type="application/json")
def get_time_table_result(request): rts = record_time_store() rows = rts.get_time_report_result(str(request.user.id)) return HttpResponse(json.dumps({'rows': rows}), content_type="application/json")
def do_get_report_data(task, data, request, course_id=None): gevent.sleep(0) count_success = 0 rows = [] rts = record_time_store() for i, p in enumerate(data): try: external_time = 0 all_external_time = 0 complete_course_num = 0 current_course_num = 0 user_id = str(p.user.id) if course_id: for enrollment in CourseEnrollment.enrollments_for_user(p.user): try: course = course_from_id(enrollment.course_id) all_external_time += rts.get_external_time(user_id, course.id) field_data_cache = FieldDataCache([course], course.id, p.user) course_instance = get_module(p.user, request, course.location, field_data_cache, course.id, grade_bucket_type='ajax') if course_instance.complete_course: complete_course_num += 1 else: current_course_num += 1 except ItemNotFoundError: #log.error("User {0} enrolled in non-existent course {1}".format(p.user.username, enrollment.course_id)) pass all_course_time, all_discussion_time, portfolio_time = rts.get_stats_time(user_id) external_time = rts.get_external_time(user_id, course_id) course_time = rts.get_course_time(user_id, course_id, 'courseware') discussion_time = rts.get_course_time(user_id, course_id, 'discussion') collaboration_time = all_discussion_time + portfolio_time all_course_time = all_course_time + all_external_time #@begin:add pd_time in time_report #@date:2016-06-03 pd_time = 0; pd_time_tmp = PepRegStudent.objects.values('student_id').annotate(credit_sum=Sum('student_credit')).filter(student_id=user_id) if pd_time_tmp: pd_time = pd_time_tmp[0]['credit_sum'] * 3600 total_time = all_course_time + collaboration_time + rts.get_adjustment_time(user_id, 'total') + pd_time #total_time = all_course_time + collaboration_time + rts.get_adjustment_time(user_id, 'total') #@end else: for enrollment in CourseEnrollment.enrollments_for_user(p.user): try: course = course_from_id(enrollment.course_id) external_time += rts.get_external_time(user_id, course.id) field_data_cache = FieldDataCache([course], course.id, p.user) course_instance = get_module(p.user, request, course.location, field_data_cache, course.id, grade_bucket_type='ajax') if course_instance.complete_course: complete_course_num += 1 else: current_course_num += 1 except ItemNotFoundError: #log.error("User {0} enrolled in non-existent course {1}".format(p.user.username, enrollment.course_id)) pass course_time, discussion_time, portfolio_time = rts.get_stats_time(user_id) all_course_time = course_time + external_time collaboration_time = discussion_time + portfolio_time #@begin:add pd_time in time_report #@date:2016-06-03 pd_time = 0; pd_time_tmp = PepRegStudent.objects.values('student_id').annotate(credit_sum=Sum('student_credit')).filter(student_id=user_id) if pd_time_tmp: pd_time = pd_time_tmp[0]['credit_sum'] * 3600 total_time = all_course_time + collaboration_time + rts.get_adjustment_time(user_id, 'total') + pd_time #total_time = all_course_time + collaboration_time + rts.get_adjustment_time(user_id, 'total') #@end rows.append({'id': p.user.id, 'user_first_name': p.user.first_name, 'user_last_name': p.user.last_name, 'user_email': p.user.email, 'district': attstr(p, "district.name"), 'school': attstr(p, "school.name"), "total_time": study_time_format(total_time, True), "collaboration_time": study_time_format(collaboration_time, True), "discussion_time": study_time_format(discussion_time, True), "portfolio_time": study_time_format(portfolio_time, True), "pd_time": study_time_format(pd_time, True), #2016-06-03 add pd_time in time_report "external_time": study_time_format(external_time, True), "course_time": study_time_format(course_time, True), "complete_course_num": complete_course_num, "current_course_num": current_course_num }) task.process_num = i + 1 except Exception as e: db.transaction.rollback() finally: count_success += 1 task.success_num = count_success task.update_time = datetime.now(UTC) task.save() rts.set_time_report_result(str(request.user.id), rows) task.task_read = True task.save() db.transaction.commit()