Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Submit feedback
Sign in
Toggle navigation
R
red-ci-cd
Project overview
Project overview
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
red-group-test
red-ci-cd
Commits
5d5bd544
Commit
5d5bd544
authored
Nov 12, 2019
by
John Red Medrano
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
bulk create user
parent
b43b1254
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
178 additions
and
82 deletions
+178
-82
app/applicationlayer/management/account/views.py
app/applicationlayer/management/account/views.py
+125
-81
app/helper/email_service/sender.py
app/helper/email_service/sender.py
+53
-1
No files found.
app/applicationlayer/management/account/views.py
View file @
5d5bd544
...
@@ -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,133 +243,177 @@ class UserViewSet(viewsets.ModelViewSet):
...
@@ -243,133 +243,177 @@ 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
():
if
logged_user_type
==
'CUA'
:
try
:
user_department
=
Department
.
objects
.
filter
(
user_department
=
Department
.
objects
.
filter
(
Q
(
name__icontains
=
keys
[
'department'
])
&
Q
(
name__icontains
=
keys
[
'department'
])
&
Q
(
company__name__icontains
=
logged_user_company
)
Q
(
company__name__icontains
=
logged_user_company
)
)
.
first
()
)
.
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
:
if
user_department
==
None
:
msg
=
f
"company is not the same with the logged user at row {data + 2}"
msg
=
f
"company is not the same with the logged user at row {data + 2}"
return
Response
(
return
Response
(
{
"message"
:
msg
},
{
"message"
:
msg
},
status
=
status
.
HTTP_400_BAD_REQUEST
status
=
status
.
HTTP_400_BAD_REQUEST
)
)
elif
logged_user_type
==
'DUA'
:
elif
logged_user_type
==
'DUA'
:
user_department
=
Department
.
objects
.
get
(
user_department
=
Department
.
objects
.
get
(
name__icontains
=
logged_user_department
name__icontains
=
logged_user_department
)
)
elif
logged_user_type
==
'USR'
:
elif
logged_user_type
==
'USR'
:
return
Response
(
return
Response
(
{
"message"
:
"Logged User is not allowed"
},
{
"message"
:
"Logged User is not allowed"
},
status
=
status
.
HTTP_400_BAD_REQUEST
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
(
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
)
)
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
:
except
IntegrityError
as
e
:
return
Response
(
return
Response
(
{
"message"
:
f
"Record already exist at row {data + 2}"
},
{
"message"
:
f
"Record already exist at row {data + 2}"
},
status
=
status
.
HTTP_201_CREATED
status
=
status
.
HTTP_201_CREATED
)
)
password
=
User
.
objects
.
make_random_password
(
length
=
10
)
except
KeyError
as
e
:
password_hash
=
make_password
(
password
)
return
Response
(
current_user
.
password
=
password_hash
{
"message"
:
"Missing column user_type"
},
current_user
.
save
()
status
=
status
.
HTTP_201_CREATED
)
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
)
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"
},
...
...
app/helper/email_service/sender.py
View file @
5d5bd544
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
):
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment