示例#1
0
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})
示例#2
0
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})
示例#3
0
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})
示例#4
0
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
        })
示例#5
0
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
        })
示例#6
0
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
                                })