Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
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
42 changes: 42 additions & 0 deletions csfunctions/events/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,14 @@
from pydantic import Field

from .bom_item_field_calculation import BOMItemFieldCalculationData, BOMItemFieldCalculationEvent
from .change_order_release_check import ChangeOrderReleaseCheckData, ChangeOrderReleaseCheckEvent
from .change_order_released import ChangeOrderReleasedData, ChangeOrderReleasedEvent
from .change_order_status_change_check import ChangeOrderStatusChangeCheckData, ChangeOrderStatusChangeCheckEvent
from .change_order_status_changed import ChangeOrderStatusChangedData, ChangeOrderStatusChangedEvent
from .change_request_release_check import ChangeRequestReleaseCheckData, ChangeRequestReleaseCheckEvent
from .change_request_released import ChangeRequestReleasedData, ChangeRequestReleasedEvent
from .change_request_status_change_check import ChangeRequestStatusChangeCheckData, ChangeRequestStatusChangeCheckEvent
from .change_request_status_changed import ChangeRequestStatusChangedData, ChangeRequestStatusChangedEvent
from .custom_operations import (
CustomOperationDocumentData,
CustomOperationDocumentEvent,
Expand Down Expand Up @@ -45,6 +53,14 @@
| EngineeringChangeReleaseCheckEvent
| EngineeringChangeStatusChangedEvent
| EngineeringChangeStatusChangeCheckEvent
| ChangeOrderReleasedEvent
| ChangeOrderReleaseCheckEvent
| ChangeOrderStatusChangedEvent
| ChangeOrderStatusChangeCheckEvent
| ChangeRequestReleasedEvent
| ChangeRequestReleaseCheckEvent
| ChangeRequestStatusChangedEvent
| ChangeRequestStatusChangeCheckEvent
| WorkflowTaskTriggerEvent
| DocumentCreateCheckEvent
| DocumentModifyCheckEvent
Expand All @@ -68,6 +84,14 @@
| EngineeringChangeReleaseCheckData
| EngineeringChangeStatusChangedData
| EngineeringChangeStatusChangeCheckData
| ChangeOrderReleasedData
| ChangeOrderReleaseCheckData
| ChangeOrderStatusChangedData
| ChangeOrderStatusChangeCheckData
| ChangeRequestReleasedData
| ChangeRequestReleaseCheckData
| ChangeRequestStatusChangedData
| ChangeRequestStatusChangeCheckData
| WorkflowTaskTriggerEventData
| DocumentCreateCheckData
| DocumentModifyCheckData
Expand All @@ -89,6 +113,16 @@
"DummyEvent",
"EngineeringChangeReleasedEvent",
"EngineeringChangeReleaseCheckEvent",
"EngineeringChangeStatusChangedEvent",
"EngineeringChangeStatusChangeCheckEvent",
"ChangeOrderReleasedEvent",
"ChangeOrderReleaseCheckEvent",
"ChangeOrderStatusChangedEvent",
"ChangeOrderStatusChangeCheckEvent",
"ChangeRequestReleasedEvent",
"ChangeRequestReleaseCheckEvent",
"ChangeRequestStatusChangedEvent",
"ChangeRequestStatusChangeCheckEvent",
"WorkflowTaskTriggerEvent",
"DocumentReleasedData",
"DocumentReleaseCheckData",
Expand All @@ -102,6 +136,14 @@
"EngineeringChangeReleaseCheckData",
"EngineeringChangeStatusChangedData",
"EngineeringChangeStatusChangeCheckData",
"ChangeOrderReleasedData",
"ChangeOrderReleaseCheckData",
"ChangeOrderStatusChangedData",
"ChangeOrderStatusChangeCheckData",
"ChangeRequestReleasedData",
"ChangeRequestReleaseCheckData",
"ChangeRequestStatusChangedData",
"ChangeRequestStatusChangeCheckData",
"WorkflowTaskTriggerEventData",
"DocumentReleasedDialogData",
"PartReleasedDialogData",
Expand Down
8 changes: 8 additions & 0 deletions csfunctions/events/base.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,14 @@ class EventNames(str, Enum):
PART_MODIFY_CHECK = "part_modify_check"
ENGINEERING_CHANGE_STATUS_CHANGED = "engineering_change_status_changed"
ENGINEERING_CHANGE_STATUS_CHANGE_CHECK = "engineering_change_status_change_check"
CHANGE_ORDER_RELEASED = "change_order_released"
CHANGE_ORDER_RELEASE_CHECK = "change_order_release_check"
CHANGE_ORDER_STATUS_CHANGED = "change_order_status_changed"
CHANGE_ORDER_STATUS_CHANGE_CHECK = "change_order_status_change_check"
CHANGE_REQUEST_RELEASED = "change_request_released"
CHANGE_REQUEST_RELEASE_CHECK = "change_request_release_check"
CHANGE_REQUEST_STATUS_CHANGED = "change_request_status_changed"
CHANGE_REQUEST_STATUS_CHANGE_CHECK = "change_request_status_change_check"
CUSTOM_OPERATION_DOCUMENT = "custom_operation_document"
CUSTOM_OPERATION_PART = "custom_operation_part"

Expand Down
18 changes: 18 additions & 0 deletions csfunctions/events/change_order_release_check.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
from typing import Literal

from pydantic import BaseModel, Field

from csfunctions.objects import ChangeOrder, Document, Part

from .base import BaseEvent, EventNames


class ChangeOrderReleaseCheckData(BaseModel):
documents: list[Document] = Field(..., description="List of included documents.")
parts: list[Part] = Field(..., description="List of included parts.")
change_orders: list[ChangeOrder] = Field(..., description="List of change orders that will be released.")


class ChangeOrderReleaseCheckEvent(BaseEvent):
name: Literal[EventNames.CHANGE_ORDER_RELEASE_CHECK] = EventNames.CHANGE_ORDER_RELEASE_CHECK
data: ChangeOrderReleaseCheckData
18 changes: 18 additions & 0 deletions csfunctions/events/change_order_released.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
from typing import Literal

from pydantic import BaseModel, Field

from csfunctions.objects import ChangeOrder, Document, Part

from .base import BaseEvent, EventNames


class ChangeOrderReleasedData(BaseModel):
documents: list[Document] = Field(..., description="List of included documents.")
parts: list[Part] = Field(..., description="List of included parts.")
change_orders: list[ChangeOrder] = Field(..., description="List of change orders that were released.")


class ChangeOrderReleasedEvent(BaseEvent):
name: Literal[EventNames.CHANGE_ORDER_RELEASED] = EventNames.CHANGE_ORDER_RELEASED
data: ChangeOrderReleasedData
19 changes: 19 additions & 0 deletions csfunctions/events/change_order_status_change_check.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
from typing import Literal

from pydantic import BaseModel, Field

from csfunctions.objects import ChangeOrder, Document, Part

from .base import BaseEvent, EventNames


class ChangeOrderStatusChangeCheckData(BaseModel):
change_order: ChangeOrder = Field(..., description="The change order that will have its status modified")
target_status: int = Field(..., description="The target status of the change order")
documents: list[Document] = Field(..., description="List of documents attached to the change order")
parts: list[Part] = Field(..., description="List of parts attached to the change order")


class ChangeOrderStatusChangeCheckEvent(BaseEvent):
name: Literal[EventNames.CHANGE_ORDER_STATUS_CHANGE_CHECK] = EventNames.CHANGE_ORDER_STATUS_CHANGE_CHECK
data: ChangeOrderStatusChangeCheckData
19 changes: 19 additions & 0 deletions csfunctions/events/change_order_status_changed.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
from typing import Literal

from pydantic import BaseModel, Field

from csfunctions.objects import ChangeOrder, Document, Part

from .base import BaseEvent, EventNames


class ChangeOrderStatusChangedData(BaseModel):
change_order: ChangeOrder = Field(..., description="The change order that had its status modified")
prev_status: int = Field(..., description="The previous status of the change order")
documents: list[Document] = Field(..., description="List of documents attached to the change order")
parts: list[Part] = Field(..., description="List of parts attached to the change order")


class ChangeOrderStatusChangedEvent(BaseEvent):
name: Literal[EventNames.CHANGE_ORDER_STATUS_CHANGED] = EventNames.CHANGE_ORDER_STATUS_CHANGED
data: ChangeOrderStatusChangedData
18 changes: 18 additions & 0 deletions csfunctions/events/change_request_release_check.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
from typing import Literal

from pydantic import BaseModel, Field

from csfunctions.objects import ChangeRequest, Document, Part

from .base import BaseEvent, EventNames


class ChangeRequestReleaseCheckData(BaseModel):
documents: list[Document] = Field(..., description="List of included documents.")
parts: list[Part] = Field(..., description="List of included parts.")
change_requests: list[ChangeRequest] = Field(..., description="List of change requests that will be released.")


class ChangeRequestReleaseCheckEvent(BaseEvent):
name: Literal[EventNames.CHANGE_REQUEST_RELEASE_CHECK] = EventNames.CHANGE_REQUEST_RELEASE_CHECK
data: ChangeRequestReleaseCheckData
18 changes: 18 additions & 0 deletions csfunctions/events/change_request_released.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
from typing import Literal

from pydantic import BaseModel, Field

from csfunctions.objects import ChangeRequest, Document, Part

from .base import BaseEvent, EventNames


class ChangeRequestReleasedData(BaseModel):
documents: list[Document] = Field(..., description="List of included documents.")
parts: list[Part] = Field(..., description="List of included parts.")
change_requests: list[ChangeRequest] = Field(..., description="List of change requests that were released.")


class ChangeRequestReleasedEvent(BaseEvent):
name: Literal[EventNames.CHANGE_REQUEST_RELEASED] = EventNames.CHANGE_REQUEST_RELEASED
data: ChangeRequestReleasedData
19 changes: 19 additions & 0 deletions csfunctions/events/change_request_status_change_check.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
from typing import Literal

from pydantic import BaseModel, Field

from csfunctions.objects import ChangeRequest, Document, Part

from .base import BaseEvent, EventNames


class ChangeRequestStatusChangeCheckData(BaseModel):
change_request: ChangeRequest = Field(..., description="The change request that will have its status modified")
target_status: int = Field(..., description="The target status of the change request")
documents: list[Document] = Field(..., description="List of documents attached to the change request")
parts: list[Part] = Field(..., description="List of parts attached to the change request")


class ChangeRequestStatusChangeCheckEvent(BaseEvent):
name: Literal[EventNames.CHANGE_REQUEST_STATUS_CHANGE_CHECK] = EventNames.CHANGE_REQUEST_STATUS_CHANGE_CHECK
data: ChangeRequestStatusChangeCheckData
19 changes: 19 additions & 0 deletions csfunctions/events/change_request_status_changed.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
from typing import Literal

from pydantic import BaseModel, Field

from csfunctions.objects import ChangeRequest, Document, Part

from .base import BaseEvent, EventNames


class ChangeRequestStatusChangedData(BaseModel):
change_request: ChangeRequest = Field(..., description="The change request that had its status modified")
prev_status: int = Field(..., description="The previous status of the change request")
documents: list[Document] = Field(..., description="List of documents attached to the change request")
parts: list[Part] = Field(..., description="List of parts attached to the change request")


class ChangeRequestStatusChangedEvent(BaseEvent):
name: Literal[EventNames.CHANGE_REQUEST_STATUS_CHANGED] = EventNames.CHANGE_REQUEST_STATUS_CHANGED
data: ChangeRequestStatusChangedData
4 changes: 3 additions & 1 deletion csfunctions/events/workflow_task_trigger.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

from pydantic import BaseModel, Field

from csfunctions.objects import Briefcase, Document, EngineeringChange, Part, Workflow
from csfunctions.objects import Briefcase, ChangeOrder, ChangeRequest, Document, EngineeringChange, Part, Workflow

from .base import BaseEvent, EventNames

Expand All @@ -14,6 +14,8 @@ class WorkflowTaskTriggerEventData(BaseModel):
engineering_changes: list[EngineeringChange] = Field(
[], description="List of engineering changes attached to the workflow."
)
change_orders: list[ChangeOrder] = Field([], description="List of change orders attached to the workflow.")
change_requests: list[ChangeRequest] = Field([], description="List of change requests attached to the workflow.")
briefcases: list[Briefcase] = Field([], description="List of briefcases attached to the workflow.")


Expand Down
7 changes: 6 additions & 1 deletion csfunctions/objects/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
from .briefcase import Briefcase
from .classification import ObjectPropertyValue
from .document import CADDocument, Document
from .engineering_change import EngineeringChange
from .engineering_change import Change, ChangeOrder, ChangeRequest, EngineeringChange
from .file import File
from .part import BOMItem, Material, Part
from .person import Person
Expand All @@ -18,6 +18,8 @@
| Part
| File
| EngineeringChange
| ChangeOrder
| ChangeRequest
| Material
| BOMItem
| ObjectPropertyValue
Expand All @@ -34,6 +36,9 @@
"Part",
"File",
"EngineeringChange",
"Change",
"ChangeOrder",
"ChangeRequest",
"Material",
"BOMItem",
"ObjectPropertyValue",
Expand Down
2 changes: 2 additions & 0 deletions csfunctions/objects/base.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,8 @@ class ObjectType(str, Enum):
PART = "part"
FILE = "file"
ENGINEERING_CHANGE = "engineering_change"
CHANGE_ORDER = "change_order"
CHANGE_REQUEST = "change_request"
MATERIAL = "material"
BOM_ITEM = "bom_item"
OBJECT_PROPERTY_VALUE = "object_property_value"
Expand Down
25 changes: 23 additions & 2 deletions csfunctions/objects/briefcase.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@

from .base import BaseObject, ObjectType
from .document import Document
from .engineering_change import EngineeringChange
from .engineering_change import ChangeOrder, ChangeRequest, EngineeringChange
from .part import Part

if TYPE_CHECKING:
Expand All @@ -13,7 +13,8 @@

class Briefcase(BaseObject):
"""
Briefcases are used by Workflows and can contain parts, documents or engineering changes.
Briefcases are used by Workflows and can contain parts, documents, engineering changes,
change orders or change requests.
"""

object_type: Literal[ObjectType.BRIEFCASE] = ObjectType.BRIEFCASE
Expand All @@ -25,22 +26,32 @@ class Briefcase(BaseObject):
engineering_change_ids: list[str] = Field(
[], description="List of engineering change IDs in this Briefcase. (cdb_ec_id)"
)
change_order_ids: list[str] = Field([], description="List of change order IDs in this Briefcase. (cs_eco_id)")
change_request_ids: list[str] = Field([], description="List of change request IDs in this Briefcase. (cs_eco_id)")

parts: list[Part] = Field([], exclude=True)
documents: list[Document] = Field([], exclude=True)
engineering_changes: list[EngineeringChange] = Field([], exclude=True)
change_orders: list[ChangeOrder] = Field([], exclude=True)
change_requests: list[ChangeRequest] = Field([], exclude=True)

def link_objects(self, data: "EventData"):
parts = getattr(data, "parts", None)
documents = getattr(data, "documents", None)
engineering_changes = getattr(data, "engineering_changes", None)
change_orders = getattr(data, "change_orders", None)
change_requests = getattr(data, "change_requests", None)

if parts and self.part_ids:
self._link_parts(parts)
if documents and self.document_ids:
self._link_documents(documents)
if engineering_changes and self.engineering_change_ids:
self._link_engineering_changes(engineering_changes)
if change_orders and self.change_order_ids:
self._link_change_orders(change_orders)
if change_requests and self.change_request_ids:
self._link_change_requests(change_requests)

def _link_parts(self, parts: list["Part"]):
for part in parts:
Expand All @@ -59,3 +70,13 @@ def _link_engineering_changes(self, engineering_changes: list["EngineeringChange
and engineering_change not in self.engineering_changes
):
self.engineering_changes.append(engineering_change)

def _link_change_orders(self, change_orders: list["ChangeOrder"]):
for change_order in change_orders:
if change_order.cs_eco_id in self.change_order_ids and change_order not in self.change_orders:
self.change_orders.append(change_order)

def _link_change_requests(self, change_requests: list["ChangeRequest"]):
for change_request in change_requests:
if change_request.cs_eco_id in self.change_request_ids and change_request not in self.change_requests:
self.change_requests.append(change_request)
Loading
Loading