コード例 #1
0
ファイル: views.py プロジェクト: RuhollahSeka/SAD
def find_benefactor_search_results(request):
    if not request.user.is_authenticated:
        context = sign_in_error()
        template = loader.get_template('accounts/error_page.html')
        return HttpResponse(template.render(context, request))
    if request.user.is_benefactor:
        context = error_context_generate(
            'Account Type Error',
            'Benefactors Cannot Search for Other Benefactors', '')
        template = loader.get_template('accounts/error_page.html')
        return HttpResponse(template.render(context, request))
    start_date = convert_str_to_date(
        request.POST.get('search_benefactor_start_date'))
    end_date = convert_str_to_date(
        request.POST.get('search_benefactor_end_date'))
    weekly_schedule = create_query_schedule(
        request.POST.get('search_benefactor_schedule'))
    schedule = [start_date, end_date, weekly_schedule]
    min_required_hours = request.POST.get(
        'search_benefactor_min_required_hours')
    min_required_hours = None if min_required_hours is None else float(
        min_required_hours)
    min_date_overlap = request.POST.get('search_benefactors_min_date_overlap')
    min_date_overlap = None if min_date_overlap is None else float(
        min_date_overlap)
    min_time_overlap = request.POST.get('search_benefactors_min_time_overlap')
    min_time_overlap = None if min_time_overlap is None else float(
        min_time_overlap)
    tags = request.POST.get('search_benefactor_tags')
    ability_name = request.POST.get('search_benefactor_ability_name')
    ability_min_score = request.POST.get('search_benefactor_ability_min_score')
    ability_min_score = None if ability_min_score is None else float(
        ability_min_score)
    ability_max_score = request.POST.get('search_benefactor_ability_max_score')
    ability_max_score = None if ability_max_score is None else float(
        ability_max_score)
    country = request.POST.get('search_benefactor_country')
    province = request.POST.get('search_benefactor_province')
    city = request.POST.get('search_benefactor_city')
    user_min_score = request.POST.get('search_benefactor_user_min_score')
    user_min_score = None if user_min_score is None else float(user_min_score)
    user_max_score = request.POST.get('search_benefactor_user_max_score')
    user_max_score = None if user_max_score is None else float(user_max_score)
    gender = request.POST.get('search_benefactor_gender')
    first_name = request.POST.get('search_benefactor_first_name')
    last_name = request.POST.get('search_benefactor_last_name')
    result_benefactor_data = search_benefactor(
        schedule, min_required_hours, min_date_overlap, min_time_overlap, tags,
        ability_name, ability_min_score, ability_max_score, country, province,
        city, user_min_score, user_max_score, gender, first_name, last_name)
    # benefactor_list = list(benefactor_queryset)
    # result_benefactor_data = []
    # for benefactor, overlap_data in zip(benefactor_list, search_overlap_data):
    #     result_benefactor_data.append([benefactor, overlap_data[0], overlap_data[1]])

    return render(request, 'wtf?',
                  {'result_benefactors': result_benefactor_data})
