Example #1
0
def view_project_edit_project(request, project_id):
    project = get_object_or_404(Project, pk=project_id)

    if project.plan and not permission.has_role_with_obj(request.user, ('sector_manager', 'sector_manager_assistant', 'sector_specialist'), project.plan.master_plan):
        return access_denied(request)
    
    if project.program and not permission.access_obj(request.user, 'program project edit', program):
        return access_denied(request)

    if request.method == 'POST':
        form = ProjectModifyForm(request.POST)
        if form.is_valid():
            project.ref_no = form.cleaned_data.get('ref_no')
            project.contract_no = form.cleaned_data.get('contract_no')
            project.name = form.cleaned_data.get('name')
            project.abbr_name = form.cleaned_data.get('abbr_name')
            project.description = form.cleaned_data.get('description')
            project.start_date = form.cleaned_data.get('start_date')
            project.end_date = form.cleaned_data.get('end_date')
            project.save()
            
            messages.success(request, u'แก้ไขโครงการเรียบร้อย')
            return redirect('view_project_overview', (project.id))
        
    else:
        if project.program:
            form = ProjectModifyForm(initial={'program_id':project.program.id, 'project_id':project.id, 'ref_no':project.ref_no, 'contract_no':project.contract_no, 'name':project.name, 'description':project.description, 'start_date':project.start_date, 'end_date':project.end_date})
        else:
            form = ProjectModifyForm(initial={'program_id':'', 'project_id':project.id, 'ref_no':project.ref_no, 'contract_no':project.contract_no, 'name':project.name, 'description':project.description, 'start_date':project.start_date, 'end_date':project.end_date})
    
    project.removable = Activity.objects.filter(project=project).count() == 0
    return render_page_response(request, '', 'page_program/project_edit_project.html', {'project':project, 'form':form})
Example #2
0
def view_project_add_activity(request, project_id):
    project = get_object_or_404(Project, pk=project_id)

    if project.plan and not permission.has_role_with_obj(request.user, ('sector_manager', 'sector_manager_assistant', 'sector_specialist'), project.plan.master_plan):
        return access_denied(request)
    
    if project.program and not permission.access_obj(request.user, 'program activity add', program):
        return access_denied(request)
    
    if request.method == 'POST':
        form = ActivityModifyForm(request.POST)
        if form.is_valid():
            activity = Activity.objects.create(project=project,
                name=form.cleaned_data['name'],
                start_date=form.cleaned_data['start_date'],
                end_date=form.cleaned_data['end_date'],
                description=form.cleaned_data['description'],
                location=form.cleaned_data['location'],
                result_goal=form.cleaned_data['result_goal'],
                result_real=form.cleaned_data['result_real'],
                created_by=request.user.get_profile(),
                )
            
            messages.success(request, u'เพิ่มกิจกรรมเรียบร้อย')
            return redirect('view_project_activities', (project.id))

    else:
        form = ActivityModifyForm()
    
    return render_page_response(request, 'activities', 'page_program/project_activities_modify_activity.html', {'project':project, 'form':form})
Example #3
0
def view_activity_edit_activity(request, activity_id):
    activity = get_object_or_404(Activity, pk=activity_id)
    project = activity.project

    if project.plan and not permission.has_role_with_obj(request.user, ('sector_manager', 'sector_manager_assistant', 'sector_specialist'), project.plan.master_plan):
        return access_denied(request)
    
    if project.program and not permission.access_obj(request.user, 'program activity edit', project.program):
        return access_denied(request)
    
    if request.method == 'POST':
        form = ActivityModifyForm(request.POST)
        if form.is_valid():
            activity.name = form.cleaned_data['name']
            activity.start_date = form.cleaned_data['start_date']
            activity.end_date = form.cleaned_data['end_date']
            activity.description = form.cleaned_data['description']
            activity.location = form.cleaned_data['location']
            activity.result_goal = form.cleaned_data['result_goal']
            activity.result_real = form.cleaned_data['result_real']
            activity.save()
            
            messages.success(request, u'แก้ไขกิจกรรมเรียบร้อย')
            return redirect('view_activity_overview', (activity.id))

    else:
        form = ActivityModifyForm(initial=activity.__dict__)
    
    return render_page_response(request, '', 'page_program/activity_edit_activity.html', {'activity':activity, 'form':form})
Example #4
0
def view_activity_delete_activity(request, activity_id):
    activity = get_object_or_404(Activity, pk=activity_id)
    project = activity.project

    if project.plan and not permission.has_role_with_obj(request.user, ('sector_manager', 'sector_manager_assistant', 'sector_specialist'), project.plan.master_plan):
        return access_denied(request)
    
    if project.program and not permission.access_obj(request.user, 'program activity delete', project.program):
        return access_denied(request)
    
    activity.delete()
    messages.success(request, u'ลบโครงการเรียบร้อย')
    
    return redirect('view_project_activities', (project.id))
Example #5
0
def view_program_manage_kpi_add_kpi(request, program_id):
    program = get_object_or_404(Program, pk=program_id)
    
    if not permission.access_obj(request.user, 'program kpi manage', program):
        return access_denied(request)
    
    if request.method == 'POST':
        form = DomainKPIModifyForm(request.POST)
        if form.is_valid():
            kpi = DomainKPI.objects.create(
                program = program,
                ref_no = form.cleaned_data['ref_no'],
                name = form.cleaned_data['name'],
                abbr_name = form.cleaned_data['abbr_name'],
                year = form.cleaned_data['year'] - 543,
                unit_name = form.cleaned_data['unit_name']
            )
            
            messages.success(request, 'เพิ่มตัวชี้วัดเรียบร้อย')
            return utilities.redirect_or_back('view_program_manage_kpi', (program.id), request)
            
    else:
        form = DomainKPIModifyForm()
    
    return render_page_response(request, 'kpi', 'page_program/manage_kpi/program_manage_kpi_modify_kpi.html', {'program':program, 'form':form})
Example #6
0
def view_administration_organization_edit_masterplan(request, master_plan_ref_no):
    if not request.user.is_superuser: return access_denied(request)
    master_plan = get_object_or_404(MasterPlan, ref_no=master_plan_ref_no)

    if request.method == 'POST':
        form = ModifyMasterPlanForm(request.POST)
        if form.is_valid():
            ref_no = form.cleaned_data['ref_no']
            name = form.cleaned_data['name']
            sectors = form.cleaned_data['sectors']
            
            master_plan.ref_no = ref_no
            master_plan.name = name
            master_plan.save()
            
            SectorMasterPlan.objects.filter(master_plan=master_plan).delete()
            for sector in sectors: SectorMasterPlan.objects.create(sector=sector, master_plan=master_plan)
            
            messages.success(request, 'แก้ไขแผนหลักเรียบร้อย')
            return redirect('view_administration_organization')

    else:
        form = ModifyMasterPlanForm(initial={'sectors':[sector.sector.id for sector in SectorMasterPlan.objects.filter(master_plan=master_plan)], 'master_plan_id':master_plan.id, 'ref_no':master_plan.ref_no, 'name':master_plan.name})
    
    has_sectors = Sector.objects.all().count() > 0
    return render_page_response(request, 'organization', 'page_administration/manage_organization_modify_master_plan.html', {'master_plan':master_plan, 'form':form, 'has_sectors':has_sectors})
Example #7
0
def view_master_plan_add_program(request, master_plan_ref_no):
    master_plan = get_object_or_404(MasterPlan, ref_no=master_plan_ref_no)
    
    if not permission.access_obj(request.user, 'master_plan manage', master_plan):
        return access_denied(request)
    
    if Plan.objects.filter(master_plan=master_plan).count() == 0:
        messages.error(request, 'กรุณาสร้างกลุ่มแผนงานก่อนการสร้างแผนงาน')
        return redirect('view_master_plan_manage_organization', (master_plan.ref_no))
    
    if request.method == 'POST':
        form = MasterPlanProgramForm(request.POST, master_plan=master_plan)
        if form.is_valid():
            program = Program.objects.create(
                plan=form.cleaned_data['plan'],
                ref_no=form.cleaned_data['ref_no'],
                name=form.cleaned_data['name'],
                abbr_name=form.cleaned_data['abbr_name'],
                manager_name=form.cleaned_data['manager_name'],
                start_date=form.cleaned_data['start_date'],
                end_date=form.cleaned_data['end_date'],
                )
            
            messages.success(request, u'เพิ่มแผนงาน/โครงการเรียบร้อย')
            return redirect('view_master_plan_manage_organization', (master_plan.ref_no))
        
    else:
        form = MasterPlanProgramForm(master_plan=master_plan)
    
    return render_page_response(request, 'organization', 'page_sector/manage_master_plan/manage_modify_program.html', {'master_plan':master_plan, 'form':form})
Example #8
0
def view_master_plan_edit_program(request, program_id):
    program = get_object_or_404(Program, pk=program_id)
    master_plan = program.plan.master_plan
    
    if not permission.access_obj(request.user, 'master_plan manage', master_plan):
        return access_denied(request)
    
    if request.method == 'POST':
        form = MasterPlanProgramForm(request.POST, master_plan=master_plan)
        if form.is_valid():
            program.plan = form.cleaned_data['plan']
            program.ref_no = form.cleaned_data['ref_no']
            program.name = form.cleaned_data['name']
            program.abbr_name = form.cleaned_data['abbr_name']
            program.manager_name = form.cleaned_data['manager_name']
            program.start_date = form.cleaned_data['start_date']
            program.end_date = form.cleaned_data['end_date']
            program.save()
            
            messages.success(request, u'แก้ไขแผนงาน/โครงการเรียบร้อย')
            return redirect('view_master_plan_manage_organization', (master_plan.ref_no))
        
    else:
        form = MasterPlanProgramForm(master_plan=master_plan, initial={'program_id':program.id, 'plan':program.plan.id, 'ref_no':program.ref_no, 'name':program.name, 'abbr_name':program.abbr_name, 'description':program.description, 'start_date':program.start_date, 'end_date':program.end_date})
    
    return render_page_response(request, 'organization', 'page_sector/manage_master_plan/manage_modify_program.html', {'master_plan':master_plan, 'program':program, 'form':form})
Example #9
0
def view_master_plan_manage_kpi_edit_category(request, kpi_category_id):
    kpi_category = get_object_or_404(DomainKPICategory, pk=kpi_category_id)
    master_plan = kpi_category.master_plan

    if not permission.access_obj(request.user, 'master_plan manage',
                                 master_plan):
        return access_denied(request)

    if request.method == 'POST':
        form = DomainKPICategoryModifyForm(request.POST)
        if form.is_valid():
            kpi_category.name = form.cleaned_data['name']
            kpi_category.save()

            messages.success(request, 'แก้ไขประเภทตัวชี้วัดเรียบร้อย')
            return redirect('view_master_plan_manage_kpi_category',
                            (master_plan.ref_no))

    else:
        form = DomainKPICategoryModifyForm(initial={'name': kpi_category.name})

    return render_page_response(
        request, 'kpi_category',
        'page_sector/manage_master_plan/manage_kpi_modify_category.html', {
            'master_plan': master_plan,
            'form': form,
            'kpi_category': kpi_category
        })
Example #10
0
def view_master_plan_manage_kpi_add_category(request, master_plan_ref_no):
    master_plan = get_object_or_404(MasterPlan, pk=master_plan_ref_no)

    if not permission.access_obj(request.user, 'master_plan manage',
                                 master_plan):
        return access_denied(request)

    if request.method == 'POST':
        form = DomainKPICategoryModifyForm(request.POST)
        if form.is_valid():
            category = DomainKPICategory.objects.create(
                master_plan=master_plan, name=form.cleaned_data['name'])

            messages.success(request, 'เพิ่มประเภทตัวชี้วัดเรียบร้อย')
            return redirect('view_master_plan_manage_kpi_category',
                            (master_plan.ref_no))

    else:
        form = DomainKPICategoryModifyForm()

    return render_page_response(
        request, 'kpi_category',
        'page_sector/manage_master_plan/manage_kpi_modify_category.html', {
            'master_plan': master_plan,
            'form': form
        })
Example #11
0
def view_program_reports_manage_report(request, program_id):
    program = get_object_or_404(Program, id=program_id)

    if permission.access_obj(
            request.user,
        ('program report schedule add', 'program report schedule edit',
         'program report schedule delete'), program):
        assignments = ReportAssignment.objects.filter(program=program,
                                                      is_active=True)
        reports_from_master_plan = []
        reports_from_program = []

        for assignment in assignments:
            if assignment.report.master_plan:
                reports_from_master_plan.append(assignment.report)
            else:
                report = assignment.report
                report.removable = ReportSubmission.objects.filter(
                    report=report).exclude(
                        Q(state=NO_ACTIVITY)
                        | Q(state=EDITING_ACTIVITY)).count() == 0
                reports_from_program.append(report)

        return render_page_response(
            request, 'reports', 'page_program/program_reports_manage.html', {
                'program': program,
                'reports_from_master_plan': reports_from_master_plan,
                'reports_from_program': reports_from_program
            })

    else:
        return access_denied(request)
Example #12
0
def view_program_reports_send_list(request, program_id):
    program = get_object_or_404(Program, id=program_id)

    if not permission.access_obj(
            request.user,
        ('program report submission edit', 'program report submission submit'),
            program):
        return access_denied(request)

    # IMPORTANT NOTE ON PERMISSION
    # In this page, 'program report submission warning' will be ignored

    reports = []
    for assignment in ReportAssignment.objects.filter(program=program,
                                                      is_active=True):
        report = assignment.report
        report.counter = report_functions.get_sending_report_count(
            program, report)
        reports.append(report)

    return render_page_response(request, 'reports',
                                'page_program/program_reports_send.html', {
                                    'program': program,
                                    'reports': reports
                                })
Example #13
0
def view_master_plan_manage_kpi(request, master_plan_ref_no, kpi_year):
    master_plan = get_object_or_404(MasterPlan, ref_no=master_plan_ref_no)
    
    if not permission.access_obj(request.user, 'master_plan manage', master_plan):
        return access_denied(request)
    
    if kpi_year:
        year_number = int(kpi_year)
    else:
        year_number = utilities.master_plan_current_year_number()
    
    kpi_categories = []
    for dict in DomainKPI.objects.filter(master_plan=master_plan, year=year_number).values('category').distinct():
        try:
            kpi_category = DomainKPICategory.objects.get(pk=dict['category'])
        except DomainKPICategory.DoesNotExist:
            pass
        else:
            kpis = DomainKPI.objects.filter(master_plan=master_plan, year=year_number, category=kpi_category).order_by('ref_no')
            
            for kpi in kpis:
                kpi.removable = DomainKPISchedule.objects.filter(kpi=kpi).count() == 0
            
            kpi_category.kpis = kpis
            kpi_categories.append(kpi_category)
    
    print year_number
    no_category_kpis = DomainKPI.objects.filter(master_plan=master_plan, year=year_number, category=None)
    print no_category_kpis
    
    for kpi in no_category_kpis:
        kpi.removable = DomainKPISchedule.objects.filter(kpi=kpi).count() == 0
    
    return render_page_response(request, 'kpi', 'page_sector/manage_master_plan/manage_kpi.html', {'master_plan':master_plan, 'kpi_categories':kpi_categories, 'no_category_kpis':no_category_kpis, 'kpi_year':year_number})
Example #14
0
def view_program_add_project(request, program_id):
    program = get_object_or_404(Program, pk=program_id)
    
    if not permission.access_obj(request.user, 'program project add', program):
        return access_denied(request)
    
    if request.method == 'POST':
        form = ProjectModifyForm(request.POST)
        if form.is_valid():
            project = Project.objects.create(
                program=program,
                ref_no=form.cleaned_data['ref_no'],
                contract_no=form.cleaned_data['contract_no'],
                name=form.cleaned_data['name'],
                description=form.cleaned_data['description'],
                start_date=form.cleaned_data['start_date'],
                end_date=form.cleaned_data['end_date'],
                created_by=request.user.get_profile()
            )
            
            messages.success(request, u'เพิ่มโครงการเรียบร้อย')
            return redirect('view_program_projects', (program.id))
        
    else:
        form = ProjectModifyForm(initial={'program_id':program.id})
    
    return render_page_response(request, 'projects', 'page_program/program_projects_modify_project.html', {'program':program, 'form':form})
Example #15
0
def view_master_plan_manage_report(request, master_plan_ref_no):
    master_plan = get_object_or_404(MasterPlan, ref_no=master_plan_ref_no)

    if not permission.access_obj(request.user, 'master_plan manage',
                                 master_plan):
        return access_denied(request)

    reports = Report.objects.filter(
        master_plan=master_plan).order_by('created')

    for report in reports:
        # NOTE ON DELETING REPORT:
        # Not allow to delete report if there's still project using this report (ReportProject model)
        # or some report submission has been submitted (state is not NO_ACTIVITY or EDITING_ACTIVITY)

        report.program_count = ReportAssignment.objects.filter(
            report=report, is_active=True).count()
        submission_count = ReportSubmission.objects.filter(
            report=report).exclude(
                Q(state=NO_ACTIVITY) | Q(state=EDITING_ACTIVITY)).count()
        report.removable = not report.program_count and not submission_count

    return render_page_response(
        request, 'report', 'page_sector/manage_master_plan/manage_report.html',
        {
            'master_plan': master_plan,
            'reports': reports
        })
Example #16
0
def view_program_edit_project(request, project_id):
    project = get_object_or_404(Project, pk=project_id)
    program = project.program
    
    if not permission.access_obj(request.user, 'program project edit', program):
        return access_denied(request)
    
    if request.method == 'POST':
        form = ProjectModifyForm(request.POST)
        if form.is_valid():
            project.ref_no = form.cleaned_data.get('ref_no')
            project.contract_no = form.cleaned_data.get('contract_no')
            project.name = form.cleaned_data.get('name')
            project.description = form.cleaned_data.get('description')
            project.start_date = form.cleaned_data.get('start_date')
            project.end_date = form.cleaned_data.get('end_date')
            project.save()
            
            messages.success(request, u'แก้ไขโครงการเรียบร้อย')
            return redirect('view_program_projects', (program.id))
        
    else:
        form = ProjectModifyForm(initial={'program_id':program.id, 'project_id':project.id, 'ref_no':project.ref_no, 'contract_no':project.contract_no, 'name':project.name, 'description':project.description, 'start_date':project.start_date, 'end_date':project.end_date})
    
    project.removable = Activity.objects.filter(project=project).count() == 0
    return render_page_response(request, 'projects', 'page_program/program_projects_modify_project.html', {'program':program, 'form':form, 'project':project})
Example #17
0
def view_master_plan_manage_kpi_add_kpi(request, master_plan_ref_no):
    master_plan = get_object_or_404(MasterPlan, ref_no=master_plan_ref_no)

    if not permission.access_obj(request.user, 'master_plan manage',
                                 master_plan):
        return access_denied(request)

    if request.method == 'POST':
        form = DomainKPIModifyForm(request.POST, master_plan=master_plan)
        if form.is_valid():
            kpi = DomainKPI.objects.create(
                master_plan=master_plan,
                ref_no=form.cleaned_data['ref_no'],
                name=form.cleaned_data['name'],
                abbr_name=form.cleaned_data['abbr_name'],
                year=form.cleaned_data['year'] - 543,
                unit_name=form.cleaned_data['unit_name'],
                category=form.cleaned_data['category'],
            )

            messages.success(request, 'เพิ่มตัวชี้วัดเรียบร้อย')
            return utilities.redirect_or_back('view_master_plan_manage_kpi',
                                              (master_plan.ref_no), request)

    else:
        form = DomainKPIModifyForm(master_plan=master_plan)

    return render_page_response(
        request, 'organization',
        'page_sector/manage_master_plan/manage_kpi_modify_kpi.html', {
            'master_plan': master_plan,
            'form': form
        })
Example #18
0
def view_program_reports_manage_report_delete_report(request, report_id):
    report = get_object_or_404(Report, pk=report_id)
    program = report.program

    if not permission.access_obj(request.user,
                                 'program report schedule delete', program):
        return access_denied(request)

    if report.master_plan:
        messages.error(request, 'ไม่สามารถแก้ไขรายงานของแผนหลักได้จากหน้านี้')
        return redirect('view_program_reports_manage_report', (program.id))

    if ReportSubmission.objects.filter(report=report).exclude(
            Q(state=NO_ACTIVITY) | Q(state=EDITING_ACTIVITY)).count() == 0:
        ReportDueRepeatable.objects.filter(report=report).delete()
        ReportDueDates.objects.filter(report=report).delete()
        ReportSubmission.objects.filter(report=report).delete()
        ReportAssignment.objects.filter(report=report).delete()
        report.delete()

        messages.success(request, 'ลบหัวเรื่องรายงานเรียบร้อย')
    else:
        messages.error(request,
                       'ไม่สามารถลบรอบการส่งรายงานที่มีการส่งรายงานไปแล้วได้')

    return redirect('view_program_reports_manage_report', (program.id))
Example #19
0
def view_master_plan_manage_report_delete_report(request, report_id):
    report = get_object_or_404(Report, pk=report_id)
    master_plan = report.master_plan
    if not master_plan: raise Http404

    if not permission.access_obj(request.user, 'master_plan manage',
                                 master_plan):
        return access_denied(request)

    program_count = ReportAssignment.objects.filter(report=report,
                                                    is_active=True).count()
    submission_count = ReportSubmission.objects.filter(report=report).exclude(
        Q(state=NO_ACTIVITY) | Q(state=EDITING_ACTIVITY)).count()
    if not program_count and not submission_count:
        ReportDueRepeatable.objects.filter(report=report).delete()
        ReportDueDates.objects.filter(report=report).delete()
        ReportSubmission.objects.filter(report=report).delete()
        report.delete()
        messages.success(request, 'ลบหัวเรื่องรายงานเรียบร้อย')
    else:
        messages.error(
            request,
            'ไม่สามารถลบหัวเรื่องรายงาน เนื่องจากยังมีแผนงานผูกอยู่ หรือมีรายงานที่ส่งไปแล้ว'
        )

    return redirect('view_master_plan_manage_report', (master_plan.ref_no))
Example #20
0
def view_master_plan_manage_kpi_edit_kpi(request, kpi_id):
    kpi = get_object_or_404(DomainKPI, pk=kpi_id)
    master_plan = kpi.master_plan
    
    if not permission.access_obj(request.user, 'master_plan manage', master_plan):
        return access_denied(request)
    
    if request.method == 'POST':
        form = DomainKPIModifyForm(request.POST, master_plan=master_plan)
        if form.is_valid():
            kpi.ref_no = form.cleaned_data['ref_no']
            kpi.name = form.cleaned_data['name']
            kpi.abbr_name = form.cleaned_data['abbr_name']
            kpi.year = form.cleaned_data['year']- 543
            kpi.unit_name = form.cleaned_data['unit_name']
            kpi.category = form.cleaned_data['category']
            kpi.save()
            
            messages.success(request, 'แก้ไขตัวชี้วัดเรียบร้อย')
            return redirect('view_master_plan_manage_kpi', (master_plan.ref_no))
            
    else:
        form = DomainKPIModifyForm(master_plan=master_plan, initial={'ref_no':kpi.ref_no, 'name':kpi.name, 'abbr_name':kpi.abbr_name, 'year':kpi.year+543, 'category':kpi.category, 'unit_name':kpi.unit_name})
    
    return render_page_response(request, 'organization', 'page_sector/manage_master_plan/manage_kpi_modify_kpi.html', {'master_plan':master_plan, 'form':form, 'kpi':kpi})
Example #21
0
def view_master_plan_manage_kpi_add_kpi(request, master_plan_ref_no):
    master_plan = get_object_or_404(MasterPlan, ref_no=master_plan_ref_no)
    
    if not permission.access_obj(request.user, 'master_plan manage', master_plan):
        return access_denied(request)
    
    if request.method == 'POST':
        form = DomainKPIModifyForm(request.POST, master_plan=master_plan)
        if form.is_valid():
            kpi = DomainKPI.objects.create(
                master_plan = master_plan,
                ref_no = form.cleaned_data['ref_no'],
                name = form.cleaned_data['name'],
                abbr_name = form.cleaned_data['abbr_name'],
                year = form.cleaned_data['year'] - 543,
                unit_name = form.cleaned_data['unit_name'],
                category = form.cleaned_data['category'],
            )
            
            messages.success(request, 'เพิ่มตัวชี้วัดเรียบร้อย')
            return utilities.redirect_or_back('view_master_plan_manage_kpi', (master_plan.ref_no), request)
            
    else:
        form = DomainKPIModifyForm(master_plan=master_plan)
    
    return render_page_response(request, 'organization', 'page_sector/manage_master_plan/manage_kpi_modify_kpi.html', {'master_plan':master_plan, 'form':form})
Example #22
0
def view_program_reports_manage_report_add_report(request, program_id):
    program = get_object_or_404(Program, id=program_id)
    
    if not permission.access_obj(request.user, 'program report schedule add', program):
        return access_denied(request)
    
    if request.method == 'POST':
        report_due_type = REPORT_DUE_TYPE[request.POST.get('report_due_type')]
        
        form = ProgramReportForm(request.POST)
        if form.is_valid():
            report_name = form.cleaned_data['name']
            need_checkup = form.cleaned_data['need_checkup']
            need_approval = form.cleaned_data['need_approval']
            
            notify_before = form.cleaned_data['notify_before']
            notify_before_days = form.cleaned_data['notify_before_days'] if notify_before else 0
            if not notify_before_days: notify_before_days = 0
            
            notify_due = form.cleaned_data['notify_due']
            
            report = Report.objects.create(program=program, due_type=report_due_type, name=report_name, need_approval=need_approval, need_checkup=need_checkup, created_by=request.user.get_profile(), notify_days_before=notify_before_days, notify_at_due=notify_due)
            
            if report_due_type == REPORT_DUE_DATES:
                for due_date in request.POST.getlist('due_dates'):
                    if due_date:
                        (dyear, dmonth, ddate) = due_date.split('-')
                        ReportDueDates.objects.create(report=report, due_date=date(int(dyear), int(dmonth), int(ddate)))
                
            elif report_due_type == REPORT_REPEAT_DUE:
                cycle_length = form.cleaned_data['cycle_length']
                monthly_date = form.cleaned_data['monthly_date']
                
                schedule_start = report_functions.generate_report_schedule_start(True, monthly_date)
                ReportDueRepeatable.objects.create(report=report, schedule_start=schedule_start, schedule_cycle=3, schedule_cycle_length=cycle_length, schedule_monthly_date=monthly_date)
                
            ReportAssignment.objects.create(report=report, program=program)
            
            messages.success(request, 'เพิ่มหัวเรื่องรายงานเรียบร้อย')
            return redirect('view_program_reports_manage_report', (program.id))

    # To re-populate the form when error occured
        report = Report(due_type=report_due_type)
        if report_due_type == REPORT_DUE_DATES:
            due_dates = []
            for due_date in request.POST.getlist('due_dates'):
                if due_date:
                        (dyear, dmonth, ddate) = due_date.split('-')
                        due_dates.append(ReportDueDates(due_date=date(int(dyear), int(dmonth), int(ddate))))
            
            report.due_dates = due_dates
            
    else:
        report = Report(due_type=REPORT_NO_DUE_DATE)
        form = ProgramReportForm()
        
    return render_page_response(request, 'reports', 'page_program/program_reports_modify_report.html', {'program':program, 'form':form, 'report':report})
Example #23
0
def view_project_delete_project(request, project_id):
    project = get_object_or_404(Project, pk=project_id)

    if project.plan and not permission.has_role_with_obj(request.user, ('sector_manager', 'sector_manager_assistant', 'sector_specialist'), project.plan.master_plan):
        return access_denied(request)
    
    if project.program and not permission.access_obj(request.user, 'program project delete', program):
        return access_denied(request)

    if not Activity.objects.filter(project=project).count():
        project.delete()
        messages.success(request, u'ลบโครงการเรียบร้อย')
    else:
        messages.error(request, 'ไม่สามารถลบโครงการที่มีกิจกรรมอยู่ได้')
    
    if project.plan:
        return redirect('view_master_plan_programs', (project.plan.master_plan.id))
    else:
        return redirect('view_program_projects', (program.id))
Example #24
0
def view_master_plan_manage_report_add_report(request, master_plan_ref_no):
    master_plan = get_object_or_404(MasterPlan, ref_no=master_plan_ref_no)
    
    if not permission.access_obj(request.user, 'master_plan manage', master_plan):
        return access_denied(request)
    
    if request.method == 'POST':
        report_due_type = REPORT_DUE_TYPE[request.POST.get('report_due_type')]
        
        form = MasterPlanReportForm(request.POST)
        if form.is_valid():
            report_name = form.cleaned_data['name']
            need_approval = form.cleaned_data['need_approval']
            
            notify_before = form.cleaned_data['notify_before']
            notify_before_days = form.cleaned_data['notify_before_days'] if notify_before else 0
            if not notify_before_days: notify_before_days = 0
            
            notify_due = form.cleaned_data['notify_due']
            
            report = Report.objects.create(master_plan=master_plan, due_type=report_due_type, name=report_name, need_approval=need_approval, need_checkup=True, created_by=request.user.get_profile(), notify_days_before=notify_before_days, notify_at_due=notify_due)
            
            if report_due_type == REPORT_DUE_DATES:
                for due_date in request.POST.getlist('due_dates'):
                    if due_date:
                        (dyear, dmonth, ddate) = due_date.split('-')
                        ReportDueDates.objects.create(report=report, due_date=date(int(dyear), int(dmonth), int(ddate)))
                
            elif report_due_type == REPORT_REPEAT_DUE:
                cycle_length = form.cleaned_data['cycle_length']
                monthly_date = form.cleaned_data['monthly_date']
                
                schedule_start = report_functions.generate_report_schedule_start(True, monthly_date)
                ReportDueRepeatable.objects.create(report=report, schedule_start=schedule_start, schedule_cycle=3, schedule_cycle_length=cycle_length, schedule_monthly_date=monthly_date)
            
            messages.success(request, 'เพิ่มหัวเรื่องรายงานเรียบร้อย')
            return utilities.redirect_or_back('view_master_plan_manage_report', (master_plan.ref_no), request)
        
        # To re-populate the form when error occured
        report = Report(due_type=report_due_type)
        if report_due_type == REPORT_DUE_DATES:
            due_dates = []
            for due_date in request.POST.getlist('due_dates'):
                if due_date:
                        (dyear, dmonth, ddate) = due_date.split('-')
                        due_dates.append(ReportDueDates(due_date=date(int(dyear), int(dmonth), int(ddate))))
            
            report.due_dates = due_dates
            
    else:
        report = Report(due_type=REPORT_NO_DUE_DATE)
        form = MasterPlanReportForm()
    
    return render_page_response(request, 'report', 'page_sector/manage_master_plan/manage_report_modify_report.html', {'master_plan':master_plan, 'report':report, 'form':form})
Example #25
0
def view_master_plan_delete_program(request, program_id):
    program = get_object_or_404(Program, pk=program_id)
    master_plan = program.plan.master_plan

    if not permission.access_obj(request.user, 'master_plan manage', master_plan):
        return access_denied(request)
    
    removable = True
    
    if Project.objects.filter(program=program).count():
        messages.error(request, u'ไม่สามารถลบแผนงานได้ เนื่องจากยังมีโครงการที่อยู่ภายใต้แผนงานนี้')
        removable = False
    
    if Report.objects.filter(program=program).count():
        messages.error(request, u'ไม่สามารถลบแผนงานได้ เนื่องจากยังมีรายงานที่แผนงานนี้สร้างขึ้น')
        removable = False
    
    if ReportSubmission.objects.filter(program=program).exclude(state=NO_ACTIVITY).count():
        messages.error(request, u'ไม่สามารถลบแผนงานได้ เนื่องจากยังมีรายงานที่แผนงานเขียนหรือส่งไปแล้ว')
        removable = False
    
    if removable:
        # REMOVE REPORT
        ReportAssignment.objects.filter(program=program).delete()
        
        # REMOVE BUDGET
        BudgetScheduleRevision.objects.filter(schedule__program=program).delete()
        schedules = BudgetSchedule.objects.filter(program=program)
        
        schedule_ids = [schedule.id for schedule in schedules]
        
        comments = Comment.objects.filter(object_name='budget', object_id__in=schedule_ids)
        comment_replies = CommentReply.objects.filter(comment__in=comments)
        
        UnreadComment.objects.filter(comment__in=comments).delete()
        UnreadCommentReply.objects.filter(reply__in=comment_replies).delete()
        
        comment_replies.delete()
        comments.delete()
        
        schedules.delete()
        
        # REMOVE KPI
        DomainKPICategory.objects.filter(program=program).delete()
        kpis = DomainKPI.objects.filter(program=program)
        DomainKPISchedule.objects.filter(kpi__in=kpis).delete()
        
        kpis.delete()
        
        # REMOVE PROGRAM
        program.delete()
        messages.success(request, u'ลบแผนงานเรียบร้อย')
    
    return redirect('view_master_plan_manage_organization', (master_plan.ref_no))
Example #26
0
def view_administration_organization_delete_sector(request, sector_ref_no):
    if not request.user.is_superuser: return access_denied(request)
    sector = get_object_or_404(Sector, ref_no=sector_ref_no)
    
    if not SectorMasterPlan.objects.filter(sector=sector).count():
        sector.delete()
        messages.success(request, 'ลบสำนักเรียบร้อย')
    else:
        messages.error(request, 'ไม่สามารถลบสำนักได้เนื่องจากยังมีข้อมูลแผนหลักอยู่ภายใต้')

    return redirect('view_administration_organization')
Example #27
0
def view_master_plan_manage_kpi_category(request, master_plan_ref_no):
    master_plan = get_object_or_404(MasterPlan, ref_no=master_plan_ref_no)
    categories = DomainKPICategory.objects.filter(master_plan=master_plan).order_by('name')
    
    if not permission.access_obj(request.user, 'master_plan manage', master_plan):
        return access_denied(request)
    
    for category in categories:
        category.removable = DomainKPI.objects.filter(category=category).count() == 0
    
    return render_page_response(request, 'kpi_category', 'page_sector/manage_master_plan/manage_kpi_category.html', {'master_plan':master_plan, 'categories':categories})
Example #28
0
def view_program_reports_send_report(request, program_id, report_id):
    program = get_object_or_404(Program, id=program_id)
    
    if not permission.access_obj(request.user, ('program report submission edit', 'program report submission submit'), program):
        return access_denied(request)
    
    # IMPORTANT NOTE ON PERMISSION
    # In this page, 'program report submission warning' will be ignored
    
    report = get_object_or_404(Report, id=report_id)
    submissions = report_functions.get_sending_report(program, report)
    return render_page_response(request, 'reports', 'page_program/program_reports_send_report.html', {'program':program, 'report':report, 'submissions':submissions})
Example #29
0
def view_administration_organization_delete_masterplan(request, master_plan_ref_no):
    if not request.user.is_superuser: return access_denied(request)
    master_plan = get_object_or_404(MasterPlan, ref_no=master_plan_ref_no)

    if not Plan.objects.filter(master_plan=master_plan).count():
        master_plan.delete()
        SectorMasterPlan.objects.filter(master_plan=master_plan).delete()
        
        messages.success(request, 'ลบแผนหลักเรียบร้อย')
    else:
        messages.error(request, 'ไม่สามารถลบแผนหลักได้เนื่องจากยังมีข้อมูลกลุ่มแผนงานหรือแผนงานอยู่ภายใต้')

    return redirect('view_administration_organization')
