Source code for ace.centralize.models.requirement
"""
Requirement models for Centralize
Models for requirement info and entity links.
Based on the Requirement GraphQL schema (CreateRequirementInfoInput,
UpdateRequirementInfoInput) and the Lead schema (EntityLinkCreateParamsInput).
"""
from datetime import date
from typing import List, Optional
from ace.centralize.models.base import ModelBase
# ============================================= REQUIREMENT INFO =======================================================
[docs]
class CreateRequirementInfoInput(ModelBase):
"""Maps to CreateRequirementInfoInput in GraphQL schema."""
[docs]
def __init__(
self,
priority_id: int,
requirement_id: int,
status_id: int,
applies_to_party_id: Optional[int] = None,
cancelled_date: Optional[date] = None,
completed_date: Optional[date] = None,
due_date: Optional[date] = None,
entity_id: Optional[int] = None,
entity_type_id: Optional[str] = None,
fulfilled_date: Optional[date] = None,
fulfiller_party_id: Optional[int] = None,
hold_date: Optional[date] = None,
internal_reference_number: Optional[str] = None,
received_date: Optional[date] = None,
requested_date: Optional[date] = None,
requester_party_id: Optional[int] = None,
requirement_description: Optional[str] = None,
source_party_id: Optional[int] = None,
source_reference_number: Optional[str] = None,
status_change_date: Optional[date] = None,
status_reason_description: Optional[str] = None,
sub_status_change_date: Optional[date] = None,
sub_status_id: Optional[int] = None,
):
self.priorityId = priority_id
self.requirementId = requirement_id
self.statusId = status_id
if applies_to_party_id is not None:
self.appliesToPartyId = applies_to_party_id
if cancelled_date is not None:
self.cancelledDate = cancelled_date
if completed_date is not None:
self.completedDate = completed_date
if due_date is not None:
self.dueDate = due_date
if entity_id is not None:
self.entityId = entity_id
if entity_type_id is not None:
self.entityTypeId = entity_type_id
if fulfilled_date is not None:
self.fulfilledDate = fulfilled_date
if fulfiller_party_id is not None:
self.fulfillerPartyId = fulfiller_party_id
if hold_date is not None:
self.holdDate = hold_date
if internal_reference_number is not None:
self.internalReferenceNumber = internal_reference_number
if received_date is not None:
self.receivedDate = received_date
if requested_date is not None:
self.requestedDate = requested_date
if requester_party_id is not None:
self.requesterPartyId = requester_party_id
if requirement_description is not None:
self.requirementDescription = requirement_description
if source_party_id is not None:
self.sourcePartyId = source_party_id
if source_reference_number is not None:
self.sourceReferenceNumber = source_reference_number
if status_change_date is not None:
self.statusChangeDate = status_change_date
if status_reason_description is not None:
self.statusReasonDescription = status_reason_description
if sub_status_change_date is not None:
self.subStatusChangeDate = sub_status_change_date
if sub_status_id is not None:
self.subStatusId = sub_status_id
# Backward-compatible alias
CreateRequirementInfoObject = CreateRequirementInfoInput
[docs]
class UpdateRequirementInfoInput(ModelBase):
"""Maps to UpdateRequirementInfoInput in GraphQL schema."""
[docs]
def __init__(
self,
requirement_info_id: int,
applies_to_party_id: Optional[int] = None,
cancelled_date: Optional[date] = None,
completed_date: Optional[date] = None,
due_date: Optional[date] = None,
entity_id: Optional[int] = None,
entity_type_id: Optional[str] = None,
fulfilled_date: Optional[date] = None,
fulfiller_party_id: Optional[int] = None,
hold_date: Optional[date] = None,
internal_reference_number: Optional[str] = None,
priority_id: Optional[int] = None,
received_date: Optional[date] = None,
requested_date: Optional[date] = None,
requester_party_id: Optional[int] = None,
requirement_description: Optional[str] = None,
requirement_id: Optional[int] = None,
source_party_id: Optional[int] = None,
source_reference_number: Optional[str] = None,
status_change_date: Optional[date] = None,
status_id: Optional[int] = None,
status_reason_description: Optional[str] = None,
sub_status_change_date: Optional[date] = None,
sub_status_id: Optional[int] = None,
):
self.requirementInfoId = requirement_info_id
if applies_to_party_id is not None:
self.appliesToPartyId = applies_to_party_id
if cancelled_date is not None:
self.cancelledDate = cancelled_date
if completed_date is not None:
self.completedDate = completed_date
if due_date is not None:
self.dueDate = due_date
if entity_id is not None:
self.entityId = entity_id
if entity_type_id is not None:
self.entityTypeId = entity_type_id
if fulfilled_date is not None:
self.fulfilledDate = fulfilled_date
if fulfiller_party_id is not None:
self.fulfillerPartyId = fulfiller_party_id
if hold_date is not None:
self.holdDate = hold_date
if internal_reference_number is not None:
self.internalReferenceNumber = internal_reference_number
if priority_id is not None:
self.priorityId = priority_id
if received_date is not None:
self.receivedDate = received_date
if requested_date is not None:
self.requestedDate = requested_date
if requester_party_id is not None:
self.requesterPartyId = requester_party_id
if requirement_description is not None:
self.requirementDescription = requirement_description
if requirement_id is not None:
self.requirementId = requirement_id
if source_party_id is not None:
self.sourcePartyId = source_party_id
if source_reference_number is not None:
self.sourceReferenceNumber = source_reference_number
if status_change_date is not None:
self.statusChangeDate = status_change_date
if status_id is not None:
self.statusId = status_id
if status_reason_description is not None:
self.statusReasonDescription = status_reason_description
if sub_status_change_date is not None:
self.subStatusChangeDate = sub_status_change_date
if sub_status_id is not None:
self.subStatusId = sub_status_id
# Backward-compatible alias
UpdateRequirementInfoObject = UpdateRequirementInfoInput
# ============================================== ENTITY LINKS ==========================================================
# Note: EntityLink types are used by the Lead schema, not the Requirement schema,
# but are kept here as they were originally in this module.
[docs]
class EntityLinkCreateParamsInput(ModelBase):
"""Maps to EntityLinkCreateParamsInput in GraphQL schema (Lead subgraph)."""
[docs]
def __init__(
self,
related_entity_type_id: str,
related_entity_id: int,
entity_type_name: Optional[str] = None,
is_original: Optional[bool] = None,
relation_role_id: int = 1,
shared_percent: Optional[float] = None,
effective_date: Optional[date] = None,
expiration_date: Optional[date] = None,
status_id: Optional[int] = None,
):
self.relatedEntityTypeId = related_entity_type_id
self.relatedEntityId = related_entity_id
if entity_type_name is not None:
self.entityTypeName = entity_type_name
if is_original is not None:
self.isOriginal = is_original
if relation_role_id is not None:
self.relationRoleId = relation_role_id
if shared_percent is not None:
self.sharedPercent = shared_percent
if effective_date is not None:
self.effectiveDate = effective_date
if expiration_date is not None:
self.expirationDate = expiration_date
if status_id is not None:
self.statusId = status_id
[docs]
class UpdateEntityLinkParamsInput(ModelBase):
"""Maps to EntityLinksUpdateParamsInput in GraphQL schema (Lead subgraph)."""
[docs]
def __init__(
self,
entity_link_to_add: Optional[List[EntityLinkCreateParamsInput]] = None,
):
if entity_link_to_add is not None:
self.entityLinksToAdd = entity_link_to_add