Commit 719110c3 authored by John Red Medrano's avatar John Red Medrano

Merge pull request #453 in RMS/api-main-service from red-develop to RMSv2

* commit '125712fa':
  bulk create user
parents b66982e3 125712fa
......@@ -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,133 +243,177 @@ 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():
if logged_user_type == 'CUA':
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']) &
Q(company__name__icontains=logged_user_company)
).first()
if user_department == None:
msg = f"company is not the same with the logged user at row {data + 2}"
return Response(
{"message": msg},
status=status.HTTP_400_BAD_REQUEST
)
elif logged_user_type == 'DUA':
user_department = Department.objects.get(
name__icontains=logged_user_department
)
elif logged_user_type == 'USR':
return Response(
{"message": "Logged User is not allowed"},
status=status.HTTP_400_BAD_REQUEST
elif logged_user_type == 'DUA':
user_department = Department.objects.get(
name__icontains=logged_user_department
)
elif logged_user_type == 'USR':
return Response(
{"message": "Logged User is not allowed"},
status=status.HTTP_400_BAD_REQUEST
)
else:
user_department = Department.objects.get(
name__icontains=keys['department']
)
else:
user_department = Department.objects.get(
name__icontains=keys['department']
)
default_app = Application.objects.filter(
excel_code=keys['default_app']
).first()
# print(default_app)
default_app = Application.objects.filter(
excel_code=keys['default_app']
).first()
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
)
password = User.objects.make_random_password(length=10)
password_hash = make_password(password)
current_user.password = password_hash
current_user.save()
app = Application.objects.filter(
excel_code__in=keys['application'].split(',')
)
update_user = current_user.application.set(app)
for instance in keys['privilege'].split(';'):
privilege_list = instance.split(',')
this_company = Company.objects.filter(
name__icontains=privilege_list[0]
).first()
this_department = Department.objects.filter(
name__icontains=privilege_list[1]
).first()
if privilege_list[2] == 0:
privilege_list[2] = False
else:
privilege_list[2] = True
if privilege_list[3] == 0:
privilege_list[3] = False
else:
privilege_list[3] = True
if privilege_list[4] == 0:
privilege_list[4] = False
else:
privilege_list[4] = True
current_user = User.objects.get(id=current_user.id)
try:
privilege_object = {
"id_number": current_user,
"company_pivot": this_company,
"group_pivots": this_department,
"create_change_request": privilege_list[2],
"create_change_request_template": privilege_list[3],
"view_all_change_request": privilege_list[4],
"approve_cr": privilege_list[5]
}
AllowedCompany.objects.create(**privilege_object)
except IntegrityError as e:
return Response(
{"message": f"Duplicate user privilege at row {data + 2}"},
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
)
password = User.objects.make_random_password(length=10)
password_hash = make_password(password)
current_user.password = password_hash
current_user.save()
app = Application.objects.filter(
excel_code__in=keys['application'].split(',')
)
update_user = current_user.application.set(app)
for instance in keys['privilege'].split(';'):
privilege_list = instance.split(',')
this_company = Company.objects.filter(
name__icontains=privilege_list[0]
).first()
this_department = Department.objects.filter(
name__icontains=privilege_list[1]
).first()
if privilege_list[2] == 0:
privilege_list[2] = False
else:
privilege_list[2] = True
if privilege_list[3] == 0:
privilege_list[3] = False
else:
privilege_list[3] = True
if privilege_list[4] == 0:
privilege_list[4] = False
else:
privilege_list[4] = True
current_user = User.objects.get(id=current_user.id)
try:
privilege_object = {
"id_number": current_user,
"company_pivot": this_company,
"group_pivots": this_department,
"create_change_request": privilege_list[2],
"create_change_request_template": privilege_list[3],
"view_all_change_request": privilege_list[4]
}
AllowedCompany.objects.create(**privilege_object)
except IntegrityError as e:
return Response(
{"message": f"Duplicate user privilege 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