Advertisement
Guest User

python '_C_API'

a guest
Mar 7th, 2016
553
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 104.77 KB | None | 0 0
  1. # -*- coding: utf-8 -*-
  2. from django.shortcuts import render_to_response
  3. from django.views.decorators.csrf import ensure_csrf_cookie,csrf_protect
  4. from django.views.decorators.http import require_POST
  5. from django.http import HttpRequest,HttpResponse,HttpResponseNotFound,HttpResponseRedirect
  6. from django.core.context_processors import csrf
  7. from django.template.loader import *
  8. from django.template import Template,Context
  9. from django.core.cache import cache
  10. import urllib2
  11. import simplejson
  12. import operator
  13.  
  14. OTHER_ERR_CODE = 'OTHER_ERR'
  15. AUTH_ERR_CODE = 'AUTH_ERR'
  16. FB_USER_NOT_EXIST_CODE = 'FB_USER_NOT_EXIST_ERROR'
  17. LOGIN_REQUIRED_CODE = 'LOGIN_MISSING'
  18. USER_NOT_FOUND_CODE = 'USER_NOT_FOUND'
  19. RESUME_NOT_FOUND_CODE = 'RESUME_NOT_FOUND'
  20. ACCESS_ERR_CODE = "ACCESS_ERROR"
  21. JOB_NOT_FOUND_CODE = 'JOB_NOT_FOUND'
  22. PROJECT_NOT_FOUND_CODE = 'PROJ_NOT_FOUND'
  23. CREDIT_NOT_ENOUGH = 'CREDIT_NOT_ENOUGH'
  24.  
  25. from models.user_models import *
  26. from models.auth_models import *
  27. from models.resume_models import *
  28. from models.job_models import *
  29. from models.project_models import *
  30. from models.transaction_models import *
  31. from models.file_models import *
  32. from models.logger import *
  33.  
  34. import models.paypal
  35. import time
  36.  
  37. from django import template
  38. from django.template.defaultfilters import stringfilter
  39.  
  40. register = template.Library()
  41.  
  42. @register.filter
  43. @stringfilter
  44. def trim(value):
  45.     return value.strip()
  46.  
  47. class ViewException(Exception):
  48.     def __init__(self, value, code):
  49.         self.value = value
  50.         self.code = code
  51.     def __str__(self):
  52.         return repr(self.value)
  53.  
  54. def render_page(request,content_template,context,session=None):
  55.     context['content_template'] = content_template
  56.     if session:
  57.         user = session.get_property('user_model')
  58.         context['user'] = user.export_properties(['login'])
  59.     context.update(csrf(request))
  60.     return render_to_response('page.html', context)
  61.  
  62. def json_view(func):
  63.     def wrap(request, *a, **kw):
  64.         response = None
  65.         try:
  66.             response = func(request, *a, **kw)
  67.             assert isinstance(response, dict)
  68.             if 'result' not in response:
  69.                 response['result'] = 'ok'
  70.         except KeyboardInterrupt:
  71.             # Allow keyboard interrupts through for debugging.
  72.             raise
  73.         except Exception, e:
  74.             import sys, os,traceback
  75.             exc_type, exc_obj, exc_tb = sys.exc_info()
  76.             traceback = traceback.extract_tb(exc_tb)
  77.  
  78.             subject = 'JSON view error: %s' % request.path
  79.             try:
  80.                 request_repr = repr(request)
  81.             except:
  82.                 request_repr = 'Request repr() unavailable'
  83.             import traceback
  84.  
  85.             # Come what may, we're returning JSON.
  86.             if hasattr(e, 'message'):
  87.                 try:
  88.                     msg = e.value
  89.                 except:
  90.                     msg = None
  91.                 if not msg:
  92.                     try:
  93.                         msg = e.message
  94.                     except:
  95.                         msg = 'unknow exception'
  96.  
  97.                 tb = None
  98.                
  99.                 try:
  100.                     code = e.code
  101.                 except:
  102.                     tb = traceback.extract_tb(exc_tb)
  103.                     code = OTHER_ERR_CODE
  104.  
  105.             else:
  106.                 msg = _('Internal error')+': '+str(e)
  107.  
  108.             response = {'result': 'error',
  109.                         'text': msg,
  110.                         'code': code}
  111.  
  112.             if tb:
  113.                 response['traceback'] = tb
  114.  
  115.  
  116.         json_str = json.dumps(response,ensure_ascii=True)
  117.         return HttpResponse(json_str, mimetype='application/json;charset=\'utf-8\'')
  118.     return wrap
  119.  
  120. def session_protect(func):
  121.     def wrap(request, *args, **kwargs):
  122.         token = request.COOKIES.get('qrinno_access_token',None)
  123.  
  124.         if token:
  125.             session = Session.init_session(token)
  126.         else:
  127.             return HttpResponseRedirect('/')
  128.  
  129.         return func(request, session, *args, **kwargs)
  130.     return wrap
  131.  
  132. def session_optional(func):
  133.     def wrap(request, *args, **kwargs):
  134.         session = None
  135.         token = request.COOKIES.get('qrinno_access_token',None)
  136.         if token:
  137.             session = Session.init_session(token)
  138.  
  139.         return func(request, session, *args, **kwargs)
  140.     return wrap
  141.  
  142. def session_employee(func):
  143.     def wrap(request, session, *args, **kwargs):
  144.         user = session.get_property('user_model')
  145.         if not user.get_property('class') in ['UserEmployee','UserAdmin']:
  146.             return HttpResponseRedirect('/')
  147.         return func(request, session, *args, **kwargs)
  148.     return wrap
  149.  
  150. def session_employer(func):
  151.     def wrap(request, session, *args, **kwargs):
  152.         user = session.get_property('user_model')
  153.         if not user.get_property('class') in ['UserEmployer','UserAdmin']:
  154.             return HttpResponseRedirect('/')
  155.         if not user.get_property('active'):
  156.             return HttpResponseRedirect('/employer/inactive/')
  157.         return func(request, session, *args, **kwargs)
  158.     return wrap
  159.  
  160. def session_admin(func):
  161.     def wrap(request, session, *args, **kwargs):
  162.         user = session.get_property('user_model')
  163.         if not user.get_property('class') == 'UserAdmin':
  164.             return HttpResponseRedirect('/')
  165.         return func(request, session, *args, **kwargs)
  166.     return wrap
  167.  
  168. @ensure_csrf_cookie
  169. @session_optional
  170. def index(request,session):
  171.     c = {}
  172.     c['INDUSTRIES'] = sorted(INDUSTRIES.items(),key=operator.itemgetter(1))
  173.     c['EXP_LEVELS'] = sorted(EXP_LEVELS.items(),key=operator.itemgetter(1))
  174.     c['LOCATIONS'] = sorted(LOCATIONS.items(),key=operator.itemgetter(0), reverse=True)
  175.     projects,count = Project.retrieve_all(1,6)
  176.     jobs,count = Job.retrieve_all(1,6)
  177.  
  178.     featued_industries_json = []
  179.     for industry in FEATURED_INDUSTRIES:
  180.         featued_industries_json.append((industry,INDUSTRIES[industry]))
  181.     c['FEATURED_INDUSTRIES'] = featued_industries_json[:12]
  182.     projects_json = []
  183.     for project in projects:
  184.         creator_login = project.get_property('creator_login')
  185.         employer = UserEmployer.init(creator_login)
  186.         project_json = project.properties
  187.         profile_pic = Logo.retrieve_by_creator(employer.export_property('login'))
  188.         if profile_pic:
  189.             project_json['logo'] = '/static'+profile_pic.get('public_url')
  190.         project_json['employer'] = employer.properties
  191.         project_json['id'] = project.export_property('_id')
  192.         projects_json.append(project_json)
  193.     c['projects'] = projects_json
  194.  
  195.     jobs_json = []
  196.     for job in jobs:
  197.         creator_login = job.get_property('creator_login')
  198.         employer = UserEmployer.init(creator_login)
  199.         job_json = job.properties
  200.         profile_pic = Logo.retrieve_by_creator(employer.export_property('login'))
  201.         if profile_pic:
  202.             job_json['logo'] = '/static'+profile_pic.get('public_url')
  203.         job_json['employer'] = employer.properties
  204.         job_json['id'] = job.export_property('_id')
  205.         jobs_json.append(job_json)
  206.     c['jobs'] = jobs_json
  207.  
  208.     employers_json = []
  209.     for employer_id in FEATURED_EMPLOYERS:
  210.         employer = UserEmployerById.init(employer_id)
  211.         if employer:
  212.             employer_json = employer.properties
  213.             employer_json['id'] = employer.properties['_id']
  214.             profile_pic = Logo.retrieve_by_creator(employer.export_property('login'))
  215.             if profile_pic:
  216.                 employer_json['logo'] = '/static'+profile_pic.get('public_url')
  217.            
  218.             employers_json.append(employer_json)
  219.  
  220.     c['employers'] = employers_json[:5]
  221.     c['FEATURED_EMPLOYERS'] = FEATURED_EMPLOYERS
  222.    
  223.    
  224.     news_feed = urllib2.urlopen("http://cms1.qrinno.com/?feed=json")
  225.     news_feed_json = json.loads(news_feed.read())
  226.     featured_news = []
  227.     ads = []
  228.     events = []
  229.     try:
  230.         for news in news_feed_json:
  231.             categories = news.get('categories',[])
  232.             featured = False
  233.             ad = False
  234.             event = False
  235.             for cat in categories:
  236.                 if cat == 'Featured':
  237.                     featured = True
  238.                 if cat == "Sidebar":
  239.                     ad = True
  240.                 if cat == 'Events':
  241.                     event = True
  242.             try:
  243.                 news['date'] = news['date'].split(',')[0]
  244.             except:
  245.                 pass
  246.  
  247.             if featured:
  248.                 featured_news.append(news)
  249.  
  250.             if ad:
  251.                 ads.append(news)
  252.            
  253.             if event:
  254.                 events.append(news)
  255.     except:
  256.         pass
  257.  
  258.     c['featured_news'] = featured_news[:3]
  259.     c['ads'] = ads[:6]
  260.     c['events'] = events[:4]
  261.     return render_page(request,'modules/home.html',c,session)
  262.  
  263.  
  264. @ensure_csrf_cookie
  265. def employer_inactive(request):
  266.     c = {}
  267.     return render_page(request,'modules/employer/inactive.html',c)
  268.  
  269. @ensure_csrf_cookie
  270. @session_protect
  271. @session_employee
  272. def employee(request,session):
  273.     c = {}
  274.     user = session.get_property('user_model')
  275.     login = user.export_property('login')
  276.     resume = Resume.init(Base.md5(login))
  277.     if resume:
  278.         return HttpResponseRedirect('/employee/dashboard/')
  279.     return HttpResponseRedirect('/employee/create_profile/')
  280.  
  281. @ensure_csrf_cookie
  282. @session_protect
  283. @session_employee
  284. def employee_create_profile(request,session):
  285.     c = {}
  286.     c['EMPLOYMENT_TYPES'] = sorted(EMPLOYMENT_TYPES.items(),key=operator.itemgetter(0))
  287.     c['INDUSTRIES'] = sorted(INDUSTRIES.items(),key=operator.itemgetter(1))
  288.     c['FUNCTIONS'] = sorted(FUNCTIONS.items(),key=operator.itemgetter(1))
  289.     c['EXP_LEVELS'] = sorted(EXP_LEVELS.items(),key=operator.itemgetter(1))
  290.     c['AVAILABILITIES'] = sorted(AVAILABILITIES.items(),key=operator.itemgetter(0))
  291.     c['PR_STATUS'] = sorted(PR_STATUS.items(),key=operator.itemgetter(0))
  292.     c['COUNTRIES'] = sorted(COUNTRIES.items(),key=operator.itemgetter(1))
  293.     user = session.get_property('user_model')
  294.     login = user.export_property('login')
  295.     resume = Resume.init(Base.md5(login))
  296.     return render_page(request,'modules/employee/create_profile.html',c,session)
  297.  
  298. @ensure_csrf_cookie
  299. @session_protect
  300. @session_employee
  301. def employee_dashboard(request,session):
  302.     c = {}
  303.     user = session.get_property('user_model')
  304.     login = user.export_property('login')
  305.     resume = Resume.init(Base.md5(login))
  306.     if not resume:
  307.         return HttpResponseRedirect('/employee/create_profile/')
  308.  
  309.     profile_pic = ProfilePic.retrieve_by_creator(login)
  310.     resume_doc = ResumeDoc.retrieve_by_creator(login)
  311.     c['login'] = login
  312.     c['resume'] = resume.properties
  313.     if profile_pic:
  314.         c['profile'] = '/static'+profile_pic.get('public_url')
  315.     if resume_doc:
  316.         c['resume_doc'] = '/static'+resume_doc.get('public_url')
  317.     if resume.get_property('complete',False):
  318.         c['completion'] = 100
  319.     else:
  320.         c['completion'] = 50
  321.  
  322.  
  323.     page_number = 1
  324.     page_size = 2
  325.  
  326.     applications = Application.retrieve_by_creator(user.get_property('login'))
  327.     bids = Bid.retrieve_by_creator(user.get_property('login'))
  328.     applications_json = []
  329.     for application in applications:
  330.         creator_login = application.get_property('creator_login')
  331.         job_id = application.get_property('job_id')
  332.         application_json = application.properties
  333.         applications_json.append(application_json)
  334.         job = Job.init(job_id)
  335.         if job:
  336.             application_json['job'] = job.properties
  337.  
  338.     for bid in bids:
  339.         creator_login = bid.get_property('creator_login')
  340.         project_id = bid.get_property('project_id')
  341.         application_json = bid.properties
  342.         applications_json.append(application_json)
  343.         project = Project.init(project_id)
  344.         if project:
  345.             application_json['project'] = project.properties
  346.  
  347.     def sort_func(x):
  348.         if isinstance(x, dict):
  349.             if x.get('timestamp'):
  350.                 return x['timestamp']
  351.             else:
  352.                 return 0
  353.         else:
  354.             return x
  355.  
  356.     applications_json = sorted(applications_json,key=sort_func)[(page_number-1)*page_size:page_number*page_size]
  357.     c['history'] = applications_json
  358.  
  359.     job_saves = JobSave.retrieve_by_creator(user.get_property('login'))
  360.     project_saves = ProjectSave.retrieve_by_creator(user.get_property('login'))
  361.     saves_json = []
  362.     for job_save in job_saves:
  363.         creator_login = job_save.get_property('creator_login')
  364.         job_id = job_save.get_property('job_id')
  365.         save_json = job_save.properties
  366.         job = Job.init(job_id)
  367.         if job:
  368.             save_json['job'] = job.properties
  369.  
  370.         saves_json.append(save_json)
  371.  
  372.     for project_save in project_saves:
  373.         creator_login = project_save.get_property('creator_login')
  374.         project_id = project_save.get_property('project_id')
  375.         save_json = project_save.properties
  376.         project = Project.init(project_id)
  377.         if project:
  378.             save_json['project'] = project.properties
  379.  
  380.         saves_json.append(save_json)
  381.  
  382.     saves_json = sorted(saves_json,key=sort_func)[(page_number-1)*page_size:page_number*page_size]
  383.     c['saves'] = saves_json
  384.  
  385.     keywords = ','.join(resume.get_property('skills',[]))
  386.     recommended_jobs,count = Job.retrieve_all(1,3,free_text=keywords)
  387.     recommended_projects,count = Project.retrieve_all(1,3,free_text=keywords)
  388.     recommended_json = []
  389.     for job in recommended_jobs:
  390.         recommended_json.append({'job':job.properties,'job_id':job.export_property('_id'),'timestamp':job.export_property('timestamp')})
  391.  
  392.     for project in recommended_projects:
  393.         recommended_json.append({'project':project.properties,'project_id':project.export_property('_id'),'timestamp':project.export_property('timestamp')})
  394.  
  395.     recommended_json = sorted(recommended_json,key=sort_func)
  396.     c['recommended'] = recommended_json
  397.     return render_page(request,'modules/employee/dashboard.html',c,session)
  398.  
  399. @ensure_csrf_cookie
  400. @session_protect
  401. @session_employee
  402. def employee_resume(request,session):
  403.     c = {}
  404.     user = session.get_property('user_model')
  405.     login = user.export_property('login')
  406.     resume = Resume.init(Base.md5(login))
  407.     if not resume:
  408.         return HttpResponseRedirect('/employee/create_profile/')
  409.     c['EMPLOYMENT_TYPES'] = sorted(EMPLOYMENT_TYPES.items(),key=operator.itemgetter(0))
  410.     c['AVAILABILITIES'] = sorted(AVAILABILITIES.items(),key=operator.itemgetter(0))
  411.     c['INDUSTRIES'] = sorted(INDUSTRIES.items(),key=operator.itemgetter(1))
  412.     c['FUNCTIONS'] = sorted(FUNCTIONS.items(),key=operator.itemgetter(1))
  413.     c['EXP_LEVELS'] = sorted(EXP_LEVELS.items(),key=operator.itemgetter(1))
  414.     c['PR_STATUS'] = sorted(PR_STATUS.items(),key=operator.itemgetter(0))
  415.     c['COUNTRIES'] = sorted(COUNTRIES.items(),key=operator.itemgetter(1))
  416.     return render_page(request,'modules/employee/resume.html',c,session)
  417.  
  418. @ensure_csrf_cookie
  419. @session_protect
  420. @session_admin
  421. def admin_employee_resume(request,session):
  422.     c = {}
  423.     user = session.get_property('user_model')
  424.     login = request.GET.get('login')
  425.     resume = Resume.init(Base.md5(login))
  426.     c['login'] = login
  427.     c['EMPLOYMENT_TYPES'] = sorted(EMPLOYMENT_TYPES.items(),key=operator.itemgetter(0))
  428.     c['AVAILABILITIES'] = sorted(AVAILABILITIES.items(),key=operator.itemgetter(0))
  429.     c['INDUSTRIES'] = sorted(INDUSTRIES.items(),key=operator.itemgetter(1))
  430.     c['FUNCTIONS'] = sorted(FUNCTIONS.items(),key=operator.itemgetter(1))
  431.     c['EXP_LEVELS'] = sorted(EXP_LEVELS.items(),key=operator.itemgetter(1))
  432.     c['PR_STATUS'] = sorted(PR_STATUS.items(),key=operator.itemgetter(0))
  433.     c['COUNTRIES'] = sorted(COUNTRIES.items(),key=operator.itemgetter(1))
  434.     c['login'] = login
  435.     return render_page(request,'modules/admin/resume.html',c,session)
  436.  
  437. @ensure_csrf_cookie
  438. @session_protect
  439. @session_admin
  440. def admin_job_approvals(request,session):
  441.     c = {}
  442.     return render_page(request,'modules/admin/job_approvals.html',c,session)
  443.  
  444. @ensure_csrf_cookie
  445. @session_protect
  446. @session_admin
  447. def admin_project_approvals(request,session):
  448.     c = {}
  449.     return render_page(request,'modules/admin/project_approvals.html',c,session)
  450.  
  451. @ensure_csrf_cookie
  452. @session_protect
  453. @session_employee
  454. def employee_history(request,session):
  455.     c = {}
  456.     return render_page(request,'modules/employee/history.html',c,session)
  457.  
  458. @ensure_csrf_cookie
  459. @session_protect
  460. @session_employee
  461. def employee_save(request,session):
  462.     c = {}
  463.     return render_page(request,'modules/employee/save.html',c,session)
  464.  
  465. @ensure_csrf_cookie
  466. @session_protect
  467. @session_employee
  468. def employee_settings(request,session):
  469.     c = {}
  470.     user = session.get_property('user_model')
  471.     login = user.export_property('login')
  472.     resume = Resume.init(Base.md5(login))
  473.     if resume:
  474.         c['resume'] = resume.properties
  475.     else:
  476.         c['resume'] = None
  477.  
  478.     user = UserEmployee.init(login)
  479.     c['fb_id'] = user.get_property('fb_id')
  480.     return render_page(request,'modules/employee/settings.html',c,session)
  481.  
  482. @ensure_csrf_cookie
  483. @session_protect
  484. @session_employer
  485. def employer(request,session):
  486.     c = {}
  487.     user = session.get_property('user_model')
  488.     login = user.get_property('login')
  489.     employer = UserEmployer.init(login)
  490.     completeness = get_employer_profile_completeness(employer.properties)
  491.     if completeness <= 60:
  492.         return HttpResponseRedirect('/employer/create_profile')
  493.     return HttpResponseRedirect('/employer/dashboard/')
  494.  
  495. @ensure_csrf_cookie
  496. @session_protect
  497. @session_admin
  498. def admin(request,session):
  499.     c = {}
  500.     user = session.get_property('user_model')
  501.     login = user.get_property('login')
  502.     admin = UserAdmin.init(login)
  503.     return render_page(request,'modules/admin/dashboard.html',c,session)
  504.  
  505. @ensure_csrf_cookie
  506. @session_protect
  507. @session_admin
  508. def admin_employers(request,session):
  509.     c = {}
  510.     user = session.get_property('user_model')
  511.     login = user.get_property('login')
  512.     admin = UserAdmin.init(login)
  513.     return render_page(request,'modules/admin/employers.html',c,session)
  514.  
  515. @ensure_csrf_cookie
  516. @session_protect
  517. @session_admin
  518. def admin_employees(request,session):
  519.     c = {}
  520.     user = session.get_property('user_model')
  521.     login = user.get_property('login')
  522.     admin = UserAdmin.init(login)
  523.     return render_page(request,'modules/admin/employees.html',c,session)
  524.  
  525. @csrf_protect
  526. @require_POST
  527. @session_protect
  528. @session_admin
  529. @json_view
  530. def ajax_list_inactive_employers(request,session):
  531.     c = {}
  532.     user = session.get_property('user_model')
  533.     login = user.export_property('login')
  534.  
  535.     employers = UserEmployer.retrieve_all(query={'active':False,'class':'UserEmployer'})
  536.     employer_json = []
  537.     for employer in employers:
  538.         employer_json.append(employer.properties)
  539.     return_dict = {'login':user.export_property('login'),'employers':employer_json}
  540.     return return_dict
  541.  
  542. @csrf_protect
  543. @require_POST
  544. @session_protect
  545. @session_admin
  546. @json_view
  547. def ajax_approve_employers(request,session):
  548.     c = {}
  549.     user = session.get_property('user_model')
  550.     login = request.POST.get('login')
  551.  
  552.     employer = UserEmployer.init(login)
  553.     if employer:
  554.         employer.set_property(active=True)
  555.         employer.sync_to_persistence(force_update=True)
  556.    
  557.         from django.template import Context,Template
  558.         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)
  559.  
  560.         c = Context({"company":employer.export_property('company')})
  561.         html = t.render(c)
  562.         subject = "Your Account has been approved"
  563.         mc_sendmail(login, subject, html,['employer-approval'])
  564.         if employer.get_property('email'):
  565.             mc_sendmail(employer.export_property('email'), subject, html,['employer-approval'])
  566.     return_dict = {'employer':employer.properties}
  567.     return return_dict
  568.  
  569. def forgot(request):
  570.     c = {}
  571.     return render_page(request,'modules/forgot_password.html',c)
  572.  
  573. def forgot_generate(request):
  574.     c = {}
  575.     login = request.POST.get('login')
  576.     if login:
  577.         token = SessionForgotPassword(login=login)
  578.         token.gen_passcode()
  579.         token.sync_to_cache()
  580.         token.mail(login)
  581.  
  582.     return render_page(request,'modules/forgot_password_generation.html',c)
  583.  
  584. def forgot_password_passcode(request):
  585.     login = request.GET.get('login','')
  586.     passcode = request.GET.get('passcode','')
  587.     c = {}
  588.     c['login'] = login
  589.     c['passcode'] = passcode
  590.     return render_page(request,'modules/forgot_password_reset.html',c)
  591.  
  592. def forgot_password_reset(request):
  593.     login = request.POST.get('login')
  594.     password = request.POST.get('password','')
  595.     passcode = request.POST.get('passcode')
  596.     session = SessionForgotPassword.init_session(login)
  597.     message = 'Password is already reset.'
  598.  
  599.     if not session or session and not session.authenicate(passcode):
  600.         message = "Error, passcode expired or not valid."
  601.         c = {}
  602.         c['message'] = message
  603.         return render_page(request,'modules/forgot_password_reset_done.html',c)
  604.  
  605.     if len(password) > 4:
  606.         password_md5 = Base.md5(password)
  607.         user = User.init(login)
  608.         user.set_property(password_md5=password_md5)
  609.         user.sync_to_persistence(force_update=True)
  610.         #message = "Error, please try to generate another request from the app."
  611.     else:
  612.         message = "Error, password must be at least 4 charaters long."
  613.     c = {}
  614.     c['message'] = message
  615.     return render_page(request,'modules/forgot_password_reset_done.html',c)
  616.  
  617.  
  618. @csrf_protect
  619. @require_POST
  620. @session_protect
  621. @session_admin
  622. @json_view
  623. def ajax_reject_employers(request,session):
  624.     c = {}
  625.     user = session.get_property('user_model')
  626.     login = request.POST.get('login')
  627.  
  628.     employer = UserEmployer.init(login)
  629.     if employer:
  630.         UserEmployer.remove(login)
  631.    
  632.         from django.template import Context,Template
  633.         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)
  634.  
  635.         c = Context({"company":employer.export_property('company')})
  636.         html = t.render(c)
  637.         subject = "Your Account has been rejected"
  638.         mc_sendmail(login, subject, html,['employer-rejection'])
  639.         if employer.get_property('email'):
  640.             mc_sendmail(employer.export_property('email'), subject, html,['employer-rejection'])
  641.     return_dict = {'employer':employer.properties}
  642.     return return_dict
  643.  
  644. def get_employer_profile_completeness(properties):
  645.     completeness = 0
  646.     if properties.get('writeup'):
  647.         completeness = completeness + 10
  648.     if properties.get('industry'):
  649.         completeness = completeness + 10
  650.     if properties.get('size'):
  651.         completeness = completeness + 10
  652.     if properties.get('contact_person'):
  653.         completeness = completeness + 10
  654.     if properties.get('email'):
  655.         completeness = completeness + 10
  656.     if properties.get('tel'):
  657.         completeness = completeness + 10
  658.     profile_pic = Logo.retrieve_by_creator(properties.get('login'))
  659.     if profile_pic:
  660.         completeness = completeness + 20
  661.     if properties.get('address'):
  662.         completeness = completeness + 10
  663.     if properties.get('website'):
  664.         completeness = completeness + 10
  665.     return completeness
  666.  
  667. @ensure_csrf_cookie
  668. @session_protect
  669. @session_employer
  670. def employer_dashboard(request,session):
  671.     c = {}
  672.     user = session.get_property('user_model')
  673.     login = user.get_property('login')
  674.     employer = UserEmployer.init(login)
  675.     profile_pic = Logo.retrieve_by_creator(login)
  676.     c['employer'] = employer.properties
  677.     completeness = get_employer_profile_completeness(employer.properties)
  678.     if completeness < 60:
  679.         return HttpResponseRedirect('/employer/create_profile')
  680.     c['completion'] = completeness
  681.     c['login'] = login
  682.     if profile_pic:
  683.         c['logo'] = '/static'+profile_pic.get('public_url')
  684.  
  685.     page_number = 1
  686.     page_size = 3
  687.     jobs, count = Job.retrieve_by_creator(user.get_property('login'),page_number,page_size)
  688.     projects, count = Project.retrieve_by_creator(user.get_property('login'),page_number,page_size)
  689.  
  690.     listing_json = []
  691.     for job in jobs:
  692.         job_json = job.properties;
  693.         job_json['job_id'] = job.get_property('_id')
  694.         listing_json.append({'job':job_json})
  695.  
  696.     for project in projects:
  697.         project_json = project.properties
  698.         project_json['project_id'] = project.get_property('_id')
  699.         listing_json.append({'project':project_json})
  700.  
  701.     c['listings'] = listing_json
  702.     return render_page(request,'modules/employer/dashboard.html',c,session)
  703.  
  704. @ensure_csrf_cookie
  705. @session_protect
  706. @session_employer
  707. def employer_create_profile(request,session):
  708.     c = {}
  709.     c['INDUSTRIES'] = sorted(INDUSTRIES.items(),key=operator.itemgetter(1))
  710.     c['COMPANY_SIZES'] = sorted(COMPANY_SIZES.items(),key=operator.itemgetter(0))
  711.     user = session.get_property('user_model')
  712.     user = session.get_property('user_model')
  713.     login = user.export_property('login')
  714.     return render_page(request,'modules/employer/create_profile.html',c,session)
  715.  
  716. @ensure_csrf_cookie
  717. @session_protect
  718. @session_employer
  719. def employer_profile(request,session):
  720.     c = {}
  721.     c['INDUSTRIES'] = sorted(INDUSTRIES.items(),key=operator.itemgetter(1))
  722.     c['COMPANY_SIZES'] = sorted(COMPANY_SIZES.items(),key=operator.itemgetter(0))
  723.     user = session.get_property('user_model')
  724.     login = user.export_property('login')
  725.     employer = UserEmployer.init(login)
  726.     completeness = get_employer_profile_completeness(employer.properties)
  727.     if completeness < 60:
  728.         return HttpResponseRedirect('/employer/create_profile')
  729.     return render_page(request,'modules/employer/profile.html',c,session)
  730.  
  731. @ensure_csrf_cookie
  732. @session_protect
  733. @session_admin
  734. def admin_employer_profile(request,session):
  735.     c = {}
  736.     c['INDUSTRIES'] = sorted(INDUSTRIES.items(),key=operator.itemgetter(1))
  737.     c['COMPANY_SIZES'] = sorted(COMPANY_SIZES.items(),key=operator.itemgetter(0))
  738.     user = session.get_property('user_model')
  739.     login = request.GET.get('login')
  740.     employer = UserEmployer.init(login)
  741.     c['login'] = login
  742.     return render_page(request,'modules/admin/employer_profile.html',c,session)
  743.  
  744. @ensure_csrf_cookie
  745. @session_protect
  746. @session_employer
  747. def employer_job(request,session):
  748.     c = {}
  749.     c['INDUSTRIES'] = sorted(INDUSTRIES.items(),key=operator.itemgetter(1))
  750.     c['FUNCTIONS'] = sorted(FUNCTIONS.items(),key=operator.itemgetter(1))
  751.     c['EXP_LEVELS'] = sorted(EXP_LEVELS.items(),key=operator.itemgetter(1))
  752.     c['SALARY_RANGES'] = sorted(SALARY_RANGES.items(),key=operator.itemgetter(0))
  753.     c['VACANCIES'] = sorted(VACANCIES.items(),key=operator.itemgetter(0))
  754.     c['EMPLOYMENT_TYPES'] = sorted(EMPLOYMENT_TYPES.items(),key=operator.itemgetter(0))
  755.     c['LOCATIONS'] = sorted(LOCATIONS.items(),key=operator.itemgetter(0), reverse=True)
  756.     user = session.get_property('user_model')
  757.     login = user.export_property('login')
  758.     return render_page(request,'modules/employer/create_job.html',c,session)
  759.  
  760. @ensure_csrf_cookie
  761. @session_protect
  762. @session_employer
  763. def employer_project(request,session):
  764.     c = {}
  765.     c['INDUSTRIES'] = sorted(INDUSTRIES.items(),key=operator.itemgetter(1))
  766.     user = session.get_property('user_model')
  767.     login = user.export_property('login')
  768.     return render_page(request,'modules/employer/create_project.html',c,session)
  769.  
  770. @ensure_csrf_cookie
  771. @session_protect
  772. @session_employer
  773. def employer_search_resume(request,session):
  774.     c = {}
  775.     c['AVAILABILITIES'] = sorted(AVAILABILITIES.items(),key=operator.itemgetter(0))
  776.     c['INDUSTRIES'] = sorted(INDUSTRIES.items(),key=operator.itemgetter(1))
  777.     c['FUNCTIONS'] = sorted(FUNCTIONS.items(),key=operator.itemgetter(1))
  778.     c['EXP_LEVELS'] = sorted(EXP_LEVELS.items(),key=operator.itemgetter(1))
  779.     c['EMPLOYMENT_TYPES'] = sorted(EMPLOYMENT_TYPES.items(),key=operator.itemgetter(0))
  780.     c['COUNTRIES'] = sorted(COUNTRIES.items(),key=operator.itemgetter(1))
  781.     user = session.get_property('user_model')
  782.     login = user.export_property('login')
  783.     return render_page(request,'modules/employer/search_resume.html',c,session)
  784.  
  785. @ensure_csrf_cookie
  786. @session_protect
  787. @session_employer
  788. def employer_credit(request,session):
  789.     c = {}
  790.     user = session.get_property('user_model')
  791.     login = user.export_property('login')
  792.     c['PACKAGES'] = sorted(PACKAGES.items(),key=operator.itemgetter(0))
  793.     c['PAYPAL_URL'] = models.paypal.GW_REDIRECT
  794.     complete = request.GET.get('complete')
  795.     credit_listings_added = request.GET.get('listings')
  796.     credit_resumes_added = request.GET.get('resumes')
  797.     if complete:
  798.         c['complete'] = True
  799.         if credit_listings_added:
  800.             c['credit_listings_added'] = credit_listings_added
  801.         if credit_resumes_added:
  802.             c['credit_resumes_added'] = credit_resumes_added
  803.     if user:
  804.         c['credit_listings'] = user.get_property('credit_listings',0)
  805.         c['credit_resumes'] = user.get_property('credit_resumes',0)
  806.  
  807.  
  808.     return render_page(request,'modules/employer/credit.html',c,session)
  809.  
  810. @ensure_csrf_cookie
  811. @session_protect
  812. @session_employer
  813. def employer_resume(request,session,id):
  814.     job_id = request.GET.get('job_id')
  815.     project_id = request.GET.get('project_id')
  816.     c = {}
  817.     c['AVAILABILITIES'] = sorted(AVAILABILITIES.items(),key=operator.itemgetter(0))
  818.     c['INDUSTRIES'] = sorted(INDUSTRIES.items(),key=operator.itemgetter(1))
  819.     c['FUNCTIONS'] = sorted(FUNCTIONS.items(),key=operator.itemgetter(1))
  820.     c['EXP_LEVELS'] = sorted(EXP_LEVELS.items(),key=operator.itemgetter(1))
  821.     c['EMPLOYMENT_TYPES'] = sorted(EMPLOYMENT_TYPES.items(),key=operator.itemgetter(0))
  822.     c['PR_STATUS'] = sorted(PR_STATUS.items(),key=operator.itemgetter(0))
  823.     c['COUNTRIES'] = sorted(COUNTRIES.items(),key=operator.itemgetter(1))
  824.     c['id'] = id
  825.     user = session.get_property('user_model')
  826.     login = user.export_property('login')
  827.     purchase = Purchase.retrieve_by_resume_and_creator(id,login)
  828.     if purchase:
  829.         c['purchased'] = True
  830.  
  831.     applied = False
  832.     resume = Resume.init(id)
  833.     if job_id:
  834.         applications = Application.retrieve_by_job(job_id)
  835.         for application in applications:
  836.             if application.get_property('creator_login') == resume.get_property('login'):
  837.                 applied = True
  838.                 break
  839.  
  840.     if applied:
  841.         c['applied'] = True
  842.  
  843.     if job_id:
  844.         c['job_id'] = job_id
  845.     if project_id:
  846.         c['project_id'] = project_id
  847.     return render_page(request,'modules/employer/resume.html',c,session)
  848.  
  849. @ensure_csrf_cookie
  850. @session_protect
  851. @session_employer
  852. def employer_applications(request,session):
  853.     c = {}
  854.     c['EMPLOYMENT_TYPES'] = sorted(EMPLOYMENT_TYPES.items(),key=operator.itemgetter(0))
  855.     c['AVAILABILITIES'] = sorted(AVAILABILITIES.items(),key=operator.itemgetter(0))
  856.     c['INDUSTRIES'] = sorted(INDUSTRIES.items(),key=operator.itemgetter(1))
  857.     c['FUNCTIONS'] = sorted(FUNCTIONS.items(),key=operator.itemgetter(1))
  858.     c['EXP_LEVELS'] = sorted(EXP_LEVELS.items(),key=operator.itemgetter(1))
  859.     c['SALARY_RANGES'] = sorted(SALARY_RANGES.items(),key=operator.itemgetter(0))
  860.     c['VACANCIES'] = sorted(VACANCIES.items(),key=operator.itemgetter(0))
  861.     c['EMPLOYMENT_TYPES'] = sorted(EMPLOYMENT_TYPES.items(),key=operator.itemgetter(0))
  862.     c['LOCATIONS'] = sorted(LOCATIONS.items(),key=operator.itemgetter(0), reverse=True)
  863.     c['PR_STATUS'] = sorted(PR_STATUS.items(),key=operator.itemgetter(0))
  864.     c['COUNTRIES'] = sorted(COUNTRIES.items(),key=operator.itemgetter(1))
  865.     user = session.get_property('user_model')
  866.     login = user.export_property('login')
  867.     filter = request.GET.get('filter')
  868.     if filter:
  869.         c['filter'] = filter
  870.     return render_page(request,'modules/employer/applications.html',c,session)
  871.  
  872.  
  873. @ensure_csrf_cookie
  874. @session_protect
  875. @session_employer
  876. def employer_listings(request,session):
  877.     c = {}
  878.     c['EMPLOYMENT_TYPES'] = sorted(EMPLOYMENT_TYPES.items(),key=operator.itemgetter(0))
  879.     c['AVAILABILITIES'] = sorted(AVAILABILITIES.items(),key=operator.itemgetter(0))
  880.     c['INDUSTRIES'] = sorted(INDUSTRIES.items(),key=operator.itemgetter(1))
  881.     c['FUNCTIONS'] = sorted(FUNCTIONS.items(),key=operator.itemgetter(1))
  882.     c['EXP_LEVELS'] = sorted(EXP_LEVELS.items(),key=operator.itemgetter(1))
  883.     c['SALARY_RANGES'] = sorted(SALARY_RANGES.items(),key=operator.itemgetter(0))
  884.     c['VACANCIES'] = sorted(VACANCIES.items(),key=operator.itemgetter(0))
  885.     c['EMPLOYMENT_TYPES'] = sorted(EMPLOYMENT_TYPES.items(),key=operator.itemgetter(0))
  886.     c['LOCATIONS'] = sorted(LOCATIONS.items(),key=operator.itemgetter(0), reverse=True)
  887.     c['PR_STATUS'] = sorted(PR_STATUS.items(),key=operator.itemgetter(0))
  888.     c['COUNTRIES'] = sorted(COUNTRIES.items(),key=operator.itemgetter(1))
  889.     user = session.get_property('user_model')
  890.     login = user.export_property('login')
  891.     filter = request.GET.get('filter')
  892.     if filter:
  893.         c['filter'] = filter
  894.     return render_page(request,'modules/employer/listings.html',c,session)
  895.  
  896.  
  897. @ensure_csrf_cookie
  898. @session_optional
  899. def public_search_job(request,session):
  900.     c = {}
  901.     c['search_keywords'] = request.GET.get('searchKeywords','')
  902.     c['search_industry'] = request.GET.get('searchIndustry')
  903.     c['search_experience'] = request.GET.get('searchExperience')
  904.     c['search_location'] = request.GET.get('searchLocation')
  905.     c['INDUSTRIES'] = sorted(INDUSTRIES.items(),key=operator.itemgetter(1))
  906.     c['EXP_LEVELS'] = sorted(EXP_LEVELS.items(),key=operator.itemgetter(0))
  907.     c['SALARY_RANGES'] = sorted(SALARY_RANGES.items(),key=operator.itemgetter(0))
  908.     c['LOCATIONS'] = sorted(LOCATIONS.items(),key=operator.itemgetter(0), reverse=True)
  909.     if session:
  910.         user = session.get_property('user_model')
  911.         if user:
  912.             login = user.export_property('login')
  913.     return render_page(request,'modules/search_job.html',c,session)
  914.  
  915. @ensure_csrf_cookie
  916. @session_protect
  917. @session_employer
  918. def employer_settings(request,session):
  919.     c = {}
  920.     user = session.get_property('user_model')
  921.     login = user.export_property('login')
  922.     resume = Resume.init(Base.md5(login))
  923.     if resume:
  924.         c['resume'] = resume.properties
  925.     else:
  926.         c['resume'] = None
  927.  
  928.     user = UserEmployee.init(login)
  929.     c['fb_id'] = user.get_property('fb_id')
  930.     return render_page(request,'modules/employer/settings.html',c,session)
  931.  
  932. @ensure_csrf_cookie
  933. @session_optional
  934. def public_job(request,session,id):
  935.     c = {}
  936.     if session:
  937.         user = session.get_property('user_model')
  938.         if user:
  939.             login = user.export_property('login')
  940.             c['role'] = user.export_property('class')
  941.             application = Application.retrieve_by_job_and_creator(id,login)
  942.             if application:
  943.                 c['applied'] = True
  944.             save = JobSave.retrieve_by_job_and_creator(id,login)
  945.             if save:
  946.                 c['saved'] = True
  947.  
  948.     job = Job.init(id)
  949.     creator_login = job.get_property('creator_login')
  950.     employer = UserEmployer.init(creator_login)
  951.     if employer:
  952.         c['employer'] = employer.properties
  953.         c['employer']['id'] = employer.properties['_id']
  954.         if c['employer'].get('industry'):
  955.             c['employer']['industry'] = INDUSTRIES.get(c['employer']['industry'])
  956.         if c['employer'].get('size'):
  957.             c['employer']['size'] = COMPANY_SIZES.get(c['employer']['size'])
  958.  
  959.         profile_pic = Logo.retrieve_by_creator(employer.export_property('login'))
  960.         if profile_pic:
  961.             c['logo'] = '/static'+profile_pic.get('public_url')
  962.  
  963.     if job:
  964.         c['job'] = job.properties
  965.         c['job']['id'] = job.properties['_id']
  966.         if c['job'].get('salary_from'):
  967.             c['job']['salary_from'] = SALARY_RANGES.get(c['job']['salary_from'])
  968.         if c['job'].get('salary_to'):
  969.             c['job']['salary_to'] = SALARY_RANGES.get(c['job']['salary_to'])
  970.  
  971.    
  972.  
  973.     return render_page(request,'modules/job.html',c,session)
  974.  
  975. @ensure_csrf_cookie
  976. @session_optional
  977. def public_company(request,session,id):
  978.     c = {}
  979.     if session:
  980.         user = session.get_property('user_model')
  981.         if user:
  982.             login = user.export_property('login')
  983.             c['role'] = user.export_property('class')
  984.             application = Application.retrieve_by_job_and_creator(id,login)
  985.             if application:
  986.                 c['applied'] = True
  987.             save = JobSave.retrieve_by_job_and_creator(id,login)
  988.             if save:
  989.                 c['saved'] = True
  990.  
  991.     employer = UserEmployerById.init(id)
  992.     if employer:
  993.         c['employer'] = employer.properties
  994.         c['employer']['id'] = employer.properties['_id']
  995.         if c['employer'].get('industry'):
  996.             c['employer']['industry'] = INDUSTRIES.get(c['employer']['industry'])
  997.         if c['employer'].get('size'):
  998.             c['employer']['size'] = COMPANY_SIZES.get(c['employer']['size'])
  999.  
  1000.         profile_pic = Logo.retrieve_by_creator(employer.export_property('login'))
  1001.         if profile_pic:
  1002.             c['logo'] = '/static'+profile_pic.get('public_url')
  1003.  
  1004.     return render_page(request,'modules/company.html',c,session)
  1005.  
  1006. @ensure_csrf_cookie
  1007. @session_optional
  1008. def public_search_project(request,session):
  1009.     c = {}
  1010.     c['INDUSTRIES'] = sorted(INDUSTRIES.items(),key=operator.itemgetter(1))
  1011.     c['LOCATIONS'] = sorted(LOCATIONS.items(),key=operator.itemgetter(0), reverse=True)
  1012.     if session:
  1013.         user = session.get_property('user_model')
  1014.         if user:
  1015.             login = user.export_property('login')
  1016.     return render_page(request,'modules/search_project.html',c,session)
  1017.  
  1018. @ensure_csrf_cookie
  1019. @session_optional
  1020. def public_project(request,session,id):
  1021.     c = {}
  1022.     if session:
  1023.         user = session.get_property('user_model')
  1024.         if user:
  1025.             login = user.export_property('login')
  1026.             c['role'] = user.export_property('class')
  1027.             application = Bid.retrieve_by_project_and_creator(id,login)
  1028.             if application:
  1029.                 c['applied'] = True
  1030.  
  1031.             save = ProjectSave.retrieve_by_project_and_creator(id,login)
  1032.             if save:
  1033.                 c['saved'] = True
  1034.  
  1035.     project = Project.init(id)
  1036.     creator_login = project.get_property('creator_login')
  1037.     employer = UserEmployer.init(creator_login)
  1038.     if employer:
  1039.         c['employer'] = employer.properties
  1040.         c['employer']['id'] = employer.properties['_id']
  1041.         if c['employer'].get('industry'):
  1042.             c['employer']['industry'] = INDUSTRIES.get(c['employer']['industry'])
  1043.         if c['employer'].get('size'):
  1044.             c['employer']['size'] = COMPANY_SIZES.get(c['employer']['size'])
  1045.         profile_pic = Logo.retrieve_by_creator(employer.export_property('login'))
  1046.         if profile_pic:
  1047.             c['logo'] = '/static'+profile_pic.get('public_url')
  1048.  
  1049.     if employer:
  1050.         c['employer'] = employer.properties
  1051.     if project:
  1052.         c['project'] = project.properties
  1053.         c['project']['id'] = project.properties['_id']
  1054.     return render_page(request,'modules/project.html',c,session)
  1055.  
  1056. @csrf_protect
  1057. @require_POST
  1058. @json_view
  1059. def ajax_signup(request):
  1060.     c = {}
  1061.     email = request.POST.get('email')
  1062.     password_md5 = request.POST.get('password')
  1063.     fb_id = request.POST.get('fb_id')
  1064.     fb_profile_pic_url = request.POST.get('fb_profile_pic_url')
  1065.     company = request.POST.get('company')
  1066.  
  1067.     if company:
  1068.         user = UserEmployer(login=email,password_md5=password_md5,company=company,active=False)
  1069.     else:
  1070.         user = UserEmployee(login=email,password_md5=password_md5,fb_id=fb_id,fb_profile_pic_url=fb_profile_pic_url)
  1071.     user.sync_to_persistence()
  1072.     from django.template import Context,Template
  1073.     if company:
  1074.         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)
  1075.     else:
  1076.         t = Template(EMAIL_HEADER+"Dear employee, <br/><br/>Thanks for signing up at http://qrinno.com. Your account has been activated."+EMAIL_FOOTER)
  1077.     c = Context({"host":HOST_NAME,"login":email})
  1078.     html = t.render(c)
  1079.     mc_sendmail(email,"Thanks for signing up at Qrinno.com", html, ['sign-ups'])
  1080.  
  1081.     if company:
  1082.         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)
  1083.         c = Context({"host":HOST_NAME,"employer":company})
  1084.         html = t.render(c)
  1085.         mc_sendmail(ADMIN_EMAIL,"A new employer is waiting for approval", html, ['approvals'])
  1086.  
  1087.         if user.get_property('email'):
  1088.             mc_sendmail(user.export_property('email'), "Thanks for signing up at Qrinno.com", html,['sign-ups'])
  1089.  
  1090.     return {'login':user.export_property('login'),'id':user.export_property('_id'),'company':company}
  1091.  
  1092. @csrf_protect
  1093. @require_POST
  1094. @json_view
  1095. def ajax_signin(request):
  1096.     c = {}
  1097.     login = request.POST.get('email')
  1098.     password_md5 = request.POST.get('password')
  1099.     fb_id = request.POST.get('fb_id')
  1100.     fb_access_token = request.GET.get('fb_access_token')
  1101.    
  1102.     output = {}
  1103.     user = None
  1104.     if fb_id and not password_md5:
  1105.         user = UserEmployee.init_from_fb_id(fb_id)
  1106.         if not user:
  1107.             raise ViewException('No such fb user in qrinno',FB_USER_NOT_EXIST_CODE)
  1108.  
  1109.  
  1110.         session = Session(login=user.export_property('login'),user_model=user,fb_id=fb_id,fb_access_token=fb_access_token)
  1111.         #try:
  1112.         auth = session.authenicate_fb()
  1113.         output['access_token'] = auth[0]
  1114.         output['expiry'] = auth[1]
  1115.         output['method'] = 'fb'
  1116.         #except:
  1117.             #raise ViewException('Authnication error',AUTH_ERR_CODE)
  1118.  
  1119.     if password_md5:
  1120.         if login == 'admin':
  1121.             user = UserAdmin()
  1122.         else:
  1123.             user = User.init(login)
  1124.        
  1125.         session = Session(login=login,user_model=user,password_md5=password_md5)
  1126.         try:
  1127.             auth = session.authenicate()
  1128.             output['access_token'] = auth[0]
  1129.             output['expiry'] = auth[1]
  1130.             output['method'] = 'password'
  1131.            
  1132.         except:
  1133.             raise ViewException('Authnication error',AUTH_ERR_CODE)
  1134.  
  1135.     if not user:
  1136.         raise ViewException('Authnication error',AUTH_ERR_CODE)
  1137.  
  1138.     output['user'] = user.export_properties(['_id','login','profile_fb_pic_url','class'],key_mapping={'_id':'id'})
  1139.     session.sync_to_cache()
  1140.     return output
  1141.  
  1142. @csrf_protect
  1143. @require_POST
  1144. @session_protect
  1145. @session_employee
  1146. @json_view
  1147. def ajax_upsert_resume(request,session):
  1148.     c = {}
  1149.     user = session.get_property('user_model')
  1150.  
  1151.     work = request.POST.get('work')
  1152.     edu = request.POST.get('edu')
  1153.     skills = request.POST.get('skills')
  1154.     particulars = request.POST.get('particulars')
  1155.     login = user.export_property('login')
  1156.     writeup = request.POST.get('writeup')
  1157.     complete = request.POST.get('complete')
  1158.    
  1159.     if user.get_property('class') == 'UserAdmin':
  1160.         login = request.POST.get('login')
  1161.  
  1162.     if work:
  1163.         work_json = json.loads(work)
  1164.     else:
  1165.         work_json = None
  1166.  
  1167.     if edu:
  1168.         edu_json = json.loads(edu)
  1169.     else:
  1170.         edu_json = None
  1171.  
  1172.     if skills:
  1173.         skills_json = json.loads(skills)
  1174.     else:
  1175.         skills_json = None
  1176.  
  1177.     if particulars:
  1178.         particulars_json = json.loads(particulars)
  1179.     else:
  1180.         particulars_json = {}
  1181.  
  1182.     resume = Resume.init(Base.md5(login))
  1183.     if not resume:
  1184.         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'))
  1185.     else:
  1186.         if work_json:
  1187.             resume.properties['work_exp'] = work_json
  1188.         if edu_json:
  1189.             resume.properties['edu'] = edu_json
  1190.         if skills_json:
  1191.             resume.properties['skills'] = skills_json
  1192.         if particulars_json:
  1193.             if particulars_json.get('first_name'):
  1194.                 resume.properties['first_name'] = particulars_json.get('first_name')
  1195.             if particulars_json.get('last_name'):
  1196.                 resume.properties['last_name'] = particulars_json.get('last_name')
  1197.             if particulars_json.get('birthday'):
  1198.                 resume.properties['birthday'] = particulars_json.get('birthday')
  1199.             if particulars_json.get('address'):
  1200.                 resume.properties['address'] = particulars_json.get('address')
  1201.             if particulars_json.get('contact'):
  1202.                 resume.properties['tel'] = particulars_json.get('contact')
  1203.             if particulars_json.get('availability'):
  1204.                 resume.properties['availability'] = particulars_json.get('availability')
  1205.             if particulars_json.get('years_working'):
  1206.                 resume.properties['years_working'] = particulars_json.get('years_working')
  1207.             if particulars_json.get('employment_type'):
  1208.                 resume.properties['employment_type'] = particulars_json.get('employment_type')
  1209.             if particulars_json.get('last_salary'):
  1210.                 resume.properties['last_salary'] = particulars_json.get('last_salary')
  1211.             if particulars_json.get('expected_salary'):
  1212.                 resume.properties['expected_salary'] = particulars_json.get('expected_salary')
  1213.             if particulars_json.get('industry'):
  1214.                 resume.properties['industry'] = particulars_json.get('industry')
  1215.             if particulars_json.get('exp_level'):
  1216.                 resume.properties['exp_level'] = particulars_json.get('exp_level')
  1217.             if particulars_json.get('job_function'):
  1218.                 resume.properties['function'] = particulars_json.get('job_function')
  1219.             if particulars_json.get('pr_status'):
  1220.                 resume.properties['pr_status'] = particulars_json.get('pr_status')
  1221.             if particulars_json.get('linkedin_url'):
  1222.                 resume.properties['linkedin_url'] = particulars_json.get('linkedin_url')
  1223.             if particulars_json.get('nationality'):
  1224.                 resume.properties['nationality'] = particulars_json.get('nationality')
  1225.             if particulars_json.get('advisor'):
  1226.                 resume.properties['advisor'] = particulars_json.get('advisor')
  1227.  
  1228.         if writeup:
  1229.             resume.properties['writeup'] = writeup
  1230.  
  1231.     if complete:
  1232.         resume.properties['complete'] = True
  1233.  
  1234.     resume.sync_to_persistence()
  1235.     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}
  1236.  
  1237. @csrf_protect
  1238. @require_POST
  1239. @session_protect
  1240. @session_employee
  1241. @json_view
  1242. def ajax_employee_save_settings(request,session):
  1243.     c = {}
  1244.     user = session.get_property('user_model')
  1245.     login = user.export_property('login')
  1246.     searchable = request.POST.get('searchable')
  1247.     current_password = request.POST.get('current_password')
  1248.     new_password = request.POST.get('new_password')
  1249.    
  1250.     resume = Resume.init(Base.md5(login))
  1251.     user = UserEmployee.init(login)
  1252.     result = {}
  1253.     if resume:
  1254.         if not searchable == None and not searchable == resume.get_property('searchable'):
  1255.             if searchable == 'false':
  1256.                 searchable = False
  1257.             else:
  1258.                 searchable = True
  1259.             resume.properties['searchable'] = searchable
  1260.             resume.sync_to_persistence()
  1261.             result['searchable'] = 'updated'
  1262.         else:
  1263.             result['searchable'] = 'skipped'
  1264.     else:
  1265.         result['searchable'] = 'skipped'
  1266.  
  1267.     if Base.md5(current_password) == user.export_property('password_md5') and new_password and len(new_password) > 5:
  1268.         user.properties['password_md5'] = Base.md5(new_password)
  1269.         user.sync_to_persistence(force_update=True)
  1270.         result['password'] = 'updated'
  1271.     else:
  1272.         result['password'] = 'wrong'
  1273.  
  1274.     if not current_password or not new_password or new_password and len(new_password) <= 5:
  1275.         result['password'] = 'skipped'
  1276.  
  1277.     return result
  1278.  
  1279. @csrf_protect
  1280. @require_POST
  1281. @session_protect
  1282. @session_employer
  1283. @json_view
  1284. def ajax_employer_save_settings(request,session):
  1285.     c = {}
  1286.     user = session.get_property('user_model')
  1287.     login = user.export_property('login')
  1288.     current_password = request.POST.get('current_password')
  1289.     new_password = request.POST.get('new_password')
  1290.    
  1291.     user = UserEmployer.init(login)
  1292.     result = {}
  1293.  
  1294.     if Base.md5(current_password) == user.export_property('password_md5') and new_password and len(new_password) > 5:
  1295.         user.properties['password_md5'] = Base.md5(new_password)
  1296.         user.sync_to_persistence(force_update=True)
  1297.         result['password'] = 'updated'
  1298.     else:
  1299.         result['password'] = 'wrong'
  1300.  
  1301.     if not current_password or not new_password or new_password and len(new_password) <= 5:
  1302.         result['password'] = 'skipped'
  1303.  
  1304.     return result
  1305.  
  1306. @csrf_protect
  1307. @require_POST
  1308. @session_protect
  1309. @session_employee
  1310. @json_view
  1311. def ajax_upload_profile_pic(request,session):
  1312.     c = {}
  1313.     user = session.get_property('user_model')
  1314.     login = user.export_property('login')
  1315.     if user.get_property('class') == "UserAdmin":
  1316.         login = request.GET.get('login')
  1317.     import os
  1318.     fileName, fileExtension = os.path.splitext(request.FILES['file_profile_pic'].name)
  1319.     pic = ProfilePic(creator_login=login,file_name=login+'.'+fileExtension,file_handler=request.FILES['file_profile_pic'])
  1320.     #pic.hash_local_url()
  1321.     #return {'url':pic.export_property('local_url')}
  1322.     pic.dump_file()
  1323.     pic.sync_to_persistence(force_update=True)
  1324.     return {'login':login,'files':[{'url':'/static'+pic.export_property('public_url')}]}
  1325.  
  1326. @csrf_protect
  1327. @require_POST
  1328. @session_protect
  1329. @session_employee
  1330. @json_view
  1331. def ajax_upload_resume(request,session):
  1332.     c = {}
  1333.     user = session.get_property('user_model')
  1334.     login = user.export_property('login')
  1335.     if user.get_property('class') == "UserAdmin":
  1336.         login = request.GET.get('login')
  1337.     import os
  1338.     fileName, fileExtension = os.path.splitext(request.FILES['file_resume'].name)
  1339.     resume = ResumeDoc(creator_login=login,file_name=login+'.'+fileExtension,file_handler=request.FILES['file_resume'])
  1340.     resume.dump_file()
  1341.     resume.sync_to_persistence(force_update=True)
  1342.     return {'login':login,'files':[{'url':'/static'+resume.export_property('public_url')}]}
  1343.  
  1344. @csrf_protect
  1345. @require_POST
  1346. @session_protect
  1347. @session_employer
  1348. @json_view
  1349. def ajax_upload_logo(request,session):
  1350.     c = {}
  1351.     user = session.get_property('user_model')
  1352.     if user.get_property('class') == 'UserEmployer':
  1353.        login = user.export_property('login')
  1354.     elif user.get_property('class') == 'UserAdmin':
  1355.         login = request.GET.get('login')
  1356.     else:
  1357.         login = None
  1358.     import os
  1359.     fileName, fileExtension = os.path.splitext(request.FILES['file_logo'].name)
  1360.     pic = Logo(creator_login=login,file_name=user.export_property('login')+'.'+fileExtension,file_handler=request.FILES['file_logo'])
  1361.     pic.dump_file()
  1362.     pic.sync_to_persistence(force_update=True)
  1363.     return {'login':login,'files':[{'url':'/static'+pic.export_property('public_url')}]}
  1364.  
  1365.  
  1366. @csrf_protect
  1367. @require_POST
  1368. @session_protect
  1369. @session_employee
  1370. @json_view
  1371. def ajax_list_resume(request,session):
  1372.     c = {}
  1373.     user = session.get_property('user_model')
  1374.     login = user.export_property('login')
  1375.     resume = Resume.init(Base.md5(login))
  1376.     if not resume:
  1377.         raise ViewException('Resume not found',RESUME_NOT_FOUND_CODE)
  1378.  
  1379.     profile_pic = ProfilePic.retrieve_by_creator(login)
  1380.     resume_doc = ResumeDoc.retrieve_by_creator(login)
  1381.     return_dict = {'login':user.export_property('login'),'id':user.export_property('_id'),'resume':resume.properties}
  1382.     if profile_pic:
  1383.         return_dict['profile'] = '/static'+profile_pic.get('public_url')
  1384.     if resume_doc:
  1385.         return_dict['resume_doc'] = '/static'+resume_doc.get('public_url')
  1386.     return return_dict
  1387.  
  1388. @csrf_protect
  1389. @require_POST
  1390. @session_protect
  1391. @session_admin
  1392. @json_view
  1393. def ajax_admin_list_resume(request,session):
  1394.     c = {}
  1395.     user = session.get_property('user_model')
  1396.     login = request.POST.get('login')
  1397.     resume = Resume.init(Base.md5(login))
  1398.     if not resume:
  1399.         raise ViewException('Resume not found',RESUME_NOT_FOUND_CODE)
  1400.  
  1401.     profile_pic = ProfilePic.retrieve_by_creator(login)
  1402.     resume_doc = ResumeDoc.retrieve_by_creator(login)
  1403.     return_dict = {'login':user.export_property('login'),'id':user.export_property('_id'),'resume':resume.properties}
  1404.     if profile_pic:
  1405.         return_dict['profile'] = '/static'+profile_pic.get('public_url')
  1406.     if resume_doc:
  1407.         return_dict['resume_doc'] = '/static'+resume_doc.get('public_url')
  1408.     return return_dict
  1409.  
  1410. def mask_field(value):
  1411.     if value and len(value) > 0:
  1412.         return value[0] + 'xxxxxx'
  1413.  
  1414. @csrf_protect
  1415. @require_POST
  1416. @session_protect
  1417. @session_employer
  1418. @json_view
  1419. def ajax_list_resume_employer(request,session,id):
  1420.     job_id = request.GET.get('job_id')
  1421.     project_id = request.GET.get('project_id')
  1422.     c = {}
  1423.     user = session.get_property('user_model')
  1424.     login = user.export_property('login')
  1425.     resume = Resume.init(id)
  1426.     if not resume:
  1427.         raise ViewException('Resume not found',RESUME_NOT_FOUND_CODE)
  1428.  
  1429.     applied = False
  1430.  
  1431.     if job_id:
  1432.         applications = Application.retrieve_by_job(job_id)
  1433.         for application in applications:
  1434.             if application.get_property('creator_login') == resume.get_property('login'):
  1435.                 applied = True
  1436.                 break
  1437.  
  1438.     if project_id:
  1439.         bids = Bid.retrieve_by_project(project_id)
  1440.         for bid in bids:
  1441.             if bid.get_property('creator_login') == resume.get_property('login'):
  1442.                 applied = True
  1443.                 break
  1444.  
  1445.     purchase = Purchase.retrieve_by_resume_and_creator(id,login)
  1446.     resume_json = resume.properties
  1447.     if not purchase and not applied:
  1448.         resume_json['first_name'] = mask_field(resume_json['first_name'])
  1449.         resume_json['last_name'] = mask_field(resume_json['last_name'])
  1450.         resume_json['tel'] = mask_field(resume_json['tel'])
  1451.         resume_json['address'] = mask_field(resume_json['address'])
  1452.     else:
  1453.         profile_pic = ProfilePic.init(id)
  1454.         resume_doc = ResumeDoc.init(id)
  1455.         if profile_pic:
  1456.             resume_json['profile'] = '/static'+profile_pic.export_property('public_url')
  1457.         if resume_doc:
  1458.             resume_json['resume_doc'] = '/static'+resume_doc.export_property('public_url')
  1459.     return {'login':user.export_property('login'),'id':user.export_property('_id'),'resume':resume_json}
  1460.  
  1461. @csrf_protect
  1462. @require_POST
  1463. @session_optional
  1464. @json_view
  1465. def ajax_list_all_resumes(request,session):
  1466.     c = {}
  1467.     page_number = int(request.POST.get('page_number',1))
  1468.     page_size = int(request.POST.get('page_size',10))
  1469.     industry = request.POST.get('industry')
  1470.     exp_level = request.POST.get('exp_level')
  1471.     job_function = request.POST.get('job_function')
  1472.     keywords = request.POST.get('keywords')
  1473.     if keywords:
  1474.         keywords_list = keywords.split(',')
  1475.     else:
  1476.         keywords_list = []
  1477.  
  1478.     query = {}
  1479.     if industry:
  1480.         query['industry'] = industry
  1481.  
  1482.     if exp_level:
  1483.         query['exp_level'] = exp_level
  1484.        
  1485.     if job_function:
  1486.         query['function'] = job_function
  1487.  
  1488.     if not industry and not exp_level and not job_function and len(keywords_list) == 0:
  1489.         user = session.get_property('user_model')
  1490.         login = user.export_property('login')
  1491.         purchases = Purchase.retrieve_by_creator(login)
  1492.         purchased_ids = []
  1493.         for purchase in purchases:
  1494.             purchased_ids.append(purchase.export_property('resume_id'))
  1495.         query = {'_id':{'$in':purchased_ids}}
  1496.         resumes, count = Resume.retrieve_all(page_number,page_size,query=query)
  1497.     else:
  1498.         resumes, count = Resume.retrieve_all(page_number,page_size,query=query,free_text=keywords)
  1499.  
  1500.     resumes_json = []
  1501.     for resume in resumes:
  1502.         resumes_json.append(resume.properties)
  1503.  
  1504.     return {'resumes':resumes_json,'total':count,'query':query}
  1505.  
  1506. @csrf_protect
  1507. @require_POST
  1508. @session_protect
  1509. @session_employer
  1510. @json_view
  1511. def ajax_upsert_company_profile(request,session):
  1512.     c = {}
  1513.     user = session.get_property('user_model')
  1514.     if user.get_property('class') == 'UserEmployer':
  1515.         employer = UserEmployer.init(user.get_property('login'))
  1516.     elif user.get_property('class') == 'UserAdmin':
  1517.         employer = UserEmployer.init(request.POST.get('login'))
  1518.     else:
  1519.         employer = None
  1520.     company = request.POST.get('company')
  1521.     writeup = request.POST.get('writeup')
  1522.     address = request.POST.get('address')
  1523.     email = request.POST.get('email')
  1524.     website = request.POST.get('website')
  1525.     tel = request.POST.get('tel')
  1526.     extension = request.POST.get('tel_extension')
  1527.     contact_person = request.POST.get('contact_person')
  1528.     industry = request.POST.get('industry')
  1529.     size = request.POST.get('size')
  1530.     complete = request.POST.get('complete')
  1531.  
  1532.     if employer:
  1533.         if writeup:
  1534.             employer.properties['writeup'] = writeup
  1535.         if address:
  1536.             employer.properties['address'] = address
  1537.         if email:
  1538.             employer.properties['email'] = email
  1539.         if website:
  1540.             employer.properties['website'] = website
  1541.         if tel:
  1542.             employer.properties['tel'] = tel    
  1543.         if extension:
  1544.             employer.properties['tel_extension'] = extension
  1545.         if contact_person:
  1546.             employer.properties['contact_person'] = contact_person
  1547.         if industry:
  1548.             employer.properties['industry'] = industry
  1549.         if size:
  1550.             employer.properties['size'] = size
  1551.         if complete:
  1552.             employer.properties['complete'] = complete
  1553.  
  1554.     employer.sync_to_persistence(force_update=True)
  1555.     return {'complete':complete,'login':user.export_property('login'),'id':user.export_property('_id'),'employer':employer.properties}
  1556.  
  1557. @csrf_protect
  1558. @require_POST
  1559. @session_protect
  1560. @session_admin
  1561. @json_view
  1562. def ajax_upsert_credit(request,session):
  1563.     c = {}
  1564.     user = session.get_property('user_model')
  1565.     employer = UserEmployer.init(request.POST.get('login'))
  1566.  
  1567.     credit_listings = int(request.POST.get('listing','0'))
  1568.     credit_resumes = int(request.POST.get('resume','0'))
  1569.  
  1570.     if employer:
  1571.         if credit_listings >= 0:
  1572.             employer.properties['credit_listings'] = credit_listings
  1573.         if credit_resumes >= 0:
  1574.             employer.properties['credit_resumes'] = credit_resumes
  1575.  
  1576.     employer.sync_to_persistence(force_update=True)
  1577.     return {'complete':complete,'login':user.export_property('login'),'id':user.export_property('_id'),'employer':employer.properties}
  1578.  
  1579.  
  1580. @csrf_protect
  1581. @require_POST
  1582. @session_protect
  1583. @session_employer
  1584. @json_view
  1585. def ajax_list_profile(request,session):
  1586.     c = {}
  1587.     user = session.get_property('user_model')
  1588.     login = user.get_property('login')
  1589.     employer = UserEmployer.init(login)
  1590.     profile_pic = Logo.retrieve_by_creator(login)
  1591.     return_dict = {'login':user.export_property('login'),'id':user.export_property('_id'),'employer':employer.properties}
  1592.     if profile_pic:
  1593.         return_dict['logo'] = '/static'+profile_pic.get('public_url')
  1594.     return return_dict
  1595.  
  1596. @csrf_protect
  1597. @require_POST
  1598. @session_protect
  1599. @session_admin
  1600. @json_view
  1601. def ajax_admin_list_profile(request,session):
  1602.     c = {}
  1603.     user = session.get_property('user_model')
  1604.     login = request.POST.get('login')
  1605.     employer = UserEmployer.init(login)
  1606.     profile_pic = Logo.retrieve_by_creator(login)
  1607.     return_dict = {'login':user.export_property('login'),'id':user.export_property('_id'),'employer':employer.properties}
  1608.     if profile_pic:
  1609.         return_dict['logo'] = '/static'+profile_pic.get('public_url')
  1610.     return return_dict
  1611.  
  1612. @csrf_protect
  1613. @require_POST
  1614. @session_protect
  1615. @session_employer
  1616. @json_view
  1617. def ajax_upsert_job(request,session):
  1618.     c = {}
  1619.     user = session.get_property('user_model')
  1620.     job_id = request.POST.get('job_id')
  1621.     job = None
  1622.     if job_id:
  1623.         job = Job.init(job_id)
  1624.     job_title = request.POST.get('job_title')
  1625.     writeup = request.POST.get('writeup')
  1626.     location = request.POST.get('location')
  1627.     address = request.POST.get('address')
  1628.     qualification = request.POST.get('qualification')
  1629.     keywords = request.POST.get('keywords','')
  1630.     industry = request.POST.get('industry')
  1631.     function = request.POST.get('job_function')
  1632.     exp_level = request.POST.get('exp_level')
  1633.     employment_type = request.POST.get('employment_type')
  1634.     vacancies = request.POST.get('vacancies')
  1635.     salary_from = request.POST.get('salary_from')
  1636.     salary_to = request.POST.get('salary_to')
  1637.     show_contact = request.POST.get('show_contact',False)
  1638.     show_salary = request.POST.get('show_salary',False)
  1639.  
  1640.     if employment_type:
  1641.         employment_type_json = json.loads(employment_type)
  1642.     else:
  1643.         employment_type_json = None
  1644.  
  1645.     if keywords:
  1646.         keywords_json = json.loads(keywords)
  1647.     else:
  1648.         keywords_json = None
  1649.  
  1650.     if show_contact and show_contact == "true":
  1651.         show_contact = True
  1652.     else:
  1653.         show_contact = False
  1654.  
  1655.     if show_salary and show_salary == "true":
  1656.         show_salary = True
  1657.     else:
  1658.         show_salary = False
  1659.  
  1660.     if not job:
  1661.         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)
  1662.     else:
  1663.         if (not user.get_property('login') == job.get_property('creator_login')):
  1664.             raise ViewException('Access error',ACCESS_ERR_CODE)
  1665.         if writeup:
  1666.             job.properties['writeup'] = writeup
  1667.         if job_title:
  1668.             job.properties['job_title'] = job_title
  1669.         if location:
  1670.             job.properties['location'] = location
  1671.         if qualification:
  1672.             job.properties['qualification'] = qualification    
  1673.         if keywords:
  1674.             job.properties['keywords'] = keywords_json
  1675.         if industry:
  1676.             job.properties['industry'] = industry
  1677.         if function:
  1678.             job.properties['function'] = function
  1679.         if employment_type:
  1680.             job.properties['employment_type'] = employment_type_json
  1681.         if exp_level:
  1682.             job.properties['exp_level'] = exp_level
  1683.         if vacancies:
  1684.             job.properties['vacancies'] = vacancies
  1685.         if salary_from:
  1686.             job.properties['salary_from'] = salary_from
  1687.         if salary_to:
  1688.             job.properties['salary_to'] = salary_to
  1689.         if address:
  1690.             job.properties['address'] = address
  1691.        
  1692.         job.properties['show_salary'] = show_salary
  1693.         job.properties['show_contact'] = show_contact
  1694.     if job_id:  
  1695.         job.sync_to_persistence(force_update=True)
  1696.     else:
  1697.         job.sync_to_persistence()
  1698.     return {'login':user.export_property('login'),'id':user.export_property('_id'),'job':job.properties}
  1699.  
  1700. @csrf_protect
  1701. @require_POST
  1702. @session_protect
  1703. @session_employer
  1704. @json_view
  1705. def ajax_publish_job(request,session):
  1706.     c = {}
  1707.     user = session.get_property('user_model')
  1708.     job_id = request.POST.get('job_id')
  1709.     job = None
  1710.     if job_id:
  1711.         job = Job.init(job_id)
  1712.  
  1713.     if not job:
  1714.         raise ViewException('Job not found',JOB_NOT_FOUND_CODE)
  1715.     else:
  1716.         if (not user.get_property('login') == job.get_property('creator_login')):
  1717.             raise ViewException('Access error',ACCESS_ERR_CODE)
  1718.         if user.get_property('credit_listings') <= 0:
  1719.             raise ViewException('Credit not enough error',CREDIT_NOT_ENOUGH)
  1720.         if job.get_property('active',False) == False:
  1721.             job.properties['pending_approval'] = True
  1722.             job.properties['expired'] = False
  1723.             '''
  1724.            time_stamp = int(time.time())
  1725.            if job.get_property('expiry_date',0) > time_stamp:
  1726.                time_stamp = job.get_property('expiry_date',0)
  1727.            job.properties['expiry_date'] = time_stamp + 3600*24*30'''
  1728.             user = User.init(user.export_property('login'))
  1729.             user.use_listing_credit(1)
  1730.             user.sync_to_persistence(force_update=True)
  1731.             job.sync_to_persistence(force_update=True)
  1732.  
  1733.             from django.template import Context,Template
  1734.             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)
  1735.             login = job.export_property("creator_login")
  1736.             c = Context({"job_title":job.export_property('job_title'),"job_id":job.export_property('_id'),"host":HOST_NAME})
  1737.             html = t.render(c)
  1738.             subject = "Your job listing is waiting for approval"
  1739.             mc_sendmail(login, subject, html,['job-listing'])
  1740.  
  1741.             if user.get_property('email'):
  1742.                 mc_sendmail(user.export_property('email'), subject, html,['job-listing'])
  1743.  
  1744.  
  1745.     return {'login':user.export_property('login'),'id':user.export_property('_id'),'job':job.properties}
  1746.  
  1747. @csrf_protect
  1748. @require_POST
  1749. @session_protect
  1750. @session_admin
  1751. @json_view
  1752. def ajax_approve_publish_job(request,session):
  1753.     c = {}
  1754.     user = session.get_property('user_model')
  1755.     job_id = request.POST.get('job_id')
  1756.     job = None
  1757.     if job_id:
  1758.         job = Job.init(job_id)
  1759.  
  1760.     if not job:
  1761.         raise ViewException('Job not found',JOB_NOT_FOUND_CODE)
  1762.     else:
  1763.         if job.get_property('active',False) == False:
  1764.             job.properties['pending_approval'] = False
  1765.             job.properties['active'] = True
  1766.             job.properties['expired'] = False
  1767.             time_stamp = int(time.time())
  1768.             if job.get_property('expiry_date',0) > time_stamp:
  1769.                 time_stamp = job.get_property('expiry_date',0)
  1770.             job.properties['expiry_date'] = time_stamp + 3600*24*30
  1771.             job.sync_to_persistence(force_update=True)
  1772.  
  1773.             from django.template import Context,Template
  1774.             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)
  1775.             login = job.export_property("creator_login")
  1776.             c = Context({"job_title":job.export_property('job_title'),"job_id":job.export_property('_id'),"host":HOST_NAME})
  1777.             html = t.render(c)
  1778.             subject = "Your listing is successful"
  1779.             mc_sendmail(login, subject, html,['job-listing'])
  1780.            
  1781.             employer = UserEmployer.init(login)
  1782.             if employer.get_property('email'):
  1783.                 mc_sendmail(employer.export_property('email'), subject, html,['job-listing'])
  1784.  
  1785.     return {'job':job.properties}
  1786.  
  1787. @csrf_protect
  1788. @require_POST
  1789. @session_protect
  1790. @session_admin
  1791. @json_view
  1792. def ajax_reject_publish_job(request,session):
  1793.     c = {}
  1794.     user = session.get_property('user_model')
  1795.     job_id = request.POST.get('job_id')
  1796.     job = None
  1797.     if job_id:
  1798.         job = Job.init(job_id)
  1799.  
  1800.     if not job:
  1801.         raise ViewException('Job not found',JOB_NOT_FOUND_CODE)
  1802.     else:
  1803.         if job.get_property('active',False) == False:
  1804.             job.properties['pending_approval'] = False
  1805.             job.properties['active'] = False
  1806.             job.properties['rejected'] = True
  1807.             time_stamp = int(time.time())
  1808.             if job.get_property('expiry_date',0) > time_stamp:
  1809.                 time_stamp = job.get_property('expiry_date',0)
  1810.             job.properties['expiry_date'] = time_stamp + 3600*24*30
  1811.             job.sync_to_persistence(force_update=True)
  1812.             user = User.init(job.export_property('creator_login'))
  1813.             user.use_listing_credit(-1)
  1814.             user.sync_to_persistence(force_update=True)
  1815.             from django.template import Context,Template
  1816.             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)
  1817.             login = job.export_property("creator_login")
  1818.             c = Context({"job_title":job.export_property('job_title'),"job_id":job.export_property('_id'),"host":HOST_NAME})
  1819.             html = t.render(c)
  1820.             subject = "Your listing is rejected"
  1821.             mc_sendmail(login, subject, html,['job-listing'])
  1822.            
  1823.             employer = UserEmployer.init(login)
  1824.             if employer.get_property('email'):
  1825.                 mc_sendmail(employer.export_property('email'), subject, html,['job-listing'])
  1826.  
  1827.     return {'job':job.properties}
  1828.  
  1829.  
  1830. @csrf_protect
  1831. @require_POST
  1832. @session_protect
  1833. @session_employer
  1834. @json_view
  1835. def ajax_expire_job(request,session):
  1836.     c = {}
  1837.     user = session.get_property('user_model')
  1838.     job_id = request.POST.get('job_id')
  1839.     job = None
  1840.     if job_id:
  1841.         job = Job.init(job_id)
  1842.  
  1843.     if not job:
  1844.         raise ViewException('Job not found',JOB_NOT_FOUND_CODE)
  1845.     else:
  1846.         if (not user.get_property('login') == job.get_property('creator_login')):
  1847.             raise ViewException('Access error',ACCESS_ERR_CODE)
  1848.  
  1849.         if job.get_property('active',False) == True:
  1850.             job.properties['active'] = False
  1851.             job.properties['expired'] = True
  1852.             job.properties['expiry_date'] = int(time.time())
  1853.             job.sync_to_persistence(force_update=True)
  1854.  
  1855.     return {'login':user.export_property('login'),'id':user.export_property('_id'),'job':job.properties}
  1856.  
  1857. @csrf_protect
  1858. @require_POST
  1859. @session_protect
  1860. @session_employer
  1861. @json_view
  1862. def ajax_list_jobs(request,session):
  1863.     c = {}
  1864.     page_number = int(request.POST.get('page_number',1))
  1865.     page_size = int(request.POST.get('page_size',10))
  1866.     user = session.get_property('user_model')
  1867.     jobs, count = Job.retrieve_by_creator(user.get_property('login'),page_number,page_size)
  1868.  
  1869.     jobs_json = []
  1870.     for job in jobs:
  1871.         jobs_json.append(job.properties)
  1872.  
  1873.     return {'login':user.export_property('login'),'id':user.export_property('_id'),'jobs':jobs_json,'total':count}
  1874.  
  1875. @csrf_protect
  1876. @require_POST
  1877. @session_protect
  1878. @session_admin
  1879. @json_view
  1880. def ajax_list_all_employees(request,session):
  1881.     c = {}
  1882.     page_number = int(request.POST.get('page_number',1))
  1883.     page_size = int(request.POST.get('page_size',10))
  1884.     user = session.get_property('user_model')
  1885.     jobs, count = UserEmployee.retrieve_active(page_number,page_size)
  1886.  
  1887.     jobs_json = []
  1888.     for job in jobs:
  1889.         resume = Resume.init(Base.md5(job.get_property('login')))
  1890.         if resume:
  1891.             job.properties['first_name'] = resume.get_property('first_name')
  1892.             job.properties['last_name'] = resume.get_property('last_name')
  1893.             job.properties['resume'] = True
  1894.         jobs_json.append(job.properties)
  1895.  
  1896.     return {'login':user.export_property('login'),'id':user.export_property('_id'),'employees':jobs_json,'total':count}
  1897.  
  1898. @csrf_protect
  1899. @require_POST
  1900. @session_protect
  1901. @session_admin
  1902. @json_view
  1903. def ajax_list_all_employers(request,session):
  1904.     c = {}
  1905.     page_number = int(request.POST.get('page_number',1))
  1906.     page_size = int(request.POST.get('page_size',10))
  1907.     user = session.get_property('user_model')
  1908.     jobs, count = UserEmployer.retrieve_active(page_number,page_size)
  1909.  
  1910.     jobs_json = []
  1911.     for job in jobs:
  1912.         jobs_json.append(job.properties)
  1913.  
  1914.     return {'login':user.export_property('login'),'id':user.export_property('_id'),'employers':jobs_json,'total':count}
  1915.  
  1916. @csrf_protect
  1917. @require_POST
  1918. @json_view
  1919. def ajax_list_all_jobs(request):
  1920.     c = {}
  1921.     page_number = int(request.POST.get('page_number',1))
  1922.     page_size = int(request.POST.get('page_size',10))
  1923.     industry = request.POST.get('industry')
  1924.     if industry:
  1925.         industry_list = industry.split(',')
  1926.     else:
  1927.         industry_list = []
  1928.     exp_level = request.POST.get('exp_level')
  1929.     if exp_level:
  1930.         exp_level_list = exp_level.split(',')
  1931.     else:
  1932.         exp_level_list = []
  1933.     salary_from = request.POST.get('salary_from')
  1934.     salary_to = request.POST.get('salary_to')
  1935.     location = request.POST.get('location')
  1936.     keywords = request.POST.get('keywords')
  1937.     creator_login = request.POST.get('creator_login')
  1938.     pending_approval = request.POST.get('pending_approval')
  1939.     if keywords:
  1940.         keywords_list = keywords.split(',')
  1941.     else:
  1942.         keywords_list = []
  1943.  
  1944.     query = {}
  1945.     if industry_list:
  1946.         if len(industry_list) == 1:
  1947.             query['industry'] = industry_list[0]
  1948.         else:
  1949.             query['industry']= {'$in': industry_list}
  1950.  
  1951.     if exp_level_list:
  1952.         if len(exp_level_list) == 1:
  1953.             query['exp_level'] = exp_level_list[0]
  1954.         else:
  1955.             query['exp_level'] = {'$in': exp_level_list}
  1956.  
  1957.     if salary_from:
  1958.         query['salary_from'] = {'$gte': salary_from}
  1959.     if salary_to:
  1960.         query['salary_to'] = {'$lte': salary_to}
  1961.        
  1962.  
  1963.     if location:
  1964.         query['location'] = location
  1965.  
  1966.     if creator_login:
  1967.         query['creator_login'] = creator_login
  1968.  
  1969.     if not pending_approval == None:
  1970.         query = {}
  1971.         if pending_approval == 'true':
  1972.             query['pending_approval'] = True
  1973.         else:
  1974.             query['pending_approval'] = False
  1975.  
  1976.     employers = UserEmployer.retrieve_all(free_text=keywords)
  1977.     employer_logins = []
  1978.     for employer in employers:
  1979.         employer_logins.append(employer.get_property('login'))
  1980.  
  1981.     if len(employer_logins) > 0 and not query.get('creator_login'):
  1982.         if not query.get('$or'):
  1983.             query['$or'] = []
  1984.         query['$or'].append({'creator_login':{'$in':employer_logins}})
  1985.  
  1986.     jobs, count = Job.retrieve_all(page_number,page_size,query=query,free_text=keywords)
  1987.  
  1988.     jobs_json = []
  1989.     for job in jobs:
  1990.         creator_login = job.get_property('creator_login')
  1991.         employer = UserEmployer.init(creator_login)
  1992.         job_json = job.properties
  1993.         profile_pic = Logo.retrieve_by_creator(employer.export_property('login'))
  1994.         if profile_pic:
  1995.             job_json['logo'] = '/static'+profile_pic.get('public_url')
  1996.         job_json['employer'] = employer.properties
  1997.         jobs_json.append(job_json)
  1998.  
  1999.     return {'jobs':jobs_json,'total':count,'query':query}
  2000.  
  2001. @csrf_protect
  2002. @require_POST
  2003. @json_view
  2004. def ajax_list_job(request):
  2005.     c = {}
  2006.     job_id = request.GET.get('job_id')
  2007.     if job_id:
  2008.         job = Job.init(job_id)
  2009.         creator_login = job.get_property('creator_login')
  2010.         employer = UserEmployer.init(creator_login).properties
  2011.         job = job.properties
  2012.     else:
  2013.         job = None
  2014.         employer = None
  2015.  
  2016.     return {'job':job,'employer':employer}
  2017.  
  2018. @csrf_protect
  2019. @require_POST
  2020. @session_protect
  2021. @session_employer
  2022. @json_view
  2023. def ajax_upsert_project(request,session):
  2024.     c = {}
  2025.     user = session.get_property('user_model')
  2026.     project_id = request.POST.get('project_id')
  2027.     project = None
  2028.     if project_id:
  2029.         project = Project.init(project_id)
  2030.     project_title = request.POST.get('project_title')
  2031.     writeup = request.POST.get('writeup')
  2032.     qualification = request.POST.get('qualification')
  2033.     keywords = request.POST.get('keywords','').split(',')
  2034.     industry = request.POST.get('industry')
  2035.     show_contact = request.POST.get('show_contact',False)
  2036.     show_anonymous = request.POST.get('show_anonymous',False)
  2037.  
  2038.     if show_contact == "true":
  2039.         show_contact = True
  2040.     elif show_contact == "false":
  2041.         show_contact = False
  2042.  
  2043.     if show_anonymous == "true":
  2044.         show_anonymous = True
  2045.     elif show_anonymous == "false":
  2046.         show_anonymous = False
  2047.  
  2048.     if not project:
  2049.         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)
  2050.     else:
  2051.         if (not user.get_property('login') == project.get_property('creator_login')):
  2052.             raise ViewException('Access error',ACCESS_ERR_CODE)
  2053.         if writeup:
  2054.             project.properties['writeup'] = writeup
  2055.         if project_title:
  2056.             project.properties['project_title'] = project_title
  2057.         if qualification:
  2058.             project.properties['qualification'] = qualification    
  2059.         if keywords:
  2060.             project.properties['keywords'] = keywords
  2061.         if industry:
  2062.             project.properties['industry'] = industry
  2063.        
  2064.         project.properties['show_contact'] = show_contact
  2065.         project.properties['show_anonymous'] = show_anonymous
  2066.     if project_id:
  2067.         project.sync_to_persistence(force_update=True)
  2068.     else:        
  2069.         project.sync_to_persistence()
  2070.     return {'login':user.export_property('login'),'id':user.export_property('_id'),'project':project.properties}
  2071.  
  2072. @csrf_protect
  2073. @require_POST
  2074. @session_protect
  2075. @session_employer
  2076. @json_view
  2077. def ajax_list_projects(request,session):
  2078.     c = {}
  2079.     page_number = int(request.POST.get('page_number',1))
  2080.     page_size = int(request.POST.get('page_size',10))
  2081.     user = session.get_property('user_model')
  2082.  
  2083.     projects, count = Project.retrieve_by_creator(user.get_property('login'),page_number,page_size)
  2084.  
  2085.     projects_json = []
  2086.     for project in projects:
  2087.         projects_json.append(project.properties)
  2088.  
  2089.     return {'login':user.export_property('login'),'id':user.export_property('_id'),'projects':projects_json,'total':count}
  2090.  
  2091. @csrf_protect
  2092. @require_POST
  2093. @json_view
  2094. def ajax_list_all_projects(request):
  2095.     c = {}
  2096.     page_number = int(request.POST.get('page_number',1))
  2097.     page_size = int(request.POST.get('page_size',10))
  2098.     industry = request.POST.get('industry')
  2099.     creator_login = request.POST.get('creator_login')
  2100.     pending_approval = request.POST.get('pending_approval')
  2101.     if industry:
  2102.         industry_list = industry.split(',')
  2103.     else:
  2104.         industry_list = []
  2105.  
  2106.     location = request.POST.get('location')
  2107.     keywords = request.POST.get('keywords')
  2108.     if keywords:
  2109.         keywords_list = keywords.split(',')
  2110.     else:
  2111.         keywords_list = []
  2112.  
  2113.     query = {}
  2114.     if industry_list:
  2115.         if len(industry_list) == 1:
  2116.             query['industry'] = industry_list[0]
  2117.         else:
  2118.             query['industry']= {'$in': industry_list}
  2119.  
  2120.     if location:
  2121.         query['location'] = location
  2122.  
  2123.     if creator_login:
  2124.         query['creator_login'] = creator_login
  2125.  
  2126.     if not pending_approval == None:
  2127.         query = {}
  2128.         if pending_approval == 'true':
  2129.             query['pending_approval'] = True
  2130.         else:
  2131.             query['pending_approval'] = False
  2132.     employers = UserEmployer.retrieve_all(free_text=keywords)
  2133.     employer_logins = []
  2134.     for employer in employers:
  2135.         employer_logins.append(employer.get_property('login'))
  2136.  
  2137.     if len(employer_logins) > 0 and not query.get('creator_login'):
  2138.         if not query.get('$or'):
  2139.             query['$or'] = []
  2140.         query['$or'].append({'creator_login':{'$in':employer_logins}})
  2141.        
  2142.     projects,count = Project.retrieve_all(page_number,page_size,query=query,free_text=keywords)
  2143.  
  2144.     projects_json = []
  2145.     for project in projects:
  2146.         creator_login = project.get_property('creator_login')
  2147.         employer = UserEmployer.init(creator_login)
  2148.         project_json = project.properties
  2149.         profile_pic = Logo.retrieve_by_creator(employer.export_property('login'))
  2150.         if profile_pic:
  2151.             project_json['logo'] = '/static'+profile_pic.get('public_url')
  2152.         project_json['employer'] = employer.properties
  2153.         projects_json.append(project_json)
  2154.  
  2155.     return {'projects':projects_json,'total':count}
  2156.  
  2157. @csrf_protect
  2158. @require_POST
  2159. @session_protect
  2160. @session_employer
  2161. @json_view
  2162. def ajax_list_all_applications_bids(request,session):
  2163.     c = {}
  2164.     page_number = int(request.POST.get('page_number',1))
  2165.     page_size = int(request.POST.get('page_size',10))
  2166.     user = session.get_property('user_model')
  2167.     job_ids = Job.retrieve_ids_by_creator(user.get_property('login'))
  2168.     project_ids = Project.retrieve_ids_by_creator(user.get_property('login'))
  2169.  
  2170.     applications,count_app = Application.retrieve_by_jobs(job_ids,page_number,page_size/2)
  2171.     bids,count_bid = Bid.retrieve_by_projects(project_ids,page_number,page_size/2)
  2172.  
  2173.     applications_json = []
  2174.     for application in applications:
  2175.         creator_login = application.get_property('creator_login')
  2176.         applicant = Resume.init(Base.md5(creator_login))
  2177.         application_json = application.properties
  2178.         job = Job.init(application.get_property('job_id'))
  2179.         application_json['job'] = job.properties
  2180.         application_json['user'] = applicant.properties
  2181.         applications_json.append(application_json)
  2182.         application_json['resume_id'] = applicant.export_property('_id')
  2183.  
  2184.  
  2185.     bids_json = []
  2186.     for bid in bids:
  2187.         creator_login = bid.get_property('creator_login')
  2188.         applicant = Resume.init(Base.md5(creator_login))
  2189.         bid_json = bid.properties
  2190.         project = Project.init(bid.get_property('project_id'))
  2191.         bid_json['project'] = project.properties
  2192.         bid_json['user'] = applicant.properties
  2193.         bids_json.append(bid_json)
  2194.         bid_json['resume_id'] = applicant.export_property('_id')
  2195.  
  2196.     applications_json = applications_json + bids_json
  2197.  
  2198.     def sort_func(x):
  2199.         if isinstance(x, dict):
  2200.             if x.get('timestamp'):
  2201.                 return x['timestamp']
  2202.             else:
  2203.                 return 0
  2204.         else:
  2205.             return x
  2206.  
  2207.     applications_json = sorted(applications_json,key=sort_func,reverse=True)
  2208.  
  2209.     return {'login':user.export_property('login'),'id':user.export_property('_id'),'applications':applications_json,'total':count_app + count_bid}
  2210.  
  2211.  
  2212. @csrf_protect
  2213. @require_POST
  2214. @session_protect
  2215. @session_employer
  2216. @json_view
  2217. def ajax_purchase_resume(request,session):
  2218.     c = {}
  2219.     user = session.get_property('user_model')
  2220.     resume_id = request.POST.get('resume_id')
  2221.     resume = None
  2222.     if resume_id:
  2223.         resume = Resume.init(resume_id)
  2224.  
  2225.     if not resume:
  2226.         raise ViewException('Resume not found',JOB_NOT_FOUND_CODE)
  2227.     else:
  2228.         user = User.init(user.export_property('login'))
  2229.         creator_login = user.export_property('login')
  2230.         purchase = Purchase(resume_id=resume_id,creator_login=creator_login)
  2231.         user.use_resume_credit(1)
  2232.         user.sync_to_persistence(force_update=True)
  2233.         purchase.sync_to_persistence(force_update=True)
  2234.  
  2235.     return {'login':user.export_property('login'),'id':user.export_property('_id'),'resume':resume.properties,'purchase':purchase.properties}
  2236.  
  2237. @csrf_protect
  2238. @require_POST
  2239. @json_view
  2240. def ajax_list_project(request):
  2241.     c = {}
  2242.     project_id = request.GET.get('project_id')
  2243.     if project_id:
  2244.         project = Project.init(project_id).properties
  2245.     else:
  2246.         project = None
  2247.  
  2248.     return {'project':project}
  2249.  
  2250. @csrf_protect
  2251. @require_POST
  2252. @session_protect
  2253. @session_employer
  2254. @json_view
  2255. def ajax_publish_project(request,session):
  2256.     c = {}
  2257.     user = session.get_property('user_model')
  2258.     project_id = request.POST.get('project_id')
  2259.     project = None
  2260.     if project_id:
  2261.         project = Project.init(project_id)
  2262.  
  2263.     if not project:
  2264.         raise ViewException('Project not found',PROJECT_NOT_FOUND_CODE)
  2265.     else:
  2266.         if (not user.get_property('login') == project.get_property('creator_login')):
  2267.             raise ViewException('Access error',ACCESS_ERR_CODE)
  2268.         if user.get_property('credit_listings') <= 0:
  2269.             raise ViewException('Credit not enough error',CREDIT_NOT_ENOUGH)
  2270.         if project.get_property('active',False) == False:
  2271.             project.properties['pending_approval'] = True
  2272.             project.properties['expired'] = False
  2273.             '''
  2274.            time_stamp = int(time.time())
  2275.            if project.get_property('expiry_date',0) > time_stamp:
  2276.                time_stamp = project.get_property('expiry_date',0)
  2277.            project.properties['expiry_date'] =  time_stamp + 3600*24*30'''
  2278.             user = User.init(user.export_property('login'))
  2279.             user.use_listing_credit(1)
  2280.             user.sync_to_persistence(force_update=True)
  2281.             project.sync_to_persistence(force_update=True)
  2282.  
  2283.             from django.template import Context,Template
  2284.             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)
  2285.             login = project.export_property("creator_login")
  2286.             c = Context({"project_title":project.export_property('project_title'),"project_id":project.export_property('_id'),"host":HOST_NAME})
  2287.             html = t.render(c)
  2288.             subject = "Your listing is waiting for approval"
  2289.             mc_sendmail(login, subject, html,['project-listing'])
  2290.  
  2291.     return {'login':user.export_property('login'),'id':user.export_property('_id'),'project':project.properties}
  2292.  
  2293. @csrf_protect
  2294. @require_POST
  2295. @session_protect
  2296. @session_employer
  2297. @json_view
  2298. def ajax_approve_publish_project(request,session):
  2299.     c = {}
  2300.    
  2301.     project_id = request.POST.get('project_id')
  2302.     project = None
  2303.     if project_id:
  2304.         project = Project.init(project_id)
  2305.  
  2306.     if not project:
  2307.         raise ViewException('Project not found',PROJECT_NOT_FOUND_CODE)
  2308.     else:
  2309.         if project.get_property('active',False) == False:
  2310.             project.properties['pending_approval'] = False
  2311.             project.properties['active'] = True
  2312.             project.properties['expired'] = False
  2313.             time_stamp = int(time.time())
  2314.             if project.get_property('expiry_date',0) > time_stamp:
  2315.                 time_stamp = project.get_property('expiry_date',0)
  2316.             project.properties['expiry_date'] =  time_stamp + 3600*24*30
  2317.             #user = User.init(user.export_property('login'))
  2318.             #user.use_listing_credit(1)
  2319.             #user.sync_to_persistence(force_update=True)
  2320.             project.sync_to_persistence(force_update=True)
  2321.  
  2322.             from django.template import Context,Template
  2323.             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)
  2324.             login = project.export_property("creator_login")
  2325.             c = Context({"project_title":project.export_property('project_title'),"project_id":project.export_property('_id'),"host":HOST_NAME})
  2326.             html = t.render(c)
  2327.             subject = "Your listing is successful"
  2328.             mc_sendmail(login, subject, html,['project-listing'])
  2329.  
  2330.     return {'project':project.properties}
  2331.  
  2332. @csrf_protect
  2333. @require_POST
  2334. @session_protect
  2335. @session_employer
  2336. @json_view
  2337. def ajax_reject_publish_project(request,session):
  2338.     c = {}
  2339.    
  2340.     project_id = request.POST.get('project_id')
  2341.     project = None
  2342.     if project_id:
  2343.         project = Project.init(project_id)
  2344.  
  2345.     if not project:
  2346.         raise ViewException('Project not found',PROJECT_NOT_FOUND_CODE)
  2347.     else:
  2348.         if project.get_property('active',False) == False:
  2349.             project.properties['pending_approval'] = False
  2350.             project.properties['active'] = False
  2351.             project.properties['rejected'] = True
  2352.             time_stamp = int(time.time())
  2353.             if project.get_property('expiry_date',0) > time_stamp:
  2354.                 time_stamp = project.get_property('expiry_date',0)
  2355.             project.properties['expiry_date'] =  time_stamp + 3600*24*30
  2356.             user = User.init(project.export_property('creator_login'))
  2357.             user.use_listing_credit(-1)
  2358.             user.sync_to_persistence(force_update=True)
  2359.             project.sync_to_persistence(force_update=True)
  2360.  
  2361.             from django.template import Context,Template
  2362.             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)
  2363.             login = project.export_property("creator_login")
  2364.             c = Context({"project_title":project.export_property('project_title'),"project_id":project.export_property('_id'),"host":HOST_NAME})
  2365.             html = t.render(c)
  2366.             subject = "Your listing is rejected"
  2367.             mc_sendmail(login, subject, html,['project-listing'])
  2368.  
  2369.     return {'project':project.properties}
  2370.  
  2371. @csrf_protect
  2372. @require_POST
  2373. @session_protect
  2374. @session_employer
  2375. @json_view
  2376. def ajax_expire_project(request,session):
  2377.     c = {}
  2378.     user = session.get_property('user_model')
  2379.     project_id = request.POST.get('project_id')
  2380.     project = None
  2381.     if project_id:
  2382.         project = Project.init(project_id)
  2383.  
  2384.     if not project:
  2385.         raise ViewException('Project not found',PROJECT_NOT_FOUND_CODE)
  2386.     else:
  2387.         if (not user.get_property('login') == project.get_property('creator_login')):
  2388.             raise ViewException('Access error',ACCESS_ERR_CODE)
  2389.  
  2390.         if project.get_property('active',False) == True:
  2391.             project.properties['active'] = False
  2392.             project.properties['expired'] = True
  2393.             project.properties['expiry_date'] = int(time.time())
  2394.             project.sync_to_persistence(force_update=True)
  2395.  
  2396.     return {'login':user.export_property('login'),'id':user.export_property('_id'),'project':project.properties}
  2397.  
  2398. @csrf_protect
  2399. @require_POST
  2400. @session_protect
  2401. @session_employer
  2402. @json_view
  2403. def ajax_reject_project(request,session):
  2404.     c = {}
  2405.     user = session.get_property('user_model')
  2406.     project_id = request.POST.get('project_id')
  2407.     project = None
  2408.     if project_id:
  2409.         project = Project.init(project_id)
  2410.  
  2411.     if not project:
  2412.         raise ViewException('Project not found',PROJECT_NOT_FOUND_CODE)
  2413.     else:
  2414.         if (not user.get_property('login') == project.get_property('creator_login')):
  2415.             raise ViewException('Access error',ACCESS_ERR_CODE)
  2416.  
  2417.         if project.get_property('active',False) == True:
  2418.             project.properties['active'] = False
  2419.             project.properties['rejected'] = True
  2420.             #project.properties['expiry_date'] = int(time.time())
  2421.             project.sync_to_persistence(force_update=True)
  2422.  
  2423.     return {'login':user.export_property('login'),'id':user.export_property('_id'),'project':project.properties}
  2424.  
  2425.  
  2426. @csrf_protect
  2427. @require_POST
  2428. @session_protect
  2429. @json_view
  2430. def ajax_upsert_application(request,session):
  2431.     c = {}
  2432.     user = session.get_property('user_model')
  2433.     job_id = request.POST.get('job_id')
  2434.     application_id = request.POST.get('application_id')
  2435.     comment = request.POST.get('comment')
  2436.     job = None
  2437.     application = None
  2438.     if job_id:
  2439.         job = Job.init(job_id)
  2440.  
  2441.     if job_id and not job:
  2442.         raise ViewException('Job not found',JOB_NOT_FOUND_CODE)
  2443.  
  2444.     if application_id:
  2445.         application = Application.init(application_id)
  2446.  
  2447.     if not application:
  2448.         application = Application(creator_login=user.get_property('login'),job_id=job_id)
  2449.         from django.template import Context,Template
  2450.         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)
  2451.         login = job.export_property("creator_login")
  2452.         c = Context({"job_title":job.export_property('job_title'),"job_id":job.export_property('_id'),"host":HOST_NAME,"applicant":user.get_property('login')})
  2453.         html = t.render(c)
  2454.         subject = "Your job listing just received an application"
  2455.         mc_sendmail(login, subject, html,['job-application'])
  2456.  
  2457.         employer = UserEmployer.init(login)
  2458.         if employer and employer.export_property('email'):
  2459.             mc_sendmail(employer.export_property('email'), subject, html,['job-application'])
  2460.     else:
  2461.         application.properties['comment'] = comment
  2462.        
  2463.     application.sync_to_persistence(force_update=True)
  2464.    
  2465.     return {'login':user.export_property('login'),'id':user.export_property('_id'),'application':application.properties}
  2466.  
  2467. @csrf_protect
  2468. @require_POST
  2469. @session_protect
  2470. @json_view
  2471. def ajax_upsert_job_save(request,session):
  2472.     c = {}
  2473.     user = session.get_property('user_model')
  2474.     job_id = request.POST.get('job_id')
  2475.     save_id = request.POST.get('save_id')
  2476.     save = None
  2477.     if job_id:
  2478.         job = Job.init(job_id)
  2479.  
  2480.     if job_id and not job:
  2481.         raise ViewException('Job not found',JOB_NOT_FOUND_CODE)
  2482.  
  2483.     if save_id:
  2484.         save = JobSave.init(save_id)
  2485.  
  2486.     if not save:
  2487.         save = JobSave(creator_login=user.get_property('login'),job_id=job_id)
  2488.        
  2489.     save.sync_to_persistence(force_update=True)
  2490.    
  2491.     return {'login':user.export_property('login'),'id':user.export_property('_id'),'save':save.properties}
  2492.  
  2493.  
  2494. @csrf_protect
  2495. @require_POST
  2496. @session_protect
  2497. @session_employer
  2498. @json_view
  2499. def ajax_list_application(request,session):
  2500.     c = {}
  2501.     user = session.get_property('user_model')
  2502.     employer = UserEmployer.init(user.get_property('login'))
  2503.     job_id = request.POST.get('job_id')
  2504.     job = None
  2505.     if job_id:
  2506.         job = Job.init(job_id)
  2507.  
  2508.     if not job:
  2509.         raise ViewException('Job not found',JOB_NOT_FOUND_CODE)
  2510.  
  2511.     applications = Application.retrieve_by_job(job_id)
  2512.     applications_json = []
  2513.     for application in applications:
  2514.         creator_login = application.get_property('creator_login')
  2515.         applicant = Resume.init(Base.md5(creator_login))
  2516.         application_json = application.properties
  2517.         application_json['user'] = applicant.properties
  2518.         applications_json.append(application_json)
  2519.         application_json['resume_id'] = applicant.export_property('_id')
  2520.  
  2521.     return {'login':user.export_property('login'),'id':user.export_property('_id'),'applications':applications_json,'total':len(applications),'job':job.properties}
  2522.  
  2523. @csrf_protect
  2524. @require_POST
  2525. @session_protect
  2526. @session_employee
  2527. @json_view
  2528. def ajax_list_history(request,session):
  2529.     c = {}
  2530.     user = session.get_property('user_model')
  2531.     page_number = int(request.POST.get('page_number',1))
  2532.     page_size = int(request.POST.get('page_size',10))
  2533.  
  2534.     applications = Application.retrieve_by_creator(user.get_property('login'))
  2535.     bids = Bid.retrieve_by_creator(user.get_property('login'))
  2536.     applications_json = []
  2537.     for application in applications:
  2538.         creator_login = application.get_property('creator_login')
  2539.         job_id = application.get_property('job_id')
  2540.         application_json = application.properties
  2541.         applications_json.append(application_json)
  2542.         job = Job.init(job_id)
  2543.         if job:
  2544.             application_json['job'] = job.properties
  2545.  
  2546.     for bid in bids:
  2547.         creator_login = bid.get_property('creator_login')
  2548.         project_id = bid.get_property('project_id')
  2549.         application_json = bid.properties
  2550.         applications_json.append(application_json)
  2551.         project = Project.init(project_id)
  2552.         if project:
  2553.             application_json['project'] = project.properties
  2554.  
  2555.     def sort_func(x):
  2556.         if isinstance(x, dict):
  2557.             if x.get('timestamp'):
  2558.                 return x['timestamp']
  2559.             else:
  2560.                 return 0
  2561.         else:
  2562.             return x
  2563.  
  2564.     applications_json = sorted(applications_json,key=sort_func)[(page_number-1)*page_size:page_number*page_size]
  2565.     return {'login':user.export_property('login'),'id':user.export_property('_id'),'history':applications_json,'total':len(applications + bids)}
  2566.  
  2567. @csrf_protect
  2568. @require_POST
  2569. @session_protect
  2570. @session_employee
  2571. @json_view
  2572. def ajax_list_save(request,session):
  2573.     c = {}
  2574.     user = session.get_property('user_model')
  2575.     page_number = int(request.POST.get('page_number',1))
  2576.     page_size = int(request.POST.get('page_size',10))
  2577.  
  2578.     job_saves = JobSave.retrieve_by_creator(user.get_property('login'))
  2579.     project_saves = ProjectSave.retrieve_by_creator(user.get_property('login'))
  2580.     saves_json = []
  2581.     for job_save in job_saves:
  2582.         creator_login = job_save.get_property('creator_login')
  2583.         job_id = job_save.get_property('job_id')
  2584.         save_json = job_save.properties
  2585.         job = Job.init(job_id)
  2586.         if job:
  2587.             save_json['job'] = job.properties
  2588.  
  2589.         saves_json.append(save_json)
  2590.  
  2591.     for project_save in project_saves:
  2592.         creator_login = project_save.get_property('creator_login')
  2593.         project_id = project_save.get_property('project_id')
  2594.         save_json = project_save.properties
  2595.         project = Project.init(project_id)
  2596.         if project:
  2597.             save_json['project'] = project.properties
  2598.  
  2599.         saves_json.append(save_json)
  2600.  
  2601.     def sort_func(x):
  2602.         if isinstance(x, dict):
  2603.             if x.get('timestamp'):
  2604.                 return x['timestamp']
  2605.             else:
  2606.                 return 0
  2607.         else:
  2608.             return x
  2609.  
  2610.     saves_json = sorted(saves_json,key=sort_func)[(page_number-1)*page_size:page_number*page_size]
  2611.     return {'login':user.export_property('login'),'id':user.export_property('_id'),'save':saves_json,'total':len(job_saves + project_saves)}
  2612.  
  2613.  
  2614.  
  2615. @csrf_protect
  2616. @require_POST
  2617. @session_protect
  2618. @json_view
  2619. def ajax_upsert_bid(request,session):
  2620.     c = {}
  2621.     user = session.get_property('user_model')
  2622.     project_id = request.POST.get('project_id')
  2623.     bid_id = request.POST.get('bid_id')
  2624.     comment = request.POST.get('comment')
  2625.     project = None
  2626.     bid = None
  2627.     if project_id:
  2628.         project = Project.init(project_id)
  2629.  
  2630.     if project_id and not project:
  2631.         raise ViewException('Project not found',PROJECT_NOT_FOUND_CODE)
  2632.  
  2633.     if bid_id:
  2634.         bid = Bid.init(bid_id)
  2635.  
  2636.     if not bid:
  2637.         bid = Bid(creator_login=user.get_property('login'),project_id=project_id)
  2638.         from django.template import Context,Template
  2639.         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)
  2640.         login = project.export_property("creator_login")
  2641.         c = Context({"project_title":project.export_property('project_title'),"project_id":project.export_property('_id'),"host":HOST_NAME,"applicant":user.get_property('login')})
  2642.         html = t.render(c)
  2643.         subject = "Your project listing just received an application"
  2644.  
  2645.         mc_sendmail(login, subject, html,['project-application'])
  2646.  
  2647.         employer = UserEmployer.init(login)
  2648.         if employer and employer.export_property('email'):
  2649.             mc_sendmail(employer.export_property('email'), subject, html,['project-application'])
  2650.     else:
  2651.         bid.properties['comment'] = comment
  2652.        
  2653.     bid.sync_to_persistence(force_update=True)
  2654.    
  2655.     return {'login':user.export_property('login'),'id':user.export_property('_id'),'bid':bid.properties}
  2656.  
  2657. @csrf_protect
  2658. @require_POST
  2659. @session_protect
  2660. @json_view
  2661. def ajax_upsert_project_save(request,session):
  2662.     c = {}
  2663.     user = session.get_property('user_model')
  2664.     project_id = request.POST.get('project_id')
  2665.     save_id = request.POST.get('save_id')
  2666.     save = None
  2667.     if project_id:
  2668.         project = Project.init(project_id)
  2669.  
  2670.     if project_id and not project:
  2671.         raise ViewException('Project not found',PROJECT_NOT_FOUND_CODE)
  2672.  
  2673.     if save_id:
  2674.         save = ProjectSave.init(save_id)
  2675.  
  2676.     if not save:
  2677.         save = ProjectSave(creator_login=user.get_property('login'),project_id=project_id)
  2678.        
  2679.     save.sync_to_persistence(force_update=True)
  2680.    
  2681.     return {'login':user.export_property('login'),'id':user.export_property('_id'),'save':save.properties}
  2682.  
  2683.  
  2684.  
  2685. @csrf_protect
  2686. @require_POST
  2687. @session_protect
  2688. @session_employer
  2689. @json_view
  2690. def ajax_list_bid(request,session):
  2691.     c = {}
  2692.     user = session.get_property('user_model')
  2693.     employer = UserEmployer.init(user.get_property('login'))
  2694.     project_id = request.POST.get('project_id')
  2695.     project = None
  2696.     if project_id:
  2697.         project = Project.init(project_id)
  2698.  
  2699.     if not project:
  2700.         raise ViewException('Project not found',PROJECT_NOT_FOUND_CODE)
  2701.  
  2702.     bids = Bid.retrieve_by_project(project_id)
  2703.     bids_json = []
  2704.     for bid in bids:
  2705.         creator_login = bid.get_property('creator_login')
  2706.         applicant = Resume.init(Base.md5(creator_login))
  2707.         bid_json = bid.properties
  2708.         bid_json['user'] = applicant.properties
  2709.         bids_json.append(bid_json)
  2710.         bid_json['resume_id'] = applicant.export_property('_id')
  2711.  
  2712.     return {'login':user.export_property('login'),'id':user.export_property('_id'),'bids':bids_json,'total':len(bids),'project':project.properties}
  2713.  
  2714.  
  2715. @csrf_protect
  2716. @require_POST
  2717. @session_protect
  2718. @session_employer
  2719. @json_view
  2720. def ajax_checkout(request,session):
  2721.     c = {}
  2722.     user = session.get_property('user_model')
  2723.     package_id = request.POST.get('package_id')
  2724.     if not package_id:
  2725.         raise ViewException('Package Id not found',JOB_NOT_FOUND_CODE)
  2726.  
  2727.     package = PACKAGES.get(package_id)
  2728.  
  2729.     if not package:
  2730.         raise ViewException('Package not found',JOB_NOT_FOUND_CODE)
  2731.  
  2732.     token = models.paypal.init_transaction(package.get('price',''),package.get('desc','') + " for $" + str(package.get('price','')))
  2733.     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)
  2734.     credit_trans.sync_to_persistence()
  2735.     return {'login':user.export_property('login'),'id':user.export_property('_id'),'token':token}
  2736.  
  2737. def paypal_return(request):
  2738.     c = {}
  2739.     ip = request.META.get('REMOTE_ADDR','')
  2740.     log('PAYPAL:RETURN:CLIENT_IP='+str(ip)+',DATA_RECEIVED_FROM_BROWSER='+str(request.GET))
  2741.    
  2742.     token = request.GET.get('token','').encode('utf-8')
  2743.     payerid = request.GET.get('PayerID','').encode('utf-8')
  2744.  
  2745.     response = models.paypal.get_payer_details(token,payerid)
  2746.     log('PAYPAL:RETURN:PAYER_DETAILS='+str(response))
  2747.     if response and not response['ACK'][0] == 'Success':
  2748.         c['error'] = True
  2749.         return render_page(request,'modules/employer/credit_complete.html',c)
  2750.  
  2751.     try:
  2752.         credit = Credit.retrieve_by_paypal_token(token)
  2753.     except:
  2754.         credit = None
  2755.  
  2756.     if not credit:
  2757.         c['error'] = True
  2758.         return render_page(request,'modules/employer/credit_complete.html',c)
  2759.  
  2760.     price = credit.get_property('price',0)
  2761.     credit_listings = credit.get_property('credit_listings',0)
  2762.     credit_resumes = credit.get_property('credit_resumes',0)
  2763.     creator_login = credit.export_property('creator_login')
  2764.     user = UserEmployer.init(creator_login)  
  2765.     credit.properties['credit_datetime'] = int(time.time())
  2766.     credit.sync_to_persistence(force_update=True)
  2767.     models.paypal.perform_transaction(price,token,payerid)
  2768.     user.topup_listing_credit(credit_listings)
  2769.     user.topup_resume_credit(credit_resumes)
  2770.     user.sync_to_persistence(force_update=True)
  2771.     c['credit_listings'] = credit_listings
  2772.     c['credit_resumes'] = credit_resumes
  2773.     transaction_id = credit.export_property('_id')
  2774.     from django.template import Context,Template
  2775.     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)
  2776.     login = user.export_property("login")
  2777.     c = Context({"company":user.export_property('company'),"login":login,"credit_listings":credit_listings,"credit_resumes":credit_resumes,"price":price,"transaction_id":transaction_id})
  2778.     html = t.render(c)
  2779.     subject = "Your purchasing at Qrinno #" + transaction_id + " is successful"
  2780.     mc_sendmail(login, subject, html,['credit-topup'])
  2781.     return render_page(request,'modules/employer/credit_complete.html',c)
  2782.  
  2783. def paypal_cancel(request):
  2784.     c = {}
  2785.     return render_page(request,'modules/employer/credit_cancel.html',c)
  2786.  
  2787. def cvat_optin(request):
  2788.     c = {}
  2789.     return render_page(request,'cvat/index.html',c)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement