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

Merge branch 'core-demo' into 'core-staging'

# Conflicts:
#   app/applicationlayer/management/account/serializer.py
parents 4ccc9549 7ba7e4bc
......@@ -33,13 +33,13 @@ class AllowedCompanyViewSet(viewsets.ModelViewSet):
)
def list(self, request, *args, **kwargs):
# hello again
queryset = self.filter_queryset(self.get_queryset())
page = self.paginate_queryset(queryset)
if page is not None:
serializer = self.get_serializer(page, many=True)
message = status_message_response(
200,
'success',
......
from rest_framework import serializers
from app.entities.models import ChangeRequestSettings
from app.applicationlayer.utils import model_to_dict
class ChangeRequestSettingsSerializer(serializers.ModelSerializer):
def to_representation(self, instance):
ret = super().to_representation(instance)
if instance.behalf_user:
behalf_user_object = {
"id": instance.behalf_user.id,
"name": instance.behalf_user.name,
"username": instance.behalf_user.username,
"code": instance.behalf_user.code,
"email": instance.behalf_user.email,
"contact_no": instance.behalf_user.contact_no
}
ret['behalf_user'] = behalf_user_object
return ret
class Meta:
model = ChangeRequestSettings
fields = '__all__'
read_only_fields = ['created', 'code']
from django_filters import rest_framework as filters
from app.entities.models import ChangeRequestSettings
class ChangeRequestSettingsFilterSet(filters.FilterSet):
class Meta:
model = ChangeRequestSettings
fields = '__all__'
from rest_framework import status, viewsets
from rest_framework.response import Response
from app.entities import enums
from app.entities.models import ChangeRequestSettings, User
from django_filters import rest_framework as filters
from django_filters.rest_framework import DjangoFilterBackend
from rest_framework.filters import SearchFilter, OrderingFilter
from app.applicationlayer.cms.cms_settings.serializer import (
ChangeRequestSettingsSerializer
)
from app.applicationlayer.cms.cms_settings.table_filter import (
ChangeRequestSettingsFilterSet
)
from django.db import transaction
from rest_framework.exceptions import ValidationError
from django.db import IntegrityError
from app.applicationlayer.utils import (
main_threading, log_save, model_to_dict,
CustomPagination,status_message_response
)
from app.helper.email_service import sender
from app.applicationlayer.utils import error_message
class CMSSettingsViewSet(viewsets.ModelViewSet):
queryset = ChangeRequestSettings.objects.all()
serializer_class = ChangeRequestSettingsSerializer
pagination_class = CustomPagination
lookup_field = 'code'
filter_backends = (DjangoFilterBackend, SearchFilter, OrderingFilter)
filterset_class = ChangeRequestSettingsFilterSet
ordering_fields = '__all__'
search_fields = (
'active_user__code',
'behalf_user__code'
)
def list(self, request, *args, **kwargs):
logged_user = self.request.user.code
queryset = self.filter_queryset(
self.get_queryset().filter(active_user=logged_user)
)
page = self.paginate_queryset(queryset)
if page is not None:
serializer = self.get_serializer(page, many=True)
message = status_message_response(
200,
'success',
'List of CMS Settings found',
serializer.data
)
return self.get_paginated_response(message)
serializer = self.get_serializer(queryset, many=True)
return Response(
serializer.data,
status=status.HTTP_200_OK
)
@transaction.atomic
def destroy(self, request, *args, **kwargs):
instance = self.get_object()
logged_user = self.request.user.name
new_instance = model_to_dict(instance)
# behalf = ChangeRequestSettings.objects.filter(code=str(instance)).first()
behalf_name = instance.behalf_user.name
behalf_email = instance.behalf_user.email
self.perform_destroy(instance)
log_save(
enums.LogEnum.DELETED.value,
enums.LogEntitiesEnum.ChangeRequestSettings.value,
new_instance['id'],
new_instance,
''
)
active_user = self.request.user.name
admin = request.user.email
linking_verb = 'as'
args = [behalf_name, 'Removed', active_user, behalf_email, admin, linking_verb]
main_threading(args, sender.on_behalf)
return Response(status=status.HTTP_204_NO_CONTENT)
@transaction.atomic
def create(self, request, *args, **kwargs):
try:
logged_user = self.request.user.code
data_cms_settings = []
behalf_user_list = []
cms_settings = request.data['cms_settings']
for cms_setting in cms_settings:
if cms_setting['behalf_user'] in behalf_user_list:
return error_message('400', 'Please make sure to add unique on behalf users',
'failed', status.HTTP_400_BAD_REQUEST)
else:
behalf_user_list.append(cms_setting['behalf_user'])
cms_setting['active_user'] = logged_user
data_cms_settings.append(cms_setting)
serializer = ChangeRequestSettingsSerializer(
data=data_cms_settings, many=True
)
ChangeRequestSettings.objects.filter(
active_user=logged_user
).delete()
active_user = self.request.user.name
action = 'Added'
admin = request.user.email
linking_verb = 'on'
for data in data_cms_settings:
recipient = User.objects.get(
code=str(data['behalf_user'])
)
args = [recipient.name, action, active_user, recipient.email, admin, linking_verb]
main_threading(args, sender.on_behalf)
if serializer.is_valid(raise_exception=True):
serializer.save()
message = {
'code': 201,
'status': 'success',
'message': 'CMS Settings successfully saved!',
'results': serializer.data
}
return Response(message, status=status.HTTP_201_CREATED)
except ValidationError as e:
message = {
'code': 400,
'status': 'failed',
'message': str(e),
}
return Response(message, status=status.HTTP_400_BAD_REQUEST)
except Exception as e:
message = {
'code': 500,
'status': 'failed',
'message': str(e),
}
return Response(message,
status=status.HTTP_500_INTERNAL_SERVER_ERROR)
......@@ -117,7 +117,7 @@ class ChangeRequestFormsViewset(viewsets.ModelViewSet):
self.serializer_class = ChangeRequestFormHeaderSerializerList
id_number = self.request.user.code
self.queryset = change_request.list_by_user(id_number)
self.queryset = change_request.filter_base(
self.queryset,
request.query_params.get('company_requested_to'),
......@@ -213,7 +213,6 @@ class ChangeRequestFormsViewset(viewsets.ModelViewSet):
request.query_params.get('date_required_to'),
request.query_params.get('form_type'),
)
awaiting_filtered = change_request.filter_awaiting(self.queryset, id_number)
awaiting = awaiting_filtered.count()
......@@ -221,7 +220,6 @@ class ChangeRequestFormsViewset(viewsets.ModelViewSet):
overdue_filtered = change_request.filter_overdue(self.queryset)
overdue = overdue_filtered.count()
message = {
'account_no': id_number,
'pending': pending,
......@@ -393,7 +391,7 @@ class ChangeRequestFormsViewset(viewsets.ModelViewSet):
instance = self.get_object()
serializer = self.get_serializer(instance)
# queryset = self.get_serializer_class().setup_eager_loading(self.queryset)
# models.Notification.objects.filter(
......@@ -555,8 +553,8 @@ class ChangeRequestFormsViewset(viewsets.ModelViewSet):
# full_file_name = os.path.join(my_folder, file_name)
# if os.path.isfile(full_file_name):
# shutil.copy(full_file_name, dest)
for file_name in attch:
a = os.path.join(settings.MEDIA_ROOT, file_name['file_upload__url'])
# full_file_name = os.path.join(my_folder, file_name['file_upload__url'])
# print(full_file_name)
......@@ -703,7 +701,23 @@ class ChangeRequestFormsViewset(viewsets.ModelViewSet):
self.perform_update(serializer)
new_instance = serializer.data
original_user = new_instance['user']['code']
if original_user == current_user:
data_update = {
"on_behalf": None
}
else:
data_update = {
"on_behalf": {
'code': self.request.user.code,
'name': self.request.user.name
}
}
new_instance = {**new_instance, **data_update}
crhistory_save(
batchno,
enums.CREnum.ACTION.value,
......@@ -714,7 +728,8 @@ class ChangeRequestFormsViewset(viewsets.ModelViewSet):
new_instance
)
change_request.cr_routing_actions(new_instance, current_user, move_to_level)
# change_request.cr_routing_actions(new_instance, current_user, move_to_level)
change_request.cr_routing_actions(new_instance, original_user, move_to_level)
# ---------------- removed code
message = status_message_response(
200, 'success',
......@@ -1060,6 +1075,18 @@ class ChangeRequestFormsViewset(viewsets.ModelViewSet):
data = data['toValue'].replace("'", '"').replace('None', '""').replace('True', '""').replace('False', '""')
convert = json.loads(data)
try:
if convert['on_behalf'] and not convert['on_behalf'] == None:
# format: Rejected on behalf by Rita Fantilga
on_behalf = (
convert['action'].capitalize() +
' on behalf by ' +
convert['on_behalf']['name'])
else:
on_behalf = None
except Exception as e:
on_behalf = None
history_dict = {
"name": convert['user']['name'],
"department" : convert['department']['name'],
......@@ -1068,6 +1095,7 @@ class ChangeRequestFormsViewset(viewsets.ModelViewSet):
"delegation" : convert['delegation'],
"action" : convert['action'],
"remarks" : convert['remarks'],
"on_behalf": on_behalf,
"created": convert['action_date']
}
......@@ -1370,4 +1398,3 @@ class ChangeRequestFormPost(APIView):
}
return Response(message,
status=status.HTTP_500_INTERNAL_SERVER_ERROR)
from app.entities import models
from rest_framework import serializers
from app.applicationlayer.utils import model_to_dict
from django.db.models import Q
from app.applicationlayer.cms.form.approver.serializers import ChangeRequestFormApproversSerializer
from app.applicationlayer.cms.form.stakeholder.serializers import ChangeRequestFormStakeHoldersSerializer
from app.applicationlayer.cms.form.details.serializers import ChangeRequestFormDetailsSerializer
from app.applicationlayer.cms.form.attachment.serializers import ChangeRequestFormAttachmentsSerializer
class ChangeRequestFormHeaderSerializer(
serializers.ModelSerializer
):
frm_approvers = ChangeRequestFormApproversSerializer(
many=True, read_only=True)
frm_stakes = ChangeRequestFormStakeHoldersSerializer(
many=True, read_only=True)
frm_attachments = ChangeRequestFormAttachmentsSerializer(
many=True, read_only=True)
frm_details = ChangeRequestFormDetailsSerializer(
many=True, read_only=True)
def to_representation(self, instance):
ret = super().to_representation(instance)
try:
user = self.context['request'].user
id_number = user.code
current_level = models.ChangeRequestFormApprovers.objects.filter(
Q(form_code=ret['form_code']) &
Q(is_action=True) &
Q(user=id_number)
).order_by('level')
if current_level.count() > 0: # and current_level[0].user.code == id_number
if instance.status.lower() == 'rejected':
approver = 'No'
elif instance.status.lower() == 'cancelled':
approver = 'No'
elif instance.status.lower() == 'completed & accepted':
approver = 'No'
else:
approver = 'Yes'
else:
approver = 'No'
ret['action_required'] = approver
requested_to_user = {
"id": instance.requested_to_user.id,
"name": instance.requested_to_user.name,
"username": instance.requested_to_user.username,
"code": instance.requested_to_user.code,
"email": instance.requested_to_user.email,
"contact_no": instance.requested_to_user.contact_no
}
requested_by_user = {
"id": instance.requested_by_user.id,
"name": instance.requested_by_user.name,
"username": instance.requested_by_user.username,
"code": instance.requested_by_user.code,
"email": instance.requested_by_user.email,
"contact_no": instance.requested_by_user.contact_no
}
ret['requested_to_company'] = {
"id": instance.requested_to_company.id,
"code": instance.requested_to_company.code,
"name": instance.requested_to_company.name
}
ret['requested_to_department'] = {
"id": instance.requested_to_department.id,
"code": instance.requested_to_department.code,
"name": instance.requested_to_department.name
}
ret['requested_to_user'] = requested_to_user
ret['requested_by_user'] = requested_by_user
ret['requested_by_department'] = {
"id": instance.requested_by_department.id,
"code": instance.requested_by_department.code,
"name": instance.requested_by_department.name
}
ret['template_object'] = model_to_dict(instance.template_no)
return ret
except Exception as e:
ret['action_required'] = "None"
ret['requested_to_company'] = "None"
ret['requested_to_department'] = "None"
ret['requested_to_user'] = "None"
ret['requested_by_user'] = "None"
ret['requested_by_department'] = "None"
ret['template_object'] = "None"
return ret
class Meta:
model = models.ChangeRequestFormHeader
fields = ('form_code', 'requested_to_template_name', 'requested_to_objective',
'requested_to_target_date', 'requested_to_priority',
'description', 'created', 'cancel_date', 'status',
'requested_to_template_id', 'requested_to_company',
'requested_to_department', 'requested_to_user',
'requested_by_user', 'requested_by_department',
'template_no', 'frm_approvers', 'frm_stakes',
'frm_attachments', 'frm_details')
read_only_fields = ['created', 'form_code']
class ChangeRequestFormHeaderSerializerList(
serializers.ModelSerializer
):
def to_representation(self, instance):
ret = super().to_representation(instance)
try:
user = self.context['request'].user
id_number = user.code
active_users = models.ChangeRequestSettings.objects.filter(
behalf_user=id_number).values('active_user__code')
current_level = models.ChangeRequestFormApprovers.objects.filter(
Q(form_code=ret['form_code']) &
Q(is_action=True) &
Q(user__in=active_users)
).order_by('level')
if current_level.count() > 0:
if instance.status.lower() == 'rejected':
approver = 'No'
elif instance.status.lower() == 'cancelled':
approver = 'No'
elif instance.status.lower() == 'completed & accepted':
approver = 'No'
else:
approver = 'Yes'
else:
approver = 'No'
ret['action_required'] = approver
ret['company'] = instance.requested_to_company.name
ret['department'] = instance.requested_to_department.name
ret['requested_by'] = instance.requested_by_user.name
if instance.status.lower() == 'draft':
existing_transaction = models.ChangeRequestHistory.objects.filter(
form_code=instance.form_code
)
if existing_transaction.count() > 0:
can_delete = False
else:
can_delete = True # hard delete
elif instance.status.lower() == 'cancelled':
can_delete = False
else:
can_delete = None
ret['can_delete'] = can_delete
return ret
except Exception as e:
ret['action_required'] = "No"
ret['company'] = "None"
ret['department'] = "None"
ret['requested_by'] = "None"
return ret
class Meta:
model = models.ChangeRequestFormHeader
fields = '__all__'
read_only_fields = ['created', 'form_code']
\ No newline at end of file
from django_filters import rest_framework as filters
from app.entities.models import ChangeRequestFormHeader
class HeaderFilterSet(filters.FilterSet):
class Meta:
model = ChangeRequestFormHeader
fields = '__all__'
\ No newline at end of file
import os
from rest_framework import viewsets
from app.entities import models
from rest_framework.response import Response
from rest_framework import status, views
from django.db.models import Q
from app.applicationlayer.utils import (QuerySetHelper,
status_message_response)
from app.businesslayer.changerequest import change_request
from app.entities import enums
from app.applicationlayer.utils import (CustomPagination,
status_message_response)
from app.applicationlayer.cms.form.onbehalf.serializers import (
ChangeRequestFormHeaderSerializer,
ChangeRequestFormHeaderSerializerList)
from app.applicationlayer.cms.form.onbehalf.table_filters import HeaderFilterSet
from rest_framework.filters import SearchFilter, OrderingFilter
from django_filters import rest_framework as filters
from django_filters.rest_framework import DjangoFilterBackend
class ChangeRequestFormsViewset(viewsets.ModelViewSet):
queryset = models.ChangeRequestFormHeader.objects.select_related(
'requested_by_user', 'requested_by_department', 'template_no'
).all()
serializer_class = ChangeRequestFormHeaderSerializer
pagination_class = CustomPagination
lookup_field = 'form_code'
filter_backends = (DjangoFilterBackend, SearchFilter, OrderingFilter)
filterset_class = HeaderFilterSet
ordering_fields = (
'form_code',
'requested_to_template_id',
'requested_to_user__name',
'requested_to_department__company__name',
'requested_to_department__name',
'requested_by_user__name',
'status',
'requested_to_priority',
'created',
'requested_to_target_date'
)
search_fields = (
"form_code", "status", "requested_to_template_id", "requested_by_user__name",
"requested_by_user__code", "requested_by_department__name",
"requested_to_company__name", "requested_to_department__name",
"requested_to_user__name", "requested_to_template_name",
"requested_to_objective", "requested_to_priority", "description"
)
def list(self, request, *args, **kwargs):
self.serializer_class = ChangeRequestFormHeaderSerializerList
behalf_user = self.request.user.code
user_active_included = []
active_users = models.ChangeRequestSettings.objects.filter(
behalf_user=behalf_user)
for active_user in active_users:
user_active_included.append(active_user.active_user.code)
self.queryset = change_request.list_by_onbehalf_without_dept(
user_active_included)
self.queryset = change_request.filter_onbehalf_crlist(
self.queryset,
user_active_included)
# self.queryset = change_request.filter_base(
# self.queryset,
# request.query_params.get('company_requested_to'),
# request.query_params.get('department_requested_to'),
# request.query_params.get('date_modified_from'),
# request.query_params.get('date_modified_to'),
# request.query_params.get('date_required_from'),
# request.query_params.get('date_required_to'),
# request.query_params.get('form_type'),
# )
queryset = self.filter_queryset(self.queryset)
page = self.paginate_queryset(queryset)
if page is not None:
serializer = self.get_serializer(page, many=True)
message = status_message_response(
200,
'success',
'List of Change Request Forms for on behalf found',
serializer.data
)
return self.get_paginated_response(message)
serializer = self.get_serializer(self.queryset, many=True)
return Response(
serializer.data,
status=status.HTTP_200_OK
)
def retrieve(self, request, *args, **kwargs):
id_number = self.request.user.code
form_code = kwargs['form_code']
instance = self.get_object()
serializer = self.get_serializer(instance)
return Response(serializer.data)
......@@ -45,12 +45,26 @@ class ChangeRequestTemplatesSerializer(
"code": instance.requested_to_department.code,
"name": instance.requested_to_department.name
}
created_by_user_object = {
"id": instance.created_by_user.id,
"name": instance.created_by_user.name,
"username": instance.created_by_user.username,
"code": instance.created_by_user.code,
"email": instance.created_by_user.email,
"contact_no": instance.created_by_user.contact_no,
"company_code": instance.created_by_user.department.company.code,
"company_name": instance.created_by_user.department.company.name,
"department_code": instance.created_by_user.department.code,
"department_name": instance.created_by_user.department.name
}
ret['requested_to_user'] = requested_to_user_object
ret['company'] = instance.requested_to_company.name
ret['department'] = instance.requested_to_department.name
ret['point_of_contact'] = instance.requested_to_user.name
ret['created_by'] = instance.created_by_user.name
ret['created_by_user'] = created_by_user_object
return ret
......@@ -59,12 +73,12 @@ class ChangeRequestTemplatesSerializer(
ret['requested_to_company'] = "none"
ret['requested_to_department'] = "none"
ret['requested_to_user'] = "none"
ret['created_by_user'] = "none"
ret['company'] = "none"
ret['department'] = "none"
ret['point_of_contact'] = "none"
ret['created_by'] = "none"
return ret
class Meta:
......@@ -87,7 +101,10 @@ class ChangeRequestTemplatesSerializerList(
def to_representation(self, instance):
ret = super().to_representation(instance)
try:
current_user = self.context['request'].user.code
ret['company'] = instance.requested_to_company.name
ret['department'] = instance.requested_to_department.name
ret['point_of_contact'] = instance.requested_to_user.name
......@@ -96,18 +113,21 @@ class ChangeRequestTemplatesSerializerList(
template_no=instance.template_no
)
can_delete = ''
owned_template = ''
if instance.created_by_user.code == current_user:
owned_template = True
else:
owned_template = False
if child.count() > 0:
can_delete = False
else:
can_delete = True
ret['can_delete'] = can_delete
ret['owned_template'] = owned_template
return ret
except Exception as e:
......
......@@ -21,7 +21,8 @@ from app.applicationlayer.cms.utils_cr import (
)
from app.businesslayer.changerequest.change_request_template import (
tmp_add_edit_delete
tmp_add_edit_delete,
list_by_dept_privilege
)
from app.applicationlayer.cms.template.approver.serializers import ChangeRequestTemplateApproversSerializer
from app.applicationlayer.cms.template.stakeholder.serializers import ChangeRequestTemplateStakeHoldersSerializer
......@@ -38,7 +39,7 @@ from django_filters.rest_framework import DjangoFilterBackend
class ChangeRequestTemplatesViewset(viewsets.ModelViewSet):
# queryset = models.ChangeRequestTemplateHeader.objects.all()
queryset = models.ChangeRequestTemplateHeader.objects.select_related(
'created_by_user', 'created_by_department'
......@@ -67,13 +68,13 @@ class ChangeRequestTemplatesViewset(viewsets.ModelViewSet):
)
def list(self, request, *args, **kwargs):
queryset = self.filter_queryset(self.get_queryset())
queryset = queryset.filter(created_by_user=request.user.code,
is_active=True)
self.serializer_class = ChangeRequestTemplatesSerializerList
id_number = self.request.user.code
self.queryset = list_by_dept_privilege(id_number)
queryset = self.filter_queryset(self.queryset)
page = self.paginate_queryset(queryset)
if page is not None:
......@@ -82,7 +83,7 @@ class ChangeRequestTemplatesViewset(viewsets.ModelViewSet):
message = status_message_response(
200,
'success',
'List of Templates found',
'List of Change Request Template found',
serializer.data
)
......
......@@ -5,6 +5,7 @@ from rest_framework.urlpatterns import format_suffix_patterns
from app.applicationlayer.cms.allowed_company import views as allowed
from app.applicationlayer.cms.cms_settings import views as cms_settings
# MASTERS Form
from app.applicationlayer.cms.master.template.company.views import ChangeRequestCompanyTemplateViewSet
......@@ -45,6 +46,8 @@ from app.applicationlayer.cms.auto_email import reminder, overdue, cancel
from app.applicationlayer.cms.form.download import views as dl
from app.applicationlayer.cms.form.onbehalf import views as onbehalf
router = routers.DefaultRouter()
router.register(r'template', header.ChangeRequestTemplatesViewset)
......@@ -61,8 +64,11 @@ router.register(r'form-details', detailsform.ChangeRequestFormDetailsViewset)
router.register(r'form-download', dl.DownloadRequest)
router.register(r'form-onbehalf', onbehalf.ChangeRequestFormsViewset)
# privilege CMS
router.register(r'allowed-companies', allowed.AllowedCompanyViewSet)
router.register(r'cms-settings', cms_settings.CMSSettingsViewSet)
# privilege CMS
# filter endpoints under Allowed Companies table
......
......@@ -817,6 +817,51 @@ def cancelled_user_trigger(form_code,
sender_code, 'cms')
def send_email_onbehalf(active_user, behalf_usernext_level):
# get details of next approver/s
next_approver = models.ChangeRequestFormApprovers.objects.filter(
level=str(next_level),
form_code=form_code
)
# LOOP on next approver for sending email
for n_approver in next_approver:
# NOTIF MSG FOR NEXT APPROVER
msg = APPROVER_MESSAGE.split(';')[0]
if n_approver.delegation.name.lower() == 'vendor/implementor':
msg = VENDOR_ACKNOWLEDGE_MESSAGE.split(';')[0]
# next approver details --------------------------------------------------
receiver_instance = get_account_details(n_approver.user.code)
receiver_name = receiver_instance.values_list('name', flat=True)[0]
receiver_email = receiver_instance.values_list('email', flat=True)[0]
receiver_code = receiver_instance.values_list('code', flat=True)[0]
# call sender email
name = receiver_name
cr_number = cr_number
cr_name = template_name
company_requestedto = company_name
department_requestedto = dept_name
priority_level = requested_to_priority
status = cr_status
url = cr_link
recipient = receiver_email
delegation_type = n_approver.delegation.name.lower()
delegation_recipient = 'None'
admin = sender_email
args = [name, cr_number, cr_name,
company_requestedto, department_requestedto, priority_level,
status, url, recipient, delegation_type,
delegation_recipient, admin]
main_threading(args, sender.routing_table_actions_required)
def delete_master_attachment_file(attachments):
# delete master attachment data and media file attachments
for attachment in attachments:
......
......@@ -22,7 +22,6 @@ class UserDownloadRequest(XLSXFileMixin, ReadOnlyModelViewSet):
permission_classes = (AllowAny,)
def list(self, request, *args, **kwargs):
#comment this line
user_type = self.request.user.user_type
company = self.request.user.department.company.code
department = self.request.user.department.code
......
......@@ -8,12 +8,21 @@ from app.entities import enums
from django.db.models import Q
from app.applicationlayer.management.module.serializer import ModuleSerializer
from app.entities.models import (
User, Department, UserImage, AllowedCompany, Application, Module
User, Department, UserImage, AllowedCompany, Application, Module,
ChangeRequestSettings
)
import os
import configparser
config = configparser.ConfigParser()
config_file = os.path.join('./', 'env.ini')
config.read(config_file)
import os
import configparser
config = configparser.ConfigParser()
config_file = os.path.join('./', 'env.ini')
config.read(config_file)
......@@ -25,12 +34,13 @@ class UserManagementRetreiveSerializer(serializers.ModelSerializer):
department = serializers.SerializerMethodField()
company = serializers.SerializerMethodField()
cms_privilege = serializers.SerializerMethodField()
my_successions = serializers.SerializerMethodField()
class Meta:
model = User
fields = (
'id',
"cms_privilege",
'cms_privilege',
'code', 'name',
'username', 'contact_no',
'image', 'company',
......@@ -38,10 +48,26 @@ class UserManagementRetreiveSerializer(serializers.ModelSerializer):
'email', 'default_app',
'user_type', 'is_active',
'doa',
'my_successions',
)
# exclude = ['password', 'application', 'groups', 'user_permissions']
def get_my_successions(self, user):
data = user.cms_settings_behalf_users.filter(
behalf_user=user.code
).values(
'active_user__name', 'active_user__code',
"behalf_approved", 'behalf_accepted',
'behalf_rejected', 'behalf_implemented',
'behalf_completed'
)
return data
def get_department(self, user):
data = {
"id": user.department.id,
......@@ -95,6 +121,7 @@ class UserManagementRetreiveSerializer(serializers.ModelSerializer):
}
def get_image(self, user):
request = self.context.get('request')
......
from rest_framework.views import APIView
from rest_framework import viewsets
from rest_framework.response import Response
from app.entities import enums
from app.applicationlayer.utils import main_threading
from app.helper.email_service import sender
from rest_framework.permissions import AllowAny
from app.entities.models import (
User, Company, Department
)
from app.applicationlayer.utils import CustomPagination
from app.entities import enums
from django.db.models import Count
class RMSDashBoardViewSet(APIView):
def get(self, request, format=None):
# try:
enums_company = enums.UserTypeEnum.COMPANY_USER_ADMIN.value
enums_department = enums.UserTypeEnum.DEPARTMENT_USER_ADMIN.value
enums_oua = enums.UserTypeEnum.OVERALL_USER_ADMIN.value
user_type = request.user.user_type
user_company = request.user.department.company.code
user_department = request.user.department.code
department_count = ''
company_count = ''
user_count = ''
arr_company = []
recently_company = {}
recently_users = User.objects.all().values(
'name',
'department__company__name',
'department__name',
'date_joined'
).order_by('-date_joined')
if user_type == enums_department:
company_count = 1
department_count = 1
user_count = User.objects.filter(
department=str(user_department)
).exclude(id=1).count()
recently_company['company_name'] = request.user.department.company.name
# recently_company['no_department'] = Department.objects.filter(
# code=str(user_department)
# ).exclude(id=1).count()
recently_company['no_department'] = 1
recently_company['no_users'] = user_count
recently_company['date_added'] = request.user.department.company.created
arr_company.append(recently_company)
recently_users = recently_users.filter(
department=str(user_department)
)
elif user_type == enums_company:
company_count = 1
user_count = User.objects.filter(
department__company=str(user_company)
).exclude(id=1).count()
department_count = Department.objects.filter(
company=str(user_company)
).exclude(id=1).count()
recently_company['company_name'] = request.user.department.company.name
recently_company['no_department'] = department_count
recently_company['no_users'] = User.objects.filter(
department__company__code=str(user_company)
).exclude(id=1).count()
recently_company['date_added'] = request.user.department.company.created
arr_company.append(recently_company)
recently_users = recently_users.filter(
department__company__code=str(user_company)
)
elif user_type == enums_oua:
company_count = Company.objects.count()
department_count = Department.objects.exclude(id=1).count()
user_count = User.objects.exclude(id=1).count()
companies = Company.objects.all().order_by('-created')[0:10]
for data in companies:
recently_company['company_name'] = data.name
recently_company['no_department'] = data.companies.exclude(id=1).count()
recently_company['no_users'] = User.objects.filter(
department__company__code=str(data.code)
).count()
recently_company['date_added'] = data.created
arr_company.append(recently_company)
recently_company = {}
else:
company_count = Company.objects.count()
companies = Company.objects.all().order_by('-created')[0:10]
department_count = Department.objects.count()
user_count = User.objects.all().count()
for data in companies:
recently_company['company_name'] = data.name
recently_company['no_department'] = data.companies.count()
recently_company['no_users'] = User.objects.filter(
department__company__code=str(data.code)
).count()
recently_company['date_added'] = data.created
arr_company.append(recently_company)
recently_company = {}
data = {
"company_count": company_count,
"department_count": department_count,
"user_count": user_count,
"recent_companies": arr_company,
"recent_users": recently_users[:10]
}
return Response(data)
data = {
"company_count": company_count,
"department_count": department_count,
"user_count": user_count,
"recent_companies": arr_company,
"recent_users": recently_users.exclude(id=1)[:10]
}
return Response(data)
# except Exception as e:
# return Response(
# {'message': "query params department_code and company_code are both expected"},
# status=status.HTTP_400_BAD_REQUEST
# )
......@@ -6,6 +6,7 @@ from app.applicationlayer.master.company.views import AdminCompanyViewSet
from app.applicationlayer.master.department.views import AdminDepartmentViewSet
from app.applicationlayer.master.user_type.views import UserTypeViewSet
from app.applicationlayer.master.attachment.views import MasterAttachmentViewSet
from app.applicationlayer.master.dashboard.views import RMSDashBoardViewSet
router = routers.DefaultRouter()
router.register(r'users', AdminAccountViewSet)
......@@ -16,4 +17,5 @@ router.register(r'attachments', MasterAttachmentViewSet)
urlpatterns = [
path('', include(router.urls)),
url(r'^user-types/$', UserTypeViewSet.as_view(), name="user-types"),
url(r'^dashboard/$', RMSDashBoardViewSet.as_view(), name="dashboard"),
]
......@@ -4,16 +4,14 @@ from rest_framework.response import Response
from functools import wraps
from app.entities import enums
from app.entities.models import EntityLog, Notification
from django.conf import settings
from websocket import create_connection
import json
from rest_framework import status
from rest_framework import serializers
import copy
import json
import pusher
from pusher import Pusher
import os
import configparser
......@@ -229,12 +227,6 @@ def notification_create(form_code, message, account_no,
ROOM = account_no
# SENDER = sender_account_no
# send_broadcast_message(
# ROOM,
# SENDER,
# 'NEW NOTIFICATIONS'
# )
if SSL != True:
send_broadcast_message(
......@@ -248,6 +240,13 @@ def notification_create(form_code, message, account_no,
'cms-notification',
{'message': 'NEW NOTIFICATIONS'}
)
else:
send_broadcast_message(
ROOM,
SENDER,
'NEW NOTIFICATIONS'
)
return True
......
......@@ -100,6 +100,7 @@ def list_by_user_archived(user_id_number):
return return_queryset
def list_by_user_without_dept(user_id_number):
try:
return_queryset = models.ChangeRequestFormHeader.objects.filter(
......@@ -735,9 +736,9 @@ def cr_routing_actions(approver_instance, current_user, move_to_level):
if (the_last_vendor and current_user == the_last_vendor.user.code and
level == the_last_vendor.level):
update_form_header_status(form_code, 'Approved')
else:
the_next_vendor = check_vendor_level(
'next', next_level, form_code)
......@@ -809,4 +810,70 @@ def cr_routing_actions(approver_instance, current_user, move_to_level):
reset_autoemail_tables(form_code)
return True
\ No newline at end of file
return True
def filter_onbehalf_crlist(base_queryset,
user_id_number):
return_queryset = base_queryset
try:
on_behalf_included = []
for query in return_queryset:
next_approvers = models.ChangeRequestFormApprovers.objects.filter(
Q(form_code=query.form_code) &
Q(is_action=True)
).order_by("level")
for next_approver in next_approvers:
if next_approver.user.code in user_id_number:
on_behalf_included.append(query.form_code)
return_queryset = return_queryset.filter(
form_code__in=on_behalf_included
).exclude(
(Q(status__icontains='Rejected') |
Q(status__icontains='Completed & Accepted') |
Q(status__icontains='Cancelled') |
Q(status__icontains='Draft'))
)
except Exception as e:
pass
return return_queryset
def list_by_onbehalf_without_dept(user_id_number):
try:
return_queryset = models.ChangeRequestFormHeader.objects.filter(
(Q(frm_approvers__user__code__in=user_id_number) |
Q(frm_stakes__user__code__in=user_id_number) |
Q(requested_by_user__in=user_id_number)) &
Q(is_active=True)
).exclude(
Q(status__icontains='Draft') &
~Q(requested_by_user__in=user_id_number)
).distinct()
return return_queryset
except Exception as e:
return_queryset = None
return return_queryset
return True
......@@ -218,3 +218,25 @@ def validation_vendor_unique_level(approvers):
if not approver['delegation'] == 'DELEGATION-20191119-0000002':
validate = approver['level']
return validate
def list_by_dept_privilege(user_id_number):
try:
priviledgeCrs = models.AllowedCompany.objects.filter(
Q(id_number=user_id_number) &
Q(view_all_change_request_template=True)
).values('group_pivots')
return_queryset = models.ChangeRequestTemplateHeader.objects.filter(
Q(is_active=True) &
(Q(created_by_user=user_id_number) |
Q(created_by_department__in=priviledgeCrs))
)
return return_queryset
except Exception as e:
return_queryset = None
return return_queryset
......@@ -32,6 +32,7 @@ class GenerateCode(Enum):
ETL = 'ETL'
ASSET_GROUP = 'AMSGRP'
CMS_SETTINGS = "CMSSET"
'''
*********
......@@ -64,6 +65,7 @@ class LogEntitiesEnum(Enum):
ChangeRequestFormStakeHolders = "ChangeRequestFormStakeHolders"
ChangeRequestFormAttachments = "ChangeRequestFormAttachments"
ChangeRequestFormDetails = "ChangeRequestFormDetails"
ChangeRequestSettings = 'ChangeRequestSettings'
'''
*********
......
# Generated by Django 2.2 on 2020-02-19 15:25
from django.conf import settings
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('entities', '0001_initial'),
]
operations = [
migrations.AlterField(
model_name='changerequestformapprovers',
name='user',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, related_name='cms_form_approver_user', to=settings.AUTH_USER_MODEL, to_field='code'),
),
migrations.AlterField(
model_name='changerequesttemplateapprovers',
name='user',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, related_name='cms_temp_approver_user', to=settings.AUTH_USER_MODEL, to_field='code'),
),
migrations.AlterField(
model_name='entitylog',
name='entity',
field=models.CharField(choices=[('USER', 'USER'), ('APPLICATION', 'APPLICATION'), ('COMPANY', 'COMPANY'), ('DEPARTMENT', 'DEPARTMENT'), ('MODULE', 'MODULE'), ('DELEGATION', 'DELEGATION'), ('ChangeRequestTemplateHeader', 'ChangeRequestTemplateHeader'), ('ChangeRequestTemplateApprovers', 'ChangeRequestTemplateApprovers'), ('ChangeRequestTemplateStakeHolders', 'ChangeRequestTemplateStakeHolders'), ('ChangeRequestTemplateAttachments', 'ChangeRequestTemplateAttachments'), ('ChangeRequestTemplateDetails', 'ChangeRequestTemplateDetails'), ('ChangeRequestFormHeader', 'ChangeRequestFormHeader'), ('ChangeRequestFormApprovers', 'ChangeRequestFormApprovers'), ('ChangeRequestFormStakeHolders', 'ChangeRequestFormStakeHolders'), ('ChangeRequestFormAttachments', 'ChangeRequestFormAttachments'), ('ChangeRequestFormDetails', 'ChangeRequestFormDetails'), ('ChangeRequestSettings', 'ChangeRequestSettings')], default='Add', max_length=50),
),
migrations.AlterField(
model_name='extracttransformload',
name='model_type',
field=models.CharField(choices=[('APP', 'APP'), ('MODULE', 'MODULE'), ('COMPANY', 'COMPANY'), ('DEPARTMENT', 'DEPARTMENT'), ('USER', 'USER'), ('DELEGATION', 'DELEGATION'), ('NOTIF', 'NOTIF'), ('TMP', 'TMP'), ('TMPAPR', 'TMPAPR'), ('TMPSTK', 'TMPSTK'), ('TMPATCH', 'TMPATCH'), ('TMPDETAIL', 'TMPDETAIL'), ('FRM', 'FRM'), ('FRMAPR', 'FRMAPR'), ('FRMSTK', 'FRMSTK'), ('FRMATCH', 'FRMATCH'), ('FRMDETAIL', 'FRMDETAIL'), ('ETL', 'ETL'), ('AMSGRP', 'AMSGRP'), ('CMSSET', 'CMSSET')], default='USER', max_length=100),
),
migrations.CreateModel(
name='ChangeRequestSettings',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('code', models.CharField(max_length=255, unique=True)),
('behalf_approved', models.BooleanField(default=False)),
('behalf_accepted', models.BooleanField(default=False)),
('behalf_rejected', models.BooleanField(default=False)),
('behalf_implemented', models.BooleanField(default=False)),
('behalf_completed', models.BooleanField(default=False)),
('created', models.DateTimeField(auto_now_add=True)),
('deleted_at', models.DateTimeField(blank=True, null=True)),
('active_user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='cms_settings_active_users', to=settings.AUTH_USER_MODEL, to_field='code')),
('behalf_user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='cms_settings_behalf_users', to=settings.AUTH_USER_MODEL, to_field='code')),
],
options={
'db_table': 'change_request_settings',
'ordering': ['-created'],
'unique_together': {('active_user', 'behalf_user')},
},
),
]
# Generated by Django 2.2 on 2020-02-27 17:46
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('entities', '0002_auto_20200219_1525'),
]
operations = [
migrations.AddField(
model_name='allowedcompany',
name='view_all_change_request_template',
field=models.BooleanField(default=True),
),
]
......@@ -478,12 +478,6 @@ class BaseHeader(models.Model):
class BaseApprover(models.Model):
level = models.IntegerField()
user = models.ForeignKey(
User,
blank=True,
null=True,
on_delete=models.PROTECT,
to_field='code')
delegation = models.ForeignKey(
Delegation,
blank=True,
......@@ -653,6 +647,13 @@ class ChangeRequestTemplateApprovers(BaseApprover):
is_default = models.BooleanField(
default=False
)
user = models.ForeignKey(
User,
blank=True,
null=True,
on_delete=models.PROTECT,
to_field='code',
related_name='cms_temp_approver_user')
class Meta:
db_table = 'change_request_template_approvers'
......@@ -846,6 +847,13 @@ class ChangeRequestFormApprovers(BaseApprover):
blank=True,
null=True,
to_field='code')
user = models.ForeignKey(
User,
blank=True,
null=True,
on_delete=models.PROTECT,
to_field='code',
related_name='cms_form_approver_user')
class Meta:
db_table = 'change_request_form_approvers'
......@@ -1102,9 +1110,11 @@ class AllowedCompany(models.Model):
create_change_request_template = models.BooleanField(default=True)
view_all_change_request = models.BooleanField(default=True)
approve_cr = models.BooleanField(default=False)
view_all_change_request_template = models.BooleanField(default=True)
created_at = models.DateTimeField(auto_now_add=True)
deleted_at = models.DateTimeField(null=True, blank=True)
class Meta:
db_table = 'allowed_company'
unique_together = ['company_pivot', 'group_pivots', 'id_number']
......@@ -1221,3 +1231,43 @@ class AssetGroup(models.Model):
self.code = code
self.created = datetime.now()
self.save()
class ChangeRequestSettings(models.Model):
code = models.CharField(unique=True, max_length=255)
active_user = models.ForeignKey(
User,
on_delete=models.CASCADE,
to_field='code',
related_name='cms_settings_active_users'
)
behalf_user = models.ForeignKey(
User,
on_delete=models.CASCADE,
to_field='code',
related_name='cms_settings_behalf_users'
)
behalf_approved = models.BooleanField(default=False)
behalf_accepted = models.BooleanField(default=False)
behalf_rejected = models.BooleanField(default=False)
behalf_implemented = models.BooleanField(default=False)
behalf_completed = models.BooleanField(default=False)
created = models.DateTimeField(auto_now_add=True)
deleted_at = models.DateTimeField(null=True, blank=True)
class Meta:
db_table = 'change_request_settings'
ordering = ['-created']
unique_together = ['active_user', 'behalf_user']
def __str__(self):
return f'{self.code}'
def save(self, *args, **kwargs):
super(ChangeRequestSettings, self).save(*args, **kwargs)
code = number_generator(enums.GenerateCode.CMS_SETTINGS.value, self.id)
if self.code == '':
self.code = code
self.created = datetime.now()
self.save()
......@@ -595,4 +595,52 @@ def routing_table_overdue(args):
createdby=admin,
modifiedby=admin
)
return True
# RMS-ONBEHALF
def on_behalf(args):
name = args[0]
action = args[1]
active_user = args[2]
recipient = args[3]
admin = args[4]
linking_verb = args[5]
F = open(os.path.join(settings.EMAIL_TEMPLATES_ROOT, 'RMS-ONBEHALF.html'), 'r')
FC = F.read()
FC = FC.replace('{name}', name)
FC = FC.replace('{action}', action)
FC = FC.replace('{active_user}', active_user)
FC = FC.replace('{linking_verb}', linking_verb)
try:
send_mail(
subject='Resource Management System - On Behalf User',
message='',
from_email=settings.EMAIL_DEFAULT_SENDER,
recipient_list=(recipient,),
html_message=FC,
fail_silently=False
)
models.EmailLogs.objects.create(
template='RMS-ONBEHALF.html',
recipients=recipient,
content=FC,
is_sent=True,
createdby=admin,
modifiedby=admin
)
except Exception as e:
models.EmailLogs.objects.create(
template='RMS-ONBEHALF.html',
recipients=recipient,
content=FC,
is_sent=False,
createdby=admin,
modifiedby=admin
)
return True
\ No newline at end of file
<!DOCTYPE html>
<html>
<head>
<title>RMS: ASSIGNED ON BEHALF</title>
</head>
<body style="font-family: arial;">
<h3>Resource Management System &#40;RMS&#41;</h3>
<h3 style="color:#888888;">{action} on Behalf</h3><br>
<p>Dear {name},</p><br>
<p>Please be informed that {active_user} {action} you {linking_verb} their behalf for change requests under Actions on Behalf. </p><br>
<!-- <p>Please be informed that {active_user} {action} you as on behalf user for change request. </p><br> -->
<p>Sincerely,</p>
<p>RMS Team</p><br><br>
<p>Powered by</p>
<img src="https://s3-ap-southeast-1.amazonaws.com/oneberry/img/logo_oneberry.png" class="img-responsive" style="width:150px;height:auto;" />
</body>
</html>
\ No newline at end of file
Product Environment:
http://administrator@42.61.118.105:7990/scm/rms/api-main-service.git -b product-dev
http://administrator@42.61.118.105:7990/scm/rms/api-main-service.git -b product-sit
http://administrator@42.61.118.105:7990/scm/rms/api-main-service.git -b product-staging
http://administrator@42.61.118.105:7990/scm/rms/api-main-service.git -b product-demo
JTC Environment:
http://administrator@42.61.118.105:7990/scm/rms/api-main-service.git -b jtc-dev
http://administrator@42.61.118.105:7990/scm/rms/api-main-service.git -b jtc-sit
http://administrator@42.61.118.105:7990/scm/rms/api-main-service.git -b jtc-staging
http://administrator@42.61.118.105:7990/scm/rms/api-main-service.git -b jtc-demo
Product Environment:
http://Administrator@52.76.133.252:7990/scm/rms/web.git -b product-dev
http://Administrator@52.76.133.252:7990/scm/rms/web.git -b product-sit
http://Administrator@52.76.133.252:7990/scm/rms/web.git -b product-staging
http://Administrator@52.76.133.252:7990/scm/rms/web.git -b product-demo
JTC Environment:
http://Administrator@52.76.133.252:7990/scm/rms/web.git -b jtc-dev
http://Administrator@52.76.133.252:7990/scm/rms/web.git -b jtc-sit
http://Administrator@52.76.133.252:7990/scm/rms/web.git -b jtc-staging
http://Administrator@52.76.133.252:7990/scm/rms/web.git -b jtc-demo
\ No newline at end of file
......@@ -26,7 +26,6 @@ BASE_DIR = os.path.dirname(
SECRET_KEY = 'w!dkk7gc*dk#4!6ow3s1wc32%_yp$=osgybm=n0vw6k1j^sqo&'
# SECURITY WARNING: don't run with debug turned on in production!
DEBUG = False
ALLOWED_HOSTS = ['*']
CORS_ORIGIN_ALLOW_ALL = True
......@@ -163,8 +162,8 @@ EMAIL_TEMPLATES_ROOT = os.path.join(BASE_DIR, "app/helper/email_service/template
EMAIL_HOST = 'email-smtp.us-west-2.amazonaws.com'
EMAIL_PORT = 587
EMAIL_HOST_USER = 'AKIAYA4XVX5XFZHRQATF'
EMAIL_HOST_PASSWORD = 'BIOG15v+WTbTiBtPKkn+LCjg0UHqO3nLFQezh4pi6g3y'
EMAIL_HOST_USER = 'AKIAIPRWQKYV6N5SMLUA'
EMAIL_HOST_PASSWORD = 'ApK1dtH2qpT/oMl9MEauFvyN9XZDQ1fjzd8TumIs71NG'
EMAIL_USE_SSL = False
EMAIL_USE_TLS = True
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
......@@ -184,8 +183,9 @@ CHANNEL_LAYERS = {
'default': {
'BACKEND': 'channels_redis.core.RedisChannelLayer',
'CONFIG': {
"hosts": [('172.17.0.1', 6379)],
# "hosts": [('127.0.0.1', 6379)],
# "hosts": [('172.17.0.1', 6379)],
# "hosts": [(os.environ.get('REDIS_HOST', 'localhost'),6379)],
"hosts": [('127.0.0.1', 6379)],
},
},
}
......@@ -201,9 +201,12 @@ DATABASES = {
}
}
# ****************
# PROGRAM SETTINGS
# ****************
DEBUG = config['SETTINGS']['DEBUG']
SESSION_TIMEOUT = config['SETTINGS']['SESSION_TIMEOUT']
FRONT_END_URL = config['SETTINGS']['FRONT_END_URL']
AUTH_ACCESSS_TOKEN_TIMEOUT = config['SETTINGS']['AUTH_ACCESSS_TOKEN_TIMEOUT']
......@@ -227,4 +230,3 @@ APPROVER_REJECT_MESSAGE = config['NOTIFICATION_EMAIL']['APPROVER_REJECT_MESSAGE'
CATCH_EMAIL = config['SETTINGS']['CATCH_EMAIL']
CR_FRONT_LINK = config['SETTINGS']['CR_LINK']
......@@ -10,3 +10,4 @@ services:
- "7020:8000"
container_name: dev_rmsv2_api_container
restart: always
......@@ -64,6 +64,7 @@ REALTIMESERVER_IP = 127.0.0.1:8000
[SETTINGS]
CONFIG = config.settings.local
BATCH_UPLOAD_FORMAT_FILENAME = instruction.pdf
SSL = 1
[NOTIFICATION_EMAIL]
APPROVER_MESSAGE = has sent you an APPROVAL REQUEST for change request;RMS-ACTIONREQUIRED
......
This diff is collapsed.
INSERT INTO `applications` (`id`, `created`, `createdby`, `modified`, `modifiedby`, `code`, `name`, `excel_code`) VALUES
(1, '2019-09-23 12:43:33.754098', 'superuser', '2019-09-23 12:43:33.754098', 'superuser', 'APP-20190923-0000001', 'Resource Management System', 'rms'),
(2, '2019-09-23 12:43:40.512905', 'superuser', '2019-09-23 12:43:40.512905', 'superuser', 'APP-20190923-0000002', 'Change Request Management System', 'cms'),
(3, '2019-09-23 12:43:55.957076', 'superuser', '2019-09-23 12:43:55.957076', 'superuser', 'APP-20190923-0000003', 'Asset Management System', 'ams');
INSERT INTO `auth_user` (`id`, `last_login`, `is_superuser`, `first_name`, `last_name`, `is_staff`, `is_active`, `date_joined`, `user_type`, `code`, `name`, `username`, `password`, `contact_no`, `email`, `default_app_id`, `department_id`, `doa_id`) VALUES
(1, '2019-11-25 14:25:06.048963', 1, '', '', 1, 1, '2019-09-23 12:42:37.938304', 'SU', 'USER-20190923-0000001', '', 'superuser', 'pbkdf2_sha256$150000$YLmqqWBQGsJG$r4NYkY05q1zlmgzh106ejBbzd0NY00YEfylllyVQyk0=', NULL, 'red@tirsolutions.com', 'APP-20190923-0000001', 'DEPARTMENT-20190923-0000001', NULL);
INSERT INTO `auth_user_application` (`id`, `user_id`, `application_id`) VALUES
(1, 1, 1),
(2, 1, 2),
(3, 1, 3);
INSERT INTO `auth_user_images` (`id`, `created`, `createdby`, `modified`, `modifiedby`, `name`, `image`, `is_primary`, `user_id`) VALUES
(11, '2019-10-15 12:27:13.058304', 'superuser', '2019-10-15 12:27:13.058352', 'superuser', '_profile_pic.png', 'user_images/_profile_pic.png', 1, 'USER-20190923-0000001');
INSERT INTO `companies` (`id`, `created`, `createdby`, `modified`, `modifiedby`, `code`, `name`, `contact_details`) VALUES
(1, '2019-09-23 12:45:31.058709', 'superuser', '2019-10-01 18:10:40.098534', 'superuser', 'COMPANY-20190923-0000001', 'Oneberry Technologies Pte Ltd', '2152509');
DELETE FROM `delegations`;
INSERT INTO `delegations` (`id`, `created`, `createdby`, `modified`, `modifiedby`, `code`, `name`) VALUES
(1, '2019-11-19 17:46:08.984731', 'superuser', '2019-11-19 17:46:08.984731', 'superuser', 'DELEGATION-20191119-0000001', 'Requestor'),
(2, '2019-11-19 17:46:18.010437', 'superuser', '2019-11-19 17:46:18.010437', 'superuser', 'DELEGATION-20191119-0000002', 'Vendor/Implementor'),
(3, '2019-11-19 17:46:26.168693', 'superuser', '2019-11-22 10:03:40.605242', 'superuser', 'DELEGATION-20191119-0000003', 'Head of Department'),
(4, '2019-11-19 17:46:34.020753', 'superuser', '2019-11-19 17:46:34.020753', 'superuser', 'DELEGATION-20191119-0000004', 'SD/OD'),
(5, '2019-11-19 17:46:41.461203', 'superuser', '2019-11-19 17:46:41.462205', 'superuser', 'DELEGATION-20191119-0000005', 'Change Control Board'),
(6, '2019-11-19 17:46:49.472397', 'superuser', '2019-11-19 17:46:49.472397', 'superuser', 'DELEGATION-20191119-0000006', 'Approver'),
(12, '2019-11-21 09:46:42.763973', 'superuser', '2019-11-21 09:46:55.656089', 'superuser', 'DELEGATION-20191121-0000012', 'Facilities Manager'),
(13, '2019-11-21 09:47:04.092120', 'superuser', '2019-11-21 10:08:40.239094', 'superuser', 'DELEGATION-20191121-0000013', 'Move Manager');
INSERT INTO `departments` (`id`, `created`, `createdby`, `modified`, `modifiedby`, `code`, `name`, `company_id`) VALUES
(1, '2019-09-23 12:45:52.531178', 'superuser', '2019-10-01 18:12:27.956536', 'superuser', 'DEPARTMENT-20190923-0000001', 'Super User', 'COMPANY-20190923-0000001');
INSERT INTO `email_logs` (`id`, `created`, `createdby`, `modified`, `modifiedby`, `template`, `recipients`, `content`, `is_sent`) VALUES
(1, '2019-12-11 15:57:36.338584', 'red@tirsolutions.com', '2019-12-11 15:57:36.338637', 'red@tirsolutions.com', 'RMS-NEWUSER.html', 'tirsamemail+fan@gmail.com', '<!DOCTYPE html>\n<html>\n<head>\n<title>RMS: New User Created</title>\n</head>\n<body style="font-family: arial;">\n\n<h3>Resource Management System &#40;RMS&#41;</h3>\n<h3 style="color:#888888;">New User Created</h3><br>\n\n<p>Dear Rita Fantilga,</p><br>\n<p>You have been created as a new user of RMS. Please see your default login details below.</p><br>\n \n<b>Username</b><br>ob-rita<br><br>\n<b>Password</b><br>xqZgDfBjZR<br><br>\n\n<p>You may change your password through the <u><a href="http://devweb.rmsv2.oneberrysystem.com/cms/profile" style="text-decoration:underline;color:#007bff;" target="_blank">my profile</a></u> section of RMS any time.</p><br>\n \n<p>Sincerely,</p>\n<p>RMS Team</p><br><br>\n \n<p>Powered by</p>\n<img src="https://s3-ap-southeast-1.amazonaws.com/oneberry/img/logo_oneberry.png" class="img-responsive" style="width:150px;height:auto;" />\n \n</body>\n</html>', 1);
INSERT INTO `master_attachments` (`id`, `url`, `attch_ref`) VALUES
(323, 'uploads/RMS_-_Forgot_Password_3_A77aRmz.html', 'url'),
(324, 'uploads/batch_upload.xlsx', 'url'),
(325, 'uploads/batch_upload_rewd8IS.xlsx', 'sa1w1ypu4qbk39jbkek'),
(332, 'uploads/zzzzz7_6yOT3ai.xlsx', 'url'),
(374, 'uploads/instruction.pdf', 'url'),
(507, 'uploads/fred.png', 'url'),
(612, 'uploads/zzzzz7.xlsx', 'url'),
(818, 'uploads/user_format.csv', 'etl_gen');
INSERT INTO `modules` (`id`, `created`, `createdby`, `modified`, `modifiedby`, `code`, `name`, `sort_id`, `component`, `application_id`, `parent_id`) VALUES
(1, '2019-09-27 12:49:27.795897', 'superuser', '2019-09-27 12:49:27.795897', 'superuser', 'MODULE-20190927-0000001', 'Application Management', 1, 'rms/application-management', 'APP-20190923-0000001', NULL),
(2, '2019-09-27 12:49:31.756321', 'superuser', '2019-09-27 13:00:57.280102', 'superuser', 'MODULE-20190927-0000002', 'Company Management', 2, 'rms/company-management', 'APP-20190923-0000001', NULL),
(3, '2019-09-27 12:49:49.528430', 'superuser', '2019-09-27 13:00:18.423200', 'superuser', 'MODULE-20190927-0000003', 'Department Management', 4, 'rms/department-management', 'APP-20190923-0000001', NULL),
(4, '2019-09-27 12:49:57.378955', 'superuser', '2019-09-27 12:58:07.634481', 'superuser', 'MODULE-20190927-0000004', 'Module Management', 5, 'rms/module-management', 'APP-20190923-0000001', NULL),
(5, '2019-09-27 12:50:01.383432', 'superuser', '2019-09-30 14:37:53.210860', 'superuser', 'MODULE-20190927-0000005', 'User Management', 6, 'rms/user-management', 'APP-20190923-0000001', NULL),
(6, '2019-09-27 12:50:15.910699', 'superuser', '2019-09-27 19:04:53.805099', 'superuser', 'MODULE-20190927-0000006', 'Change Request Template', 3, 'cms/change-request/template', 'APP-20190923-0000002', NULL),
(10, '2019-09-28 12:28:20.174483', 'superuser', '2019-09-30 14:38:38.604217', 'superuser', 'MODULE-20190928-0000010', 'Change Request Form', 2, 'cms/change-request/form', 'APP-20190923-0000002', NULL),
(11, '2019-09-30 17:15:33.022534', 'superuser', '2019-09-30 17:15:33.022578', 'superuser', 'MODULE-20190930-0000011', 'Notification', 1, 'cms/notifications', 'APP-20190923-0000002', NULL),
(19, '2019-11-07 17:27:21.486248', 'superuser', '2019-11-07 17:27:21.486290', 'superuser', 'MODULE-20191107-0000019', 'Delegation Management', 7, 'rms/delegation-management', 'APP-20190923-0000001', NULL);
......@@ -20,3 +20,4 @@ docker run -d --restart=always -p 3001:3000 sit_rms_webv2 npm start
Clear Cache REDIS
docker exec -it container-name redis-cli FLUSHALL
config set stop-writes-on-bgsave-error no
docker run -p 6379:6379 -d redis:2.8
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