Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add Element method to merge in control implementations statements from another component #220

Open
wants to merge 146 commits into
base: develop
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
146 commits
Select commit Hold shift + click to select a range
b32e620
feat(Integrations): Support for integrations with APIs.
gregelin Mar 7, 2022
2289fdd
feat(Integrations): Add Authorization to mock csam service
gregelin Mar 7, 2022
fb4e4f4
feat(Integrations): Add Integration, Endpoint models for storing data
gregelin Mar 8, 2022
8def54f
feat(Integrations): Clean up
gregelin Mar 8, 2022
4455bf6
feat(Integrations): Default csam integration ssl verify to False
gregelin Mar 8, 2022
bf65e97
Merge branch 'ge/private-objects' into ge/private-objects-integrations
gregelin Mar 9, 2022
f0cf67a
feat(Integrations): Improve integrations architecture, support POST
gregelin Mar 11, 2022
6f60574
Merge branch 'ge/private-objects' into ge/private-objects-integrations
gregelin Mar 12, 2022
5c42fe1
feat(Integrations): Add POST data to csam; refactoring
gregelin Mar 12, 2022
0689670
feat(Integrations): Begin abstracting csam calls
gregelin Mar 12, 2022
4ed9b00
Update csam mock.py
gregelin Mar 15, 2022
c09a27c
Sync with develop and component permissions
gregelin Mar 17, 2022
d15c88c
Improve integrations
gregelin Mar 17, 2022
af5a6b1
Improve CSAM integration: multiple get loop, better README.
gregelin Mar 31, 2022
72c781f
Pass system_id_list, dev views reurn date
gregelin Mar 31, 2022
ab0d8fe
Improve CSAM integration templates
gregelin Apr 1, 2022
6a19431
Improve CSAM integration templates
gregelin Apr 1, 2022
7c7609c
Fix reference order to communicate in csam/views
gregelin Apr 1, 2022
67f98f5
Fix reference order to communicate in csam/views
gregelin Apr 1, 2022
b6e77a0
Fix CSAM integration path to `systems`
gregelin Apr 1, 2022
f2a81df
Merge a second component statements to statements of first component …
gregelin Apr 11, 2022
af23577
wip request endpoint
SergioJFalcon Apr 12, 2022
f881c5b
Merge branch 'access-management-ui' into request-ui
SergioJFalcon Apr 14, 2022
90f7229
wip
SergioJFalcon Apr 14, 2022
97afd9f
Merge branch 'access-management-ui' into request-ui
SergioJFalcon Apr 14, 2022
8c64fce
Debugging oidc
gregelin Apr 15, 2022
434fe97
Debugging oidc 2
gregelin Apr 15, 2022
27f9fa7
Debugging OIDC response 3
gregelin Apr 15, 2022
259f821
Debugging OIDC response 4
gregelin Apr 15, 2022
12419b3
Debugging OIDC response 5
gregelin Apr 15, 2022
3ad2e85
Debugging OIDC response 6
gregelin Apr 15, 2022
59c935d
Debugging OIDC response 7
gregelin Apr 15, 2022
188897a
Debugging OIDC response 8 - potential data
gregelin Apr 15, 2022
9910548
Debugging OIDC response 9 - potential data
gregelin Apr 15, 2022
2b815ad
Debugging OIDC response 10 - potential data
gregelin Apr 15, 2022
852d9ef
request-ui wip
SergioJFalcon Apr 19, 2022
a8cc888
Merge branch 'develop' into ge/merge-cmpt
gregelin Apr 19, 2022
882b2df
system-owner-request wip
SergioJFalcon Apr 20, 2022
3e7e890
React Modal for System Owner Requesting
SergioJFalcon Apr 21, 2022
4066a52
System can't request the same element more than once.
SergioJFalcon Apr 21, 2022
0b52794
request status wip
SergioJFalcon Apr 22, 2022
25e556d
Add placeholder route and page for system summary prototype
gregelin Apr 22, 2022
2121090
wip
SergioJFalcon Apr 22, 2022
3468ebe
wip
SergioJFalcon Apr 22, 2022
dd1422d
rough scaffold
kerryrm Apr 22, 2022
17364db
revising
kerryrm Apr 22, 2022
3f71f64
further revisions
kerryrm Apr 22, 2022
52d9d74
further revisions
kerryrm Apr 22, 2022
d28c844
wip
SergioJFalcon Apr 22, 2022
2ef19b1
Add dynamic data systemsummary1 prototype
gregelin Apr 24, 2022
f8abcbd
datagrid
SergioJFalcon Apr 24, 2022
9bc6bdf
Fix mock system name. Update CHANGELOG.
gregelin Apr 25, 2022
0c6ab49
search bar
SergioJFalcon Apr 25, 2022
32f803d
Update POA&M dataguide for search
gregelin Apr 25, 2022
9f8efee
search-bar: case-insensitive
SergioJFalcon Apr 25, 2022
1410373
wip
SergioJFalcon Apr 25, 2022
9485b03
Provide orgname in System Summary Prototype
gregelin Apr 26, 2022
6c75eb3
Merge develop-aspen with access-management-ui features
gregelin Apr 26, 2022
5d22b27
Fix displaying component criteria text in text box
gregelin Apr 26, 2022
b6ce02f
Create more role during first_run
gregelin Apr 26, 2022
e8da04d
Remove ipdb trace
gregelin Apr 26, 2022
f6cad22
Fix POA&M forms display with left-side menu
gregelin Apr 26, 2022
c1fe009
Show new summary page at route systems/{num}/aspen/summary
gregelin Apr 26, 2022
586e219
Merge pull request #231 from GovReady/ge/develop-aspen-systemsummary
gregelin Apr 26, 2022
d380c5f
wip
SergioJFalcon Apr 26, 2022
344746b
Merged with develop-aspen
SergioJFalcon Apr 26, 2022
8e6dd3d
Remove icons from project listing
gregelin Apr 26, 2022
900f5d0
modal styling
SergioJFalcon Apr 26, 2022
8e130c3
Merge branch 'request-ui' of github.com:GovReady/govready-q-private i…
gregelin Apr 26, 2022
f0df257
added code for vuln section
kerryrm Apr 26, 2022
63451a9
tweak
kerryrm Apr 26, 2022
621da30
tweak
kerryrm Apr 26, 2022
c9c1f2e
tweak
kerryrm Apr 26, 2022
10f2d7e
Merge branch 'ge/develop-aspen-systemsummary' into develop-aspen
gregelin Apr 26, 2022
5f3dfc1
Merge branch 'develop-aspen' into request-ui-test-da
gregelin Apr 26, 2022
d4d4348
Remove stray character from system_summary_1.html
gregelin Apr 26, 2022
f702d77
Message outputted for successfully submitting a new request along wit…
SergioJFalcon Apr 26, 2022
6d1355f
Merge branch 'request-ui' of https://github.com/GovReady/govready-q-p…
SergioJFalcon Apr 26, 2022
8a1e3f5
User can change status of request in action column of request datagrid
SergioJFalcon Apr 27, 2022
219c116
Fix: Avoid creating duplicate roles during first_run
gregelin Apr 29, 2022
8d09b37
Merge pull request #234 from GovReady/ge/develop-aspen-fix-first-run
gregelin Apr 29, 2022
3c9765f
Fix: Use create_default_portfolio_if_none_exists during oidc auth
gregelin May 3, 2022
eeaeec6
Fixing duplicate OIDC users
gregelin May 3, 2022
d7ad2cc
Fixing duplicate OIDC users. Import User model.
gregelin May 3, 2022
6d743aa
Fixing duplicate OIDC users. More robust claims ref lookup.
gregelin May 3, 2022
0a3d0d8
Fixing duplicate OIDC users. More robust claims ref lookup 2.
gregelin May 3, 2022
b0423db
Examining claims info.
gregelin May 3, 2022
f815f09
Examining claims info 2.
gregelin May 3, 2022
0e0ced8
Examining claims info 3.
gregelin May 3, 2022
a33f8df
System Proposal, System Owner Component Steps of a proposal to reques…
SergioJFalcon May 4, 2022
0eca0ce
old changes, maybe not needed
kerryrm May 4, 2022
392413b
wip
SergioJFalcon May 5, 2022
6a93290
System component progression
SergioJFalcon May 6, 2022
d3bbb62
wip
SergioJFalcon May 6, 2022
015f1b6
Merge branch 'develop-aspen' into oidc-override
gregelin May 7, 2022
77450a6
Comment out oidc debugging logging
gregelin May 7, 2022
d977ae7
Comment out oidc debugging logging
gregelin May 7, 2022
26a8f2c
Merge pull request #235 from GovReady/oidc
gregelin May 7, 2022
38542dc
Fix Django Admin for Role, Party models
gregelin May 8, 2022
383d0ec
Merge pull request #237 from GovReady/ge/roles-admin
gregelin May 8, 2022
183f64a
Remove icons from project listing.
gregelin May 9, 2022
279bc72
Patch in dynamic summary_1
gregelin May 9, 2022
9792077
Patch in dynamic summary_1 (2)
gregelin May 9, 2022
66db7a0
wip - request-add-component-statements and proposal delete
SergioJFalcon May 11, 2022
ab506c4
Cannot create proposal for a component with no controls
SergioJFalcon May 11, 2022
20fee61
request search box - wip
SergioJFalcon May 11, 2022
05891ea
merge + removed debugger and made button for implementing the compone…
SergioJFalcon May 11, 2022
a9bbd3c
request datagrid search box
SergioJFalcon May 11, 2022
7dbb64d
Update libraries
gregelin May 13, 2022
3a00c3a
Merge pull request #239 from GovReady/develop-aspen-update-libs
gregelin May 13, 2022
c7e0c46
Merge branch 'develop-aspen' into request-ui
SergioJFalcon May 13, 2022
7890268
Sync with develop-aspen code
gregelin May 14, 2022
b47e317
Fix integrations migrations
gregelin May 15, 2022
941a8c4
Remove system settings migration 11
gregelin May 15, 2022
561dc95
Fix ge/integrations migration issue
gregelin May 15, 2022
47b2f7d
Add generic GRC mock service
gregelin May 15, 2022
890519e
Add migration to give SystemSettings.details default value of '{}'
gregelin May 15, 2022
f73de54
Reworked proposal-request
SergioJFalcon May 16, 2022
567e5c8
Deleted component creates new proposal, and closes previously opened …
SergioJFalcon May 16, 2022
091be3f
Request datagrid hides proposals that have been closed
SergioJFalcon May 16, 2022
e94f211
Switched return to True and added a line
SergioJFalcon May 16, 2022
d190b2b
Merge pull request #241 from GovReady/request-ui
gregelin May 16, 2022
ffc1b05
Merge branch 'develop-aspen' into ge/integrations
gregelin May 16, 2022
063aad3
Remove redundancy in control migrations 0072
gregelin May 16, 2022
71421e2
Remove redundancy in control migrations 0072 mv to 0073
gregelin May 16, 2022
bfcbcb3
Merge branch 'develop-aspen' of https://github.com/GovReady/govready-…
kerryrm May 16, 2022
ccc4e1d
fixing visual presentation of component request sequence
kerryrm May 17, 2022
094323a
changed check mark
kerryrm May 17, 2022
fbe2d68
tweak spacing. not done, but close
kerryrm May 17, 2022
32b501d
changed css logic for icons in circles and added + and x
kerryrm May 18, 2022
91ba059
added paperclip icon for pending and changed code a bit
kerryrm May 18, 2022
af9c12b
create a new approval criteria statement if a component does not curr…
SergioJFalcon May 19, 2022
0e9ee92
Add javascript to reload component tabs on form submit
gregelin May 19, 2022
669677d
wip - quick fix for parties datagrid
SergioJFalcon May 20, 2022
1442b9e
Merge branch 'develop-aspen' into ge/integrations
gregelin May 20, 2022
fe8b77e
Update integrations CSAM README
gregelin May 20, 2022
63a9637
wip - visual data validation for creating new parties
SergioJFalcon May 20, 2022
402daea
Fix Mixins Admins, improve CSAM integration
gregelin May 23, 2022
d31af22
Create new system in GovReady from CSAM Mock
gregelin May 23, 2022
e668a15
validation for appointing new party modal and editing party modal
SergioJFalcon May 23, 2022
e089e1a
Update libraries
gregelin May 24, 2022
ff08421
Merge pull request #240 from GovReady/ge/integrations
gregelin May 24, 2022
f450f36
Merge branch 'develop-aspen' into develop-aspen-tabs
gregelin May 24, 2022
803ef6a
Sync with late May develop-aspen
gregelin May 24, 2022
0785842
Merge pull request #243 from GovReady/develop-aspen-tabs
gregelin May 24, 2022
d4dcf05
Merge branch 'develop-aspen' into ge/merge-cmpt
gregelin May 24, 2022
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 9 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,8 @@ v0.9.14-dev (April xx, 2022)
* Support private components (elements).
* Assign responsible roles to components (elements) and appointing parties to roles.

Release adds support for private components and integrations with third party services.

**UI changes**

* Change label 'certified statement' to 'reference statement'.
Expand All @@ -20,6 +22,7 @@ v0.9.14-dev (April xx, 2022)
* Added tabs for coponent requests.
* Only Component owner can edit user permissions.
* Display the control framework along side of controls in component control listing page.
* Remove icons from project listing.

**Developer changes**

Expand All @@ -30,14 +33,19 @@ v0.9.14-dev (April xx, 2022)
* Support for hidden components by adding 'hidden' boolean field to controls.models.Element.
* Support for requiring approval components by adding 'require_approval' boolean field to controls.models.Element.
* Create new components as private and assign owner permissions to user who created the component.
* Added extensible Integrations Django appplication to support communication with third-party services via APIs, etc.
* Added initial support for DoJ's CSAM integration.
* Added ElementPermissionSerializer for component (element) permissions.
* Add tests for component creation form user interface.
* Add ElementPermissionSerializer, UpdateElementPermissionSerializer, RemoveUserPermissionFromElementSerializer for component (element) permissions.
* Add ElementWithPermissionsViewSet for component (element) permissions.
* Add more permission functions to element model: assigning a user specific permissions, removing all permissions from a user, and checking if a user is an owner of the element.
* Updated User model to include search by 'username' and exclusion functionality to queryset.
* Add model Roles, Party, and Appointments to siteapp to support identifying roles on Components (Element).
* Assign owners to components imported via OSCAL. If no user is identified during component (element creation) assign first Superuser (administrator) as component owner.
* Add to controls.models.Element.merge_component_implementation_statements method to Merge a second component statements to statements of first component.
* Support navigating to specific tab on component library component page using URL hash (#) reference.
* Protype integrations System Summary page.

**Bug fixes**

Expand All @@ -46,6 +54,7 @@ v0.9.14-dev (April xx, 2022)
* Resolve components not displaying the tag widget by properly setting existingTags default for new component.
* Footer fixes.
* Assign owners to default components (elements) created during install first_run script.
* Correctly display POA&M forms with left-side menu.

v0.9.13 (January 23, 2022)
--------------------------
Expand Down
93 changes: 88 additions & 5 deletions api/controls/serializers/element.py
Original file line number Diff line number Diff line change
@@ -1,12 +1,14 @@
from rest_framework import serializers
from rest_framework.relations import PrimaryKeyRelatedField


from api.base.serializers.types import ReadOnlySerializer, WriteOnlySerializer
from api.controls.serializers.import_record import SimpleImportRecordSerializer
from api.siteapp.serializers.tags import SimpleTagSerializer
from api.siteapp.serializers.appointment import SimpleAppointmentSerializer
from controls.models import Element, ElementRole, ElementControl
from siteapp.models import Appointment, Role, Party, Tag
from controls.models import Element, ElementRole, ElementControl, Statement
from controls.enums.statements import StatementTypeEnum
from siteapp.models import Appointment, Party, Request, Role, Tag
from guardian.shortcuts import (assign_perm, get_objects_for_user,
get_perms_for_model, get_user_perms,
get_users_with_perms, remove_perm)
Expand All @@ -28,9 +30,14 @@ class DetailedElementSerializer(SimpleElementSerializer):
roles = SimpleElementRoleSerializer(many=True)
tags = SimpleTagSerializer(many=True)
appointments = SimpleAppointmentSerializer(many=True)
# parties = serializers.SerializerMethodField()
parties = serializers.SerializerMethodField('get_parties')
criteria = serializers.SerializerMethodField('get_criteria')
numOfStmts = serializers.SerializerMethodField('get_numOfStmts')

def get_numOfStmts(self, element):
stmts = Statement.objects.filter(producer_element_id = element.id, statement_type=StatementTypeEnum.CONTROL_IMPLEMENTATION_PROTOTYPE.name)
return len(stmts)

def get_parties(self, element):
parties = []
counter = 1;
Expand Down Expand Up @@ -77,9 +84,16 @@ def getParty(parties_list, party_id):
counter += 1
parties.append(party)
return parties
def get_criteria(self, element):
criteria_results = element.statements_produced.filter(statement_type=StatementTypeEnum.COMPONENT_APPROVAL_CRITERIA.name)
if len(criteria_results) > 0:
criteria_text = criteria_results.first().body
else:
criteria_text = ""
return criteria_text
class Meta:
model = Element
fields = SimpleElementSerializer.Meta.fields + ['roles', 'import_record', 'tags', 'appointments', 'parties']
fields = SimpleElementSerializer.Meta.fields + ['roles', 'import_record', 'tags', 'appointments', 'parties', 'criteria', 'numOfStmts']

class ElementPermissionSerializer(SimpleElementSerializer):
users_with_permissions = serializers.SerializerMethodField('get_list_of_users')
Expand Down Expand Up @@ -167,4 +181,73 @@ class CreateMultipleAppointmentsFromRoleIds(WriteOnlySerializer):
role_ids = serializers.JSONField()
class Meta:
model = Element
fields = ['role_ids']
fields = ['role_ids']

class ElementRequestsSerializer(ReadOnlySerializer):
requested = serializers.SerializerMethodField('get_list_of_requested')

def get_list_of_requested(self, element):
list_of_requests = []
counter = 1
for request in element.requests.all():

list_of_system_PointOfContacts = []
for user in request.system.root_element.appointments.filter(role__title="Point of Contact"):
list_of_system_PointOfContacts.append(user.party.name)

list_of_requestedElements_PointOfContacts = []
for user in request.requested_element.appointments.filter(role__title="Point of Contact"):
list_of_requestedElements_PointOfContacts.append(user.party.name)

req = {
"id": counter,
"requestId": request.id,
"userId": request.user.id,
"user_name": request.user.name,
"user_email": request.user.email,
"user_phone_number": request.user.phone_number,
"system": {
"id": request.system.id,
"name": request.system.root_element.name,
"full_name": request.system.root_element.full_name,
"name": request.system.root_element.name,
"description": request.system.root_element.description,
"point_of_contact": list_of_system_PointOfContacts,
},
"requested_element": {
"id": request.requested_element.id,
"name": request.requested_element.name,
"full_name": request.requested_element.full_name,
"name": request.requested_element.name,
"description": request.requested_element.description,
"private": request.requested_element.private,
"require_approval": request.requested_element.require_approval,
"point_of_contact": list_of_requestedElements_PointOfContacts,
},
"criteria_comment": request.criteria_comment,
"criteria_reject_comment": request.criteria_reject_comment,
"status": request.status,
}
counter += 1
list_of_requests.append(req)
return list_of_requests
class Meta:
model = Element
fields = ['requested']

class ElementSetRequestsSerializer(WriteOnlySerializer):
requests_ids = PrimaryKeyRelatedField(source='request', many=True, queryset=Request.objects)
class Meta:
model = Element
fields = ['requests_ids']

class ElementCreateAndSetRequestSerializer(WriteOnlySerializer):
proposalId = serializers.IntegerField(max_value=None, min_value=None)
userId = serializers.IntegerField(max_value=None, min_value=None)
systemId = serializers.IntegerField(max_value=None, min_value=None)
criteria_comment = serializers.CharField(min_length=None, max_length=None, allow_blank=True, trim_whitespace=True)
criteria_reject_comment = serializers.CharField(min_length=None, max_length=None, allow_blank=True, trim_whitespace=True)
status = serializers.CharField(min_length=None, max_length=None, allow_blank=True, trim_whitespace=True)
class Meta:
model = Element
fields = ['proposalId', 'userId', 'systemId', 'criteria_comment', 'criteria_reject_comment', 'status']
29 changes: 28 additions & 1 deletion api/controls/serializers/poam.py
Original file line number Diff line number Diff line change
@@ -1,14 +1,41 @@
from rest_framework import serializers
from api.base.serializers.types import ReadOnlySerializer
from api.controls.serializers.statements import DetailedStatementSerializer
from controls.models import Poam


class SimplePoamSerializer(ReadOnlySerializer):
statement = serializers.SerializerMethodField('get_statement')

def get_statement(self, poam):
smt = {
'sid': poam.statement.sid,
'sid_class': poam.statement.sid_class,
'source': poam.statement.source,
'pid': poam.statement.pid,
'body': poam.statement.body,
'statement_type': poam.statement.statement_type,
'remarks': poam.statement.remarks,
'status': poam.statement.status,
'version': poam.statement.version,
'created': poam.statement.created,
'updated': poam.statement.updated,
# 'parent': poam.statement.parent,
# 'prototype': poam.statement.prototype,
# 'producer_element': poam.statement.producer_element,
# 'consumer_element': poam.statement.consumer_element,
# 'mentioned_elements': poam.statement.mentioned_elements,
'uuid': poam.statement.uuid,
'import_record': poam.statement.import_record,
# 'change_log': poam.statement.change_log,
# 'history': poam.statement.history,
}
return smt
class Meta:
model = Poam
fields = ['poam_id', 'controls', 'weakness_name', 'weakness_detection_source', 'weakness_source_identifier',
'remediation_plan', 'scheduled_completion_date', 'milestones','milestone_changes',
'risk_rating_original', 'risk_rating_adjusted', 'poam_group']
'risk_rating_original', 'risk_rating_adjusted', 'poam_group', 'statement']


class DetailedPoamSerializer(SimplePoamSerializer):
Expand Down
33 changes: 33 additions & 0 deletions api/controls/serializers/system.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
from rest_framework import serializers
from rest_framework.relations import PrimaryKeyRelatedField

from api.base.serializers.types import ReadOnlySerializer, WriteOnlySerializer
Expand Down Expand Up @@ -29,3 +30,35 @@ class WriteElementTagsSerializer(WriteOnlySerializer):
class Meta:
model = System
fields = ['tag_ids']

class SystemCreateAndSetProposalSerializer(WriteOnlySerializer):
userId = serializers.IntegerField(max_value=None, min_value=None)
elementId = serializers.IntegerField(max_value=None, min_value=None)
criteria_comment = serializers.CharField(min_length=None, max_length=None, allow_blank=True, trim_whitespace=True)
status = serializers.CharField(min_length=None, max_length=None, allow_blank=True, trim_whitespace=True)
class Meta:
model = System
fields = ['userId', 'elementId', 'criteria_comment','status']


class SystemRetrieveProposalsSerializer(ReadOnlySerializer):
proposals = serializers.SerializerMethodField('get_proposals')

def get_proposals(self, system):
list_of_proposals = []
counter = 1
for proposal in system.proposals.all():
list_of_proposals.append({
'id': counter,
'proposal_id': proposal.id,
'user': proposal.user.username,
'elementId': proposal.requested_element.id,
'element_name': proposal.requested_element.name,
'criteria_comment': proposal.criteria_comment,
'status': proposal.status,
})
counter += 1
return list_of_proposals
class Meta:
model = System
fields = ['proposals']
58 changes: 52 additions & 6 deletions api/controls/views/element.py
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
import collections
from rest_framework.decorators import action
from rest_framework.response import Response

from api.base.views.base import SerializerClasses
from api.base.views.viewsets import ReadOnlyViewSet, ReadWriteViewSet
from api.controls.serializers.element import DetailedElementSerializer, SimpleElementSerializer, \
WriteElementTagsSerializer, ElementPermissionSerializer, UpdateElementPermissionSerializer, RemoveUserPermissionFromElementSerializer, WriteElementAppointPartySerializer, ElementPartySerializer, DeletePartyAppointmentsFromElementSerializer, CreateMultipleAppointmentsFromRoleIds
from controls.models import Element
from siteapp.models import Appointment, Party, Role
from siteapp.models import User
WriteElementTagsSerializer, ElementPermissionSerializer, UpdateElementPermissionSerializer, RemoveUserPermissionFromElementSerializer, WriteElementAppointPartySerializer, ElementPartySerializer, DeletePartyAppointmentsFromElementSerializer, CreateMultipleAppointmentsFromRoleIds, ElementRequestsSerializer, ElementSetRequestsSerializer, ElementCreateAndSetRequestSerializer
from controls.models import Element, System
from siteapp.models import Appointment, Party, Proposal, Role, Request, User

class ElementViewSet(ReadOnlyViewSet):
queryset = Element.objects.all()
Expand All @@ -18,7 +18,10 @@ class ElementViewSet(ReadOnlyViewSet):
appointments=WriteElementAppointPartySerializer,
removeAppointments=WriteElementAppointPartySerializer,
removeAppointmentsByParty=DeletePartyAppointmentsFromElementSerializer,
CreateAndSet=CreateMultipleAppointmentsFromRoleIds
CreateAndSet=CreateMultipleAppointmentsFromRoleIds,
retrieveRequests=ElementRequestsSerializer,
setRequest=ElementSetRequestsSerializer,
CreateAndSetRequest=ElementCreateAndSetRequestSerializer,
)

@action(detail=True, url_path="tags", methods=["PUT"])
Expand All @@ -37,7 +40,6 @@ def retrieveParties(self, request, **kwargs):
element, validated_data = self.validate_serializer_and_get_object(request)
element.save()

# import ipdb; ipdb.set_trace()
serializer_class = self.get_serializer_class('retrieve')
serializer = self.get_serializer(serializer_class, element)
return Response(serializer.data)
Expand Down Expand Up @@ -108,6 +110,50 @@ def CreateAndSet(self, request, **kwargs):
serializer_class = self.get_serializer_class('retrieve')
serializer = self.get_serializer(serializer_class, element)
return Response(serializer.data)

@action(detail=True, url_path="retrieveRequests", methods=["GET"])
def retrieveRequests(self, request, **kwargs):
element, validated_data = self.validate_serializer_and_get_object(request)
element.save()

serializer_class = self.get_serializer_class('retrieveRequests')
serializer = self.get_serializer(serializer_class, element)
return Response(serializer.data)

@action(detail=True, url_path="setRequest", methods=["PUT"])
def setRequest(self, request, **kwargs):
element, validated_data = self.validate_serializer_and_get_object(request)
for key, value in validated_data.items():
element.add_requests(value)
element.save()

serializer_class = self.get_serializer_class('retrieve')
serializer = self.get_serializer(serializer_class, element)
return Response(serializer.data)

@action(detail=True, url_path="CreateAndSetRequest", methods=["POST"])
def CreateAndSetRequest(self, request, **kwargs):
element, validated_data = self.validate_serializer_and_get_object(request)
prop = Proposal.objects.get(id=validated_data['proposalId'])
newRequest = Request.objects.create(
user=User.objects.get(id=validated_data['userId']),
system=System.objects.get(id=validated_data['systemId']),
requested_element=element,
criteria_comment=validated_data['criteria_comment'],
criteria_reject_comment=validated_data['criteria_reject_comment'],
status=validated_data['status'],
)
newRequest.save()
prop.req = newRequest
prop.save()
element.add_requests([newRequest.id])
element.save()

serializer_class = self.get_serializer_class('retrieve')
serializer = self.get_serializer(serializer_class, element)
return Response(serializer.data)


class ElementWithPermissionsViewSet(ReadWriteViewSet):
# NESTED_ROUTER_PKS = [{'pk': 'modules_pk', 'model_field': 'module', 'model': Module}]
queryset = Element.objects.all()
Expand Down
Loading