コード例 #2
0
ファイル: views.py プロジェクト: RuhollahSeka/SAD
def charity_dashboard(request):
    user = request.user
    if not user.is_authenticated:
        # TODO error
        context = error_context_generate('Authentication Error',
                                         'لطفاً اول وارد شوید',
                                         'accounts:login_view')
        template = loader.get_template('accounts/error_page.html')
        return HttpResponse(template.render(context, request))
    if not user.is_active:
        context = error_context_generate('Authentication Error',
                                         'لطفاً اکانت خود را تایید کنید',
                                         'accounts:login_view')
        template = loader.get_template('accounts/error_page.html')
        return HttpResponse(template.render(context, request))
    if not user.is_charity:
        context = error_context_generate(
            'Access Denied', 'شما اجازه دسترسی به این بخش را ندارید',
            'accounts:dashboard')
        template = loader.get_template('accounts/error_page.html')
        return HttpResponse(template.render(context, request))

    requests = CooperationRequest.objects.filter(type__iexact='b2c').filter(
        charity=user.charity).filter(state__iexact='on-hold')
    notifications = Notification.objects.filter(user=user)
    user_project_ids = [
        project.id for project in list(user.charity.project_set.all())
    ]
    complete_project_count = Project.objects.filter(
        project_state__iexact='completed').filter(
            id__in=user_project_ids).count()
    non_complete_project_count = Project.objects.filter(
        project_state__iexact='in-progress').filter(
            id__in=user_project_ids).count()
    if request.method == 'GET':
        return render(
            request, 'accounts/charity-dashboard.html', {
                'requests':
                list(requests),
                'a_notification':
                notifications[0] if notifications.count() != 0 else None,
                'have_notification':
                True if notifications.count() > 0 else False,
                'notifications':
                list(notifications),
                'benefactor_results': [],
                'complete_project_count':
                complete_project_count,
                'non_complete_project_count':
                non_complete_project_count,
                'ability_tags':
                list(AbilityTag.objects.all()),
            })
    elif request.method == 'POST':
        post = request.POST
        start_date = convert_str_to_date(post.get('start_date'))
        end_date = convert_str_to_date(post.get('end_date'))
        weekly_schedule = create_query_schedule(post.get('schedule'))
        schedule = [start_date, end_date, weekly_schedule]
        min_required_hours = post.get('min_required_hours')
        min_required_hours = None if min_required_hours is None else float(
            min_required_hours)
        min_date_overlap = post.get('min_date_overlap')
        min_date_overlap = None if min_date_overlap is None else float(
            min_date_overlap)
        min_time_overlap = post.get('min_time_overlap')
        min_time_overlap = None if min_time_overlap is None else float(
            min_time_overlap)
        tags = post.get('tags')
        tags = None if tags is None else tags.split(',')
        ability_name = post.get('ability_name')
        ability_min_score = post.get('ability_min_score')
        ability_min_score = None if ability_min_score is None else float(
            ability_min_score)
        ability_max_score = post.get('ability_max_score')
        ability_max_score = None if ability_max_score is None else float(
            ability_max_score)
        country = post.get('country')
        province = post.get('province')
        city = post.get('city')
        user_min_score = post.get('user_min_score')
        user_min_score = None if user_min_score is None else float(
            user_min_score)
        user_max_score = post.get('user_max_score')
        user_max_score = None if user_max_score is None else float(
            user_max_score)
        gender = post.get('gender')
        first_name = post.get('first_name')
        last_name = post.get('last_name')
        result_benefactor = search_benefactor(
            schedule, min_required_hours, min_date_overlap, min_time_overlap,
            tags, ability_name, ability_min_score, ability_max_score, country,
            province, city, user_min_score, user_max_score, gender, first_name,
            last_name)
        return render(
            request, 'accounts/charity-dashboard.html', {
                'requests':
                list(requests),
                'a_notification':
                notifications[0] if notifications.count() != 0 else None,
                'have_notification':
                True if notifications.count() > 0 else False,
                'notifications':
                list(notifications),
                'benefactor_results':
                result_benefactor,
                'complete_project_count':
                complete_project_count,
                'non_complete_project_count':
                non_complete_project_count
            })
