Commit bc80a508 authored by John Red Medrano's avatar John Red Medrano

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

* commit '2c8f4c62':
  fixed bug on sending mail at reset-password admin level
  added delete template draft fixed bug on change password user level
parents 0a61a976 2c8f4c62
...@@ -154,10 +154,10 @@ class ForgotPassword(APIView): ...@@ -154,10 +154,10 @@ class ForgotPassword(APIView):
user=existingUser, user=existingUser,
).save() ).save()
url = f"{settings.FRONT_END_URL}/account/forgot-password-reset"\ url = f"{settings.FRONT_END_URL}/forgot-password/reset"\
f"?token={TOKEN}" f"?token={TOKEN}"
args = [str(PASSCODE), str(url), str(existingUser.email), user] args = [str(PASSCODE), str(url), user, str(existingUser.email)]
# t1 = threading.Thread(target=sender.forgot_password, args=(args,)) # t1 = threading.Thread(target=sender.forgot_password, args=(args,))
# t1.start() # t1.start()
......
...@@ -22,7 +22,9 @@ from rest_framework.exceptions import ValidationError ...@@ -22,7 +22,9 @@ from rest_framework.exceptions import ValidationError
from django.db import transaction, IntegrityError, connection from django.db import transaction, IntegrityError, connection
from app.applicationlayer.utils import QuerySetHelper, CustomPagination, status_message_response from app.applicationlayer.utils import QuerySetHelper, CustomPagination, status_message_response
from app.businesslayer.changerequest import change_request from app.businesslayer.changerequest import change_request
from app.applicationlayer.cms.utils_cr import number_generator, crhistory_save from app.applicationlayer.cms.utils_cr import (
number_generator, crhistory_save, entity_log_bulk
)
from django.shortcuts import get_object_or_404 from django.shortcuts import get_object_or_404
from rest_framework.generics import GenericAPIView from rest_framework.generics import GenericAPIView
...@@ -33,6 +35,7 @@ from django.db.models import Q ...@@ -33,6 +35,7 @@ from django.db.models import Q
from app.applicationlayer.management.account.serializer import ChangeRequestList from app.applicationlayer.management.account.serializer import ChangeRequestList
from app.applicationlayer.utils import log_save from app.applicationlayer.utils import log_save
from rest_framework.exceptions import ParseError
class UserList(APIView): class UserList(APIView):
...@@ -120,72 +123,66 @@ class ChangeRequestTemplatesViewset(meviewsets.ModelViewSet): ...@@ -120,72 +123,66 @@ class ChangeRequestTemplatesViewset(meviewsets.ModelViewSet):
serializer = self.get_serializer(instance) serializer = self.get_serializer(instance)
return Response(serializer.data) return Response(serializer.data)
# @transaction.atomic()
def destroy(self, request, *args, **kwargs): def destroy(self, request, *args, **kwargs):
# try: # try:
template_no = self.kwargs['template_no'] template_no = self.kwargs['template_no']
enum_approver = enums.LogEntitiesEnum.ChangeRequestTemplateApprovers.value
enum_stake = enums.LogEntitiesEnum.ChangeRequestTemplateStakeHolders.value
enum_attach = enums.LogEntitiesEnum.ChangeRequestTemplateAttachments.value
enum_detail = enums.LogEntitiesEnum.ChangeRequestTemplateDetails.value
enum_header = enums.LogEntitiesEnum.ChangeRequestTemplateHeader.value
approver = models.ChangeRequestTemplateApprovers.objects.filter( approver = models.ChangeRequestTemplateApprovers.objects.filter(
template_no=template_no template_no=template_no
) )
log_save( if approver.count() > 0:
enums.LogEnum.DELETED.value, entity_log_bulk(
enums.LogEntitiesEnum.ChangeRequestTemplateApprovers.value, approver, enum_approver,
approver.values()[0]['id'], models.ChangeRequestTemplateApprovers
approver.values()[0], )
''
)
approver.delete()
stake = models.ChangeRequestTemplateStakeHolders.objects.filter( stake = models.ChangeRequestTemplateStakeHolders.objects.filter(
template_no=template_no template_no=template_no
) )
log_save(
enums.LogEnum.DELETED.value, if stake.count() > 0:
enums.LogEntitiesEnum.ChangeRequestTemplateStakeHolders.value, entity_log_bulk(
stake.first()['id'], approver, enum_stake,
stake.values().first(), models.ChangeRequestTemplateStakeHolders
'' )
)
stake.delete()
attachment = models.ChangeRequestTemplateAttachments.objects.filter( attachment = models.ChangeRequestTemplateAttachments.objects.filter(
template_no=template_no template_no=template_no
) )
log_save(
enums.LogEnum.DELETED.value, if attachment.count() > 0:
enums.LogEntitiesEnum.ChangeRequestTemplateAttachments.value, entity_log_bulk(
attachment.first()['id'], approver, enum_attach,
attachment.values().first(), models.ChangeRequestTemplateAttachments
'' )
)
attachment.delete()
details = models.ChangeRequestTemplateDetails.objects.filter( details = models.ChangeRequestTemplateDetails.objects.filter(
template_no=template_no template_no=template_no
) )
log_save(
enums.LogEnum.DELETED.value, if details.count() > 0:
enums.LogEntitiesEnum.ChangeRequestTemplateHeader.value, entity_log_bulk(
details.first()['id'], approver, enum_detail,
details.values().first(), models.ChangeRequestTemplateDetails
'' )
)
details.delete()
header = models.ChangeRequestTemplateHeader.objects.filter( header = models.ChangeRequestTemplateHeader.objects.filter(
template_no=template_no template_no=template_no
) )
log_save( if header.count() > 0:
enums.LogEnum.DELETED.value, entity_log_bulk(
enums.LogEntitiesEnum.ChangeRequestTemplateHeader.value, approver, enum_header,
header.first()['id'], models.ChangeRequestTemplateHeader
header.values().first(), )
''
)
header.delete()
return Response({"message": "Deleted"}, status=status.HTTP_200_OK) return Response({"message": "Deleted"}, status=status.HTTP_200_OK)
# except Exception as e: # except Exception as e:
# return Response(e, # return Response(e,
......
...@@ -8,10 +8,35 @@ from datetime import timedelta ...@@ -8,10 +8,35 @@ from datetime import timedelta
from django.db.models import Q from django.db.models import Q
from app.applicationlayer.utils import main_threading, notification_create from app.applicationlayer.utils import main_threading, notification_create
from app.helper.email_service import sender from app.helper.email_service import sender
from app.applicationlayer.utils import log_save
from app.entities import enums
from django.forms.models import model_to_dict
from rest_framework.exceptions import ParseError
from django.db import IntegrityError
from rest_framework.exceptions import APIException
CR_FRONT_LINK = settings.CR_FRONT_LINK CR_FRONT_LINK = settings.CR_FRONT_LINK
def entity_log_bulk(queryset, entity, tbl):
try:
print(entity)
for data in queryset:
test = model_to_dict(data)
log_save(
enums.LogEnum.DELETED.value,
entity,
test['id'],
test,
''
)
tbl.objects.filter(id=test['id']).delete()
return True
except IntegrityError as exc:
raise APIException(detail=exc)
def get_dept_details(dept_no): def get_dept_details(dept_no):
dept_instance = models.Department.objects.filter(code=dept_no) dept_instance = models.Department.objects.filter(code=dept_no)
......
...@@ -57,12 +57,12 @@ class ChangePasswordSerializer(serializers.Serializer): ...@@ -57,12 +57,12 @@ class ChangePasswordSerializer(serializers.Serializer):
def validate(self, data): def validate(self, data):
instance = self.context.get('view').kwargs['pk'] instance = self.context.get('view').kwargs['code']
old_password = data['old_password'] old_password = data['old_password']
new_password = data['new_password'] new_password = data['new_password']
instance_password = User.objects.filter( instance_password = User.objects.filter(
id=instance code=str(instance)
) )
validated_password = check_password( validated_password = check_password(
...@@ -74,14 +74,17 @@ class ChangePasswordSerializer(serializers.Serializer): ...@@ -74,14 +74,17 @@ class ChangePasswordSerializer(serializers.Serializer):
password = re.match( password = re.match(
'([A-Za-z]+[0-9]|[0-9]+[A-Za-z])[A-Za-z0-9]*', '([A-Za-z]+[0-9]|[0-9]+[A-Za-z])[A-Za-z0-9]*',
data['new_password'] new_password
) )
print("password")
print(password)
print(password)
if password: if password:
new_password = make_password(data['new_password']) new_password = make_password(new_password)
instance_password.update(password=new_password) instance_password.update(password=new_password)
instance = User.objects.get(id=instance) # instance = User.objects.get(code=str(instance))
return instance return instance
elif len(new_password) <= 5: elif len(new_password) <= 5:
......
...@@ -153,9 +153,9 @@ class UserViewSet(viewsets.ModelViewSet): ...@@ -153,9 +153,9 @@ class UserViewSet(viewsets.ModelViewSet):
code__in=request.data['application'] code__in=request.data['application']
) )
instance2 = User.objects.get( # instance2 = User.objects.get(
id=serializer.data['id'] # id=serializer.data['id']
) # )
instance.application.set(app) instance.application.set(app)
...@@ -182,9 +182,11 @@ class UserViewSet(viewsets.ModelViewSet): ...@@ -182,9 +182,11 @@ class UserViewSet(viewsets.ModelViewSet):
@decorators.error_safe @decorators.error_safe
@rms.user_create @rms.user_create
@transaction.atomic @transaction.atomic
def ResetPassword(self, request, pk=None): def ResetPassword(self, request, code=None):
existingUser = User.objects.filter(id=pk).first() existingUser = User.objects.filter(code=str(code))
pk = existingUser.values().first()['id']
existingUser = existingUser.first()
if existingUser: if existingUser:
...@@ -224,12 +226,12 @@ class UserViewSet(viewsets.ModelViewSet): ...@@ -224,12 +226,12 @@ class UserViewSet(viewsets.ModelViewSet):
methods=['put'], methods=['put'],
url_path='change-password', url_path='change-password',
name="Change Password of User") name="Change Password of User")
@decorators.error_safe # @decorators.error_safe
@transaction.atomic @transaction.atomic
def ChangePassword(self, request, pk=None): def ChangePassword(self, request, code=None):
self.serializer_class = serializer.ChangePasswordSerializer self.serializer_class = serializer.ChangePasswordSerializer
serialized = self.get_serializer(data=request.data, context={'id': pk}) serialized = self.get_serializer(data=request.data, context={'id': code})
if serialized.is_valid(): if serialized.is_valid():
...@@ -239,14 +241,16 @@ class UserViewSet(viewsets.ModelViewSet): ...@@ -239,14 +241,16 @@ class UserViewSet(viewsets.ModelViewSet):
if form['new_password'] != form['new_password_confirm']: if form['new_password'] != form['new_password_confirm']:
raise Exception('Passwords must match') raise Exception('Passwords must match')
existingUser = User.objects.filter(id=pk).first() existingUser = User.objects.filter(code=code)
pk = existingUser.values().first()['id']
if existingUser: if existingUser:
existingUser.set_password(form['new_password_confirm']) existingUser.first().set_password(form['new_password_confirm'])
fromObj = copy.copy(existingUser) fromObj = copy.copy(existingUser.first())
existingUser.save() existingUser.first().save()
toObj = copy.copy(existingUser) toObj = copy.copy(existingUser.first())
log_save( log_save(
enums.LogEnum.UPDATE.value, enums.LogEnum.UPDATE.value,
......
from rest_framework.views import exception_handler from __future__ import unicode_literals
from django.db import IntegrityError
from rest_framework.views import Response, exception_handler
from rest_framework import status
from itertools import islice
def custom_exception_handler(exc, context): def custom_exception_handler(exc, context):
...@@ -6,6 +10,7 @@ def custom_exception_handler(exc, context): ...@@ -6,6 +10,7 @@ def custom_exception_handler(exc, context):
# to get the standard error response. # to get the standard error response.
response = exception_handler(exc, context) response = exception_handler(exc, context)
# Update the structure of the response data. # Update the structure of the response data.
if response is not None: if response is not None:
error_message = {} error_message = {}
...@@ -25,5 +30,4 @@ def custom_exception_handler(exc, context): ...@@ -25,5 +30,4 @@ def custom_exception_handler(exc, context):
error_message['message'] = value error_message['message'] = value
response.data = error_message response.data = error_message
return response return response
# Generated by Django 2.2 on 2019-09-19 16:25
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('entities', '0004_auto_20190918_1104'),
]
operations = [
migrations.AlterField(
model_name='entitylog',
name='entity',
field=models.CharField(choices=[('USER', 'USER'), ('APPLICATION', 'APPLICATION'), ('COMPANY', 'COMPANY'), ('DEPARTMENT', 'DEPARTMENT'), ('MODULE', 'MODULE'), ('ChangeRequestTemplateHeader', 'ChangeRequestTemplateHeader'), ('ChangeRequestTemplateApprovers', 'ChangeRequestTemplateApprovers'), ('ChangeRequestTemplateStakeHolders', 'ChangeRequestTemplateStakeHolders'), ('ChangeRequestTemplateAttachments', 'ChangeRequestTemplateAttachments'), ('ChangeRequestTemplateDetails', 'ChangeRequestTemplateDetails')], default='Add', max_length=50),
),
]
...@@ -60,6 +60,7 @@ def forgot_password(args): ...@@ -60,6 +60,7 @@ def forgot_password(args):
FC = F.read() FC = F.read()
FC = FC.replace('{name}', recipient)
FC = FC.replace('{code}', reset_code) FC = FC.replace('{code}', reset_code)
FC = FC.replace('{url}', url) FC = FC.replace('{url}', url)
...@@ -137,7 +138,7 @@ def admin_changepassword(args): ...@@ -137,7 +138,7 @@ def admin_changepassword(args):
subject='OB RMS: Password Changed!', subject='OB RMS: Password Changed!',
message='', message='',
from_email=settings.EMAIL_DEFAULT_SENDER, from_email=settings.EMAIL_DEFAULT_SENDER,
recipient_list=[recipient,], recipient_list=[recipient, admin,],
html_message=FC html_message=FC
) )
......
...@@ -6,7 +6,7 @@ DATABASE_PASSWORD = ...@@ -6,7 +6,7 @@ DATABASE_PASSWORD =
DATABASE_HOST = DATABASE_HOST =
DATABASE_PORT = DATABASE_PORT =
SESSION_TIMEOUT = SESSION_TIMEOUT =
FRONT_END_URL = FRONT_END_URL = http://devweb.rmsv2.oneberrysystem.com
AUTH_ACCESSS_TOKEN_TIMEOUT = AUTH_ACCESSS_TOKEN_TIMEOUT =
USER_DEFAULT_PASSWORD = USER_DEFAULT_PASSWORD =
CATCH_EMAIL = gladys@tirsolutions.com CATCH_EMAIL = gladys@tirsolutions.com
...@@ -20,7 +20,7 @@ DATABASE_PASSWORD = ...@@ -20,7 +20,7 @@ DATABASE_PASSWORD =
DATABASE_HOST = DATABASE_HOST =
DATABASE_PORT = DATABASE_PORT =
SESSION_TIMEOUT = SESSION_TIMEOUT =
FRONT_END_URL = FRONT_END_URL = http://devweb.rmsv2.oneberrysystem.com
AUTH_ACCESSS_TOKEN_TIMEOUT = AUTH_ACCESSS_TOKEN_TIMEOUT =
USER_DEFAULT_PASSWORD = USER_DEFAULT_PASSWORD =
CATCH_EMAIL = gladys@tirsolutions.com CATCH_EMAIL = gladys@tirsolutions.com
...@@ -34,7 +34,7 @@ DATABASE_PASSWORD = ...@@ -34,7 +34,7 @@ DATABASE_PASSWORD =
DATABASE_HOST = DATABASE_HOST =
DATABASE_PORT = DATABASE_PORT =
SESSION_TIMEOUT = SESSION_TIMEOUT =
FRONT_END_URL = FRONT_END_URL = http://devweb.rmsv2.oneberrysystem.com
AUTH_ACCESSS_TOKEN_TIMEOUT = AUTH_ACCESSS_TOKEN_TIMEOUT =
USER_DEFAULT_PASSWORD = USER_DEFAULT_PASSWORD =
CATCH_EMAIL = gladys@tirsolutions.com CATCH_EMAIL = gladys@tirsolutions.com
...@@ -44,11 +44,11 @@ CR_LINK = http://devweb.rms.oneberrysystem.com/cms/change-request/form/view ...@@ -44,11 +44,11 @@ CR_LINK = http://devweb.rms.oneberrysystem.com/cms/change-request/form/view
DATABASE_ENGINE = django.db.backends.mysql DATABASE_ENGINE = django.db.backends.mysql
DATABASE_NAME = rms_db DATABASE_NAME = rms_db
DATABASE_USER = root DATABASE_USER = root
DATABASE_PASSWORD = 123 DATABASE_PASSWORD = password
DATABASE_HOST = localhost DATABASE_HOST = localhost
DATABASE_PORT = 3306 DATABASE_PORT = 3306
SESSION_TIMEOUT = 30 SESSION_TIMEOUT = 30
FRONT_END_URL = FRONT_END_URL = http://devweb.rmsv2.oneberrysystem.com
AUTH_ACCESSS_TOKEN_TIMEOUT = 3600 AUTH_ACCESSS_TOKEN_TIMEOUT = 3600
USER_DEFAULT_PASSWORD = password USER_DEFAULT_PASSWORD = password
CATCH_EMAIL = gladys@tirsolutions.com CATCH_EMAIL = gladys@tirsolutions.com
......
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