Example #30
0
def view_budget_overview_edit_reference(request, schedule_id):
    schedule = get_object_or_404(BudgetSchedule, pk=schedule_id)
    
    if not permission.access_obj(request.user, 'program budget reference edit', schedule.program):
        return access_denied(request)
    
    if request.method == 'POST':
        BudgetScheduleReference.objects.filter(schedule=schedule).delete()
        
        for form_project in request.POST.getlist('project'):
            try:
                project = Project.objects.get(pk=form_project)
            except Project.DoesNotExist:
                pass
            else:
                (reference, created) = BudgetScheduleReference.objects.get_or_create(schedule=schedule, project=project)
                reference.description = request.POST.get('desc_project_%d' % project.id)
                reference.save()
        
        for form_report in request.POST.getlist('report'):
            try:
                report_submission = ReportSubmission.objects.get(pk=form_report)
            except ReportSubmission.DoesNotExist:
                pass
            else:
                (reference, created) = BudgetScheduleReference.objects.get_or_create(schedule=schedule, report_submission=report_submission)
                reference.description = request.POST.get('desc_report_%d' % report_submission.id)
                reference.save()
        
        messages.success(request, 'แก้ไขข้อมูลประกอบเรียบร้อย')
        return redirect('view_budget_overview', schedule.id)
    
    projects = Project.objects.filter(program=schedule.program).order_by('name')
    reports = report_functions.get_reports_for_edit_reference(schedule.program)
    
    for reference in BudgetScheduleReference.objects.filter(schedule=schedule):
        if reference.project:
            for project in projects:
                if project.id == reference.project.id:
                    project.has_reference = True
                    project.reference_description = reference.description
        
        elif reference.report_submission:
            for report in reports:
                for submission in report.submissions:
                    if submission.id == reference.report_submission.id:
                        submission.has_reference = True
                        submission.reference_description = reference.description
    
    return render_page_response(request, 'overview', 'page_kpi/budget_overview_edit_reference.html', {'schedule':schedule, 'projects':projects, 'reports':reports})
Example #31
0
def view_master_plan_delete_plan(request, plan_id):
    plan = get_object_or_404(Plan, pk=plan_id)
    master_plan = plan.master_plan
    
    if not permission.access_obj(request.user, 'master_plan manage', master_plan):
        return access_denied(request)
    
    if not Program.objects.filter(plan=plan).count():
        plan.delete()
        messages.success(request, 'ลบกลุ่มแผนงานเรียบร้อย')
    else:
        messages.error(request, 'ไม่สามารถลบกลุ่มแผนงานได้ เนื่องจากมีแผนงานที่อยู่ภายใต้')
    
    return redirect('view_master_plan_manage_organization', (master_plan.ref_no))
Example #32
0
def view_program_manage_kpi_delete_kpi(request, kpi_id):
    kpi = get_object_or_404(DomainKPI, pk=kpi_id)
    program = kpi.program
    
    if not permission.access_obj(request.user, 'program kpi manage', program):
        return access_denied(request)
    
    if not DomainKPISchedule.objects.filter(kpi=kpi).count():
        kpi.delete()
        messages.success(request, 'ลบตัวชี้วัดเรียบร้อย')
    else:
        messages.error(request, 'ไม่สามารถลบตัวชี้วัด เนื่องจากยังมีแผนงานที่ผูกอยู่กับตัวชี้วัดนี้')
    
    return redirect('view_program_manage_kpi', (program.id))
Example #33
0
def view_master_plan_manage_kpi_delete_kpi(request, kpi_id):
    kpi = get_object_or_404(DomainKPI, pk=kpi_id)
    master_plan = kpi.master_plan
    
    if not permission.access_obj(request.user, 'master_plan manage', master_plan):
        return access_denied(request)
    
    if not DomainKPISchedule.objects.filter(kpi=kpi).count():
        kpi.delete()
        messages.success(request, 'ลบตัวชี้วัดเรียบร้อย')
    else:
        messages.error(request, 'ไม่สามารถลบตัวชี้วัด เนื่องจากยังมีแผนงานที่ผูกอยู่กับตัวชี้วัดนี้')
    
    return redirect('view_master_plan_manage_kpi', (master_plan.ref_no))
Example #34
0
def view_administration_organization_add_sector(request):
    if not request.user.is_superuser: return access_denied(request)

    if request.method == 'POST':
        form = ModifySectorForm(request.POST)
        if form.is_valid():
            Sector.objects.create(ref_no=form.cleaned_data['ref_no'], name=form.cleaned_data['name'])
            
            messages.success(request, 'เพิ่มสำนักเรียบร้อย')
            return redirect('view_administration_organization')
    else:
        form = ModifySectorForm()

    return render_page_response(request, 'organization', 'page_administration/manage_organization_modify_sector.html', {'form':form})
Example #35
0
def view_master_plan_manage_kpi_delete_category(request, kpi_category_id):
    kpi_category = get_object_or_404(DomainKPICategory, pk=kpi_category_id)
    master_plan = kpi_category.master_plan
    
    if not permission.access_obj(request.user, 'master_plan manage', master_plan):
        return access_denied(request)
    
    if not DomainKPI.objects.filter(category=kpi_category).count():
        kpi_category.delete()
        messages.success(request, 'ลบประเภทตัวชี้วัดเรียบร้อย')
    else:
        messages.error(request, 'ไม่สามารถลบประเภทตัวชี้วัด เนื่องจากยังมีตัวชี้วัดที่อยู่ในประเภทตัวชี้วัดนี้')
    
    return redirect('view_master_plan_manage_kpi_category', (master_plan.ref_no))
Example #36
0
def view_master_plan_manage_kpi(request, master_plan_ref_no, kpi_year):
    master_plan = get_object_or_404(MasterPlan, ref_no=master_plan_ref_no)

    if not permission.access_obj(request.user, 'master_plan manage',
                                 master_plan):
        return access_denied(request)

    if kpi_year:
        year_number = int(kpi_year)
    else:
        year_number = utilities.master_plan_current_year_number()

    kpi_categories = []
    for dict in DomainKPI.objects.filter(
            master_plan=master_plan,
            year=year_number).values('category').distinct():
        try:
            kpi_category = DomainKPICategory.objects.get(pk=dict['category'])
        except DomainKPICategory.DoesNotExist:
            pass
        else:
            kpis = DomainKPI.objects.filter(
                master_plan=master_plan,
                year=year_number,
                category=kpi_category).order_by('ref_no')

            for kpi in kpis:
                kpi.removable = DomainKPISchedule.objects.filter(
                    kpi=kpi).count() == 0

            kpi_category.kpis = kpis
            kpi_categories.append(kpi_category)

    print year_number
    no_category_kpis = DomainKPI.objects.filter(master_plan=master_plan,
                                                year=year_number,
                                                category=None)
    print no_category_kpis

    for kpi in no_category_kpis:
        kpi.removable = DomainKPISchedule.objects.filter(kpi=kpi).count() == 0

    return render_page_response(
        request, 'kpi', 'page_sector/manage_master_plan/manage_kpi.html', {
            'master_plan': master_plan,
            'kpi_categories': kpi_categories,
            'no_category_kpis': no_category_kpis,
            'kpi_year': year_number
        })
Example #37
0
def view_master_plan_manage_organization(request, master_plan_ref_no):
    master_plan = get_object_or_404(MasterPlan, ref_no=master_plan_ref_no)
    
    if not permission.access_obj(request.user, 'master_plan manage', master_plan):
        return access_denied(request)
    
    current_date = date.today().replace(day=1)
    plans = Plan.objects.filter(master_plan=master_plan).order_by('ref_no')
    
    for plan in plans:
        plan.programs = Program.objects.filter(plan=plan).order_by('ref_no')
        for program in plan.programs:
            program.removable = Project.objects.filter(program=program).count() == 0
    
    return render_page_response(request, 'organization', 'page_sector/manage_master_plan/manage_organization.html', {'master_plan':master_plan, 'plans':plans})
Example #38
0
def view_program_reports_send_list(request, program_id):
    program = get_object_or_404(Program, id=program_id)
    
    if not permission.access_obj(request.user, ('program report submission edit', 'program report submission submit'), program):
        return access_denied(request)
    
    # IMPORTANT NOTE ON PERMISSION
    # In this page, 'program report submission warning' will be ignored
    
    reports = []
    for assignment in ReportAssignment.objects.filter(program=program, is_active=True):
        report = assignment.report
        report.counter = report_functions.get_sending_report_count(program, report)
        reports.append(report)
    
    return render_page_response(request, 'reports', 'page_program/program_reports_send.html', {'program':program, 'reports':reports})
Example #39
0
def view_administration_users_change_password(request, user_id):
    if not request.user.is_superuser: return access_denied(request)
    user = User.objects.get(pk=user_id)
    
    if request.method == 'POST':
        form = UserChangePasswordForm(request.POST)
        if form.is_valid():
            user.set_password(form.cleaned_data['password1'])
            user.save()
            set_message(request, u'ตั้งรหัสผ่านใหม่เรียบร้อย')
            return redirect('view_administration_users_edit', (user.id))
        
    else:
        form = UserChangePasswordForm()
    
    return render_page_response(request, 'users', 'page_administration/manage_users_change_password.html', {'editing_user': user, 'form':form})