コード例 #3
0
ファイル: views.py プロジェクト: RuhollahSeka/SAD
def find_non_financial_projects_advanced_search_results(request):
    if not request.user.is_authenticated:
        # TODO Raise Auth Error
        context = sign_in_error()
        template = loader.get_template('accounts/error_page.html')
        return HttpResponse(template.render(context, request))
    if request.user.is_charity:
        pass
    all_ability_types = [
        ability_type.name for ability_type in AbilityType.objects.all()
    ]
    all_ability_tags = [
        ability_tag.name for ability_tag in AbilityTag.objects.all()
    ]

    if request.method == 'GET':
        return render(
            request, 'projects/non-fin-advanced-search', {
                'ability_types': all_ability_types,
                'ability_tags': all_ability_tags,
                'result_non_financial_projects': []
            })

    project_name = request.POST.get('search_non_financial_project_name')
    charity_name = request.POST.get('search_non_financial_charity_name')
    benefactor_name = request.POST.get('search_non_financial_benefactor_name')
    project_state = request.POST.get('search_non_financial_project_state')
    ability_name = request.POST.get('search_non_financial_ability_name')
    tags = request.POST.get('search_non_financial_tags')
    start_date = convert_str_to_date(
        request.POST.get('search_non_financial_start_date'))
    end_date = convert_str_to_date(
        request.POST.get('search_non_financial_end_date'))
    weekly_schedule = create_query_schedule(
        request.POST.get('search_non_financial_schedule'))
    schedule = [start_date, end_date, weekly_schedule]
    min_required_hours = request.POST.get(
        'searchnon_financial_min_required_hours')
    min_required_hours = None if min_required_hours is None else float(
        min_required_hours)
    min_date_overlap = request.POST.get(
        'search_non_financial_min_date_overlap')
    min_date_overlap = None if min_date_overlap is None else float(
        min_date_overlap)
    min_time_overlap = request.POST.get(
        'search_non_financial_min_time_overlap')
    min_time_overlap = None if min_time_overlap is None else float(
        min_time_overlap)
    age = request.POST.get('search_non_financial_age')
    age = None if age is None else int(age)
    gender = request.POST.get('search_non_financial_gender')
    country = request.POST.get('search_non_financial_country')
    province = request.POST.get('search_non_financial_province')
    city = request.POST.get('search_non_financial_city')
    project_queryset = search_non_financial_project(
        project_name, charity_name, benefactor_name, project_state,
        ability_name, tags, schedule, min_required_hours, min_date_overlap,
        min_time_overlap, age, gender, country, province, city)
    return render(
        request, 'projects/non-fin-advanced-search', {
            'result_non_financial_projects': list(project_queryset),
            'ability_types': all_ability_types,
            'ability_tags': all_ability_tags
        })
コード例 #4
0
ファイル: views.py プロジェクト: RuhollahSeka/SAD
def edit_project(request, pk):
    # TODO fix path
    template = loader.get_template('path-to-template')
    if not request.user.is_authenticated:
        context = sign_in_error()
        template = loader.get_template('accounts/error_page.html')
        return HttpResponse(template.render(context, request))
    if request.user.is_active:
        context = error_context_generate(
            'Deactivated Account Error',
            'Your Account Has Been Marked as Deactivated!', '')
        template = loader.get_template('accounts/error_page.html')
        return HttpResponse(template.render(context, request))
    if request.method != 'POST':
        context = error_context_generate('Connection Error',
                                         'Request Method is not POST!', '')
        template = loader.get_template('accounts/error_page.html')
        return HttpResponse(template.render(context, request))
    project = get_object(Project, pk=pk)
    try:
        dic = request.POST
        project.project_name = dic['project_name']
        project.project_state = dic['project_state']
        project.description = dic['description']
        if project.type is 'financial':
            fin_project = get_object(FinancialProject, project=project)
            fin_project.target_money = dic['target_money']
            fin_project.start_date = convert_str_to_date(dic['start_date'])
            fin_project.end_date = convert_str_to_date(dic['end_date'])
            # FIXME should the current_money be editable or not?
            fin_project.current_money = dic['current_money']
            fin_project.save()
        else:
            nf_project = get_object(NonFinancialProject, project=project)
            nf_project.ability_type = dic['ability_type']
            nf_project.city = dic['city']
            nf_project.country = dic['country']
            nf_project.max_age = dic['max_age']
            nf_project.min_age = dic['min_age']
            nf_project.project = dic['province']
            nf_project.required_gender = dic['required_gender']
            date_interval = nf_project.dateinterval
            if check_valid(dic.get('start_date')):
                date_interval.begin_date = convert_str_to_date(
                    dic['start_date'])
            date_interval.end_date = convert_str_to_date(dic['end_date'])
            if check_valid(dic.get('week_schedule')):
                date_interval.to_json(
                    create_query_schedule(dic['week_schedule']))
            nf_project.save()
            date_interval.save()
        project.save()
        Logger.update_project(request.user, None, project)
    except:
        context = {'pk': pk, 'error_message': 'Error in finding the Project!'}
        context = error_context_generate(
            'Unexpected Error',
            'Some of the Required Files Are Damaged or Lost!', '')
        template = loader.get_template('accounts/error_page.html')
        return HttpResponse(template.render(context, request))
    # FIXME maybe all responses should be Redirects / parameters need fixing
    return HttpResponseRedirect([])
