Commit c1d808cc authored by Gladys Forte's avatar Gladys Forte

Merge pull request #792 in RMS/api-main-service from prod-dev-gladys to product-dev

* commit '963f2d4a': (84 commits)
  delete migrations
  test commit for merging environments
  fixing conflicts on product dev
  revert "set domain email to rms-hub.com"
  set domain email to rms-hub.com
  testing
  delete branch endpoint
  testing pull on all environment
  fixing recent_companies
  fixing serving profile picture on account
  dev debug=True
  page size set 100 branches viewset
  filter files for all dependent of branches endpoint
  added branches endpoint as reference to environments
  branches.txt
  update settings channel layer hosts
  fixing ignore
  remove dockerfile and docker-compose to fix conflict
  added new database, remove docker-compose and Dockerfile on gitignore to aviod conflicts
  completed action
  ...
parents 7c38d530 963f2d4a
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
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 = []
cms_settings = request.data['cms_settings']
for cms_setting in cms_settings:
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)
...@@ -210,7 +210,6 @@ class ChangeRequestFormsViewset(viewsets.ModelViewSet): ...@@ -210,7 +210,6 @@ class ChangeRequestFormsViewset(viewsets.ModelViewSet):
overdue_filtered = change_request.filter_overdue(self.queryset) overdue_filtered = change_request.filter_overdue(self.queryset)
overdue = overdue_filtered.count() overdue = overdue_filtered.count()
message = { message = {
'account_no': id_number, 'account_no': id_number,
'pending': pending, 'pending': pending,
...@@ -544,8 +543,8 @@ class ChangeRequestFormsViewset(viewsets.ModelViewSet): ...@@ -544,8 +543,8 @@ class ChangeRequestFormsViewset(viewsets.ModelViewSet):
# full_file_name = os.path.join(my_folder, file_name) # full_file_name = os.path.join(my_folder, file_name)
# if os.path.isfile(full_file_name): # if os.path.isfile(full_file_name):
# shutil.copy(full_file_name, dest) # shutil.copy(full_file_name, dest)
for file_name in attch: for file_name in attch:
a = os.path.join(settings.MEDIA_ROOT, file_name['file_upload__url']) 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']) # full_file_name = os.path.join(my_folder, file_name['file_upload__url'])
# print(full_file_name) # print(full_file_name)
...@@ -693,6 +692,22 @@ class ChangeRequestFormsViewset(viewsets.ModelViewSet): ...@@ -693,6 +692,22 @@ class ChangeRequestFormsViewset(viewsets.ModelViewSet):
self.perform_update(serializer) self.perform_update(serializer)
new_instance = serializer.data 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( crhistory_save(
batchno, batchno,
enums.CREnum.ACTION.value, enums.CREnum.ACTION.value,
...@@ -703,7 +718,8 @@ class ChangeRequestFormsViewset(viewsets.ModelViewSet): ...@@ -703,7 +718,8 @@ class ChangeRequestFormsViewset(viewsets.ModelViewSet):
new_instance 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 # ---------------- removed code
message = status_message_response( message = status_message_response(
200, 'success', 200, 'success',
...@@ -1049,6 +1065,18 @@ class ChangeRequestFormsViewset(viewsets.ModelViewSet): ...@@ -1049,6 +1065,18 @@ class ChangeRequestFormsViewset(viewsets.ModelViewSet):
data = data['toValue'].replace("'", '"').replace('None', '""').replace('True', '""').replace('False', '""') data = data['toValue'].replace("'", '"').replace('None', '""').replace('True', '""').replace('False', '""')
convert = json.loads(data) 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 = { history_dict = {
"name": convert['user']['name'], "name": convert['user']['name'],
"department" : convert['department']['name'], "department" : convert['department']['name'],
...@@ -1057,6 +1085,7 @@ class ChangeRequestFormsViewset(viewsets.ModelViewSet): ...@@ -1057,6 +1085,7 @@ class ChangeRequestFormsViewset(viewsets.ModelViewSet):
"delegation" : convert['delegation'], "delegation" : convert['delegation'],
"action" : convert['action'], "action" : convert['action'],
"remarks" : convert['remarks'], "remarks" : convert['remarks'],
"on_behalf": on_behalf,
"created": convert['action_date'] "created": convert['action_date']
} }
...@@ -1359,4 +1388,3 @@ class ChangeRequestFormPost(APIView): ...@@ -1359,4 +1388,3 @@ class ChangeRequestFormPost(APIView):
} }
return Response(message, return Response(message,
status=status.HTTP_500_INTERNAL_SERVER_ERROR) 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,
send_broadcast_message)
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)
...@@ -5,6 +5,7 @@ from rest_framework.urlpatterns import format_suffix_patterns ...@@ -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.allowed_company import views as allowed
from app.applicationlayer.cms.cms_settings import views as cms_settings
# MASTERS Form # MASTERS Form
from app.applicationlayer.cms.master.template.company.views import ChangeRequestCompanyTemplateViewSet from app.applicationlayer.cms.master.template.company.views import ChangeRequestCompanyTemplateViewSet
...@@ -45,6 +46,8 @@ from app.applicationlayer.cms.auto_email import reminder, overdue, cancel ...@@ -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.download import views as dl
from app.applicationlayer.cms.form.onbehalf import views as onbehalf
router = routers.DefaultRouter() router = routers.DefaultRouter()
router.register(r'template', header.ChangeRequestTemplatesViewset) router.register(r'template', header.ChangeRequestTemplatesViewset)
...@@ -61,8 +64,11 @@ router.register(r'form-details', detailsform.ChangeRequestFormDetailsViewset) ...@@ -61,8 +64,11 @@ router.register(r'form-details', detailsform.ChangeRequestFormDetailsViewset)
router.register(r'form-download', dl.DownloadRequest) router.register(r'form-download', dl.DownloadRequest)
router.register(r'form-onbehalf', onbehalf.ChangeRequestFormsViewset)
# privilege CMS # privilege CMS
router.register(r'allowed-companies', allowed.AllowedCompanyViewSet) router.register(r'allowed-companies', allowed.AllowedCompanyViewSet)
router.register(r'cms-settings', cms_settings.CMSSettingsViewSet)
# privilege CMS # privilege CMS
# filter endpoints under Allowed Companies table # filter endpoints under Allowed Companies table
......
...@@ -817,6 +817,51 @@ def cancelled_user_trigger(form_code, ...@@ -817,6 +817,51 @@ def cancelled_user_trigger(form_code,
sender_code, 'cms') 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): def delete_master_attachment_file(attachments):
# delete master attachment data and media file attachments # delete master attachment data and media file attachments
for attachment in attachments: for attachment in attachments:
......
...@@ -8,12 +8,21 @@ from app.entities import enums ...@@ -8,12 +8,21 @@ from app.entities import enums
from django.db.models import Q from django.db.models import Q
from app.applicationlayer.management.module.serializer import ModuleSerializer from app.applicationlayer.management.module.serializer import ModuleSerializer
from app.entities.models import ( from app.entities.models import (
User, Department, UserImage, AllowedCompany, Application, Module User, Department, UserImage, AllowedCompany, Application, Module,
ChangeRequestSettings
) )
import os import os
import configparser import configparser
config = configparser.ConfigParser()
config_file = os.path.join('./', 'env.ini')
config.read(config_file)
import os
import configparser
config = configparser.ConfigParser() config = configparser.ConfigParser()
config_file = os.path.join('./', 'env.ini') config_file = os.path.join('./', 'env.ini')
config.read(config_file) config.read(config_file)
...@@ -26,6 +35,7 @@ class UserManagementRetreiveSerializer(serializers.ModelSerializer): ...@@ -26,6 +35,7 @@ class UserManagementRetreiveSerializer(serializers.ModelSerializer):
company = serializers.SerializerMethodField() company = serializers.SerializerMethodField()
create_form = serializers.SerializerMethodField() create_form = serializers.SerializerMethodField()
create_template = serializers.SerializerMethodField() create_template = serializers.SerializerMethodField()
my_successions = serializers.SerializerMethodField()
class Meta: class Meta:
model = User model = User
...@@ -40,10 +50,26 @@ class UserManagementRetreiveSerializer(serializers.ModelSerializer): ...@@ -40,10 +50,26 @@ class UserManagementRetreiveSerializer(serializers.ModelSerializer):
'email', 'default_app', 'email', 'default_app',
'user_type', 'is_active', 'user_type', 'is_active',
'doa', 'doa',
'my_successions',
) )
# exclude = ['password', 'application', 'groups', 'user_permissions'] # 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): def get_department(self, user):
data = { data = {
"id": user.department.id, "id": user.department.id,
......
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 ...@@ -6,6 +6,7 @@ from app.applicationlayer.master.company.views import AdminCompanyViewSet
from app.applicationlayer.master.department.views import AdminDepartmentViewSet from app.applicationlayer.master.department.views import AdminDepartmentViewSet
from app.applicationlayer.master.user_type.views import UserTypeViewSet from app.applicationlayer.master.user_type.views import UserTypeViewSet
from app.applicationlayer.master.attachment.views import MasterAttachmentViewSet from app.applicationlayer.master.attachment.views import MasterAttachmentViewSet
from app.applicationlayer.master.dashboard.views import RMSDashBoardViewSet
router = routers.DefaultRouter() router = routers.DefaultRouter()
router.register(r'users', AdminAccountViewSet) router.register(r'users', AdminAccountViewSet)
...@@ -16,4 +17,5 @@ router.register(r'attachments', MasterAttachmentViewSet) ...@@ -16,4 +17,5 @@ router.register(r'attachments', MasterAttachmentViewSet)
urlpatterns = [ urlpatterns = [
path('', include(router.urls)), path('', include(router.urls)),
url(r'^user-types/$', UserTypeViewSet.as_view(), name="user-types"), url(r'^user-types/$', UserTypeViewSet.as_view(), name="user-types"),
url(r'^dashboard/$', RMSDashBoardViewSet.as_view(), name="dashboard"),
] ]
...@@ -100,6 +100,7 @@ def list_by_user_archived(user_id_number): ...@@ -100,6 +100,7 @@ def list_by_user_archived(user_id_number):
return return_queryset return return_queryset
def list_by_user_without_dept(user_id_number): def list_by_user_without_dept(user_id_number):
try: try:
return_queryset = models.ChangeRequestFormHeader.objects.filter( return_queryset = models.ChangeRequestFormHeader.objects.filter(
...@@ -809,4 +810,70 @@ def cr_routing_actions(approver_instance, current_user, move_to_level): ...@@ -809,4 +810,70 @@ def cr_routing_actions(approver_instance, current_user, move_to_level):
reset_autoemail_tables(form_code) reset_autoemail_tables(form_code)
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 return True
...@@ -32,6 +32,7 @@ class GenerateCode(Enum): ...@@ -32,6 +32,7 @@ class GenerateCode(Enum):
ETL = 'ETL' ETL = 'ETL'
ASSET_GROUP = 'AMSGRP' ASSET_GROUP = 'AMSGRP'
CMS_SETTINGS = "CMSSET"
''' '''
********* *********
...@@ -64,6 +65,7 @@ class LogEntitiesEnum(Enum): ...@@ -64,6 +65,7 @@ class LogEntitiesEnum(Enum):
ChangeRequestFormStakeHolders = "ChangeRequestFormStakeHolders" ChangeRequestFormStakeHolders = "ChangeRequestFormStakeHolders"
ChangeRequestFormAttachments = "ChangeRequestFormAttachments" ChangeRequestFormAttachments = "ChangeRequestFormAttachments"
ChangeRequestFormDetails = "ChangeRequestFormDetails" ChangeRequestFormDetails = "ChangeRequestFormDetails"
ChangeRequestSettings = 'ChangeRequestSettings'
''' '''
********* *********
......
This diff is collapsed.
# Generated by Django 2.2 on 2020-02-05 17:07
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('entities', '0001_initial'),
]
operations = [
migrations.AlterField(
model_name='changerequestformattachments',
name='file_upload',
field=models.ForeignKey(default=1, on_delete=django.db.models.deletion.PROTECT, related_name='form_attachments', to='entities.MasterAttachment'),
preserve_default=False,
),
migrations.AlterField(
model_name='changerequesttemplateattachments',
name='file_upload',
field=models.ForeignKey(default=1, on_delete=django.db.models.deletion.PROTECT, related_name='template_attachments', to='entities.MasterAttachment'),
preserve_default=False,
),
]
# Generated by Django 2.2 on 2020-02-06 14:22
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
('entities', '0002_auto_20200205_1707'),
]
operations = [
migrations.RemoveField(
model_name='changerequestformheader',
name='company_desc',
),
migrations.RemoveField(
model_name='changerequestformheader',
name='department_desc',
),
migrations.RemoveField(
model_name='changerequestformheader',
name='requested_desc',
),
]
...@@ -478,12 +478,6 @@ class BaseHeader(models.Model): ...@@ -478,12 +478,6 @@ class BaseHeader(models.Model):
class BaseApprover(models.Model): class BaseApprover(models.Model):
level = models.IntegerField() level = models.IntegerField()
user = models.ForeignKey(
User,
blank=True,
null=True,
on_delete=models.PROTECT,
to_field='code')
delegation = models.ForeignKey( delegation = models.ForeignKey(
Delegation, Delegation,
blank=True, blank=True,
...@@ -653,6 +647,13 @@ class ChangeRequestTemplateApprovers(BaseApprover): ...@@ -653,6 +647,13 @@ class ChangeRequestTemplateApprovers(BaseApprover):
is_default = models.BooleanField( is_default = models.BooleanField(
default=False 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: class Meta:
db_table = 'change_request_template_approvers' db_table = 'change_request_template_approvers'
...@@ -846,6 +847,13 @@ class ChangeRequestFormApprovers(BaseApprover): ...@@ -846,6 +847,13 @@ class ChangeRequestFormApprovers(BaseApprover):
blank=True, blank=True,
null=True, null=True,
to_field='code') 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: class Meta:
db_table = 'change_request_form_approvers' db_table = 'change_request_form_approvers'
...@@ -1221,3 +1229,43 @@ class AssetGroup(models.Model): ...@@ -1221,3 +1229,43 @@ class AssetGroup(models.Model):
self.code = code self.code = code
self.created = datetime.now() self.created = datetime.now()
self.save() 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()
...@@ -596,3 +596,51 @@ def routing_table_overdue(args): ...@@ -596,3 +596,51 @@ def routing_table_overdue(args):
modifiedby=admin modifiedby=admin
) )
return True 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,7 @@ BASE_DIR = os.path.dirname( ...@@ -26,7 +26,7 @@ BASE_DIR = os.path.dirname(
SECRET_KEY = 'w!dkk7gc*dk#4!6ow3s1wc32%_yp$=osgybm=n0vw6k1j^sqo&' SECRET_KEY = 'w!dkk7gc*dk#4!6ow3s1wc32%_yp$=osgybm=n0vw6k1j^sqo&'
# SECURITY WARNING: don't run with debug turned on in production! # SECURITY WARNING: don't run with debug turned on in production!
DEBUG = False DEBUG = True
ALLOWED_HOSTS = ['*'] ALLOWED_HOSTS = ['*']
CORS_ORIGIN_ALLOW_ALL = True CORS_ORIGIN_ALLOW_ALL = True
...@@ -163,8 +163,8 @@ EMAIL_TEMPLATES_ROOT = os.path.join(BASE_DIR, "app/helper/email_service/template ...@@ -163,8 +163,8 @@ EMAIL_TEMPLATES_ROOT = os.path.join(BASE_DIR, "app/helper/email_service/template
EMAIL_HOST = 'email-smtp.us-west-2.amazonaws.com' EMAIL_HOST = 'email-smtp.us-west-2.amazonaws.com'
EMAIL_PORT = 587 EMAIL_PORT = 587
EMAIL_HOST_USER = 'AKIAYA4XVX5XFZHRQATF' EMAIL_HOST_USER = 'AKIAIPRWQKYV6N5SMLUA'
EMAIL_HOST_PASSWORD = 'BIOG15v+WTbTiBtPKkn+LCjg0UHqO3nLFQezh4pi6g3y' EMAIL_HOST_PASSWORD = 'ApK1dtH2qpT/oMl9MEauFvyN9XZDQ1fjzd8TumIs71NG'
EMAIL_USE_SSL = False EMAIL_USE_SSL = False
EMAIL_USE_TLS = True EMAIL_USE_TLS = True
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend' EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
...@@ -227,4 +227,3 @@ APPROVER_REJECT_MESSAGE = config['NOTIFICATION_EMAIL']['APPROVER_REJECT_MESSAGE' ...@@ -227,4 +227,3 @@ APPROVER_REJECT_MESSAGE = config['NOTIFICATION_EMAIL']['APPROVER_REJECT_MESSAGE'
CATCH_EMAIL = config['SETTINGS']['CATCH_EMAIL'] CATCH_EMAIL = config['SETTINGS']['CATCH_EMAIL']
CR_FRONT_LINK = config['SETTINGS']['CR_LINK'] CR_FRONT_LINK = config['SETTINGS']['CR_LINK']
...@@ -10,3 +10,4 @@ services: ...@@ -10,3 +10,4 @@ services:
- "7020:8000" - "7020:8000"
container_name: dev_rmsv2_api_container container_name: dev_rmsv2_api_container
restart: always restart: always
...@@ -64,6 +64,7 @@ REALTIMESERVER_IP = 127.0.0.1:8000 ...@@ -64,6 +64,7 @@ REALTIMESERVER_IP = 127.0.0.1:8000
[SETTINGS] [SETTINGS]
CONFIG = config.settings.local CONFIG = config.settings.local
BATCH_UPLOAD_FORMAT_FILENAME = instruction.pdf BATCH_UPLOAD_FORMAT_FILENAME = instruction.pdf
SSL = 1
[NOTIFICATION_EMAIL] [NOTIFICATION_EMAIL]
APPROVER_MESSAGE = has sent you an APPROVAL REQUEST for change request;RMS-ACTIONREQUIRED APPROVER_MESSAGE = has sent you an APPROVAL REQUEST for change request;RMS-ACTIONREQUIRED
......
{ {
"info": { "info": {
"_postman_id": "e22e74b6-003f-42b5-a067-7e7cc1674e5e", "_postman_id": "c5ad0726-f9e0-4795-88d2-924ab3aa1201",
"name": "RMSv2", "name": "RMSv2",
"schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json" "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json"
}, },
...@@ -139,6 +139,25 @@ ...@@ -139,6 +139,25 @@
}, },
"response": [] "response": []
}, },
{
"name": "Dashboard",
"request": {
"method": "GET",
"header": [],
"url": {
"raw": "{{baseurl}}/master/dashboard/",
"host": [
"{{baseurl}}"
],
"path": [
"master",
"dashboard",
""
]
}
},
"response": []
},
{ {
"name": "User Listing", "name": "User Listing",
"request": { "request": {
...@@ -2014,14 +2033,14 @@ ...@@ -2014,14 +2033,14 @@
"method": "GET", "method": "GET",
"header": [], "header": [],
"url": { "url": {
"raw": "{{baseurl}}/change-request/form/FRM-20191121-0000211/", "raw": "{{baseurl}}/change-request/form/FRM-20200115-0000245/",
"host": [ "host": [
"{{baseurl}}" "{{baseurl}}"
], ],
"path": [ "path": [
"change-request", "change-request",
"form", "form",
"FRM-20191121-0000211", "FRM-20200115-0000245",
"" ""
] ]
} }
...@@ -2067,7 +2086,7 @@ ...@@ -2067,7 +2086,7 @@
], ],
"body": { "body": {
"mode": "raw", "mode": "raw",
"raw": "{\r\n \"id\": 1079,\r\n \"form_code\": \"FRM-20191126-0000237\",\r\n \"delegation\": \"DELEGATION-20191119-0000003\",\r\n \"action\": \"Rejected\",\r\n \"level\": \"1\",\r\n \"remarks\": \"try lang\",\r\n \"move_to_level\": \"5\"\r\n}" "raw": "{\r\n \"id\": 1111,\r\n \"form_code\": \"FRM-20200115-0000245\",\r\n \"delegation\": \"DELEGATION-20191119-0000003\",\r\n \"action\": \"Approved\",\r\n \"level\": \"1\",\r\n \"remarks\": \"\",\r\n \"move_to_level\": \"\"\r\n}"
}, },
"url": { "url": {
"raw": "{{baseurl}}/change-request/form/actions/", "raw": "{{baseurl}}/change-request/form/actions/",
...@@ -2262,14 +2281,14 @@ ...@@ -2262,14 +2281,14 @@
"raw": "" "raw": ""
}, },
"url": { "url": {
"raw": "{{baseurl}}/change-request/form/FRM-20191025-0000040/history/", "raw": "{{baseurl}}/change-request/form/FRM-20200115-0000245/history/",
"host": [ "host": [
"{{baseurl}}" "{{baseurl}}"
], ],
"path": [ "path": [
"change-request", "change-request",
"form", "form",
"FRM-20191025-0000040", "FRM-20200115-0000245",
"history", "history",
"" ""
] ]
...@@ -2510,6 +2529,52 @@ ...@@ -2510,6 +2529,52 @@
], ],
"protocolProfileBehavior": {}, "protocolProfileBehavior": {},
"_postman_isSubFolder": true "_postman_isSubFolder": true
},
{
"name": "CR Form On Behalf",
"item": [
{
"name": "List of Forms On Behalf",
"request": {
"method": "GET",
"header": [],
"url": {
"raw": "{{baseurl}}/change-request/form-onbehalf/",
"host": [
"{{baseurl}}"
],
"path": [
"change-request",
"form-onbehalf",
""
]
}
},
"response": []
},
{
"name": "View Form On Behalf",
"request": {
"method": "GET",
"header": [],
"url": {
"raw": "{{baseurl}}/change-request/form-onbehalf/FRM-20200115-0000245/",
"host": [
"{{baseurl}}"
],
"path": [
"change-request",
"form-onbehalf",
"FRM-20200115-0000245",
""
]
}
},
"response": []
}
],
"protocolProfileBehavior": {},
"_postman_isSubFolder": true
} }
], ],
"protocolProfileBehavior": {}, "protocolProfileBehavior": {},
...@@ -3120,6 +3185,67 @@ ...@@ -3120,6 +3185,67 @@
], ],
"protocolProfileBehavior": {}, "protocolProfileBehavior": {},
"_postman_isSubFolder": true "_postman_isSubFolder": true
},
{
"name": "CMS Settings",
"item": [
{
"name": "List of CMS Settings",
"request": {
"method": "GET",
"header": [],
"url": {
"raw": "{{baseurl}}/change-request/cms-settings/",
"host": [
"{{baseurl}}"
],
"path": [
"change-request",
"cms-settings",
""
]
}
},
"response": []
},
{
"name": "Create CMS Settings",
"request": {
"method": "POST",
"header": [
{
"key": "Content-Type",
"name": "Content-Type",
"value": "application/json",
"type": "text"
}
],
"body": {
"mode": "raw",
"raw": "{\n\t\"cms_settings\": [\n {\n \"behalf_approved\": true,\n \"behalf_accepted\": true,\n \"behalf_rejected\": true,\n \"behalf_implemented\": true,\n \"behalf_completed\": true,\n \"behalf_user\": \"USER-20191121-0000412\"\n },\n {\n \"behalf_approved\": true,\n \"behalf_accepted\": true,\n \"behalf_rejected\": true,\n \"behalf_implemented\": true,\n \"behalf_completed\": true,\n \"behalf_user\": \"USER-20191121-0000415\"\n }\n ]\n}",
"options": {
"raw": {
"language": "json"
}
}
},
"url": {
"raw": "{{baseurl}}/change-request/cms-settings/",
"host": [
"{{baseurl}}"
],
"path": [
"change-request",
"cms-settings",
""
]
}
},
"response": []
}
],
"protocolProfileBehavior": {},
"_postman_isSubFolder": true
} }
], ],
"protocolProfileBehavior": {} "protocolProfileBehavior": {}
...@@ -3436,7 +3562,7 @@ ...@@ -3436,7 +3562,7 @@
"bearer": [ "bearer": [
{ {
"key": "token", "key": "token",
"value": "1bc82df8030501015e54bb3f1f78356b9041f796", "value": "a678eb844bc34f0177d07daaef90206a86b67e03",
"type": "string" "type": "string"
} }
] ]
......
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 ...@@ -20,3 +20,4 @@ docker run -d --restart=always -p 3001:3000 sit_rms_webv2 npm start
Clear Cache REDIS Clear Cache REDIS
docker exec -it container-name redis-cli FLUSHALL docker exec -it container-name redis-cli FLUSHALL
config set stop-writes-on-bgsave-error no 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