Example #40
0
def view_master_plan_manage_kpi_delete_kpi(request, kpi_id):
    kpi = get_object_or_404(DomainKPI, pk=kpi_id)
    master_plan = kpi.master_plan

    if not permission.access_obj(request.user, 'master_plan manage',
                                 master_plan):
        return access_denied(request)

    if not DomainKPISchedule.objects.filter(kpi=kpi).count():
        kpi.delete()
        messages.success(request, 'ลบตัวชี้วัดเรียบร้อย')
    else:
        messages.error(
            request,
            'ไม่สามารถลบตัวชี้วัด เนื่องจากยังมีแผนงานที่ผูกอยู่กับตัวชี้วัดนี้'
        )

    return redirect('view_master_plan_manage_kpi', (master_plan.ref_no))
Example #41
0
def view_master_plan_manage_kpi_category(request, master_plan_ref_no):
    master_plan = get_object_or_404(MasterPlan, ref_no=master_plan_ref_no)
    categories = DomainKPICategory.objects.filter(
        master_plan=master_plan).order_by('name')

    if not permission.access_obj(request.user, 'master_plan manage',
                                 master_plan):
        return access_denied(request)

    for category in categories:
        category.removable = DomainKPI.objects.filter(
            category=category).count() == 0

    return render_page_response(
        request, 'kpi_category',
        'page_sector/manage_master_plan/manage_kpi_category.html', {
            'master_plan': master_plan,
            'categories': categories
        })
Example #42
0
def view_master_plan_manage_kpi_delete_category(request, kpi_category_id):
    kpi_category = get_object_or_404(DomainKPICategory, pk=kpi_category_id)
    master_plan = kpi_category.master_plan

    if not permission.access_obj(request.user, 'master_plan manage',
                                 master_plan):
        return access_denied(request)

    if not DomainKPI.objects.filter(category=kpi_category).count():
        kpi_category.delete()
        messages.success(request, 'ลบประเภทตัวชี้วัดเรียบร้อย')
    else:
        messages.error(
            request,
            'ไม่สามารถลบประเภทตัวชี้วัด เนื่องจากยังมีตัวชี้วัดที่อยู่ในประเภทตัวชี้วัดนี้'
        )

    return redirect('view_master_plan_manage_kpi_category',
                    (master_plan.ref_no))
Example #43
0
def view_program_reports_send_report(request, program_id, report_id):
    program = get_object_or_404(Program, id=program_id)

    if not permission.access_obj(
            request.user,
        ('program report submission edit', 'program report submission submit'),
            program):
        return access_denied(request)

    # IMPORTANT NOTE ON PERMISSION
    # In this page, 'program report submission warning' will be ignored

    report = get_object_or_404(Report, id=report_id)
    submissions = report_functions.get_sending_report(program, report)
    return render_page_response(
        request, 'reports', 'page_program/program_reports_send_report.html', {
            'program': program,
            'report': report,
            'submissions': submissions
        })
Example #44
0
def view_master_plan_manage_kpi_edit_kpi(request, kpi_id):
    kpi = get_object_or_404(DomainKPI, pk=kpi_id)
    master_plan = kpi.master_plan

    if not permission.access_obj(request.user, 'master_plan manage',
                                 master_plan):
        return access_denied(request)

    if request.method == 'POST':
        form = DomainKPIModifyForm(request.POST, master_plan=master_plan)
        if form.is_valid():
            kpi.ref_no = form.cleaned_data['ref_no']
            kpi.name = form.cleaned_data['name']
            kpi.abbr_name = form.cleaned_data['abbr_name']
            kpi.year = form.cleaned_data['year'] - 543
            kpi.unit_name = form.cleaned_data['unit_name']
            kpi.category = form.cleaned_data['category']
            kpi.save()

            messages.success(request, 'แก้ไขตัวชี้วัดเรียบร้อย')
            return redirect('view_master_plan_manage_kpi',
                            (master_plan.ref_no))

    else:
        form = DomainKPIModifyForm(master_plan=master_plan,
                                   initial={
                                       'ref_no': kpi.ref_no,
                                       'name': kpi.name,
                                       'abbr_name': kpi.abbr_name,
                                       'year': kpi.year + 543,
                                       'category': kpi.category,
                                       'unit_name': kpi.unit_name
                                   })

    return render_page_response(
        request, 'organization',
        'page_sector/manage_master_plan/manage_kpi_modify_kpi.html', {
            'master_plan': master_plan,
            'form': form,
            'kpi': kpi
        })
Example #45
0
def view_master_plan_manage_program_kpi(request, program_id, quarter_year):
    program = get_object_or_404(Program, pk=program_id)
    master_plan = program.plan.master_plan

    if not permission.access_obj(request.user, 'master_plan manage',
                                 master_plan):
        return access_denied(request)

    if not quarter_year:
        current_quarter_year = utilities.master_plan_current_year()
    else:
        current_quarter_year = int(quarter_year)

    kpi_category_choices = []
    for dict in DomainKPI.objects.filter(
            master_plan=master_plan,
            year=current_quarter_year).values('category'):
        if dict['category']:
            kpi_category = DomainKPICategory.objects.get(pk=dict['category'])
            kpis = DomainKPI.objects.filter(master_plan=master_plan,
                                            year=current_quarter_year,
                                            category=kpi_category)
            kpi_category_choices.append({
                'category': kpi_category,
                'kpis': kpis
            })

    kpi_no_category_choices = DomainKPI.objects.filter(
        master_plan=master_plan, year=current_quarter_year, category=None)

    kpi_schedules = DomainKPISchedule.objects.filter(
        program=program, quarter_year=current_quarter_year)

    if request.method == 'POST':
        # 'schedule' - kpi_id , schedule_id , target , quarter - "123,None,100,1"
        schedules = request.POST.getlist('schedule')

        updating_schedules = list()
        for schedule in schedules:
            try:
                (kpi_id, schedule_id, target, quarter) = schedule.split(',')
                kpi_id = int(kpi_id)
                target = int(target)
                quarter = int(quarter)
            except:
                messages.error(
                    request,
                    'ข้อมูลไม่อยู่ในรูปแบบที่ถูกต้อง กรุณากรอกใหม่อีกครั้ง')
                return redirect('view_master_plan_manage_program_kpi',
                                (program.id))
            else:
                kpi = DomainKPI.objects.get(pk=kpi_id)

                if schedule_id and schedule_id != 'none':
                    schedule = DomainKPISchedule.objects.get(pk=schedule_id)

                    if schedule.target != target or schedule.quarter_year != current_quarter_year or schedule.quarter != quarter:
                        schedule.target = target
                        schedule.quarter_year = current_quarter_year
                        schedule.quarter = quarter
                        schedule.save()

                else:
                    schedule = DomainKPISchedule.objects.create(
                        kpi=kpi,
                        program=program,
                        target=target,
                        result=0,
                        quarter_year=current_quarter_year,
                        quarter=quarter)

            updating_schedules.append(schedule)

        # Remove schedule
        for program_schedule in kpi_schedules:
            found = False
            for schedule in updating_schedules:
                if schedule == program_schedule:
                    found = True

            if not found:
                # TODO - Delete Comment
                program_schedule.delete()

        messages.success(request, 'แก้ไขแผนผลลัพธ์ของแผนงานเรียบร้อย')
        return utilities.redirect_or_back(
            'view_master_plan_manage_organization', (master_plan.ref_no),
            request)

    # GET SCHEDULE

    column_schedules = [[], [], [], []]
    for schedule in kpi_schedules:
        column_schedules[schedule.quarter - 1].append(schedule)

    max_height = 0
    for i in range(0, 4):
        if max_height < len(column_schedules[i]):
            max_height = len(column_schedules[i])

    row_schedules = []
    for i in range(0, max_height):
        row_schedule = {}

        for quarter in range(0, 4):
            try:
                row_schedule[str(quarter + 1)] = column_schedules[quarter][i]
            except:
                row_schedule[str(quarter + 1)] = ''

        row_schedules.append(row_schedule)

    return render_page_response(
        request, 'organization',
        'page_sector/manage_master_plan/manage_program_kpi.html', {
            'master_plan': master_plan,
            'program': program,
            'row_schedules': row_schedules,
            'kpi_no_category_choices': kpi_no_category_choices,
            'kpi_category_choices': kpi_category_choices,
            'current_quarter_year': current_quarter_year
        })
Example #46
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
        })
Example #47
0
def view_budget_overview_edit_reference(request, schedule_id):
    schedule = get_object_or_404(BudgetSchedule, pk=schedule_id)

    if not permission.access_obj(request.user, 'program budget reference edit',
                                 schedule.program):
        return access_denied(request)

    if request.method == 'POST':
        BudgetScheduleReference.objects.filter(schedule=schedule).delete()

        for form_project in request.POST.getlist('project'):
            try:
                project = Project.objects.get(pk=form_project)
            except Project.DoesNotExist:
                pass
            else:
                (reference,
                 created) = BudgetScheduleReference.objects.get_or_create(
                     schedule=schedule, project=project)
                reference.description = request.POST.get('desc_project_%d' %
                                                         project.id)
                reference.save()

        for form_report in request.POST.getlist('report'):
            try:
                report_submission = ReportSubmission.objects.get(
                    pk=form_report)
            except ReportSubmission.DoesNotExist:
                pass
            else:
                (reference,
                 created) = BudgetScheduleReference.objects.get_or_create(
                     schedule=schedule, report_submission=report_submission)
                reference.description = request.POST.get('desc_report_%d' %
                                                         report_submission.id)
                reference.save()

        messages.success(request, 'แก้ไขข้อมูลประกอบเรียบร้อย')
        return redirect('view_budget_overview', schedule.id)

    projects = Project.objects.filter(
        program=schedule.program).order_by('name')
    reports = report_functions.get_reports_for_edit_reference(schedule.program)

    for reference in BudgetScheduleReference.objects.filter(schedule=schedule):
        if reference.project:
            for project in projects:
                if project.id == reference.project.id:
                    project.has_reference = True
                    project.reference_description = reference.description

        elif reference.report_submission:
            for report in reports:
                for submission in report.submissions:
                    if submission.id == reference.report_submission.id:
                        submission.has_reference = True
                        submission.reference_description = reference.description

    return render_page_response(
        request, 'overview', 'page_kpi/budget_overview_edit_reference.html', {
            'schedule': schedule,
            'projects': projects,
            'reports': reports
        })
Example #48
0
def view_master_plan_manage_report_edit_report(request, report_id):
    report = get_object_or_404(Report, pk=report_id)
    master_plan = report.master_plan
    if not master_plan: raise Http404

    if not permission.access_obj(request.user, 'master_plan manage',
                                 master_plan):
        return access_denied(request)

    if request.method == 'POST':
        report_due_type = REPORT_DUE_TYPE[request.POST.get('report_due_type')]

        form = MasterPlanReportForm(request.POST)
        if form.is_valid():
            report.name = form.cleaned_data['name']
            report.need_approval = form.cleaned_data['need_approval']

            notify_before = form.cleaned_data['notify_before']
            report.notify_days_before = form.cleaned_data[
                'notify_before_days'] if notify_before else 0
            if not report.notify_days_before: report.notify_days_before = 0

            report.notify_at_due = form.cleaned_data['notify_due']

            ReportDueRepeatable.objects.filter(report=report).delete()
            ReportDueDates.objects.filter(report=report).delete()
            ReportSubmission.objects.filter(report=report,
                                            state=NO_ACTIVITY).delete()

            report.due_type = report_due_type

            if report_due_type == REPORT_DUE_DATES:
                for due_date in request.POST.getlist('due_dates'):
                    if due_date:
                        (dyear, dmonth, ddate) = due_date.split('-')
                        ReportDueDates.objects.create(report=report,
                                                      due_date=date(
                                                          int(dyear),
                                                          int(dmonth),
                                                          int(ddate)))

            elif report_due_type == REPORT_REPEAT_DUE:
                cycle_length = form.cleaned_data['cycle_length']
                monthly_date = form.cleaned_data['monthly_date']

                schedule_start = report_functions.generate_report_schedule_start(
                    True, monthly_date)
                ReportDueRepeatable.objects.create(
                    report=report,
                    schedule_start=schedule_start,
                    schedule_cycle=3,
                    schedule_cycle_length=cycle_length,
                    schedule_monthly_date=monthly_date)

            report.save()

            messages.success(request, 'แก้ไขหัวเรื่องรายงานเรียบร้อย')
            return redirect('view_master_plan_manage_report',
                            (master_plan.ref_no))

    else:
        if not report.notify_days_before:
            notify_before = False
            notify_days_before = ''
        else:
            notify_before = True
            notify_days_before = report.notify_days_before

        if report.due_type == REPORT_REPEAT_DUE:
            report_repeatable = ReportDueRepeatable.objects.get(report=report)
            cycle_length = report_repeatable.schedule_cycle_length
            monthly_date = report_repeatable.schedule_monthly_date
        else:
            cycle_length = ''
            monthly_date = ''

        form = MasterPlanReportForm(
            initial={
                'name': report.name,
                'need_approval': report.need_approval,
                'cycle_length': cycle_length,
                'monthly_date': monthly_date,
                'notify_before': notify_before,
                'notify_before_days': notify_days_before,
                'notify_due': report.notify_at_due,
            })

    if report.due_type == REPORT_DUE_DATES:
        report.due_dates = ReportDueDates.objects.filter(
            report=report).order_by('due_date')
    else:
        report.due_dates = []

    return render_page_response(
        request, 'report',
        'page_sector/manage_master_plan/manage_report_modify_report.html', {
            'master_plan': master_plan,
            'report': report,
            'form': form
        })
Example #49
0
def view_master_plan_manage_program_report(request, program_id):
    program = get_object_or_404(Program, pk=program_id)
    master_plan = program.plan.master_plan
    today = date.today()

    if not permission.access_obj(request.user, 'master_plan manage',
                                 master_plan):
        return access_denied(request)

    if request.method == 'POST':
        form = MasterPlanProgramReportsForm(request.POST,
                                            master_plan=master_plan)
        if form.is_valid():
            reports_before = [
                report_program.report
                for report_program in ReportAssignment.objects.filter(
                    program=program, is_active=True)
            ]
            reports_after = form.cleaned_data['reports']

            cancel_reports = set(reports_before) - set(reports_after)

            # Cancel Reports
            for cancel_report in cancel_reports:
                report_program = ReportAssignment.objects.get(
                    report=cancel_report, program=program)
                report_program.is_active = False
                report_program.save()

            # Add New Reports
            new_reports = set(reports_after) - set(reports_before)
            for new_report in new_reports:
                report_program, created = ReportAssignment.objects.get_or_create(
                    report=new_report, program=program)

                if not created:
                    report_program.is_active = True
                    report_program.save()

            messages.success(request, 'เลือกรายงานเรียบร้อย')
            return redirect('view_master_plan_manage_organization',
                            (program.plan.master_plan.ref_no))

    else:
        form = MasterPlanProgramReportsForm(
            master_plan=master_plan,
            initial={
                'reports': [
                    report_program.report.id
                    for report_program in ReportAssignment.objects.filter(
                        program=program, is_active=True)
                ]
            })

    has_reports = Report.objects.filter(master_plan=master_plan).count() > 0
    return render_page_response(
        request, 'organization',
        'page_sector/manage_master_plan/manage_program_report.html', {
            'master_plan': master_plan,
            'program': program,
            'form': form,
            'has_reports': has_reports
        })
Example #50
0
def view_program_reports_manage_report_add_report(request, program_id):
    program = get_object_or_404(Program, id=program_id)

    if not permission.access_obj(request.user, 'program report schedule add',
                                 program):
        return access_denied(request)

    if request.method == 'POST':
        report_due_type = REPORT_DUE_TYPE[request.POST.get('report_due_type')]

        form = ProgramReportForm(request.POST)
        if form.is_valid():
            report_name = form.cleaned_data['name']
            need_checkup = form.cleaned_data['need_checkup']
            need_approval = form.cleaned_data['need_approval']

            notify_before = form.cleaned_data['notify_before']
            notify_before_days = form.cleaned_data[
                'notify_before_days'] if notify_before else 0
            if not notify_before_days: notify_before_days = 0

            notify_due = form.cleaned_data['notify_due']

            report = Report.objects.create(
                program=program,
                due_type=report_due_type,
                name=report_name,
                need_approval=need_approval,
                need_checkup=need_checkup,
                created_by=request.user.get_profile(),
                notify_days_before=notify_before_days,
                notify_at_due=notify_due)

            if report_due_type == REPORT_DUE_DATES:
                for due_date in request.POST.getlist('due_dates'):
                    if due_date:
                        (dyear, dmonth, ddate) = due_date.split('-')
                        ReportDueDates.objects.create(report=report,
                                                      due_date=date(
                                                          int(dyear),
                                                          int(dmonth),
                                                          int(ddate)))

            elif report_due_type == REPORT_REPEAT_DUE:
                cycle_length = form.cleaned_data['cycle_length']
                monthly_date = form.cleaned_data['monthly_date']

                schedule_start = report_functions.generate_report_schedule_start(
                    True, monthly_date)
                ReportDueRepeatable.objects.create(
                    report=report,
                    schedule_start=schedule_start,
                    schedule_cycle=3,
                    schedule_cycle_length=cycle_length,
                    schedule_monthly_date=monthly_date)

            ReportAssignment.objects.create(report=report, program=program)

            messages.success(request, 'เพิ่มหัวเรื่องรายงานเรียบร้อย')
            return redirect('view_program_reports_manage_report', (program.id))

    # To re-populate the form when error occured
        report = Report(due_type=report_due_type)
        if report_due_type == REPORT_DUE_DATES:
            due_dates = []
            for due_date in request.POST.getlist('due_dates'):
                if due_date:
                    (dyear, dmonth, ddate) = due_date.split('-')
                    due_dates.append(
                        ReportDueDates(due_date=date(int(dyear), int(dmonth),
                                                     int(ddate))))

            report.due_dates = due_dates

    else:
        report = Report(due_type=REPORT_NO_DUE_DATE)
        form = ProgramReportForm()

    return render_page_response(
        request, 'reports', 'page_program/program_reports_modify_report.html',
        {
            'program': program,
            'form': form,
            'report': report
        })
Example #51
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
        })
Example #52
0
def view_master_plan_manage_program_budget(request, program_id):
    program = get_object_or_404(Program, pk=program_id)
    master_plan = program.plan.master_plan

    if not permission.access_obj(request.user, 'master_plan manage',
                                 master_plan):
        return access_denied(request)

    budget_schedules = BudgetSchedule.objects.filter(
        program=program).order_by('-schedule_on')

    if request.method == 'POST':
        updating_schedules = list()
        for schedule in request.POST.getlist('schedule'):
            try:
                (schedule_id, grant_budget, schedule_on) = schedule.split(',')
                (schedule_on_year, schedule_on_month,
                 schedule_on_day) = schedule_on.split('-')
                schedule_on = date(int(schedule_on_year),
                                   int(schedule_on_month),
                                   int(schedule_on_day))
                grant_budget = int(grant_budget)
            except:
                messages.error(
                    request,
                    'ข้อมูลไม่อยู่ในรูปแบบที่ถูกต้อง กรุณากรอกใหม่อีกครั้ง')
                return redirect('view_master_plan_manage_program_budget',
                                (program.id))
            else:
                create_revision = False

                if schedule_id and schedule_id != 'none':
                    schedule = BudgetSchedule.objects.get(pk=schedule_id)

                    if schedule.grant_budget != grant_budget or schedule.schedule_on != schedule_on:
                        create_revision = True

                        schedule.grant_budget = grant_budget
                        schedule.schedule_on = schedule_on
                        schedule.save()

                else:
                    schedule = BudgetSchedule.objects.create(
                        program=program,
                        grant_budget=grant_budget,
                        claim_budget=0,
                        schedule_on=schedule_on)
                    create_revision = True

                if create_revision:
                    revision = BudgetScheduleRevision.objects.create(
                        schedule=schedule,
                        grant_budget=schedule.grant_budget,
                        claim_budget=schedule.claim_budget,
                        schedule_on=schedule.schedule_on,
                        revised_by=request.user.get_profile())

                updating_schedules.append(schedule)

        # Remove schedule
        for budget_schedule in budget_schedules:
            found = False
            for schedule in updating_schedules:
                if schedule == budget_schedule:
                    found = True

            if not found:
                BudgetScheduleRevision.objects.filter(
                    schedule=budget_schedule).delete()
                budget_schedule.delete()

        messages.success(request, 'แก้ไขแผนงานเงินของแผนงานเรียบร้อย')
        return utilities.redirect_or_back(
            'view_master_plan_manage_organization', (master_plan.ref_no),
            request)

    return render_page_response(
        request, 'organization',
        'page_sector/manage_master_plan/manage_program_budget.html', {
            'master_plan': master_plan,
            'program': program,
            'schedules': budget_schedules
        })
Example #53
0
def view_master_plan_manage_report_add_report(request, master_plan_ref_no):
    master_plan = get_object_or_404(MasterPlan, ref_no=master_plan_ref_no)

    if not permission.access_obj(request.user, 'master_plan manage',
                                 master_plan):
        return access_denied(request)

    if request.method == 'POST':
        report_due_type = REPORT_DUE_TYPE[request.POST.get('report_due_type')]

        form = MasterPlanReportForm(request.POST)
        if form.is_valid():
            report_name = form.cleaned_data['name']
            need_approval = form.cleaned_data['need_approval']

            notify_before = form.cleaned_data['notify_before']
            notify_before_days = form.cleaned_data[
                'notify_before_days'] if notify_before else 0
            if not notify_before_days: notify_before_days = 0

            notify_due = form.cleaned_data['notify_due']

            report = Report.objects.create(
                master_plan=master_plan,
                due_type=report_due_type,
                name=report_name,
                need_approval=need_approval,
                need_checkup=True,
                created_by=request.user.get_profile(),
                notify_days_before=notify_before_days,
                notify_at_due=notify_due)

            if report_due_type == REPORT_DUE_DATES:
                for due_date in request.POST.getlist('due_dates'):
                    if due_date:
                        (dyear, dmonth, ddate) = due_date.split('-')
                        ReportDueDates.objects.create(report=report,
                                                      due_date=date(
                                                          int(dyear),
                                                          int(dmonth),
                                                          int(ddate)))

            elif report_due_type == REPORT_REPEAT_DUE:
                cycle_length = form.cleaned_data['cycle_length']
                monthly_date = form.cleaned_data['monthly_date']

                schedule_start = report_functions.generate_report_schedule_start(
                    True, monthly_date)
                ReportDueRepeatable.objects.create(
                    report=report,
                    schedule_start=schedule_start,
                    schedule_cycle=3,
                    schedule_cycle_length=cycle_length,
                    schedule_monthly_date=monthly_date)

            messages.success(request, 'เพิ่มหัวเรื่องรายงานเรียบร้อย')
            return utilities.redirect_or_back('view_master_plan_manage_report',
                                              (master_plan.ref_no), request)

        # To re-populate the form when error occured
        report = Report(due_type=report_due_type)
        if report_due_type == REPORT_DUE_DATES:
            due_dates = []
            for due_date in request.POST.getlist('due_dates'):
                if due_date:
                    (dyear, dmonth, ddate) = due_date.split('-')
                    due_dates.append(
                        ReportDueDates(due_date=date(int(dyear), int(dmonth),
                                                     int(ddate))))

            report.due_dates = due_dates

    else:
        report = Report(due_type=REPORT_NO_DUE_DATE)
        form = MasterPlanReportForm()

    return render_page_response(
        request, 'report',
        'page_sector/manage_master_plan/manage_report_modify_report.html', {
            'master_plan': master_plan,
            'report': report,
            'form': form
        })
Example #54
0
def view_program_reports_manage_report_edit_report(request, report_id):
    report = get_object_or_404(Report, pk=report_id)
    program = report.program

    if not permission.access_obj(request.user, 'program report schedule edit',
                                 program):
        return access_denied(request)

    if report.master_plan:
        messages.error(request, 'ไม่สามารถแก้ไขรายงานของแผนหลักได้จากหน้านี้')
        return redirect('view_program_reports_manage_report', (program.id))

    if request.method == 'POST':
        report_due_type = REPORT_DUE_TYPE[request.POST.get('report_due_type')]

        form = ProgramReportForm(request.POST)
        if form.is_valid():
            report.name = form.cleaned_data['name']
            report.need_checkup = form.cleaned_data['need_checkup']
            report.need_approval = form.cleaned_data['need_approval']

            notify_before = form.cleaned_data['notify_before']
            report.notify_before_days = form.cleaned_data[
                'notify_before_days'] if notify_before else 0
            if not report.notify_before_days: report.notify_before_days = 0

            report.notify_at_due = form.cleaned_data['notify_due']

            ReportDueRepeatable.objects.filter(report=report).delete()
            ReportDueDates.objects.filter(report=report).delete()
            ReportSubmission.objects.filter(report=report,
                                            state=NO_ACTIVITY).delete()

            report.due_type = report_due_type

            if report_due_type == REPORT_DUE_DATES:
                for due_date in request.POST.getlist('due_dates'):
                    if due_date:
                        (dyear, dmonth, ddate) = due_date.split('-')
                        ReportDueDates.objects.create(report=report,
                                                      due_date=date(
                                                          int(dyear),
                                                          int(dmonth),
                                                          int(ddate)))

            elif report_due_type == REPORT_REPEAT_DUE:
                cycle_length = form.cleaned_data['cycle_length']
                monthly_date = form.cleaned_data['monthly_date']

                schedule_start = report_functions.generate_report_schedule_start(
                    True, monthly_date)
                ReportDueRepeatable.objects.create(
                    report=report,
                    schedule_start=schedule_start,
                    schedule_cycle=3,
                    schedule_cycle_length=cycle_length,
                    schedule_monthly_date=monthly_date)

            report.save()

            messages.success(request, 'แก้ไขหัวเรื่องรายงานเรียบร้อย')
            return redirect('view_program_reports_manage_report', (program.id))

    else:
        if not report.notify_days_before:
            notify_before = False
            notify_days_before = ''
        else:
            notify_before = True
            notify_days_before = report.notify_days_before

        if report.due_type == REPORT_REPEAT_DUE:
            report_repeatable = ReportDueRepeatable.objects.get(report=report)
            cycle_length = report_repeatable.schedule_cycle_length
            monthly_date = report_repeatable.schedule_monthly_date
        else:
            cycle_length = ''
            monthly_date = ''

        form = ProgramReportForm(
            initial={
                'name': report.name,
                'need_checkup': report.need_checkup,
                'need_approval': report.need_approval,
                'cycle_length': cycle_length,
                'monthly_date': monthly_date,
                'notify_before': notify_before,
                'notify_before_days': notify_days_before,
                'notify_due': report.notify_at_due,
            })

    if report.due_type == REPORT_DUE_DATES:
        report.due_dates = ReportDueDates.objects.filter(
            report=report).order_by('due_date')
    else:
        report.due_dates = []

    return render_page_response(
        request, 'reports', 'page_program/program_reports_modify_report.html',
        {
            'program': program,
            'form': form,
            'report': report
        })