コード例 #5
0
ファイル: views.py プロジェクト: RuhollahSeka/SAD
def create_new_project(request):
    if request.method == 'GET':
        projects = request.user.charity.project_set
        return render(request, 'accounts/create-project.html',
                      {'result_set': projects})
    if request.user.is_authenticated:
        if not request.user.is_active:
            context = error_context_generate(
                'Deactivated Account Error',
                'Your Account Has Been Marked as Deactivated!', '')
            template = loader.get_template('accounts/error_page.html')
            return HttpResponse(template.render(context, request))
        project = Project.objects.create()
        project.project_name = request.POST.get('project_name')
        project.charity = request.user
        project.description = request.POST.get('description')
        project.state = 'open'
        project.save()
        if request.POST.get('type') is 'financial':
            project.type = 'financial'
            financial_project = FinancialProject.objects.create()
            if request.POST.get('start_date') is not None:
                financial_project.start_date = datetime.datetime.strptime(
                    request.POST.get('start_date'), '%y-%m-%d')
            else:
                financial_project.start_date = datetime.date.today()
            # FIXME only date not datetime?
            financial_project.end_date = datetime.datetime.strptime(
                request.POST.get('end_date'), '%y-%m-%d')
            financial_project.project = project
            financial_project.target_money = float(
                request.POST.get('target_money'))
            if request.POST.get('current_money') is not None:
                financial_project.current_money = float(
                    request.POST.get('current_money'))
            else:
                financial_project.current_money = 0
            financial_project.save()

        else:
            project.type = 'non-financial'
            non_financial_project = NonFinancialProject.objects.create()
            non_financial_project.project = project
            if check_valid(request.POST.get("ability_type")):
                non_financial_project.ability_type = request.POST.get(
                    "ability_type")
            if check_valid(request.POST.get("min_age")):
                non_financial_project.min_age = int(
                    request.POST.get("min_age"))
            if check_valid(request.POST.get("max_age")):
                non_financial_project.max_age = int(
                    request.POST.get("max_age"))
            non_financial_project.required_gender = request.POST.get(
                "required_gender")

            non_financial_project.country = request.POST.get("country")
            non_financial_project.province = request.POST.get("province")
            non_financial_project.city = request.POST.get("city")
            date_interval = DateInterval.objects.create()
            date_interval.begin_date = convert_str_to_date(
                request.POST.get('start_date'))
            date_interval.end_date = convert_str_to_date(
                request.POST.get('end_date'))
            date_interval.non_financial_project = non_financial_project
            # FIXME check if the input is JSON or not
            date_interval.to_json(
                create_query_schedule(request.POST.get('week_schedule')))
            non_financial_project.save()
        projects = request.user.charity.project_set
        Logger.create_new_project(request.user, None, project)
        # TODO Fix redirect path
        return render(request, 'accounts/create-project.html',
                      {'result_set': projects})
    else:
        # TODO Fix content
        context = sign_in_error()
        template = loader.get_template('accounts/error_page.html')
        return HttpResponse(template.render(context, request))