def view_report_comments(request, program_id, report_id, schedule_dateid): program = get_object_or_404(Program, pk=program_id) report = get_object_or_404(Report, pk=report_id) schedule_date = utilities.convert_dateid_to_date(schedule_dateid) try: submission = ReportSubmission.objects.get(program=program, report=report, schedule_date=schedule_date) except: submission = ReportSubmission(program=program, report=report, schedule_date=schedule_date) if request.method == 'POST': if 'submit_comment_button' in request.POST: form = PostCommentForm(request.POST) if form.is_valid(): if not submission.id: submission.save() comment_functions.post_comment_for('report', submission.id, form.cleaned_data['comment_message'], request.user.get_profile()) messages.success(request, 'เพิ่มความคิดเห็นเรียบร้อย') return redirect('view_report_comments', program_id=program.id, report_id=report.id, schedule_dateid=schedule_dateid) elif 'submit_reply_button' in request.POST: comment_id = request.POST['comment_id'] message = request.POST['comment_message'] comment = get_object_or_404(Comment, pk=comment_id) if message: comment_functions.post_reply_comment_for(comment, 'report', submission.id, message, request.user.get_profile()) messages.success(request, 'ตอบกลับความคิดเห็นเรียบร้อย') return redirect('view_report_comments', program_id=program.id, report_id=report.id, schedule_dateid=schedule_dateid) else: form = PostCommentForm() if submission.id: comments = comment_functions.get_comments_for('report', submission.id, request.user.get_profile(), mark_as_read=True) else: comments = [] return render_page_response(request, 'comments', 'page_report/report_comments.html', {'submission':submission, 'comments':comments, 'form':form})
def view_report_overview_edit_reference(request, program_id, report_id, schedule_dateid): program = get_object_or_404(Program, pk=program_id) report = get_object_or_404(Report, pk=report_id) schedule_date = utilities.convert_dateid_to_date(schedule_dateid) try: submission = ReportSubmission.objects.get(program=program, report=report, schedule_date=schedule_date) except: submission = ReportSubmission(program=program, report=report, schedule_date=schedule_date) if not permission.access_obj(request.user, 'program report submission reference edit', submission): return access_denied(request) if request.method == 'POST': ReportSubmissionReference.objects.filter(submission=submission).delete() for form_project in request.POST.getlist('project'): try: project = Project.objects.get(pk=form_project) except Project.DoesNotExist: pass else: if not submission.id: submission.save() (reference, created) = ReportSubmissionReference.objects.get_or_create(submission=submission, project=project) reference.description = request.POST.get('desc_project_%d' % project.id) reference.save() for form_kpi in request.POST.getlist('kpi'): try: kpi_schedule = DomainKPISchedule.objects.get(pk=form_kpi) except DomainKPISchedule.DoesNotExist: pass else: if not submission.id: submission.save() (reference, created) = ReportSubmissionReference.objects.get_or_create(submission=submission, kpi_schedule=kpi_schedule) reference.description = request.POST.get('desc_kpi_%d' % kpi_schedule.id) reference.save() for form_budget in request.POST.getlist('budget'): try: budget_schedule = BudgetSchedule.objects.get(pk=form_budget) except DomainbudgetSchedule.DoesNotExist: pass else: if not submission.id: submission.save() (reference, created) = ReportSubmissionReference.objects.get_or_create(submission=submission, budget_schedule=budget_schedule) reference.description = request.POST.get('desc_budget_%d' % budget_schedule.id) reference.save() messages.success(request, 'แก้ไขข้อมูลประกอบของรายงานเรียบร้อย') return redirect('view_report_overview', program.id, report.id, schedule_dateid) projects = Project.objects.filter(program=program).order_by('name') kpis = [] for dict in DomainKPISchedule.objects.filter(program=program).values('kpi').distinct(): kpi = DomainKPI.objects.get(pk=dict['kpi']) kpi.schedules = DomainKPISchedule.objects.filter(program=program, kpi=kpi).order_by('quarter_year', 'quarter') kpis.append(kpi) budget_schedules = BudgetSchedule.objects.filter(program=program).order_by('schedule_on') if submission.id: for reference in ReportSubmissionReference.objects.filter(submission=submission): if reference.project: for project in projects: if project.id == reference.project.id: project.has_reference = True project.reference_description = reference.description elif reference.kpi_schedule: for kpi in kpis: for schedule in kpi.schedules: if schedule.id == reference.kpi_schedule.id: schedule.has_reference = True schedule.reference_description = reference.description elif reference.budget_schedule: for schedule in budget_schedules: if schedule.id == reference.budget_schedule.id: schedule.has_reference = True schedule.reference_description = reference.description return render_page_response(request, 'overview', 'page_report/report_overview_edit_reference.html', {'submission':submission, 'projects':projects, 'kpis':kpis, 'budget_schedules':budget_schedules})
def view_report_overview(request, program_id, report_id, schedule_dateid): program = get_object_or_404(Program, pk=program_id) report = get_object_or_404(Report, pk=report_id) schedule_date = utilities.convert_dateid_to_date(schedule_dateid) try: submission = ReportSubmission.objects.get(program=program, report=report, schedule_date=schedule_date) except: submission = ReportSubmission(program=program, report=report, schedule_date=schedule_date) if request.method == 'POST': submit_type = request.POST.get('submit') if submit_type == 'submit-file': if not permission.access_obj(request.user, 'program report submission edit', submission): return access_denied(request) # Reading upload file try: uploading_file = request.FILES['uploading_file'] (file_name, separator, file_ext) = uploading_file.name.rpartition('.') except: messages.error(request, 'ไม่สามารถอ่านไฟล์รายงานได้ กรุณาตรวจสอบชื่อไฟล์ แล้วส่งใหม่อีกครั้ง') return redirect('view_report_overview', program_id=program.id, report_id=report.id, schedule_dateid=schedule_dateid) if not submission.id: submission.save() file_response = ReportSubmissionFileResponse.objects.create(submission=submission, uploaded_by=request.user.get_profile()) # Uploading directory try: uploading_directory = "%s/%d/%d/" % (settings.REPORT_SUBMIT_FILE_PATH, submission.report.id, submission.id) if not os.path.exists(uploading_directory): os.makedirs(uploading_directory) if not file_name: file_name = file_ext file_ext = '' else: file_ext = '.%s' % file_ext unique_filename = '%s%s' % (file_name, file_ext) unique_filename = '%s%s' % (file_name, file_ext) if os.path.isfile('%s%s' % (uploading_directory, unique_filename.encode('utf-8'))): # Duplicated filename suffix_counter = 1 while os.path.isfile('%s%s(%d)%s' % (uploading_directory, file_name, suffix_counter, file_ext)): suffix_counter = suffix_counter + 1 unique_filename = '%s(%d)%s' % (file_name, suffix_counter, file_ext) file_response.filename = unique_filename file_response.save() destination = open(uploading_directory + unique_filename.encode('utf-8'), 'wb') for chunk in request.FILES['uploading_file'].chunks(): destination.write(chunk) destination.close() except: messages.error(request, 'ไม่สามารถบันทึกไฟล์ได้ กรุณาลองใหม่อีกครั้ง') return redirect('view_report_overview', program_id=program.id, report_id=report.id, schedule_dateid=schedule_dateid) submission.state = EDITING_ACTIVITY submission.save() messages.success(request, 'แนบไฟล์รายงานเรียบร้อย') elif submit_type == 'submit-text': if not permission.access_obj(request.user, 'program report submission edit', submission): return access_denied(request) text = request.POST.get("text") if not submission.id: submission.save() try: text_response = ReportSubmissionTextResponse.objects.get(submission=submission) except ReportSubmissionTextResponse.DoesNotExist: text_response = ReportSubmissionTextResponse.objects.create(submission=submission, submitted_by=request.user.get_profile()) text_response.text = text text_response.save() submission.state = EDITING_ACTIVITY if text else NO_ACTIVITY submission.save() messages.success(request, 'แก้ไขเนื้อหารายงานเรียบร้อย') elif submit_type == 'submit-report': if not permission.access_obj(request.user, 'program report submission submit', submission): return access_denied(request) submission.state = SUBMITTED_ACTIVITY submission.submitted_on = datetime.now() submission.approval_on = None submission.save() messages.success(request, 'ส่งรายงานเรียบร้อย') elif submit_type == 'approve-report': if not permission.access_obj(request.user, 'program report submission approve', submission): return access_denied(request) submission.state = APPROVED_ACTIVITY submission.approval_on = datetime.now() submission.save() messages.success(request, 'รับรองรายงานเรียบร้อย') elif submit_type == 'reject-report': if not permission.access_obj(request.user, 'report submission approve', submission): return access_denied(request) submission.state = REJECTED_ACTIVITY submission.approval_on = datetime.now() submission.save() messages.success(request, 'ตีกลับรายงานเรียบร้อย') return redirect('view_report_overview', program_id=program.id, report_id=report.id, schedule_dateid=schedule_dateid) current_date = date.today() if (submission.state == NO_ACTIVITY or submission.state == EDITING_ACTIVITY) and submission.schedule_date < current_date: submission.status_code = 'overdue' elif submission.state == NO_ACTIVITY or submission.state == EDITING_ACTIVITY: submission.status_code = 'not_submitted' elif submission.state == SUBMITTED_ACTIVITY and not submission.report.need_approval: submission.status_code = 'submitted' elif submission.state == SUBMITTED_ACTIVITY and submission.report.need_approval: submission.status_code = 'waiting' elif submission.state == APPROVED_ACTIVITY: submission.status_code = 'approved' elif submission.state == REJECTED_ACTIVITY: submission.status_code = 'rejected' submission.allow_modifying = submission.status_code in ('overdue', 'not_submitted', 'rejected') try: submission.text_response = ReportSubmissionTextResponse.objects.get(submission=submission) except ReportSubmissionTextResponse.DoesNotExist: submission.text_response = '' submission.files = ReportSubmissionFileResponse.objects.filter(submission=submission) # REFERENCE ref_projects = [] ref_kpi_schedules = [] ref_budget_schedules = [] if submission.id: for reference in ReportSubmissionReference.objects.filter(submission=submission): if reference.project: ref_projects.append(reference) elif reference.kpi_schedule: ref_kpi_schedules.append(reference) elif reference.budget_schedule: ref_budget_schedules.append(reference) return render_page_response(request, 'overview', 'page_report/report_overview.html', {'submission':submission, 'REPORT_SUBMIT_FILE_URL':settings.REPORT_SUBMIT_FILE_URL, 'ref_projects':ref_projects, 'ref_kpi_schedules':ref_kpi_schedules, 'ref_budget_schedules':ref_budget_schedules})
def view_report_overview_edit_reference(request, program_id, report_id, schedule_dateid): program = get_object_or_404(Program, pk=program_id) report = get_object_or_404(Report, pk=report_id) schedule_date = utilities.convert_dateid_to_date(schedule_dateid) try: submission = ReportSubmission.objects.get(program=program, report=report, schedule_date=schedule_date) except: submission = ReportSubmission(program=program, report=report, schedule_date=schedule_date) if not permission.access_obj(request.user, 'program report submission reference edit', submission): return access_denied(request) if request.method == 'POST': ReportSubmissionReference.objects.filter( submission=submission).delete() for form_project in request.POST.getlist('project'): try: project = Project.objects.get(pk=form_project) except Project.DoesNotExist: pass else: if not submission.id: submission.save() (reference, created) = ReportSubmissionReference.objects.get_or_create( submission=submission, project=project) reference.description = request.POST.get('desc_project_%d' % project.id) reference.save() for form_kpi in request.POST.getlist('kpi'): try: kpi_schedule = DomainKPISchedule.objects.get(pk=form_kpi) except DomainKPISchedule.DoesNotExist: pass else: if not submission.id: submission.save() (reference, created) = ReportSubmissionReference.objects.get_or_create( submission=submission, kpi_schedule=kpi_schedule) reference.description = request.POST.get('desc_kpi_%d' % kpi_schedule.id) reference.save() for form_budget in request.POST.getlist('budget'): try: budget_schedule = BudgetSchedule.objects.get(pk=form_budget) except DomainbudgetSchedule.DoesNotExist: pass else: if not submission.id: submission.save() (reference, created) = ReportSubmissionReference.objects.get_or_create( submission=submission, budget_schedule=budget_schedule) reference.description = request.POST.get('desc_budget_%d' % budget_schedule.id) reference.save() messages.success(request, 'แก้ไขข้อมูลประกอบของรายงานเรียบร้อย') return redirect('view_report_overview', program.id, report.id, schedule_dateid) projects = Project.objects.filter(program=program).order_by('name') kpis = [] for dict in DomainKPISchedule.objects.filter( program=program).values('kpi').distinct(): kpi = DomainKPI.objects.get(pk=dict['kpi']) kpi.schedules = DomainKPISchedule.objects.filter(program=program, kpi=kpi).order_by( 'quarter_year', 'quarter') kpis.append(kpi) budget_schedules = BudgetSchedule.objects.filter( program=program).order_by('schedule_on') if submission.id: for reference in ReportSubmissionReference.objects.filter( submission=submission): if reference.project: for project in projects: if project.id == reference.project.id: project.has_reference = True project.reference_description = reference.description elif reference.kpi_schedule: for kpi in kpis: for schedule in kpi.schedules: if schedule.id == reference.kpi_schedule.id: schedule.has_reference = True schedule.reference_description = reference.description elif reference.budget_schedule: for schedule in budget_schedules: if schedule.id == reference.budget_schedule.id: schedule.has_reference = True schedule.reference_description = reference.description return render_page_response( request, 'overview', 'page_report/report_overview_edit_reference.html', { 'submission': submission, 'projects': projects, 'kpis': kpis, 'budget_schedules': budget_schedules })
def view_report_overview(request, program_id, report_id, schedule_dateid): program = get_object_or_404(Program, pk=program_id) report = get_object_or_404(Report, pk=report_id) schedule_date = utilities.convert_dateid_to_date(schedule_dateid) try: submission = ReportSubmission.objects.get(program=program, report=report, schedule_date=schedule_date) except: submission = ReportSubmission(program=program, report=report, schedule_date=schedule_date) if request.method == 'POST': submit_type = request.POST.get('submit') if submit_type == 'submit-file': if not permission.access_obj(request.user, 'program report submission edit', submission): return access_denied(request) # Reading upload file try: uploading_file = request.FILES['uploading_file'] (file_name, separator, file_ext) = uploading_file.name.rpartition('.') except: messages.error( request, 'ไม่สามารถอ่านไฟล์รายงานได้ กรุณาตรวจสอบชื่อไฟล์ แล้วส่งใหม่อีกครั้ง' ) return redirect('view_report_overview', program_id=program.id, report_id=report.id, schedule_dateid=schedule_dateid) if not submission.id: submission.save() file_response = ReportSubmissionFileResponse.objects.create( submission=submission, uploaded_by=request.user.get_profile()) # Uploading directory try: uploading_directory = "%s/%d/%d/" % ( settings.REPORT_SUBMIT_FILE_PATH, submission.report.id, submission.id) if not os.path.exists(uploading_directory): os.makedirs(uploading_directory) if not file_name: file_name = file_ext file_ext = '' else: file_ext = '.%s' % file_ext unique_filename = '%s%s' % (file_name, file_ext) unique_filename = '%s%s' % (file_name, file_ext) if os.path.isfile( '%s%s' % (uploading_directory, unique_filename.encode('utf-8'))): # Duplicated filename suffix_counter = 1 while os.path.isfile('%s%s(%d)%s' % (uploading_directory, file_name, suffix_counter, file_ext)): suffix_counter = suffix_counter + 1 unique_filename = '%s(%d)%s' % (file_name, suffix_counter, file_ext) file_response.filename = unique_filename file_response.save() destination = open( uploading_directory + unique_filename.encode('utf-8'), 'wb') for chunk in request.FILES['uploading_file'].chunks(): destination.write(chunk) destination.close() except: messages.error(request, 'ไม่สามารถบันทึกไฟล์ได้ กรุณาลองใหม่อีกครั้ง') return redirect('view_report_overview', program_id=program.id, report_id=report.id, schedule_dateid=schedule_dateid) submission.state = EDITING_ACTIVITY submission.save() messages.success(request, 'แนบไฟล์รายงานเรียบร้อย') elif submit_type == 'submit-text': if not permission.access_obj(request.user, 'program report submission edit', submission): return access_denied(request) text = request.POST.get("text") if not submission.id: submission.save() try: text_response = ReportSubmissionTextResponse.objects.get( submission=submission) except ReportSubmissionTextResponse.DoesNotExist: text_response = ReportSubmissionTextResponse.objects.create( submission=submission, submitted_by=request.user.get_profile()) text_response.text = text text_response.save() submission.state = EDITING_ACTIVITY if text else NO_ACTIVITY submission.save() messages.success(request, 'แก้ไขเนื้อหารายงานเรียบร้อย') elif submit_type == 'submit-report': if not permission.access_obj(request.user, 'program report submission submit', submission): return access_denied(request) submission.state = SUBMITTED_ACTIVITY submission.submitted_on = datetime.now() submission.approval_on = None submission.save() messages.success(request, 'ส่งรายงานเรียบร้อย') elif submit_type == 'approve-report': if not permission.access_obj(request.user, 'program report submission approve', submission): return access_denied(request) submission.state = APPROVED_ACTIVITY submission.approval_on = datetime.now() submission.save() messages.success(request, 'รับรองรายงานเรียบร้อย') elif submit_type == 'reject-report': if not permission.access_obj( request.user, 'report submission approve', submission): return access_denied(request) submission.state = REJECTED_ACTIVITY submission.approval_on = datetime.now() submission.save() messages.success(request, 'ตีกลับรายงานเรียบร้อย') return redirect('view_report_overview', program_id=program.id, report_id=report.id, schedule_dateid=schedule_dateid) current_date = date.today() if (submission.state == NO_ACTIVITY or submission.state == EDITING_ACTIVITY) and submission.schedule_date < current_date: submission.status_code = 'overdue' elif submission.state == NO_ACTIVITY or submission.state == EDITING_ACTIVITY: submission.status_code = 'not_submitted' elif submission.state == SUBMITTED_ACTIVITY and not submission.report.need_approval: submission.status_code = 'submitted' elif submission.state == SUBMITTED_ACTIVITY and submission.report.need_approval: submission.status_code = 'waiting' elif submission.state == APPROVED_ACTIVITY: submission.status_code = 'approved' elif submission.state == REJECTED_ACTIVITY: submission.status_code = 'rejected' submission.allow_modifying = submission.status_code in ('overdue', 'not_submitted', 'rejected') try: submission.text_response = ReportSubmissionTextResponse.objects.get( submission=submission) except ReportSubmissionTextResponse.DoesNotExist: submission.text_response = '' submission.files = ReportSubmissionFileResponse.objects.filter( submission=submission) # REFERENCE ref_projects = [] ref_kpi_schedules = [] ref_budget_schedules = [] if submission.id: for reference in ReportSubmissionReference.objects.filter( submission=submission): if reference.project: ref_projects.append(reference) elif reference.kpi_schedule: ref_kpi_schedules.append(reference) elif reference.budget_schedule: ref_budget_schedules.append(reference) return render_page_response( request, 'overview', 'page_report/report_overview.html', { 'submission': submission, 'REPORT_SUBMIT_FILE_URL': settings.REPORT_SUBMIT_FILE_URL, 'ref_projects': ref_projects, 'ref_kpi_schedules': ref_kpi_schedules, 'ref_budget_schedules': ref_budget_schedules })
def view_report_comments(request, program_id, report_id, schedule_dateid): program = get_object_or_404(Program, pk=program_id) report = get_object_or_404(Report, pk=report_id) schedule_date = utilities.convert_dateid_to_date(schedule_dateid) try: submission = ReportSubmission.objects.get(program=program, report=report, schedule_date=schedule_date) except: submission = ReportSubmission(program=program, report=report, schedule_date=schedule_date) if request.method == 'POST': if 'submit_comment_button' in request.POST: form = PostCommentForm(request.POST) if form.is_valid(): if not submission.id: submission.save() comment_functions.post_comment_for( 'report', submission.id, form.cleaned_data['comment_message'], request.user.get_profile()) messages.success(request, 'เพิ่มความคิดเห็นเรียบร้อย') return redirect('view_report_comments', program_id=program.id, report_id=report.id, schedule_dateid=schedule_dateid) elif 'submit_reply_button' in request.POST: comment_id = request.POST['comment_id'] message = request.POST['comment_message'] comment = get_object_or_404(Comment, pk=comment_id) if message: comment_functions.post_reply_comment_for( comment, 'report', submission.id, message, request.user.get_profile()) messages.success(request, 'ตอบกลับความคิดเห็นเรียบร้อย') return redirect('view_report_comments', program_id=program.id, report_id=report.id, schedule_dateid=schedule_dateid) else: form = PostCommentForm() if submission.id: comments = comment_functions.get_comments_for( 'report', submission.id, request.user.get_profile(), mark_as_read=True) else: comments = [] return render_page_response(request, 'comments', 'page_report/report_comments.html', { 'submission': submission, 'comments': comments, 'form': form })