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 ...@@ -2,7 +2,7 @@ import copy
import threading import threading
import pandas as pd import pandas as pd
import csv import csv
import io import io, os
from app.entities import enums from app.entities import enums
from django.db import transaction from django.db import transaction
from app.helper import decorators from app.helper import decorators
...@@ -243,12 +243,18 @@ class UserViewSet(viewsets.ModelViewSet): ...@@ -243,12 +243,18 @@ class UserViewSet(viewsets.ModelViewSet):
def BatchUpload(self, request): def BatchUpload(self, request):
csv_file = request.FILES['file'] csv_file = request.FILES['file']
df = pd.read_csv(csv_file, sep=',', skiprows=0) df = pd.read_csv(csv_file, sep=',', skiprows=0)
logged_user_type = request.user.user_type logged_user_type = request.user.user_type
logged_user_company = request.user.department.company.name logged_user_company = request.user.department.company.name
logged_user_department = request.user.department.name logged_user_department = request.user.department.name
logged_user_email = request.user.email
email_users = []
for data, keys in df.iterrows(): 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': if logged_user_type == 'CUA':
user_department = Department.objects.filter( user_department = Department.objects.filter(
Q(name__icontains=keys['department']) & Q(name__icontains=keys['department']) &
...@@ -277,25 +283,40 @@ class UserViewSet(viewsets.ModelViewSet): ...@@ -277,25 +283,40 @@ class UserViewSet(viewsets.ModelViewSet):
default_app = Application.objects.filter( default_app = Application.objects.filter(
excel_code=keys['default_app'] excel_code=keys['default_app']
).first() ).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 = { users = {
"username": keys['username'], "username": keys['username'],
"name": keys['name'], "name": keys['name'],
"department": user_department, "department": user_department,
"email": keys['email'], "email": keys['email'],
"contact_no": keys['contact_no'], "contact_no": keys['contact_no'],
"default_app": default_app "default_app": default_app,
"user_type": user_type
} }
current_user = User.objects.create( current_user = User.objects.create(
**users **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 = User.objects.make_random_password(length=10)
password_hash = make_password(password) password_hash = make_password(password)
...@@ -343,7 +364,8 @@ class UserViewSet(viewsets.ModelViewSet): ...@@ -343,7 +364,8 @@ class UserViewSet(viewsets.ModelViewSet):
"group_pivots": this_department, "group_pivots": this_department,
"create_change_request": privilege_list[2], "create_change_request": privilege_list[2],
"create_change_request_template": privilege_list[3], "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) AllowedCompany.objects.create(**privilege_object)
except IntegrityError as e: except IntegrityError as e:
...@@ -352,24 +374,46 @@ class UserViewSet(viewsets.ModelViewSet): ...@@ -352,24 +374,46 @@ class UserViewSet(viewsets.ModelViewSet):
status=status.HTTP_201_CREATED 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['department']
del users['contact_no'] del users['contact_no']
del users['default_app'] del users['default_app']
del users['user_type']
users['password'] = password users['password'] = password
UserHistory.objects.create( UserHistory.objects.create(
**users **users
) )
users['admin'] = logged_user_email
send_mail = UserHistory.objects.filter(sent=False).values() # email_users.push({**users})
for send in send_mail: send_mail = UserHistory.objects.filter(sent=False)[0:100].values(
admin_email = request.user.email 'name', 'username', 'email', 'password'
args = [send['name'], send['username'], send['password'], send['email'], admin_email] )
main_threading(args, sender.account_created) # 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( return Response(
{"message": "File already uploaded"}, {"message": "File already uploaded"},
......
import os import os
from django.core.mail import send_mail from django.core.mail import send_mail, EmailMessage
from app.entities import models from app.entities import models
from django.conf import settings 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): 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