Commit 5d5bd544 authored by John Red Medrano's avatar John Red Medrano

bulk create user

parent b43b1254
......@@ -2,7 +2,7 @@ import copy
import threading
import pandas as pd
import csv
import io
import io, os
from app.entities import enums
from django.db import transaction
from app.helper import decorators
......@@ -243,12 +243,18 @@ class UserViewSet(viewsets.ModelViewSet):
def BatchUpload(self, request):
csv_file = request.FILES['file']
df = pd.read_csv(csv_file, sep=',', skiprows=0)
logged_user_type = request.user.user_type
logged_user_company = request.user.department.company.name
logged_user_department = request.user.department.name
logged_user_email = request.user.email
email_users = []
for data, keys in df.iterrows():
try:
user_department = Department.objects.filter(
Q(name__icontains=keys['department']) &
Q(company__name__icontains=logged_user_company)
).first()
if logged_user_type == 'CUA':
user_department = Department.objects.filter(
Q(name__icontains=keys['department']) &
......@@ -277,25 +283,40 @@ class UserViewSet(viewsets.ModelViewSet):
default_app = Application.objects.filter(
excel_code=keys['default_app']
).first()
# print(default_app)
try:
enums_super = enums.UserTypeEnum.SUPER_USER.value
enums_OUA = enums.UserTypeEnum.OVERALL_USER_ADMIN.value
enums_company = enums.UserTypeEnum.COMPANY_USER_ADMIN.value
enums_department = enums.UserTypeEnum.DEPARTMENT_USER_ADMIN.value
enums_user = enums.UserTypeEnum.USER.value
if keys['user_type'].lower() == 'super user' and logged_user_type == enums_super:
user_type = enums.UserTypeEnum.SUPER_USER.value
elif keys['user_type'].lower() == 'super user' and logged_user_type != enums_super:
return Response(
{"message": f"This user is not allowed to create super user. data error at row {data + 2}"},
status=status.HTTP_201_CREATED
)
elif keys['user_type'].lower() == 'overall user admin':
user_type = enums.UserTypeEnum.OVERALL_USER_ADMIN.value
elif keys['user_type'].lower() == 'company user admin':
user_type = enums.UserTypeEnum.COMPANY_USER_ADMIN.value
elif keys['user_type'].lower() == 'department user admin':
user_type = enums.UserTypeEnum.DEPARTMENT_USER_ADMIN.value
else:
user_type = enums.UserTypeEnum.USER.value
users = {
"username": keys['username'],
"name": keys['name'],
"department": user_department,
"email": keys['email'],
"contact_no": keys['contact_no'],
"default_app": default_app
"default_app": default_app,
"user_type": user_type
}
current_user = User.objects.create(
**users
)
except IntegrityError as e:
return Response(
{"message": f"Record already exist at row {data + 2}"},
status=status.HTTP_201_CREATED
)
password = User.objects.make_random_password(length=10)
password_hash = make_password(password)
......@@ -343,7 +364,8 @@ class UserViewSet(viewsets.ModelViewSet):
"group_pivots": this_department,
"create_change_request": privilege_list[2],
"create_change_request_template": privilege_list[3],
"view_all_change_request": privilege_list[4]
"view_all_change_request": privilege_list[4],
"approve_cr": privilege_list[5]
}
AllowedCompany.objects.create(**privilege_object)
except IntegrityError as e:
......@@ -352,24 +374,46 @@ class UserViewSet(viewsets.ModelViewSet):
status=status.HTTP_201_CREATED
)
except IntegrityError as e:
return Response(
{"message": f"Record already exist at row {data + 2}"},
status=status.HTTP_201_CREATED
)
except KeyError as e:
return Response(
{"message": "Missing column user_type"},
status=status.HTTP_201_CREATED
)
del users['department']
del users['contact_no']
del users['default_app']
del users['user_type']
users['password'] = password
UserHistory.objects.create(
**users
)
users['admin'] = logged_user_email
send_mail = UserHistory.objects.filter(sent=False).values()
# email_users.push({**users})
for send in send_mail:
admin_email = request.user.email
args = [send['name'], send['username'], send['password'], send['email'], admin_email]
main_threading(args, sender.account_created)
send_mail = UserHistory.objects.filter(sent=False)[0:100].values(
'name', 'username', 'email', 'password'
)
# print(send_mail)
df = pd.DataFrame(send_mail)
df.to_csv("users.csv", index=False)
args = ["users.csv", logged_user_email]
main_threading(args, sender.batch_email_admin)
send_mail.update(sent=True)
args = [send_mail, logged_user_email]
main_threading(args, sender.batch_email_users)
return Response(
{"message": "File already uploaded"},
......
import os
from django.core.mail import send_mail
from django.core.mail import send_mail, EmailMessage
from app.entities import models
from django.conf import settings
from django.core import mail as email_connection
from django.db import transaction
@transaction.atomic
def batch_email_users(args):
# print(args[0])
connection = email_connection.get_connection()
messages = []
connection.open()
for data in args[0].iterator():
name = data['name']
username = data['username']
password = data['password']
recipient = data['email']
admin = args[1]
F = open(os.path.join(settings.EMAIL_TEMPLATES_ROOT, 'RMS-NEWUSER.html'), 'r')
FC = F.read()
FC = FC.replace('{name}', name)
FC = FC.replace('{username}', username)
FC = FC.replace('{password}', password)
FC = FC.replace('{url}', settings.FRONT_END_URL + '/cms/profile')
send_mail(
subject='Resource Management System: Welcome!',
message='',
from_email=settings.EMAIL_DEFAULT_SENDER,
recipient_list=(recipient,),
html_message=FC,
fail_silently=False
)
models.UserHistory.objects.filter(username=username).update(sent=True)
connection.close()
return True
def batch_email_admin(args):
filename = args[0]
recipient = args[1]
email = EmailMessage(
'Resource Management System: Bulk Users!',
'kindly see the attach file.',
settings.EMAIL_DEFAULT_SENDER,
[recipient]
)
email.attach_file(filename)
email.send()
os.remove(filename)
def account_created(args):
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment