From 0abe2106bb80608d2643925f2d507d74e8da9c5f Mon Sep 17 00:00:00 2001 From: Kirti Date: Wed, 22 Jun 2022 12:44:00 +0530 Subject: [PATCH] upload fossee csv users in JRS --- .../emp/migrations/0058_studentgrade.py | 27 ++++ employer_recommendation_system/emp/models.py | 8 ++ .../emp/templates/emp/base.html | 10 +- .../emp/templates/emp/upload_users_csv.html | 33 +++++ employer_recommendation_system/emp/urls.py | 2 + employer_recommendation_system/emp/views.py | 126 ++++++++++++++++++ .../migrations/0011_auto_20220613_1201.py | 23 ++++ 7 files changed, 227 insertions(+), 2 deletions(-) create mode 100644 employer_recommendation_system/emp/migrations/0058_studentgrade.py create mode 100644 employer_recommendation_system/emp/templates/emp/upload_users_csv.html create mode 100644 employer_recommendation_system/events/migrations/0011_auto_20220613_1201.py diff --git a/employer_recommendation_system/emp/migrations/0058_studentgrade.py b/employer_recommendation_system/emp/migrations/0058_studentgrade.py new file mode 100644 index 00000000..d32960a2 --- /dev/null +++ b/employer_recommendation_system/emp/migrations/0058_studentgrade.py @@ -0,0 +1,27 @@ +# Generated by Django 3.2 on 2022-06-13 12:01 + +from django.conf import settings +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ('emp', '0057_student_profile_update_date'), + ] + + operations = [ + migrations.CreateModel( + name='StudentGrade', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('grade', models.DecimalField(decimal_places=5, default=0.0, max_digits=10)), + ('date_created', models.DateField(auto_now_add=True, null=True)), + ('date_updated', models.DateTimeField(auto_now=True)), + ('student', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='emp.student')), + ('user', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)), + ], + ), + ] diff --git a/employer_recommendation_system/emp/models.py b/employer_recommendation_system/emp/models.py index 368612e6..236c235b 100644 --- a/employer_recommendation_system/emp/models.py +++ b/employer_recommendation_system/emp/models.py @@ -207,6 +207,14 @@ def get_absolute_url(self): url = str(self.id)+'/'+'profile' return reverse('student_profile',kwargs={'pk':self.id}) + +class StudentGrade(models.Model): + student=models.ForeignKey(Student,on_delete=models.CASCADE) + user=models.OneToOneField(User,on_delete=models.CASCADE) + grade=models.DecimalField(max_digits = 10, decimal_places = 5, default=0.00) + date_created = models.DateField(auto_now_add=True, null=True,blank=True) + date_updated = models.DateTimeField(auto_now=True) + class Company(models.Model): name = models.CharField(max_length=200) emp_name = models.CharField(max_length=200,verbose_name="Company HR Representative Name") #Name of the company representative diff --git a/employer_recommendation_system/emp/templates/emp/base.html b/employer_recommendation_system/emp/templates/emp/base.html index 132062ef..5a275b99 100644 --- a/employer_recommendation_system/emp/templates/emp/base.html +++ b/employer_recommendation_system/emp/templates/emp/base.html @@ -196,15 +196,21 @@ View Jobs + + - - diff --git a/employer_recommendation_system/emp/templates/emp/upload_users_csv.html b/employer_recommendation_system/emp/templates/emp/upload_users_csv.html new file mode 100644 index 00000000..babaf42d --- /dev/null +++ b/employer_recommendation_system/emp/templates/emp/upload_users_csv.html @@ -0,0 +1,33 @@ +{% extends 'emp/base.html' %} + +{% load crispy_forms_tags %} + +{% block content-header %}Upload User CSV{% endblock %} + +{% block content %} +{% for message in messages %} +
+ {{ message|safe }} +
+{% endfor %} +{% include "emp/page_header.html" with title="Upload User CSV" icon="" %} + + + + +
+{% csrf_token %} +
+ +
+ +
+
+
+
+ +
+
+
+ +{% endblock %} \ No newline at end of file diff --git a/employer_recommendation_system/emp/urls.py b/employer_recommendation_system/emp/urls.py index 703eee12..b54934db 100644 --- a/employer_recommendation_system/emp/urls.py +++ b/employer_recommendation_system/emp/urls.py @@ -1,6 +1,7 @@ from django.urls import path from .views import * from . import views +# app_name = 'emp' urlpatterns = [ path('',views.index,name='index'), @@ -27,6 +28,7 @@ path('my_jobs/', views.student_jobs, name='student_jobs'), path('job//', JobDetailView.as_view(), name='job-detail'), path('job_listings/', JobListingView.as_view(), name='job-listing'), + path('upload_users_csv/', views.upload_users_csv, name='upload_users_csv'), ################### jobshortlist path('job_application_status/', JobAppStatusListView.as_view(), name='job-app-status'), path('job_application_status//', views.job_app_details, name='job-app-detail'), diff --git a/employer_recommendation_system/emp/views.py b/employer_recommendation_system/emp/views.py index 10f3802d..4ddd38a0 100644 --- a/employer_recommendation_system/emp/views.py +++ b/employer_recommendation_system/emp/views.py @@ -2,6 +2,7 @@ from email import message from django.shortcuts import render,redirect from django.contrib.auth import authenticate,login,logout +from django.contrib.auth.models import Group,User from events.models import * from .models import * @@ -57,6 +58,7 @@ from django.core.mail import send_mail from smtplib import SMTPException from collections import defaultdict +import logging import random, os @@ -101,6 +103,20 @@ def inner(request,pk, *args, **kwargs): return view_func(request,pk, *args, **kwargs) return inner +def is_spoken_user(email): + try: + return User.objects.using('spk').get(email__iexact=email) + except: + return None + +def is_spoken_student(userid): + try: + return SpokenStudent.objects.using('spk').get(user_id=userid) + except: + return None + + + def check_student_job(view_func): @wraps(view_func) def inner(request,pk,job, *args, **kwargs): @@ -1574,3 +1590,113 @@ def notify_student(request): response.status_code = 403 return response return HttpResponse("Success!") + +def get_create_user(row): + msg = "" + fields = row.split(",") + try: + email = fields[2].strip() + jrs_user = User.objects.get(email=email) + msg ="{email} : User already present in JRS".format(email=email) + + try: + jrs_student = Student.objects.get(user=jrs_user) + except: + jrs_student = Student(user=jrs_user, gender=fields[3]) + jrs_student.save() + + + #save to student_grade table + try: + student_grade = StudentGrade(user=jrs_user, student=jrs_student, grade=fields[4]) + student_grade.save() + except: + msg +="{email} : User entry already added".format(email=email) + + return jrs_user, msg + + except User.DoesNotExist: + sp_user = is_spoken_user(email)#check user in spoken + + + if sp_user: + spuserid = sp_user.id + user = User(username=email, email=email, first_name=fields[0], last_name=fields[1]) + stg = Group.objects.get(name='ST_USER') + fsg = Group.objects.get(name='FS_STUDENT') + user.save() + + sp_student = is_spoken_student(spuserid)#check user in spoken student role + print(sp_student,"###################") + + if sp_student: + st_stud = Group.objects.get(name='STUDENT') + st_stud.user_set.add(user) + + stg.user_set.add(user) + fsg.user_set.add(user) + + + msg = "{email} : User present in spoken records.Assigned Spoken and Fossee Student role ".format(email=email) + + + + #send_registration_confirmation_mail + else: + print("NOt a spoken user entry") + spuserid = None + user = User(username=email, email=email, first_name=fields[0], last_name=fields[1]) + user.set_password(fields[0]+'@ST123') + user.save() + + fsg = Group.objects.get(name='FS_STUDENT') + fsg.user_set.add(user) + msg = "{email} : User not present in spoken records.Assigned Fossee Student role ".format(email=email) + #send_registration_confirmation_mail + + #create student entry + student = Student(user=user, gender=fields[3], spk_usr_id=spuserid) + student.save() + + #save to student_grade table + student_grade = StudentGrade(user=user, student=student, grade=fields[4]) + student_grade.save() + + return user, msg + +@user_passes_test(is_manager) +def upload_users_csv(request): + data = {} + student_count = 0 + if request.method == 'GET': + return render(request, 'emp/upload_users_csv.html', data) + # if not GET, then proceed with processing + try: + csv_file = request.FILES["csv_file"] + if not csv_file.name.endswith('.csv'): + messages.error(request,'File is not CSV type') + return HttpResponseRedirect(reverse("upload_users_csv")) + + file_data = csv_file.read().decode("utf-8") + + lines = file_data.split("\n") + + #loop over the lines and save them in db. If error shows up , store as string and then display + for row in lines: + if not row: + break + print("1 print", row) + user, msg = get_create_user(row) + print(msg) + + student_count = student_count+1 + messages.warning(request, msg) + + except Exception as e: + logging.getLogger("error_logger").error("Unable to upload file. "+repr(e)) + messages.error(request,"Unable to upload CVS file. "+repr(e)) + + return HttpResponseRedirect(reverse("upload_users_csv")) + + + diff --git a/employer_recommendation_system/events/migrations/0011_auto_20220613_1201.py b/employer_recommendation_system/events/migrations/0011_auto_20220613_1201.py new file mode 100644 index 00000000..0b611284 --- /dev/null +++ b/employer_recommendation_system/events/migrations/0011_auto_20220613_1201.py @@ -0,0 +1,23 @@ +# Generated by Django 3.2 on 2022-06-13 12:01 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('events', '0010_auto_20220513_1800'), + ] + + operations = [ + migrations.AlterField( + model_name='event', + name='end_date', + field=models.DateField(), + ), + migrations.AlterField( + model_name='event', + name='start_date', + field=models.DateField(), + ), + ]