Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # -*- coding: utf-8 -*-
- from django.shortcuts import render_to_response
- from django.views.decorators.csrf import ensure_csrf_cookie,csrf_protect
- from django.views.decorators.http import require_POST
- from django.http import HttpRequest,HttpResponse,HttpResponseNotFound,HttpResponseRedirect
- from django.core.context_processors import csrf
- from django.template.loader import *
- from django.template import Template,Context
- from django.core.cache import cache
- import urllib2
- import simplejson
- import operator
- OTHER_ERR_CODE = 'OTHER_ERR'
- AUTH_ERR_CODE = 'AUTH_ERR'
- FB_USER_NOT_EXIST_CODE = 'FB_USER_NOT_EXIST_ERROR'
- LOGIN_REQUIRED_CODE = 'LOGIN_MISSING'
- USER_NOT_FOUND_CODE = 'USER_NOT_FOUND'
- RESUME_NOT_FOUND_CODE = 'RESUME_NOT_FOUND'
- ACCESS_ERR_CODE = "ACCESS_ERROR"
- JOB_NOT_FOUND_CODE = 'JOB_NOT_FOUND'
- PROJECT_NOT_FOUND_CODE = 'PROJ_NOT_FOUND'
- CREDIT_NOT_ENOUGH = 'CREDIT_NOT_ENOUGH'
- from models.user_models import *
- from models.auth_models import *
- from models.resume_models import *
- from models.job_models import *
- from models.project_models import *
- from models.transaction_models import *
- from models.file_models import *
- from models.logger import *
- import models.paypal
- import time
- from django import template
- from django.template.defaultfilters import stringfilter
- register = template.Library()
- @register.filter
- @stringfilter
- def trim(value):
- return value.strip()
- class ViewException(Exception):
- def __init__(self, value, code):
- self.value = value
- self.code = code
- def __str__(self):
- return repr(self.value)
- def render_page(request,content_template,context,session=None):
- context['content_template'] = content_template
- if session:
- user = session.get_property('user_model')
- context['user'] = user.export_properties(['login'])
- context.update(csrf(request))
- return render_to_response('page.html', context)
- def json_view(func):
- def wrap(request, *a, **kw):
- response = None
- try:
- response = func(request, *a, **kw)
- assert isinstance(response, dict)
- if 'result' not in response:
- response['result'] = 'ok'
- except KeyboardInterrupt:
- # Allow keyboard interrupts through for debugging.
- raise
- except Exception, e:
- import sys, os,traceback
- exc_type, exc_obj, exc_tb = sys.exc_info()
- traceback = traceback.extract_tb(exc_tb)
- subject = 'JSON view error: %s' % request.path
- try:
- request_repr = repr(request)
- except:
- request_repr = 'Request repr() unavailable'
- import traceback
- # Come what may, we're returning JSON.
- if hasattr(e, 'message'):
- try:
- msg = e.value
- except:
- msg = None
- if not msg:
- try:
- msg = e.message
- except:
- msg = 'unknow exception'
- tb = None
- try:
- code = e.code
- except:
- tb = traceback.extract_tb(exc_tb)
- code = OTHER_ERR_CODE
- else:
- msg = _('Internal error')+': '+str(e)
- response = {'result': 'error',
- 'text': msg,
- 'code': code}
- if tb:
- response['traceback'] = tb
- json_str = json.dumps(response,ensure_ascii=True)
- return HttpResponse(json_str, mimetype='application/json;charset=\'utf-8\'')
- return wrap
- def session_protect(func):
- def wrap(request, *args, **kwargs):
- token = request.COOKIES.get('qrinno_access_token',None)
- if token:
- session = Session.init_session(token)
- else:
- return HttpResponseRedirect('/')
- return func(request, session, *args, **kwargs)
- return wrap
- def session_optional(func):
- def wrap(request, *args, **kwargs):
- session = None
- token = request.COOKIES.get('qrinno_access_token',None)
- if token:
- session = Session.init_session(token)
- return func(request, session, *args, **kwargs)
- return wrap
- def session_employee(func):
- def wrap(request, session, *args, **kwargs):
- user = session.get_property('user_model')
- if not user.get_property('class') in ['UserEmployee','UserAdmin']:
- return HttpResponseRedirect('/')
- return func(request, session, *args, **kwargs)
- return wrap
- def session_employer(func):
- def wrap(request, session, *args, **kwargs):
- user = session.get_property('user_model')
- if not user.get_property('class') in ['UserEmployer','UserAdmin']:
- return HttpResponseRedirect('/')
- if not user.get_property('active'):
- return HttpResponseRedirect('/employer/inactive/')
- return func(request, session, *args, **kwargs)
- return wrap
- def session_admin(func):
- def wrap(request, session, *args, **kwargs):
- user = session.get_property('user_model')
- if not user.get_property('class') == 'UserAdmin':
- return HttpResponseRedirect('/')
- return func(request, session, *args, **kwargs)
- return wrap
- @ensure_csrf_cookie
- @session_optional
- def index(request,session):
- c = {}
- c['INDUSTRIES'] = sorted(INDUSTRIES.items(),key=operator.itemgetter(1))
- c['EXP_LEVELS'] = sorted(EXP_LEVELS.items(),key=operator.itemgetter(1))
- c['LOCATIONS'] = sorted(LOCATIONS.items(),key=operator.itemgetter(0), reverse=True)
- projects,count = Project.retrieve_all(1,6)
- jobs,count = Job.retrieve_all(1,6)
- featued_industries_json = []
- for industry in FEATURED_INDUSTRIES:
- featued_industries_json.append((industry,INDUSTRIES[industry]))
- c['FEATURED_INDUSTRIES'] = featued_industries_json[:12]
- projects_json = []
- for project in projects:
- creator_login = project.get_property('creator_login')
- employer = UserEmployer.init(creator_login)
- project_json = project.properties
- profile_pic = Logo.retrieve_by_creator(employer.export_property('login'))
- if profile_pic:
- project_json['logo'] = '/static'+profile_pic.get('public_url')
- project_json['employer'] = employer.properties
- project_json['id'] = project.export_property('_id')
- projects_json.append(project_json)
- c['projects'] = projects_json
- jobs_json = []
- for job in jobs:
- creator_login = job.get_property('creator_login')
- employer = UserEmployer.init(creator_login)
- job_json = job.properties
- profile_pic = Logo.retrieve_by_creator(employer.export_property('login'))
- if profile_pic:
- job_json['logo'] = '/static'+profile_pic.get('public_url')
- job_json['employer'] = employer.properties
- job_json['id'] = job.export_property('_id')
- jobs_json.append(job_json)
- c['jobs'] = jobs_json
- employers_json = []
- for employer_id in FEATURED_EMPLOYERS:
- employer = UserEmployerById.init(employer_id)
- if employer:
- employer_json = employer.properties
- employer_json['id'] = employer.properties['_id']
- profile_pic = Logo.retrieve_by_creator(employer.export_property('login'))
- if profile_pic:
- employer_json['logo'] = '/static'+profile_pic.get('public_url')
- employers_json.append(employer_json)
- c['employers'] = employers_json[:5]
- c['FEATURED_EMPLOYERS'] = FEATURED_EMPLOYERS
- news_feed = urllib2.urlopen("http://cms1.qrinno.com/?feed=json")
- news_feed_json = json.loads(news_feed.read())
- featured_news = []
- ads = []
- events = []
- try:
- for news in news_feed_json:
- categories = news.get('categories',[])
- featured = False
- ad = False
- event = False
- for cat in categories:
- if cat == 'Featured':
- featured = True
- if cat == "Sidebar":
- ad = True
- if cat == 'Events':
- event = True
- try:
- news['date'] = news['date'].split(',')[0]
- except:
- pass
- if featured:
- featured_news.append(news)
- if ad:
- ads.append(news)
- if event:
- events.append(news)
- except:
- pass
- c['featured_news'] = featured_news[:3]
- c['ads'] = ads[:6]
- c['events'] = events[:4]
- return render_page(request,'modules/home.html',c,session)
- @ensure_csrf_cookie
- def employer_inactive(request):
- c = {}
- return render_page(request,'modules/employer/inactive.html',c)
- @ensure_csrf_cookie
- @session_protect
- @session_employee
- def employee(request,session):
- c = {}
- user = session.get_property('user_model')
- login = user.export_property('login')
- resume = Resume.init(Base.md5(login))
- if resume:
- return HttpResponseRedirect('/employee/dashboard/')
- return HttpResponseRedirect('/employee/create_profile/')
- @ensure_csrf_cookie
- @session_protect
- @session_employee
- def employee_create_profile(request,session):
- c = {}
- c['EMPLOYMENT_TYPES'] = sorted(EMPLOYMENT_TYPES.items(),key=operator.itemgetter(0))
- c['INDUSTRIES'] = sorted(INDUSTRIES.items(),key=operator.itemgetter(1))
- c['FUNCTIONS'] = sorted(FUNCTIONS.items(),key=operator.itemgetter(1))
- c['EXP_LEVELS'] = sorted(EXP_LEVELS.items(),key=operator.itemgetter(1))
- c['AVAILABILITIES'] = sorted(AVAILABILITIES.items(),key=operator.itemgetter(0))
- c['PR_STATUS'] = sorted(PR_STATUS.items(),key=operator.itemgetter(0))
- c['COUNTRIES'] = sorted(COUNTRIES.items(),key=operator.itemgetter(1))
- user = session.get_property('user_model')
- login = user.export_property('login')
- resume = Resume.init(Base.md5(login))
- return render_page(request,'modules/employee/create_profile.html',c,session)
- @ensure_csrf_cookie
- @session_protect
- @session_employee
- def employee_dashboard(request,session):
- c = {}
- user = session.get_property('user_model')
- login = user.export_property('login')
- resume = Resume.init(Base.md5(login))
- if not resume:
- return HttpResponseRedirect('/employee/create_profile/')
- profile_pic = ProfilePic.retrieve_by_creator(login)
- resume_doc = ResumeDoc.retrieve_by_creator(login)
- c['login'] = login
- c['resume'] = resume.properties
- if profile_pic:
- c['profile'] = '/static'+profile_pic.get('public_url')
- if resume_doc:
- c['resume_doc'] = '/static'+resume_doc.get('public_url')
- if resume.get_property('complete',False):
- c['completion'] = 100
- else:
- c['completion'] = 50
- page_number = 1
- page_size = 2
- applications = Application.retrieve_by_creator(user.get_property('login'))
- bids = Bid.retrieve_by_creator(user.get_property('login'))
- applications_json = []
- for application in applications:
- creator_login = application.get_property('creator_login')
- job_id = application.get_property('job_id')
- application_json = application.properties
- applications_json.append(application_json)
- job = Job.init(job_id)
- if job:
- application_json['job'] = job.properties
- for bid in bids:
- creator_login = bid.get_property('creator_login')
- project_id = bid.get_property('project_id')
- application_json = bid.properties
- applications_json.append(application_json)
- project = Project.init(project_id)
- if project:
- application_json['project'] = project.properties
- def sort_func(x):
- if isinstance(x, dict):
- if x.get('timestamp'):
- return x['timestamp']
- else:
- return 0
- else:
- return x
- applications_json = sorted(applications_json,key=sort_func)[(page_number-1)*page_size:page_number*page_size]
- c['history'] = applications_json
- job_saves = JobSave.retrieve_by_creator(user.get_property('login'))
- project_saves = ProjectSave.retrieve_by_creator(user.get_property('login'))
- saves_json = []
- for job_save in job_saves:
- creator_login = job_save.get_property('creator_login')
- job_id = job_save.get_property('job_id')
- save_json = job_save.properties
- job = Job.init(job_id)
- if job:
- save_json['job'] = job.properties
- saves_json.append(save_json)
- for project_save in project_saves:
- creator_login = project_save.get_property('creator_login')
- project_id = project_save.get_property('project_id')
- save_json = project_save.properties
- project = Project.init(project_id)
- if project:
- save_json['project'] = project.properties
- saves_json.append(save_json)
- saves_json = sorted(saves_json,key=sort_func)[(page_number-1)*page_size:page_number*page_size]
- c['saves'] = saves_json
- keywords = ','.join(resume.get_property('skills',[]))
- recommended_jobs,count = Job.retrieve_all(1,3,free_text=keywords)
- recommended_projects,count = Project.retrieve_all(1,3,free_text=keywords)
- recommended_json = []
- for job in recommended_jobs:
- recommended_json.append({'job':job.properties,'job_id':job.export_property('_id'),'timestamp':job.export_property('timestamp')})
- for project in recommended_projects:
- recommended_json.append({'project':project.properties,'project_id':project.export_property('_id'),'timestamp':project.export_property('timestamp')})
- recommended_json = sorted(recommended_json,key=sort_func)
- c['recommended'] = recommended_json
- return render_page(request,'modules/employee/dashboard.html',c,session)
- @ensure_csrf_cookie
- @session_protect
- @session_employee
- def employee_resume(request,session):
- c = {}
- user = session.get_property('user_model')
- login = user.export_property('login')
- resume = Resume.init(Base.md5(login))
- if not resume:
- return HttpResponseRedirect('/employee/create_profile/')
- c['EMPLOYMENT_TYPES'] = sorted(EMPLOYMENT_TYPES.items(),key=operator.itemgetter(0))
- c['AVAILABILITIES'] = sorted(AVAILABILITIES.items(),key=operator.itemgetter(0))
- c['INDUSTRIES'] = sorted(INDUSTRIES.items(),key=operator.itemgetter(1))
- c['FUNCTIONS'] = sorted(FUNCTIONS.items(),key=operator.itemgetter(1))
- c['EXP_LEVELS'] = sorted(EXP_LEVELS.items(),key=operator.itemgetter(1))
- c['PR_STATUS'] = sorted(PR_STATUS.items(),key=operator.itemgetter(0))
- c['COUNTRIES'] = sorted(COUNTRIES.items(),key=operator.itemgetter(1))
- return render_page(request,'modules/employee/resume.html',c,session)
- @ensure_csrf_cookie
- @session_protect
- @session_admin
- def admin_employee_resume(request,session):
- c = {}
- user = session.get_property('user_model')
- login = request.GET.get('login')
- resume = Resume.init(Base.md5(login))
- c['login'] = login
- c['EMPLOYMENT_TYPES'] = sorted(EMPLOYMENT_TYPES.items(),key=operator.itemgetter(0))
- c['AVAILABILITIES'] = sorted(AVAILABILITIES.items(),key=operator.itemgetter(0))
- c['INDUSTRIES'] = sorted(INDUSTRIES.items(),key=operator.itemgetter(1))
- c['FUNCTIONS'] = sorted(FUNCTIONS.items(),key=operator.itemgetter(1))
- c['EXP_LEVELS'] = sorted(EXP_LEVELS.items(),key=operator.itemgetter(1))
- c['PR_STATUS'] = sorted(PR_STATUS.items(),key=operator.itemgetter(0))
- c['COUNTRIES'] = sorted(COUNTRIES.items(),key=operator.itemgetter(1))
- c['login'] = login
- return render_page(request,'modules/admin/resume.html',c,session)
- @ensure_csrf_cookie
- @session_protect
- @session_admin
- def admin_job_approvals(request,session):
- c = {}
- return render_page(request,'modules/admin/job_approvals.html',c,session)
- @ensure_csrf_cookie
- @session_protect
- @session_admin
- def admin_project_approvals(request,session):
- c = {}
- return render_page(request,'modules/admin/project_approvals.html',c,session)
- @ensure_csrf_cookie
- @session_protect
- @session_employee
- def employee_history(request,session):
- c = {}
- return render_page(request,'modules/employee/history.html',c,session)
- @ensure_csrf_cookie
- @session_protect
- @session_employee
- def employee_save(request,session):
- c = {}
- return render_page(request,'modules/employee/save.html',c,session)
- @ensure_csrf_cookie
- @session_protect
- @session_employee
- def employee_settings(request,session):
- c = {}
- user = session.get_property('user_model')
- login = user.export_property('login')
- resume = Resume.init(Base.md5(login))
- if resume:
- c['resume'] = resume.properties
- else:
- c['resume'] = None
- user = UserEmployee.init(login)
- c['fb_id'] = user.get_property('fb_id')
- return render_page(request,'modules/employee/settings.html',c,session)
- @ensure_csrf_cookie
- @session_protect
- @session_employer
- def employer(request,session):
- c = {}
- user = session.get_property('user_model')
- login = user.get_property('login')
- employer = UserEmployer.init(login)
- completeness = get_employer_profile_completeness(employer.properties)
- if completeness <= 60:
- return HttpResponseRedirect('/employer/create_profile')
- return HttpResponseRedirect('/employer/dashboard/')
- @ensure_csrf_cookie
- @session_protect
- @session_admin
- def admin(request,session):
- c = {}
- user = session.get_property('user_model')
- login = user.get_property('login')
- admin = UserAdmin.init(login)
- return render_page(request,'modules/admin/dashboard.html',c,session)
- @ensure_csrf_cookie
- @session_protect
- @session_admin
- def admin_employers(request,session):
- c = {}
- user = session.get_property('user_model')
- login = user.get_property('login')
- admin = UserAdmin.init(login)
- return render_page(request,'modules/admin/employers.html',c,session)
- @ensure_csrf_cookie
- @session_protect
- @session_admin
- def admin_employees(request,session):
- c = {}
- user = session.get_property('user_model')
- login = user.get_property('login')
- admin = UserAdmin.init(login)
- return render_page(request,'modules/admin/employees.html',c,session)
- @csrf_protect
- @require_POST
- @session_protect
- @session_admin
- @json_view
- def ajax_list_inactive_employers(request,session):
- c = {}
- user = session.get_property('user_model')
- login = user.export_property('login')
- employers = UserEmployer.retrieve_all(query={'active':False,'class':'UserEmployer'})
- employer_json = []
- for employer in employers:
- employer_json.append(employer.properties)
- return_dict = {'login':user.export_property('login'),'employers':employer_json}
- return return_dict
- @csrf_protect
- @require_POST
- @session_protect
- @session_admin
- @json_view
- def ajax_approve_employers(request,session):
- c = {}
- user = session.get_property('user_model')
- login = request.POST.get('login')
- employer = UserEmployer.init(login)
- if employer:
- employer.set_property(active=True)
- employer.sync_to_persistence(force_update=True)
- from django.template import Context,Template
- t = Template(EMAIL_HEADER+"Dear {{company}}, <br/><br/> Your account has been approved.Feel free to contact us if you have any questions."+EMAIL_FOOTER)
- c = Context({"company":employer.export_property('company')})
- html = t.render(c)
- subject = "Your Account has been approved"
- mc_sendmail(login, subject, html,['employer-approval'])
- if employer.get_property('email'):
- mc_sendmail(employer.export_property('email'), subject, html,['employer-approval'])
- return_dict = {'employer':employer.properties}
- return return_dict
- def forgot(request):
- c = {}
- return render_page(request,'modules/forgot_password.html',c)
- def forgot_generate(request):
- c = {}
- login = request.POST.get('login')
- if login:
- token = SessionForgotPassword(login=login)
- token.gen_passcode()
- token.sync_to_cache()
- token.mail(login)
- return render_page(request,'modules/forgot_password_generation.html',c)
- def forgot_password_passcode(request):
- login = request.GET.get('login','')
- passcode = request.GET.get('passcode','')
- c = {}
- c['login'] = login
- c['passcode'] = passcode
- return render_page(request,'modules/forgot_password_reset.html',c)
- def forgot_password_reset(request):
- login = request.POST.get('login')
- password = request.POST.get('password','')
- passcode = request.POST.get('passcode')
- session = SessionForgotPassword.init_session(login)
- message = 'Password is already reset.'
- if not session or session and not session.authenicate(passcode):
- message = "Error, passcode expired or not valid."
- c = {}
- c['message'] = message
- return render_page(request,'modules/forgot_password_reset_done.html',c)
- if len(password) > 4:
- password_md5 = Base.md5(password)
- user = User.init(login)
- user.set_property(password_md5=password_md5)
- user.sync_to_persistence(force_update=True)
- #message = "Error, please try to generate another request from the app."
- else:
- message = "Error, password must be at least 4 charaters long."
- c = {}
- c['message'] = message
- return render_page(request,'modules/forgot_password_reset_done.html',c)
- @csrf_protect
- @require_POST
- @session_protect
- @session_admin
- @json_view
- def ajax_reject_employers(request,session):
- c = {}
- user = session.get_property('user_model')
- login = request.POST.get('login')
- employer = UserEmployer.init(login)
- if employer:
- UserEmployer.remove(login)
- from django.template import Context,Template
- t = Template(EMAIL_HEADER+"Dear {{company}}, <br/><br/> Your account has been rejected.Feel free to contact us if you have any questions."+EMAIL_FOOTER)
- c = Context({"company":employer.export_property('company')})
- html = t.render(c)
- subject = "Your Account has been rejected"
- mc_sendmail(login, subject, html,['employer-rejection'])
- if employer.get_property('email'):
- mc_sendmail(employer.export_property('email'), subject, html,['employer-rejection'])
- return_dict = {'employer':employer.properties}
- return return_dict
- def get_employer_profile_completeness(properties):
- completeness = 0
- if properties.get('writeup'):
- completeness = completeness + 10
- if properties.get('industry'):
- completeness = completeness + 10
- if properties.get('size'):
- completeness = completeness + 10
- if properties.get('contact_person'):
- completeness = completeness + 10
- if properties.get('email'):
- completeness = completeness + 10
- if properties.get('tel'):
- completeness = completeness + 10
- profile_pic = Logo.retrieve_by_creator(properties.get('login'))
- if profile_pic:
- completeness = completeness + 20
- if properties.get('address'):
- completeness = completeness + 10
- if properties.get('website'):
- completeness = completeness + 10
- return completeness
- @ensure_csrf_cookie
- @session_protect
- @session_employer
- def employer_dashboard(request,session):
- c = {}
- user = session.get_property('user_model')
- login = user.get_property('login')
- employer = UserEmployer.init(login)
- profile_pic = Logo.retrieve_by_creator(login)
- c['employer'] = employer.properties
- completeness = get_employer_profile_completeness(employer.properties)
- if completeness < 60:
- return HttpResponseRedirect('/employer/create_profile')
- c['completion'] = completeness
- c['login'] = login
- if profile_pic:
- c['logo'] = '/static'+profile_pic.get('public_url')
- page_number = 1
- page_size = 3
- jobs, count = Job.retrieve_by_creator(user.get_property('login'),page_number,page_size)
- projects, count = Project.retrieve_by_creator(user.get_property('login'),page_number,page_size)
- listing_json = []
- for job in jobs:
- job_json = job.properties;
- job_json['job_id'] = job.get_property('_id')
- listing_json.append({'job':job_json})
- for project in projects:
- project_json = project.properties
- project_json['project_id'] = project.get_property('_id')
- listing_json.append({'project':project_json})
- c['listings'] = listing_json
- return render_page(request,'modules/employer/dashboard.html',c,session)
- @ensure_csrf_cookie
- @session_protect
- @session_employer
- def employer_create_profile(request,session):
- c = {}
- c['INDUSTRIES'] = sorted(INDUSTRIES.items(),key=operator.itemgetter(1))
- c['COMPANY_SIZES'] = sorted(COMPANY_SIZES.items(),key=operator.itemgetter(0))
- user = session.get_property('user_model')
- user = session.get_property('user_model')
- login = user.export_property('login')
- return render_page(request,'modules/employer/create_profile.html',c,session)
- @ensure_csrf_cookie
- @session_protect
- @session_employer
- def employer_profile(request,session):
- c = {}
- c['INDUSTRIES'] = sorted(INDUSTRIES.items(),key=operator.itemgetter(1))
- c['COMPANY_SIZES'] = sorted(COMPANY_SIZES.items(),key=operator.itemgetter(0))
- user = session.get_property('user_model')
- login = user.export_property('login')
- employer = UserEmployer.init(login)
- completeness = get_employer_profile_completeness(employer.properties)
- if completeness < 60:
- return HttpResponseRedirect('/employer/create_profile')
- return render_page(request,'modules/employer/profile.html',c,session)
- @ensure_csrf_cookie
- @session_protect
- @session_admin
- def admin_employer_profile(request,session):
- c = {}
- c['INDUSTRIES'] = sorted(INDUSTRIES.items(),key=operator.itemgetter(1))
- c['COMPANY_SIZES'] = sorted(COMPANY_SIZES.items(),key=operator.itemgetter(0))
- user = session.get_property('user_model')
- login = request.GET.get('login')
- employer = UserEmployer.init(login)
- c['login'] = login
- return render_page(request,'modules/admin/employer_profile.html',c,session)
- @ensure_csrf_cookie
- @session_protect
- @session_employer
- def employer_job(request,session):
- c = {}
- c['INDUSTRIES'] = sorted(INDUSTRIES.items(),key=operator.itemgetter(1))
- c['FUNCTIONS'] = sorted(FUNCTIONS.items(),key=operator.itemgetter(1))
- c['EXP_LEVELS'] = sorted(EXP_LEVELS.items(),key=operator.itemgetter(1))
- c['SALARY_RANGES'] = sorted(SALARY_RANGES.items(),key=operator.itemgetter(0))
- c['VACANCIES'] = sorted(VACANCIES.items(),key=operator.itemgetter(0))
- c['EMPLOYMENT_TYPES'] = sorted(EMPLOYMENT_TYPES.items(),key=operator.itemgetter(0))
- c['LOCATIONS'] = sorted(LOCATIONS.items(),key=operator.itemgetter(0), reverse=True)
- user = session.get_property('user_model')
- login = user.export_property('login')
- return render_page(request,'modules/employer/create_job.html',c,session)
- @ensure_csrf_cookie
- @session_protect
- @session_employer
- def employer_project(request,session):
- c = {}
- c['INDUSTRIES'] = sorted(INDUSTRIES.items(),key=operator.itemgetter(1))
- user = session.get_property('user_model')
- login = user.export_property('login')
- return render_page(request,'modules/employer/create_project.html',c,session)
- @ensure_csrf_cookie
- @session_protect
- @session_employer
- def employer_search_resume(request,session):
- c = {}
- c['AVAILABILITIES'] = sorted(AVAILABILITIES.items(),key=operator.itemgetter(0))
- c['INDUSTRIES'] = sorted(INDUSTRIES.items(),key=operator.itemgetter(1))
- c['FUNCTIONS'] = sorted(FUNCTIONS.items(),key=operator.itemgetter(1))
- c['EXP_LEVELS'] = sorted(EXP_LEVELS.items(),key=operator.itemgetter(1))
- c['EMPLOYMENT_TYPES'] = sorted(EMPLOYMENT_TYPES.items(),key=operator.itemgetter(0))
- c['COUNTRIES'] = sorted(COUNTRIES.items(),key=operator.itemgetter(1))
- user = session.get_property('user_model')
- login = user.export_property('login')
- return render_page(request,'modules/employer/search_resume.html',c,session)
- @ensure_csrf_cookie
- @session_protect
- @session_employer
- def employer_credit(request,session):
- c = {}
- user = session.get_property('user_model')
- login = user.export_property('login')
- c['PACKAGES'] = sorted(PACKAGES.items(),key=operator.itemgetter(0))
- c['PAYPAL_URL'] = models.paypal.GW_REDIRECT
- complete = request.GET.get('complete')
- credit_listings_added = request.GET.get('listings')
- credit_resumes_added = request.GET.get('resumes')
- if complete:
- c['complete'] = True
- if credit_listings_added:
- c['credit_listings_added'] = credit_listings_added
- if credit_resumes_added:
- c['credit_resumes_added'] = credit_resumes_added
- if user:
- c['credit_listings'] = user.get_property('credit_listings',0)
- c['credit_resumes'] = user.get_property('credit_resumes',0)
- return render_page(request,'modules/employer/credit.html',c,session)
- @ensure_csrf_cookie
- @session_protect
- @session_employer
- def employer_resume(request,session,id):
- job_id = request.GET.get('job_id')
- project_id = request.GET.get('project_id')
- c = {}
- c['AVAILABILITIES'] = sorted(AVAILABILITIES.items(),key=operator.itemgetter(0))
- c['INDUSTRIES'] = sorted(INDUSTRIES.items(),key=operator.itemgetter(1))
- c['FUNCTIONS'] = sorted(FUNCTIONS.items(),key=operator.itemgetter(1))
- c['EXP_LEVELS'] = sorted(EXP_LEVELS.items(),key=operator.itemgetter(1))
- c['EMPLOYMENT_TYPES'] = sorted(EMPLOYMENT_TYPES.items(),key=operator.itemgetter(0))
- c['PR_STATUS'] = sorted(PR_STATUS.items(),key=operator.itemgetter(0))
- c['COUNTRIES'] = sorted(COUNTRIES.items(),key=operator.itemgetter(1))
- c['id'] = id
- user = session.get_property('user_model')
- login = user.export_property('login')
- purchase = Purchase.retrieve_by_resume_and_creator(id,login)
- if purchase:
- c['purchased'] = True
- applied = False
- resume = Resume.init(id)
- if job_id:
- applications = Application.retrieve_by_job(job_id)
- for application in applications:
- if application.get_property('creator_login') == resume.get_property('login'):
- applied = True
- break
- if applied:
- c['applied'] = True
- if job_id:
- c['job_id'] = job_id
- if project_id:
- c['project_id'] = project_id
- return render_page(request,'modules/employer/resume.html',c,session)
- @ensure_csrf_cookie
- @session_protect
- @session_employer
- def employer_applications(request,session):
- c = {}
- c['EMPLOYMENT_TYPES'] = sorted(EMPLOYMENT_TYPES.items(),key=operator.itemgetter(0))
- c['AVAILABILITIES'] = sorted(AVAILABILITIES.items(),key=operator.itemgetter(0))
- c['INDUSTRIES'] = sorted(INDUSTRIES.items(),key=operator.itemgetter(1))
- c['FUNCTIONS'] = sorted(FUNCTIONS.items(),key=operator.itemgetter(1))
- c['EXP_LEVELS'] = sorted(EXP_LEVELS.items(),key=operator.itemgetter(1))
- c['SALARY_RANGES'] = sorted(SALARY_RANGES.items(),key=operator.itemgetter(0))
- c['VACANCIES'] = sorted(VACANCIES.items(),key=operator.itemgetter(0))
- c['EMPLOYMENT_TYPES'] = sorted(EMPLOYMENT_TYPES.items(),key=operator.itemgetter(0))
- c['LOCATIONS'] = sorted(LOCATIONS.items(),key=operator.itemgetter(0), reverse=True)
- c['PR_STATUS'] = sorted(PR_STATUS.items(),key=operator.itemgetter(0))
- c['COUNTRIES'] = sorted(COUNTRIES.items(),key=operator.itemgetter(1))
- user = session.get_property('user_model')
- login = user.export_property('login')
- filter = request.GET.get('filter')
- if filter:
- c['filter'] = filter
- return render_page(request,'modules/employer/applications.html',c,session)
- @ensure_csrf_cookie
- @session_protect
- @session_employer
- def employer_listings(request,session):
- c = {}
- c['EMPLOYMENT_TYPES'] = sorted(EMPLOYMENT_TYPES.items(),key=operator.itemgetter(0))
- c['AVAILABILITIES'] = sorted(AVAILABILITIES.items(),key=operator.itemgetter(0))
- c['INDUSTRIES'] = sorted(INDUSTRIES.items(),key=operator.itemgetter(1))
- c['FUNCTIONS'] = sorted(FUNCTIONS.items(),key=operator.itemgetter(1))
- c['EXP_LEVELS'] = sorted(EXP_LEVELS.items(),key=operator.itemgetter(1))
- c['SALARY_RANGES'] = sorted(SALARY_RANGES.items(),key=operator.itemgetter(0))
- c['VACANCIES'] = sorted(VACANCIES.items(),key=operator.itemgetter(0))
- c['EMPLOYMENT_TYPES'] = sorted(EMPLOYMENT_TYPES.items(),key=operator.itemgetter(0))
- c['LOCATIONS'] = sorted(LOCATIONS.items(),key=operator.itemgetter(0), reverse=True)
- c['PR_STATUS'] = sorted(PR_STATUS.items(),key=operator.itemgetter(0))
- c['COUNTRIES'] = sorted(COUNTRIES.items(),key=operator.itemgetter(1))
- user = session.get_property('user_model')
- login = user.export_property('login')
- filter = request.GET.get('filter')
- if filter:
- c['filter'] = filter
- return render_page(request,'modules/employer/listings.html',c,session)
- @ensure_csrf_cookie
- @session_optional
- def public_search_job(request,session):
- c = {}
- c['search_keywords'] = request.GET.get('searchKeywords','')
- c['search_industry'] = request.GET.get('searchIndustry')
- c['search_experience'] = request.GET.get('searchExperience')
- c['search_location'] = request.GET.get('searchLocation')
- c['INDUSTRIES'] = sorted(INDUSTRIES.items(),key=operator.itemgetter(1))
- c['EXP_LEVELS'] = sorted(EXP_LEVELS.items(),key=operator.itemgetter(0))
- c['SALARY_RANGES'] = sorted(SALARY_RANGES.items(),key=operator.itemgetter(0))
- c['LOCATIONS'] = sorted(LOCATIONS.items(),key=operator.itemgetter(0), reverse=True)
- if session:
- user = session.get_property('user_model')
- if user:
- login = user.export_property('login')
- return render_page(request,'modules/search_job.html',c,session)
- @ensure_csrf_cookie
- @session_protect
- @session_employer
- def employer_settings(request,session):
- c = {}
- user = session.get_property('user_model')
- login = user.export_property('login')
- resume = Resume.init(Base.md5(login))
- if resume:
- c['resume'] = resume.properties
- else:
- c['resume'] = None
- user = UserEmployee.init(login)
- c['fb_id'] = user.get_property('fb_id')
- return render_page(request,'modules/employer/settings.html',c,session)
- @ensure_csrf_cookie
- @session_optional
- def public_job(request,session,id):
- c = {}
- if session:
- user = session.get_property('user_model')
- if user:
- login = user.export_property('login')
- c['role'] = user.export_property('class')
- application = Application.retrieve_by_job_and_creator(id,login)
- if application:
- c['applied'] = True
- save = JobSave.retrieve_by_job_and_creator(id,login)
- if save:
- c['saved'] = True
- job = Job.init(id)
- creator_login = job.get_property('creator_login')
- employer = UserEmployer.init(creator_login)
- if employer:
- c['employer'] = employer.properties
- c['employer']['id'] = employer.properties['_id']
- if c['employer'].get('industry'):
- c['employer']['industry'] = INDUSTRIES.get(c['employer']['industry'])
- if c['employer'].get('size'):
- c['employer']['size'] = COMPANY_SIZES.get(c['employer']['size'])
- profile_pic = Logo.retrieve_by_creator(employer.export_property('login'))
- if profile_pic:
- c['logo'] = '/static'+profile_pic.get('public_url')
- if job:
- c['job'] = job.properties
- c['job']['id'] = job.properties['_id']
- if c['job'].get('salary_from'):
- c['job']['salary_from'] = SALARY_RANGES.get(c['job']['salary_from'])
- if c['job'].get('salary_to'):
- c['job']['salary_to'] = SALARY_RANGES.get(c['job']['salary_to'])
- return render_page(request,'modules/job.html',c,session)
- @ensure_csrf_cookie
- @session_optional
- def public_company(request,session,id):
- c = {}
- if session:
- user = session.get_property('user_model')
- if user:
- login = user.export_property('login')
- c['role'] = user.export_property('class')
- application = Application.retrieve_by_job_and_creator(id,login)
- if application:
- c['applied'] = True
- save = JobSave.retrieve_by_job_and_creator(id,login)
- if save:
- c['saved'] = True
- employer = UserEmployerById.init(id)
- if employer:
- c['employer'] = employer.properties
- c['employer']['id'] = employer.properties['_id']
- if c['employer'].get('industry'):
- c['employer']['industry'] = INDUSTRIES.get(c['employer']['industry'])
- if c['employer'].get('size'):
- c['employer']['size'] = COMPANY_SIZES.get(c['employer']['size'])
- profile_pic = Logo.retrieve_by_creator(employer.export_property('login'))
- if profile_pic:
- c['logo'] = '/static'+profile_pic.get('public_url')
- return render_page(request,'modules/company.html',c,session)
- @ensure_csrf_cookie
- @session_optional
- def public_search_project(request,session):
- c = {}
- c['INDUSTRIES'] = sorted(INDUSTRIES.items(),key=operator.itemgetter(1))
- c['LOCATIONS'] = sorted(LOCATIONS.items(),key=operator.itemgetter(0), reverse=True)
- if session:
- user = session.get_property('user_model')
- if user:
- login = user.export_property('login')
- return render_page(request,'modules/search_project.html',c,session)
- @ensure_csrf_cookie
- @session_optional
- def public_project(request,session,id):
- c = {}
- if session:
- user = session.get_property('user_model')
- if user:
- login = user.export_property('login')
- c['role'] = user.export_property('class')
- application = Bid.retrieve_by_project_and_creator(id,login)
- if application:
- c['applied'] = True
- save = ProjectSave.retrieve_by_project_and_creator(id,login)
- if save:
- c['saved'] = True
- project = Project.init(id)
- creator_login = project.get_property('creator_login')
- employer = UserEmployer.init(creator_login)
- if employer:
- c['employer'] = employer.properties
- c['employer']['id'] = employer.properties['_id']
- if c['employer'].get('industry'):
- c['employer']['industry'] = INDUSTRIES.get(c['employer']['industry'])
- if c['employer'].get('size'):
- c['employer']['size'] = COMPANY_SIZES.get(c['employer']['size'])
- profile_pic = Logo.retrieve_by_creator(employer.export_property('login'))
- if profile_pic:
- c['logo'] = '/static'+profile_pic.get('public_url')
- if employer:
- c['employer'] = employer.properties
- if project:
- c['project'] = project.properties
- c['project']['id'] = project.properties['_id']
- return render_page(request,'modules/project.html',c,session)
- @csrf_protect
- @require_POST
- @json_view
- def ajax_signup(request):
- c = {}
- email = request.POST.get('email')
- password_md5 = request.POST.get('password')
- fb_id = request.POST.get('fb_id')
- fb_profile_pic_url = request.POST.get('fb_profile_pic_url')
- company = request.POST.get('company')
- if company:
- user = UserEmployer(login=email,password_md5=password_md5,company=company,active=False)
- else:
- user = UserEmployee(login=email,password_md5=password_md5,fb_id=fb_id,fb_profile_pic_url=fb_profile_pic_url)
- user.sync_to_persistence()
- from django.template import Context,Template
- if company:
- t = Template(EMAIL_HEADER+"Dear employer, <br/><br/>Thanks for signing up at http://qrinno.com. Your account is currently under approval. You will be notified again."+EMAIL_FOOTER)
- else:
- t = Template(EMAIL_HEADER+"Dear employee, <br/><br/>Thanks for signing up at http://qrinno.com. Your account has been activated."+EMAIL_FOOTER)
- c = Context({"host":HOST_NAME,"login":email})
- html = t.render(c)
- mc_sendmail(email,"Thanks for signing up at Qrinno.com", html, ['sign-ups'])
- if company:
- t = Template(EMAIL_HEADER+"Dear admin, <br/><br/>A new employer <b>{{employer}}</b> is waiting for approval. You may login {{host}} to approve."+EMAIL_FOOTER)
- c = Context({"host":HOST_NAME,"employer":company})
- html = t.render(c)
- mc_sendmail(ADMIN_EMAIL,"A new employer is waiting for approval", html, ['approvals'])
- if user.get_property('email'):
- mc_sendmail(user.export_property('email'), "Thanks for signing up at Qrinno.com", html,['sign-ups'])
- return {'login':user.export_property('login'),'id':user.export_property('_id'),'company':company}
- @csrf_protect
- @require_POST
- @json_view
- def ajax_signin(request):
- c = {}
- login = request.POST.get('email')
- password_md5 = request.POST.get('password')
- fb_id = request.POST.get('fb_id')
- fb_access_token = request.GET.get('fb_access_token')
- output = {}
- user = None
- if fb_id and not password_md5:
- user = UserEmployee.init_from_fb_id(fb_id)
- if not user:
- raise ViewException('No such fb user in qrinno',FB_USER_NOT_EXIST_CODE)
- session = Session(login=user.export_property('login'),user_model=user,fb_id=fb_id,fb_access_token=fb_access_token)
- #try:
- auth = session.authenicate_fb()
- output['access_token'] = auth[0]
- output['expiry'] = auth[1]
- output['method'] = 'fb'
- #except:
- #raise ViewException('Authnication error',AUTH_ERR_CODE)
- if password_md5:
- if login == 'admin':
- user = UserAdmin()
- else:
- user = User.init(login)
- session = Session(login=login,user_model=user,password_md5=password_md5)
- try:
- auth = session.authenicate()
- output['access_token'] = auth[0]
- output['expiry'] = auth[1]
- output['method'] = 'password'
- except:
- raise ViewException('Authnication error',AUTH_ERR_CODE)
- if not user:
- raise ViewException('Authnication error',AUTH_ERR_CODE)
- output['user'] = user.export_properties(['_id','login','profile_fb_pic_url','class'],key_mapping={'_id':'id'})
- session.sync_to_cache()
- return output
- @csrf_protect
- @require_POST
- @session_protect
- @session_employee
- @json_view
- def ajax_upsert_resume(request,session):
- c = {}
- user = session.get_property('user_model')
- work = request.POST.get('work')
- edu = request.POST.get('edu')
- skills = request.POST.get('skills')
- particulars = request.POST.get('particulars')
- login = user.export_property('login')
- writeup = request.POST.get('writeup')
- complete = request.POST.get('complete')
- if user.get_property('class') == 'UserAdmin':
- login = request.POST.get('login')
- if work:
- work_json = json.loads(work)
- else:
- work_json = None
- if edu:
- edu_json = json.loads(edu)
- else:
- edu_json = None
- if skills:
- skills_json = json.loads(skills)
- else:
- skills_json = None
- if particulars:
- particulars_json = json.loads(particulars)
- else:
- particulars_json = {}
- resume = Resume.init(Base.md5(login))
- if not resume:
- resume = Resume(work_exp = work_json,edu=edu_json,login=login,skills=skills_json,first_name=particulars_json.get('first_name'),last_name=particulars_json.get('last_name'),birthday=particulars_json.get('birthday'),address=particulars_json.get('address'),tel=particulars_json.get('contact'),writeup=writeup,years_working=particulars_json.get('years_working'),availability=particulars_json.get('availability'),last_salary=particulars_json.get('last_salary'),expected_salary=particulars_json.get('expected_salary'),employment_type=particulars_json.get('employment_type'),industry=particulars_json.get('industry'),exp_level=particulars_json.get('exp_level'),function=particulars_json.get('job_function'))
- else:
- if work_json:
- resume.properties['work_exp'] = work_json
- if edu_json:
- resume.properties['edu'] = edu_json
- if skills_json:
- resume.properties['skills'] = skills_json
- if particulars_json:
- if particulars_json.get('first_name'):
- resume.properties['first_name'] = particulars_json.get('first_name')
- if particulars_json.get('last_name'):
- resume.properties['last_name'] = particulars_json.get('last_name')
- if particulars_json.get('birthday'):
- resume.properties['birthday'] = particulars_json.get('birthday')
- if particulars_json.get('address'):
- resume.properties['address'] = particulars_json.get('address')
- if particulars_json.get('contact'):
- resume.properties['tel'] = particulars_json.get('contact')
- if particulars_json.get('availability'):
- resume.properties['availability'] = particulars_json.get('availability')
- if particulars_json.get('years_working'):
- resume.properties['years_working'] = particulars_json.get('years_working')
- if particulars_json.get('employment_type'):
- resume.properties['employment_type'] = particulars_json.get('employment_type')
- if particulars_json.get('last_salary'):
- resume.properties['last_salary'] = particulars_json.get('last_salary')
- if particulars_json.get('expected_salary'):
- resume.properties['expected_salary'] = particulars_json.get('expected_salary')
- if particulars_json.get('industry'):
- resume.properties['industry'] = particulars_json.get('industry')
- if particulars_json.get('exp_level'):
- resume.properties['exp_level'] = particulars_json.get('exp_level')
- if particulars_json.get('job_function'):
- resume.properties['function'] = particulars_json.get('job_function')
- if particulars_json.get('pr_status'):
- resume.properties['pr_status'] = particulars_json.get('pr_status')
- if particulars_json.get('linkedin_url'):
- resume.properties['linkedin_url'] = particulars_json.get('linkedin_url')
- if particulars_json.get('nationality'):
- resume.properties['nationality'] = particulars_json.get('nationality')
- if particulars_json.get('advisor'):
- resume.properties['advisor'] = particulars_json.get('advisor')
- if writeup:
- resume.properties['writeup'] = writeup
- if complete:
- resume.properties['complete'] = True
- resume.sync_to_persistence()
- return {'complete':complete,'login':user.export_property('login'),'id':user.export_property('_id'),'work':work_json,'edu':edu_json,'skills':skills_json,'particulars':particulars_json,'writeup':writeup}
- @csrf_protect
- @require_POST
- @session_protect
- @session_employee
- @json_view
- def ajax_employee_save_settings(request,session):
- c = {}
- user = session.get_property('user_model')
- login = user.export_property('login')
- searchable = request.POST.get('searchable')
- current_password = request.POST.get('current_password')
- new_password = request.POST.get('new_password')
- resume = Resume.init(Base.md5(login))
- user = UserEmployee.init(login)
- result = {}
- if resume:
- if not searchable == None and not searchable == resume.get_property('searchable'):
- if searchable == 'false':
- searchable = False
- else:
- searchable = True
- resume.properties['searchable'] = searchable
- resume.sync_to_persistence()
- result['searchable'] = 'updated'
- else:
- result['searchable'] = 'skipped'
- else:
- result['searchable'] = 'skipped'
- if Base.md5(current_password) == user.export_property('password_md5') and new_password and len(new_password) > 5:
- user.properties['password_md5'] = Base.md5(new_password)
- user.sync_to_persistence(force_update=True)
- result['password'] = 'updated'
- else:
- result['password'] = 'wrong'
- if not current_password or not new_password or new_password and len(new_password) <= 5:
- result['password'] = 'skipped'
- return result
- @csrf_protect
- @require_POST
- @session_protect
- @session_employer
- @json_view
- def ajax_employer_save_settings(request,session):
- c = {}
- user = session.get_property('user_model')
- login = user.export_property('login')
- current_password = request.POST.get('current_password')
- new_password = request.POST.get('new_password')
- user = UserEmployer.init(login)
- result = {}
- if Base.md5(current_password) == user.export_property('password_md5') and new_password and len(new_password) > 5:
- user.properties['password_md5'] = Base.md5(new_password)
- user.sync_to_persistence(force_update=True)
- result['password'] = 'updated'
- else:
- result['password'] = 'wrong'
- if not current_password or not new_password or new_password and len(new_password) <= 5:
- result['password'] = 'skipped'
- return result
- @csrf_protect
- @require_POST
- @session_protect
- @session_employee
- @json_view
- def ajax_upload_profile_pic(request,session):
- c = {}
- user = session.get_property('user_model')
- login = user.export_property('login')
- if user.get_property('class') == "UserAdmin":
- login = request.GET.get('login')
- import os
- fileName, fileExtension = os.path.splitext(request.FILES['file_profile_pic'].name)
- pic = ProfilePic(creator_login=login,file_name=login+'.'+fileExtension,file_handler=request.FILES['file_profile_pic'])
- #pic.hash_local_url()
- #return {'url':pic.export_property('local_url')}
- pic.dump_file()
- pic.sync_to_persistence(force_update=True)
- return {'login':login,'files':[{'url':'/static'+pic.export_property('public_url')}]}
- @csrf_protect
- @require_POST
- @session_protect
- @session_employee
- @json_view
- def ajax_upload_resume(request,session):
- c = {}
- user = session.get_property('user_model')
- login = user.export_property('login')
- if user.get_property('class') == "UserAdmin":
- login = request.GET.get('login')
- import os
- fileName, fileExtension = os.path.splitext(request.FILES['file_resume'].name)
- resume = ResumeDoc(creator_login=login,file_name=login+'.'+fileExtension,file_handler=request.FILES['file_resume'])
- resume.dump_file()
- resume.sync_to_persistence(force_update=True)
- return {'login':login,'files':[{'url':'/static'+resume.export_property('public_url')}]}
- @csrf_protect
- @require_POST
- @session_protect
- @session_employer
- @json_view
- def ajax_upload_logo(request,session):
- c = {}
- user = session.get_property('user_model')
- if user.get_property('class') == 'UserEmployer':
- login = user.export_property('login')
- elif user.get_property('class') == 'UserAdmin':
- login = request.GET.get('login')
- else:
- login = None
- import os
- fileName, fileExtension = os.path.splitext(request.FILES['file_logo'].name)
- pic = Logo(creator_login=login,file_name=user.export_property('login')+'.'+fileExtension,file_handler=request.FILES['file_logo'])
- pic.dump_file()
- pic.sync_to_persistence(force_update=True)
- return {'login':login,'files':[{'url':'/static'+pic.export_property('public_url')}]}
- @csrf_protect
- @require_POST
- @session_protect
- @session_employee
- @json_view
- def ajax_list_resume(request,session):
- c = {}
- user = session.get_property('user_model')
- login = user.export_property('login')
- resume = Resume.init(Base.md5(login))
- if not resume:
- raise ViewException('Resume not found',RESUME_NOT_FOUND_CODE)
- profile_pic = ProfilePic.retrieve_by_creator(login)
- resume_doc = ResumeDoc.retrieve_by_creator(login)
- return_dict = {'login':user.export_property('login'),'id':user.export_property('_id'),'resume':resume.properties}
- if profile_pic:
- return_dict['profile'] = '/static'+profile_pic.get('public_url')
- if resume_doc:
- return_dict['resume_doc'] = '/static'+resume_doc.get('public_url')
- return return_dict
- @csrf_protect
- @require_POST
- @session_protect
- @session_admin
- @json_view
- def ajax_admin_list_resume(request,session):
- c = {}
- user = session.get_property('user_model')
- login = request.POST.get('login')
- resume = Resume.init(Base.md5(login))
- if not resume:
- raise ViewException('Resume not found',RESUME_NOT_FOUND_CODE)
- profile_pic = ProfilePic.retrieve_by_creator(login)
- resume_doc = ResumeDoc.retrieve_by_creator(login)
- return_dict = {'login':user.export_property('login'),'id':user.export_property('_id'),'resume':resume.properties}
- if profile_pic:
- return_dict['profile'] = '/static'+profile_pic.get('public_url')
- if resume_doc:
- return_dict['resume_doc'] = '/static'+resume_doc.get('public_url')
- return return_dict
- def mask_field(value):
- if value and len(value) > 0:
- return value[0] + 'xxxxxx'
- @csrf_protect
- @require_POST
- @session_protect
- @session_employer
- @json_view
- def ajax_list_resume_employer(request,session,id):
- job_id = request.GET.get('job_id')
- project_id = request.GET.get('project_id')
- c = {}
- user = session.get_property('user_model')
- login = user.export_property('login')
- resume = Resume.init(id)
- if not resume:
- raise ViewException('Resume not found',RESUME_NOT_FOUND_CODE)
- applied = False
- if job_id:
- applications = Application.retrieve_by_job(job_id)
- for application in applications:
- if application.get_property('creator_login') == resume.get_property('login'):
- applied = True
- break
- if project_id:
- bids = Bid.retrieve_by_project(project_id)
- for bid in bids:
- if bid.get_property('creator_login') == resume.get_property('login'):
- applied = True
- break
- purchase = Purchase.retrieve_by_resume_and_creator(id,login)
- resume_json = resume.properties
- if not purchase and not applied:
- resume_json['first_name'] = mask_field(resume_json['first_name'])
- resume_json['last_name'] = mask_field(resume_json['last_name'])
- resume_json['tel'] = mask_field(resume_json['tel'])
- resume_json['address'] = mask_field(resume_json['address'])
- else:
- profile_pic = ProfilePic.init(id)
- resume_doc = ResumeDoc.init(id)
- if profile_pic:
- resume_json['profile'] = '/static'+profile_pic.export_property('public_url')
- if resume_doc:
- resume_json['resume_doc'] = '/static'+resume_doc.export_property('public_url')
- return {'login':user.export_property('login'),'id':user.export_property('_id'),'resume':resume_json}
- @csrf_protect
- @require_POST
- @session_optional
- @json_view
- def ajax_list_all_resumes(request,session):
- c = {}
- page_number = int(request.POST.get('page_number',1))
- page_size = int(request.POST.get('page_size',10))
- industry = request.POST.get('industry')
- exp_level = request.POST.get('exp_level')
- job_function = request.POST.get('job_function')
- keywords = request.POST.get('keywords')
- if keywords:
- keywords_list = keywords.split(',')
- else:
- keywords_list = []
- query = {}
- if industry:
- query['industry'] = industry
- if exp_level:
- query['exp_level'] = exp_level
- if job_function:
- query['function'] = job_function
- if not industry and not exp_level and not job_function and len(keywords_list) == 0:
- user = session.get_property('user_model')
- login = user.export_property('login')
- purchases = Purchase.retrieve_by_creator(login)
- purchased_ids = []
- for purchase in purchases:
- purchased_ids.append(purchase.export_property('resume_id'))
- query = {'_id':{'$in':purchased_ids}}
- resumes, count = Resume.retrieve_all(page_number,page_size,query=query)
- else:
- resumes, count = Resume.retrieve_all(page_number,page_size,query=query,free_text=keywords)
- resumes_json = []
- for resume in resumes:
- resumes_json.append(resume.properties)
- return {'resumes':resumes_json,'total':count,'query':query}
- @csrf_protect
- @require_POST
- @session_protect
- @session_employer
- @json_view
- def ajax_upsert_company_profile(request,session):
- c = {}
- user = session.get_property('user_model')
- if user.get_property('class') == 'UserEmployer':
- employer = UserEmployer.init(user.get_property('login'))
- elif user.get_property('class') == 'UserAdmin':
- employer = UserEmployer.init(request.POST.get('login'))
- else:
- employer = None
- company = request.POST.get('company')
- writeup = request.POST.get('writeup')
- address = request.POST.get('address')
- email = request.POST.get('email')
- website = request.POST.get('website')
- tel = request.POST.get('tel')
- extension = request.POST.get('tel_extension')
- contact_person = request.POST.get('contact_person')
- industry = request.POST.get('industry')
- size = request.POST.get('size')
- complete = request.POST.get('complete')
- if employer:
- if writeup:
- employer.properties['writeup'] = writeup
- if address:
- employer.properties['address'] = address
- if email:
- employer.properties['email'] = email
- if website:
- employer.properties['website'] = website
- if tel:
- employer.properties['tel'] = tel
- if extension:
- employer.properties['tel_extension'] = extension
- if contact_person:
- employer.properties['contact_person'] = contact_person
- if industry:
- employer.properties['industry'] = industry
- if size:
- employer.properties['size'] = size
- if complete:
- employer.properties['complete'] = complete
- employer.sync_to_persistence(force_update=True)
- return {'complete':complete,'login':user.export_property('login'),'id':user.export_property('_id'),'employer':employer.properties}
- @csrf_protect
- @require_POST
- @session_protect
- @session_admin
- @json_view
- def ajax_upsert_credit(request,session):
- c = {}
- user = session.get_property('user_model')
- employer = UserEmployer.init(request.POST.get('login'))
- credit_listings = int(request.POST.get('listing','0'))
- credit_resumes = int(request.POST.get('resume','0'))
- if employer:
- if credit_listings >= 0:
- employer.properties['credit_listings'] = credit_listings
- if credit_resumes >= 0:
- employer.properties['credit_resumes'] = credit_resumes
- employer.sync_to_persistence(force_update=True)
- return {'complete':complete,'login':user.export_property('login'),'id':user.export_property('_id'),'employer':employer.properties}
- @csrf_protect
- @require_POST
- @session_protect
- @session_employer
- @json_view
- def ajax_list_profile(request,session):
- c = {}
- user = session.get_property('user_model')
- login = user.get_property('login')
- employer = UserEmployer.init(login)
- profile_pic = Logo.retrieve_by_creator(login)
- return_dict = {'login':user.export_property('login'),'id':user.export_property('_id'),'employer':employer.properties}
- if profile_pic:
- return_dict['logo'] = '/static'+profile_pic.get('public_url')
- return return_dict
- @csrf_protect
- @require_POST
- @session_protect
- @session_admin
- @json_view
- def ajax_admin_list_profile(request,session):
- c = {}
- user = session.get_property('user_model')
- login = request.POST.get('login')
- employer = UserEmployer.init(login)
- profile_pic = Logo.retrieve_by_creator(login)
- return_dict = {'login':user.export_property('login'),'id':user.export_property('_id'),'employer':employer.properties}
- if profile_pic:
- return_dict['logo'] = '/static'+profile_pic.get('public_url')
- return return_dict
- @csrf_protect
- @require_POST
- @session_protect
- @session_employer
- @json_view
- def ajax_upsert_job(request,session):
- c = {}
- user = session.get_property('user_model')
- job_id = request.POST.get('job_id')
- job = None
- if job_id:
- job = Job.init(job_id)
- job_title = request.POST.get('job_title')
- writeup = request.POST.get('writeup')
- location = request.POST.get('location')
- address = request.POST.get('address')
- qualification = request.POST.get('qualification')
- keywords = request.POST.get('keywords','')
- industry = request.POST.get('industry')
- function = request.POST.get('job_function')
- exp_level = request.POST.get('exp_level')
- employment_type = request.POST.get('employment_type')
- vacancies = request.POST.get('vacancies')
- salary_from = request.POST.get('salary_from')
- salary_to = request.POST.get('salary_to')
- show_contact = request.POST.get('show_contact',False)
- show_salary = request.POST.get('show_salary',False)
- if employment_type:
- employment_type_json = json.loads(employment_type)
- else:
- employment_type_json = None
- if keywords:
- keywords_json = json.loads(keywords)
- else:
- keywords_json = None
- if show_contact and show_contact == "true":
- show_contact = True
- else:
- show_contact = False
- if show_salary and show_salary == "true":
- show_salary = True
- else:
- show_salary = False
- if not job:
- job = Job(creator_login=user.get_property('login'),job_title=job_title,writeup=writeup,location=location,qualification=qualification,keywords=keywords_json,industry=industry,function=function,employment_type=employment_type_json,exp_level=exp_level,vacancies=vacancies,salary_from=salary_from,salary_to=salary_to,address=address,show_salary=show_salary,show_contact=show_contact)
- else:
- if (not user.get_property('login') == job.get_property('creator_login')):
- raise ViewException('Access error',ACCESS_ERR_CODE)
- if writeup:
- job.properties['writeup'] = writeup
- if job_title:
- job.properties['job_title'] = job_title
- if location:
- job.properties['location'] = location
- if qualification:
- job.properties['qualification'] = qualification
- if keywords:
- job.properties['keywords'] = keywords_json
- if industry:
- job.properties['industry'] = industry
- if function:
- job.properties['function'] = function
- if employment_type:
- job.properties['employment_type'] = employment_type_json
- if exp_level:
- job.properties['exp_level'] = exp_level
- if vacancies:
- job.properties['vacancies'] = vacancies
- if salary_from:
- job.properties['salary_from'] = salary_from
- if salary_to:
- job.properties['salary_to'] = salary_to
- if address:
- job.properties['address'] = address
- job.properties['show_salary'] = show_salary
- job.properties['show_contact'] = show_contact
- if job_id:
- job.sync_to_persistence(force_update=True)
- else:
- job.sync_to_persistence()
- return {'login':user.export_property('login'),'id':user.export_property('_id'),'job':job.properties}
- @csrf_protect
- @require_POST
- @session_protect
- @session_employer
- @json_view
- def ajax_publish_job(request,session):
- c = {}
- user = session.get_property('user_model')
- job_id = request.POST.get('job_id')
- job = None
- if job_id:
- job = Job.init(job_id)
- if not job:
- raise ViewException('Job not found',JOB_NOT_FOUND_CODE)
- else:
- if (not user.get_property('login') == job.get_property('creator_login')):
- raise ViewException('Access error',ACCESS_ERR_CODE)
- if user.get_property('credit_listings') <= 0:
- raise ViewException('Credit not enough error',CREDIT_NOT_ENOUGH)
- if job.get_property('active',False) == False:
- job.properties['pending_approval'] = True
- job.properties['expired'] = False
- '''
- time_stamp = int(time.time())
- if job.get_property('expiry_date',0) > time_stamp:
- time_stamp = job.get_property('expiry_date',0)
- job.properties['expiry_date'] = time_stamp + 3600*24*30'''
- user = User.init(user.export_property('login'))
- user.use_listing_credit(1)
- user.sync_to_persistence(force_update=True)
- job.sync_to_persistence(force_update=True)
- from django.template import Context,Template
- t = Template(EMAIL_HEADER+"Dear employer, <br/><br/> Your job posting <a href='{{host}}/public/job/{{job_id}}'>{{job_title}}</a> is currently pending approval. "+EMAIL_FOOTER)
- login = job.export_property("creator_login")
- c = Context({"job_title":job.export_property('job_title'),"job_id":job.export_property('_id'),"host":HOST_NAME})
- html = t.render(c)
- subject = "Your job listing is waiting for approval"
- mc_sendmail(login, subject, html,['job-listing'])
- if user.get_property('email'):
- mc_sendmail(user.export_property('email'), subject, html,['job-listing'])
- return {'login':user.export_property('login'),'id':user.export_property('_id'),'job':job.properties}
- @csrf_protect
- @require_POST
- @session_protect
- @session_admin
- @json_view
- def ajax_approve_publish_job(request,session):
- c = {}
- user = session.get_property('user_model')
- job_id = request.POST.get('job_id')
- job = None
- if job_id:
- job = Job.init(job_id)
- if not job:
- raise ViewException('Job not found',JOB_NOT_FOUND_CODE)
- else:
- if job.get_property('active',False) == False:
- job.properties['pending_approval'] = False
- job.properties['active'] = True
- job.properties['expired'] = False
- time_stamp = int(time.time())
- if job.get_property('expiry_date',0) > time_stamp:
- time_stamp = job.get_property('expiry_date',0)
- job.properties['expiry_date'] = time_stamp + 3600*24*30
- job.sync_to_persistence(force_update=True)
- from django.template import Context,Template
- t = Template(EMAIL_HEADER+"Dear employer, <br/><br/> Your job posting <a href='{{host}}/public/job/{{job_id}}'>{{job_title}}</a> has been successfully listed. "+EMAIL_FOOTER)
- login = job.export_property("creator_login")
- c = Context({"job_title":job.export_property('job_title'),"job_id":job.export_property('_id'),"host":HOST_NAME})
- html = t.render(c)
- subject = "Your listing is successful"
- mc_sendmail(login, subject, html,['job-listing'])
- employer = UserEmployer.init(login)
- if employer.get_property('email'):
- mc_sendmail(employer.export_property('email'), subject, html,['job-listing'])
- return {'job':job.properties}
- @csrf_protect
- @require_POST
- @session_protect
- @session_admin
- @json_view
- def ajax_reject_publish_job(request,session):
- c = {}
- user = session.get_property('user_model')
- job_id = request.POST.get('job_id')
- job = None
- if job_id:
- job = Job.init(job_id)
- if not job:
- raise ViewException('Job not found',JOB_NOT_FOUND_CODE)
- else:
- if job.get_property('active',False) == False:
- job.properties['pending_approval'] = False
- job.properties['active'] = False
- job.properties['rejected'] = True
- time_stamp = int(time.time())
- if job.get_property('expiry_date',0) > time_stamp:
- time_stamp = job.get_property('expiry_date',0)
- job.properties['expiry_date'] = time_stamp + 3600*24*30
- job.sync_to_persistence(force_update=True)
- user = User.init(job.export_property('creator_login'))
- user.use_listing_credit(-1)
- user.sync_to_persistence(force_update=True)
- from django.template import Context,Template
- t = Template(EMAIL_HEADER+"Dear employer, <br/><br/> Your job posting <a href='{{host}}/public/job/{{job_id}}'>{{job_title}}</a> has been rejected. The credit has refunded to your account. Please contact site admin for more details."+EMAIL_FOOTER)
- login = job.export_property("creator_login")
- c = Context({"job_title":job.export_property('job_title'),"job_id":job.export_property('_id'),"host":HOST_NAME})
- html = t.render(c)
- subject = "Your listing is rejected"
- mc_sendmail(login, subject, html,['job-listing'])
- employer = UserEmployer.init(login)
- if employer.get_property('email'):
- mc_sendmail(employer.export_property('email'), subject, html,['job-listing'])
- return {'job':job.properties}
- @csrf_protect
- @require_POST
- @session_protect
- @session_employer
- @json_view
- def ajax_expire_job(request,session):
- c = {}
- user = session.get_property('user_model')
- job_id = request.POST.get('job_id')
- job = None
- if job_id:
- job = Job.init(job_id)
- if not job:
- raise ViewException('Job not found',JOB_NOT_FOUND_CODE)
- else:
- if (not user.get_property('login') == job.get_property('creator_login')):
- raise ViewException('Access error',ACCESS_ERR_CODE)
- if job.get_property('active',False) == True:
- job.properties['active'] = False
- job.properties['expired'] = True
- job.properties['expiry_date'] = int(time.time())
- job.sync_to_persistence(force_update=True)
- return {'login':user.export_property('login'),'id':user.export_property('_id'),'job':job.properties}
- @csrf_protect
- @require_POST
- @session_protect
- @session_employer
- @json_view
- def ajax_list_jobs(request,session):
- c = {}
- page_number = int(request.POST.get('page_number',1))
- page_size = int(request.POST.get('page_size',10))
- user = session.get_property('user_model')
- jobs, count = Job.retrieve_by_creator(user.get_property('login'),page_number,page_size)
- jobs_json = []
- for job in jobs:
- jobs_json.append(job.properties)
- return {'login':user.export_property('login'),'id':user.export_property('_id'),'jobs':jobs_json,'total':count}
- @csrf_protect
- @require_POST
- @session_protect
- @session_admin
- @json_view
- def ajax_list_all_employees(request,session):
- c = {}
- page_number = int(request.POST.get('page_number',1))
- page_size = int(request.POST.get('page_size',10))
- user = session.get_property('user_model')
- jobs, count = UserEmployee.retrieve_active(page_number,page_size)
- jobs_json = []
- for job in jobs:
- resume = Resume.init(Base.md5(job.get_property('login')))
- if resume:
- job.properties['first_name'] = resume.get_property('first_name')
- job.properties['last_name'] = resume.get_property('last_name')
- job.properties['resume'] = True
- jobs_json.append(job.properties)
- return {'login':user.export_property('login'),'id':user.export_property('_id'),'employees':jobs_json,'total':count}
- @csrf_protect
- @require_POST
- @session_protect
- @session_admin
- @json_view
- def ajax_list_all_employers(request,session):
- c = {}
- page_number = int(request.POST.get('page_number',1))
- page_size = int(request.POST.get('page_size',10))
- user = session.get_property('user_model')
- jobs, count = UserEmployer.retrieve_active(page_number,page_size)
- jobs_json = []
- for job in jobs:
- jobs_json.append(job.properties)
- return {'login':user.export_property('login'),'id':user.export_property('_id'),'employers':jobs_json,'total':count}
- @csrf_protect
- @require_POST
- @json_view
- def ajax_list_all_jobs(request):
- c = {}
- page_number = int(request.POST.get('page_number',1))
- page_size = int(request.POST.get('page_size',10))
- industry = request.POST.get('industry')
- if industry:
- industry_list = industry.split(',')
- else:
- industry_list = []
- exp_level = request.POST.get('exp_level')
- if exp_level:
- exp_level_list = exp_level.split(',')
- else:
- exp_level_list = []
- salary_from = request.POST.get('salary_from')
- salary_to = request.POST.get('salary_to')
- location = request.POST.get('location')
- keywords = request.POST.get('keywords')
- creator_login = request.POST.get('creator_login')
- pending_approval = request.POST.get('pending_approval')
- if keywords:
- keywords_list = keywords.split(',')
- else:
- keywords_list = []
- query = {}
- if industry_list:
- if len(industry_list) == 1:
- query['industry'] = industry_list[0]
- else:
- query['industry']= {'$in': industry_list}
- if exp_level_list:
- if len(exp_level_list) == 1:
- query['exp_level'] = exp_level_list[0]
- else:
- query['exp_level'] = {'$in': exp_level_list}
- if salary_from:
- query['salary_from'] = {'$gte': salary_from}
- if salary_to:
- query['salary_to'] = {'$lte': salary_to}
- if location:
- query['location'] = location
- if creator_login:
- query['creator_login'] = creator_login
- if not pending_approval == None:
- query = {}
- if pending_approval == 'true':
- query['pending_approval'] = True
- else:
- query['pending_approval'] = False
- employers = UserEmployer.retrieve_all(free_text=keywords)
- employer_logins = []
- for employer in employers:
- employer_logins.append(employer.get_property('login'))
- if len(employer_logins) > 0 and not query.get('creator_login'):
- if not query.get('$or'):
- query['$or'] = []
- query['$or'].append({'creator_login':{'$in':employer_logins}})
- jobs, count = Job.retrieve_all(page_number,page_size,query=query,free_text=keywords)
- jobs_json = []
- for job in jobs:
- creator_login = job.get_property('creator_login')
- employer = UserEmployer.init(creator_login)
- job_json = job.properties
- profile_pic = Logo.retrieve_by_creator(employer.export_property('login'))
- if profile_pic:
- job_json['logo'] = '/static'+profile_pic.get('public_url')
- job_json['employer'] = employer.properties
- jobs_json.append(job_json)
- return {'jobs':jobs_json,'total':count,'query':query}
- @csrf_protect
- @require_POST
- @json_view
- def ajax_list_job(request):
- c = {}
- job_id = request.GET.get('job_id')
- if job_id:
- job = Job.init(job_id)
- creator_login = job.get_property('creator_login')
- employer = UserEmployer.init(creator_login).properties
- job = job.properties
- else:
- job = None
- employer = None
- return {'job':job,'employer':employer}
- @csrf_protect
- @require_POST
- @session_protect
- @session_employer
- @json_view
- def ajax_upsert_project(request,session):
- c = {}
- user = session.get_property('user_model')
- project_id = request.POST.get('project_id')
- project = None
- if project_id:
- project = Project.init(project_id)
- project_title = request.POST.get('project_title')
- writeup = request.POST.get('writeup')
- qualification = request.POST.get('qualification')
- keywords = request.POST.get('keywords','').split(',')
- industry = request.POST.get('industry')
- show_contact = request.POST.get('show_contact',False)
- show_anonymous = request.POST.get('show_anonymous',False)
- if show_contact == "true":
- show_contact = True
- elif show_contact == "false":
- show_contact = False
- if show_anonymous == "true":
- show_anonymous = True
- elif show_anonymous == "false":
- show_anonymous = False
- if not project:
- project = Project(creator_login=user.get_property('login'),project_title=project_title,writeup=writeup,qualification=qualification,keywords=keywords,industry=industry,show_contact=show_contact,show_anonymous=show_anonymous)
- else:
- if (not user.get_property('login') == project.get_property('creator_login')):
- raise ViewException('Access error',ACCESS_ERR_CODE)
- if writeup:
- project.properties['writeup'] = writeup
- if project_title:
- project.properties['project_title'] = project_title
- if qualification:
- project.properties['qualification'] = qualification
- if keywords:
- project.properties['keywords'] = keywords
- if industry:
- project.properties['industry'] = industry
- project.properties['show_contact'] = show_contact
- project.properties['show_anonymous'] = show_anonymous
- if project_id:
- project.sync_to_persistence(force_update=True)
- else:
- project.sync_to_persistence()
- return {'login':user.export_property('login'),'id':user.export_property('_id'),'project':project.properties}
- @csrf_protect
- @require_POST
- @session_protect
- @session_employer
- @json_view
- def ajax_list_projects(request,session):
- c = {}
- page_number = int(request.POST.get('page_number',1))
- page_size = int(request.POST.get('page_size',10))
- user = session.get_property('user_model')
- projects, count = Project.retrieve_by_creator(user.get_property('login'),page_number,page_size)
- projects_json = []
- for project in projects:
- projects_json.append(project.properties)
- return {'login':user.export_property('login'),'id':user.export_property('_id'),'projects':projects_json,'total':count}
- @csrf_protect
- @require_POST
- @json_view
- def ajax_list_all_projects(request):
- c = {}
- page_number = int(request.POST.get('page_number',1))
- page_size = int(request.POST.get('page_size',10))
- industry = request.POST.get('industry')
- creator_login = request.POST.get('creator_login')
- pending_approval = request.POST.get('pending_approval')
- if industry:
- industry_list = industry.split(',')
- else:
- industry_list = []
- location = request.POST.get('location')
- keywords = request.POST.get('keywords')
- if keywords:
- keywords_list = keywords.split(',')
- else:
- keywords_list = []
- query = {}
- if industry_list:
- if len(industry_list) == 1:
- query['industry'] = industry_list[0]
- else:
- query['industry']= {'$in': industry_list}
- if location:
- query['location'] = location
- if creator_login:
- query['creator_login'] = creator_login
- if not pending_approval == None:
- query = {}
- if pending_approval == 'true':
- query['pending_approval'] = True
- else:
- query['pending_approval'] = False
- employers = UserEmployer.retrieve_all(free_text=keywords)
- employer_logins = []
- for employer in employers:
- employer_logins.append(employer.get_property('login'))
- if len(employer_logins) > 0 and not query.get('creator_login'):
- if not query.get('$or'):
- query['$or'] = []
- query['$or'].append({'creator_login':{'$in':employer_logins}})
- projects,count = Project.retrieve_all(page_number,page_size,query=query,free_text=keywords)
- projects_json = []
- for project in projects:
- creator_login = project.get_property('creator_login')
- employer = UserEmployer.init(creator_login)
- project_json = project.properties
- profile_pic = Logo.retrieve_by_creator(employer.export_property('login'))
- if profile_pic:
- project_json['logo'] = '/static'+profile_pic.get('public_url')
- project_json['employer'] = employer.properties
- projects_json.append(project_json)
- return {'projects':projects_json,'total':count}
- @csrf_protect
- @require_POST
- @session_protect
- @session_employer
- @json_view
- def ajax_list_all_applications_bids(request,session):
- c = {}
- page_number = int(request.POST.get('page_number',1))
- page_size = int(request.POST.get('page_size',10))
- user = session.get_property('user_model')
- job_ids = Job.retrieve_ids_by_creator(user.get_property('login'))
- project_ids = Project.retrieve_ids_by_creator(user.get_property('login'))
- applications,count_app = Application.retrieve_by_jobs(job_ids,page_number,page_size/2)
- bids,count_bid = Bid.retrieve_by_projects(project_ids,page_number,page_size/2)
- applications_json = []
- for application in applications:
- creator_login = application.get_property('creator_login')
- applicant = Resume.init(Base.md5(creator_login))
- application_json = application.properties
- job = Job.init(application.get_property('job_id'))
- application_json['job'] = job.properties
- application_json['user'] = applicant.properties
- applications_json.append(application_json)
- application_json['resume_id'] = applicant.export_property('_id')
- bids_json = []
- for bid in bids:
- creator_login = bid.get_property('creator_login')
- applicant = Resume.init(Base.md5(creator_login))
- bid_json = bid.properties
- project = Project.init(bid.get_property('project_id'))
- bid_json['project'] = project.properties
- bid_json['user'] = applicant.properties
- bids_json.append(bid_json)
- bid_json['resume_id'] = applicant.export_property('_id')
- applications_json = applications_json + bids_json
- def sort_func(x):
- if isinstance(x, dict):
- if x.get('timestamp'):
- return x['timestamp']
- else:
- return 0
- else:
- return x
- applications_json = sorted(applications_json,key=sort_func,reverse=True)
- return {'login':user.export_property('login'),'id':user.export_property('_id'),'applications':applications_json,'total':count_app + count_bid}
- @csrf_protect
- @require_POST
- @session_protect
- @session_employer
- @json_view
- def ajax_purchase_resume(request,session):
- c = {}
- user = session.get_property('user_model')
- resume_id = request.POST.get('resume_id')
- resume = None
- if resume_id:
- resume = Resume.init(resume_id)
- if not resume:
- raise ViewException('Resume not found',JOB_NOT_FOUND_CODE)
- else:
- user = User.init(user.export_property('login'))
- creator_login = user.export_property('login')
- purchase = Purchase(resume_id=resume_id,creator_login=creator_login)
- user.use_resume_credit(1)
- user.sync_to_persistence(force_update=True)
- purchase.sync_to_persistence(force_update=True)
- return {'login':user.export_property('login'),'id':user.export_property('_id'),'resume':resume.properties,'purchase':purchase.properties}
- @csrf_protect
- @require_POST
- @json_view
- def ajax_list_project(request):
- c = {}
- project_id = request.GET.get('project_id')
- if project_id:
- project = Project.init(project_id).properties
- else:
- project = None
- return {'project':project}
- @csrf_protect
- @require_POST
- @session_protect
- @session_employer
- @json_view
- def ajax_publish_project(request,session):
- c = {}
- user = session.get_property('user_model')
- project_id = request.POST.get('project_id')
- project = None
- if project_id:
- project = Project.init(project_id)
- if not project:
- raise ViewException('Project not found',PROJECT_NOT_FOUND_CODE)
- else:
- if (not user.get_property('login') == project.get_property('creator_login')):
- raise ViewException('Access error',ACCESS_ERR_CODE)
- if user.get_property('credit_listings') <= 0:
- raise ViewException('Credit not enough error',CREDIT_NOT_ENOUGH)
- if project.get_property('active',False) == False:
- project.properties['pending_approval'] = True
- project.properties['expired'] = False
- '''
- time_stamp = int(time.time())
- if project.get_property('expiry_date',0) > time_stamp:
- time_stamp = project.get_property('expiry_date',0)
- project.properties['expiry_date'] = time_stamp + 3600*24*30'''
- user = User.init(user.export_property('login'))
- user.use_listing_credit(1)
- user.sync_to_persistence(force_update=True)
- project.sync_to_persistence(force_update=True)
- from django.template import Context,Template
- t = Template(EMAIL_HEADER+"Dear employer, <br/><br/> Your project posting <a href='{{host}}/public/project/{{project_id}}'>{{project_title}}</a> is currently pending for approval. "+EMAIL_FOOTER)
- login = project.export_property("creator_login")
- c = Context({"project_title":project.export_property('project_title'),"project_id":project.export_property('_id'),"host":HOST_NAME})
- html = t.render(c)
- subject = "Your listing is waiting for approval"
- mc_sendmail(login, subject, html,['project-listing'])
- return {'login':user.export_property('login'),'id':user.export_property('_id'),'project':project.properties}
- @csrf_protect
- @require_POST
- @session_protect
- @session_employer
- @json_view
- def ajax_approve_publish_project(request,session):
- c = {}
- project_id = request.POST.get('project_id')
- project = None
- if project_id:
- project = Project.init(project_id)
- if not project:
- raise ViewException('Project not found',PROJECT_NOT_FOUND_CODE)
- else:
- if project.get_property('active',False) == False:
- project.properties['pending_approval'] = False
- project.properties['active'] = True
- project.properties['expired'] = False
- time_stamp = int(time.time())
- if project.get_property('expiry_date',0) > time_stamp:
- time_stamp = project.get_property('expiry_date',0)
- project.properties['expiry_date'] = time_stamp + 3600*24*30
- #user = User.init(user.export_property('login'))
- #user.use_listing_credit(1)
- #user.sync_to_persistence(force_update=True)
- project.sync_to_persistence(force_update=True)
- from django.template import Context,Template
- t = Template(EMAIL_HEADER+"Dear employer, <br/><br/> Your project posting <a href='{{host}}/public/project/{{project_id}}'>{{project_title}}</a> has been successfully listed. "+EMAIL_FOOTER)
- login = project.export_property("creator_login")
- c = Context({"project_title":project.export_property('project_title'),"project_id":project.export_property('_id'),"host":HOST_NAME})
- html = t.render(c)
- subject = "Your listing is successful"
- mc_sendmail(login, subject, html,['project-listing'])
- return {'project':project.properties}
- @csrf_protect
- @require_POST
- @session_protect
- @session_employer
- @json_view
- def ajax_reject_publish_project(request,session):
- c = {}
- project_id = request.POST.get('project_id')
- project = None
- if project_id:
- project = Project.init(project_id)
- if not project:
- raise ViewException('Project not found',PROJECT_NOT_FOUND_CODE)
- else:
- if project.get_property('active',False) == False:
- project.properties['pending_approval'] = False
- project.properties['active'] = False
- project.properties['rejected'] = True
- time_stamp = int(time.time())
- if project.get_property('expiry_date',0) > time_stamp:
- time_stamp = project.get_property('expiry_date',0)
- project.properties['expiry_date'] = time_stamp + 3600*24*30
- user = User.init(project.export_property('creator_login'))
- user.use_listing_credit(-1)
- user.sync_to_persistence(force_update=True)
- project.sync_to_persistence(force_update=True)
- from django.template import Context,Template
- t = Template(EMAIL_HEADER+"Dear employer, <br/><br/> Your project posting <a href='{{host}}/public/project/{{project_id}}'>{{project_title}}</a> has been rejected. The credit has refunded to your account. Please contact site admin for more details. "+EMAIL_FOOTER)
- login = project.export_property("creator_login")
- c = Context({"project_title":project.export_property('project_title'),"project_id":project.export_property('_id'),"host":HOST_NAME})
- html = t.render(c)
- subject = "Your listing is rejected"
- mc_sendmail(login, subject, html,['project-listing'])
- return {'project':project.properties}
- @csrf_protect
- @require_POST
- @session_protect
- @session_employer
- @json_view
- def ajax_expire_project(request,session):
- c = {}
- user = session.get_property('user_model')
- project_id = request.POST.get('project_id')
- project = None
- if project_id:
- project = Project.init(project_id)
- if not project:
- raise ViewException('Project not found',PROJECT_NOT_FOUND_CODE)
- else:
- if (not user.get_property('login') == project.get_property('creator_login')):
- raise ViewException('Access error',ACCESS_ERR_CODE)
- if project.get_property('active',False) == True:
- project.properties['active'] = False
- project.properties['expired'] = True
- project.properties['expiry_date'] = int(time.time())
- project.sync_to_persistence(force_update=True)
- return {'login':user.export_property('login'),'id':user.export_property('_id'),'project':project.properties}
- @csrf_protect
- @require_POST
- @session_protect
- @session_employer
- @json_view
- def ajax_reject_project(request,session):
- c = {}
- user = session.get_property('user_model')
- project_id = request.POST.get('project_id')
- project = None
- if project_id:
- project = Project.init(project_id)
- if not project:
- raise ViewException('Project not found',PROJECT_NOT_FOUND_CODE)
- else:
- if (not user.get_property('login') == project.get_property('creator_login')):
- raise ViewException('Access error',ACCESS_ERR_CODE)
- if project.get_property('active',False) == True:
- project.properties['active'] = False
- project.properties['rejected'] = True
- #project.properties['expiry_date'] = int(time.time())
- project.sync_to_persistence(force_update=True)
- return {'login':user.export_property('login'),'id':user.export_property('_id'),'project':project.properties}
- @csrf_protect
- @require_POST
- @session_protect
- @json_view
- def ajax_upsert_application(request,session):
- c = {}
- user = session.get_property('user_model')
- job_id = request.POST.get('job_id')
- application_id = request.POST.get('application_id')
- comment = request.POST.get('comment')
- job = None
- application = None
- if job_id:
- job = Job.init(job_id)
- if job_id and not job:
- raise ViewException('Job not found',JOB_NOT_FOUND_CODE)
- if application_id:
- application = Application.init(application_id)
- if not application:
- application = Application(creator_login=user.get_property('login'),job_id=job_id)
- from django.template import Context,Template
- t = Template(EMAIL_HEADER+"Dear employer, <br/><br/> Your job posting <a href='{{host}}/public/job/{{job_id}}'>{{job_title}}</a> has been recently received an application from {{applicant}}. Please log in to view it."+EMAIL_FOOTER)
- login = job.export_property("creator_login")
- c = Context({"job_title":job.export_property('job_title'),"job_id":job.export_property('_id'),"host":HOST_NAME,"applicant":user.get_property('login')})
- html = t.render(c)
- subject = "Your job listing just received an application"
- mc_sendmail(login, subject, html,['job-application'])
- employer = UserEmployer.init(login)
- if employer and employer.export_property('email'):
- mc_sendmail(employer.export_property('email'), subject, html,['job-application'])
- else:
- application.properties['comment'] = comment
- application.sync_to_persistence(force_update=True)
- return {'login':user.export_property('login'),'id':user.export_property('_id'),'application':application.properties}
- @csrf_protect
- @require_POST
- @session_protect
- @json_view
- def ajax_upsert_job_save(request,session):
- c = {}
- user = session.get_property('user_model')
- job_id = request.POST.get('job_id')
- save_id = request.POST.get('save_id')
- save = None
- if job_id:
- job = Job.init(job_id)
- if job_id and not job:
- raise ViewException('Job not found',JOB_NOT_FOUND_CODE)
- if save_id:
- save = JobSave.init(save_id)
- if not save:
- save = JobSave(creator_login=user.get_property('login'),job_id=job_id)
- save.sync_to_persistence(force_update=True)
- return {'login':user.export_property('login'),'id':user.export_property('_id'),'save':save.properties}
- @csrf_protect
- @require_POST
- @session_protect
- @session_employer
- @json_view
- def ajax_list_application(request,session):
- c = {}
- user = session.get_property('user_model')
- employer = UserEmployer.init(user.get_property('login'))
- job_id = request.POST.get('job_id')
- job = None
- if job_id:
- job = Job.init(job_id)
- if not job:
- raise ViewException('Job not found',JOB_NOT_FOUND_CODE)
- applications = Application.retrieve_by_job(job_id)
- applications_json = []
- for application in applications:
- creator_login = application.get_property('creator_login')
- applicant = Resume.init(Base.md5(creator_login))
- application_json = application.properties
- application_json['user'] = applicant.properties
- applications_json.append(application_json)
- application_json['resume_id'] = applicant.export_property('_id')
- return {'login':user.export_property('login'),'id':user.export_property('_id'),'applications':applications_json,'total':len(applications),'job':job.properties}
- @csrf_protect
- @require_POST
- @session_protect
- @session_employee
- @json_view
- def ajax_list_history(request,session):
- c = {}
- user = session.get_property('user_model')
- page_number = int(request.POST.get('page_number',1))
- page_size = int(request.POST.get('page_size',10))
- applications = Application.retrieve_by_creator(user.get_property('login'))
- bids = Bid.retrieve_by_creator(user.get_property('login'))
- applications_json = []
- for application in applications:
- creator_login = application.get_property('creator_login')
- job_id = application.get_property('job_id')
- application_json = application.properties
- applications_json.append(application_json)
- job = Job.init(job_id)
- if job:
- application_json['job'] = job.properties
- for bid in bids:
- creator_login = bid.get_property('creator_login')
- project_id = bid.get_property('project_id')
- application_json = bid.properties
- applications_json.append(application_json)
- project = Project.init(project_id)
- if project:
- application_json['project'] = project.properties
- def sort_func(x):
- if isinstance(x, dict):
- if x.get('timestamp'):
- return x['timestamp']
- else:
- return 0
- else:
- return x
- applications_json = sorted(applications_json,key=sort_func)[(page_number-1)*page_size:page_number*page_size]
- return {'login':user.export_property('login'),'id':user.export_property('_id'),'history':applications_json,'total':len(applications + bids)}
- @csrf_protect
- @require_POST
- @session_protect
- @session_employee
- @json_view
- def ajax_list_save(request,session):
- c = {}
- user = session.get_property('user_model')
- page_number = int(request.POST.get('page_number',1))
- page_size = int(request.POST.get('page_size',10))
- job_saves = JobSave.retrieve_by_creator(user.get_property('login'))
- project_saves = ProjectSave.retrieve_by_creator(user.get_property('login'))
- saves_json = []
- for job_save in job_saves:
- creator_login = job_save.get_property('creator_login')
- job_id = job_save.get_property('job_id')
- save_json = job_save.properties
- job = Job.init(job_id)
- if job:
- save_json['job'] = job.properties
- saves_json.append(save_json)
- for project_save in project_saves:
- creator_login = project_save.get_property('creator_login')
- project_id = project_save.get_property('project_id')
- save_json = project_save.properties
- project = Project.init(project_id)
- if project:
- save_json['project'] = project.properties
- saves_json.append(save_json)
- def sort_func(x):
- if isinstance(x, dict):
- if x.get('timestamp'):
- return x['timestamp']
- else:
- return 0
- else:
- return x
- saves_json = sorted(saves_json,key=sort_func)[(page_number-1)*page_size:page_number*page_size]
- return {'login':user.export_property('login'),'id':user.export_property('_id'),'save':saves_json,'total':len(job_saves + project_saves)}
- @csrf_protect
- @require_POST
- @session_protect
- @json_view
- def ajax_upsert_bid(request,session):
- c = {}
- user = session.get_property('user_model')
- project_id = request.POST.get('project_id')
- bid_id = request.POST.get('bid_id')
- comment = request.POST.get('comment')
- project = None
- bid = None
- if project_id:
- project = Project.init(project_id)
- if project_id and not project:
- raise ViewException('Project not found',PROJECT_NOT_FOUND_CODE)
- if bid_id:
- bid = Bid.init(bid_id)
- if not bid:
- bid = Bid(creator_login=user.get_property('login'),project_id=project_id)
- from django.template import Context,Template
- t = Template(EMAIL_HEADER+"Dear employer, <br/><br/> Your project posting <a href='{{host}}/public/project/{{project_id}}'>{{project_title}}</a> has been recently received an application from {{applicant}}. "+EMAIL_FOOTER)
- login = project.export_property("creator_login")
- c = Context({"project_title":project.export_property('project_title'),"project_id":project.export_property('_id'),"host":HOST_NAME,"applicant":user.get_property('login')})
- html = t.render(c)
- subject = "Your project listing just received an application"
- mc_sendmail(login, subject, html,['project-application'])
- employer = UserEmployer.init(login)
- if employer and employer.export_property('email'):
- mc_sendmail(employer.export_property('email'), subject, html,['project-application'])
- else:
- bid.properties['comment'] = comment
- bid.sync_to_persistence(force_update=True)
- return {'login':user.export_property('login'),'id':user.export_property('_id'),'bid':bid.properties}
- @csrf_protect
- @require_POST
- @session_protect
- @json_view
- def ajax_upsert_project_save(request,session):
- c = {}
- user = session.get_property('user_model')
- project_id = request.POST.get('project_id')
- save_id = request.POST.get('save_id')
- save = None
- if project_id:
- project = Project.init(project_id)
- if project_id and not project:
- raise ViewException('Project not found',PROJECT_NOT_FOUND_CODE)
- if save_id:
- save = ProjectSave.init(save_id)
- if not save:
- save = ProjectSave(creator_login=user.get_property('login'),project_id=project_id)
- save.sync_to_persistence(force_update=True)
- return {'login':user.export_property('login'),'id':user.export_property('_id'),'save':save.properties}
- @csrf_protect
- @require_POST
- @session_protect
- @session_employer
- @json_view
- def ajax_list_bid(request,session):
- c = {}
- user = session.get_property('user_model')
- employer = UserEmployer.init(user.get_property('login'))
- project_id = request.POST.get('project_id')
- project = None
- if project_id:
- project = Project.init(project_id)
- if not project:
- raise ViewException('Project not found',PROJECT_NOT_FOUND_CODE)
- bids = Bid.retrieve_by_project(project_id)
- bids_json = []
- for bid in bids:
- creator_login = bid.get_property('creator_login')
- applicant = Resume.init(Base.md5(creator_login))
- bid_json = bid.properties
- bid_json['user'] = applicant.properties
- bids_json.append(bid_json)
- bid_json['resume_id'] = applicant.export_property('_id')
- return {'login':user.export_property('login'),'id':user.export_property('_id'),'bids':bids_json,'total':len(bids),'project':project.properties}
- @csrf_protect
- @require_POST
- @session_protect
- @session_employer
- @json_view
- def ajax_checkout(request,session):
- c = {}
- user = session.get_property('user_model')
- package_id = request.POST.get('package_id')
- if not package_id:
- raise ViewException('Package Id not found',JOB_NOT_FOUND_CODE)
- package = PACKAGES.get(package_id)
- if not package:
- raise ViewException('Package not found',JOB_NOT_FOUND_CODE)
- token = models.paypal.init_transaction(package.get('price',''),package.get('desc','') + " for $" + str(package.get('price','')))
- credit_trans = Credit(creator_login=user.export_property('login'),price=package.get('price'),credit_listings=package.get('listings'),credit_resumes=package.get('resumes'),paypal_token = token)
- credit_trans.sync_to_persistence()
- return {'login':user.export_property('login'),'id':user.export_property('_id'),'token':token}
- def paypal_return(request):
- c = {}
- ip = request.META.get('REMOTE_ADDR','')
- log('PAYPAL:RETURN:CLIENT_IP='+str(ip)+',DATA_RECEIVED_FROM_BROWSER='+str(request.GET))
- token = request.GET.get('token','').encode('utf-8')
- payerid = request.GET.get('PayerID','').encode('utf-8')
- response = models.paypal.get_payer_details(token,payerid)
- log('PAYPAL:RETURN:PAYER_DETAILS='+str(response))
- if response and not response['ACK'][0] == 'Success':
- c['error'] = True
- return render_page(request,'modules/employer/credit_complete.html',c)
- try:
- credit = Credit.retrieve_by_paypal_token(token)
- except:
- credit = None
- if not credit:
- c['error'] = True
- return render_page(request,'modules/employer/credit_complete.html',c)
- price = credit.get_property('price',0)
- credit_listings = credit.get_property('credit_listings',0)
- credit_resumes = credit.get_property('credit_resumes',0)
- creator_login = credit.export_property('creator_login')
- user = UserEmployer.init(creator_login)
- credit.properties['credit_datetime'] = int(time.time())
- credit.sync_to_persistence(force_update=True)
- models.paypal.perform_transaction(price,token,payerid)
- user.topup_listing_credit(credit_listings)
- user.topup_resume_credit(credit_resumes)
- user.sync_to_persistence(force_update=True)
- c['credit_listings'] = credit_listings
- c['credit_resumes'] = credit_resumes
- transaction_id = credit.export_property('_id')
- from django.template import Context,Template
- t = Template(EMAIL_HEADER+"Dear employer, <br/><br/> Your credit purchasing ({{credit_listings}} Listings and {{credit_resumes}} Resumes) is successful.Attached is the invoice.<br/><br/>Member:{{company}}<br/>Email:{{login}}<br/>Price:${{price}}<br/>Order Number:{{transaction_id}}"+EMAIL_FOOTER)
- login = user.export_property("login")
- c = Context({"company":user.export_property('company'),"login":login,"credit_listings":credit_listings,"credit_resumes":credit_resumes,"price":price,"transaction_id":transaction_id})
- html = t.render(c)
- subject = "Your purchasing at Qrinno #" + transaction_id + " is successful"
- mc_sendmail(login, subject, html,['credit-topup'])
- return render_page(request,'modules/employer/credit_complete.html',c)
- def paypal_cancel(request):
- c = {}
- return render_page(request,'modules/employer/credit_cancel.html',c)
- def cvat_optin(request):
- c = {}
- return render_page(request,'cvat/index.html',c)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement