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})
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 })
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 })
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([])
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))