from __future__ import annotations
import datetime
from collections.abc import Callable
from dataclasses import dataclass, field
from kiota_abstractions.serialization import Parsable, ParseNode, SerializationWriter
from typing import Any, Optional, TYPE_CHECKING, Union
from uuid import UUID

if TYPE_CHECKING:
    from .with_item_id_transition_post_response_ball_in_court_type import WithItemIdTransitionPostResponse_ballInCourtType
    from .with_item_id_transition_post_response_manager_type import WithItemIdTransitionPostResponse_managerType
    from .with_item_id_transition_post_response_permitted_actions import WithItemIdTransitionPostResponse_permittedActions
    from .with_item_id_transition_post_response_priority import WithItemIdTransitionPostResponse_priority
    from .with_item_id_transition_post_response_revisions_folders_urns import WithItemIdTransitionPostResponse_revisionsFoldersUrns
    from .with_item_id_transition_post_response_state_id import WithItemIdTransitionPostResponse_stateId
    from .with_item_id_transition_post_response_status_id import WithItemIdTransitionPostResponse_statusId
    from .with_item_id_transition_post_response_subcontractor_type import WithItemIdTransitionPostResponse_subcontractorType
    from .with_item_id_transition_post_response_watchers import WithItemIdTransitionPostResponse_watchers

@dataclass
class WithItemIdTransitionPostResponse(Parsable):
    # The member group IDs of the companies currently assigned to the submittal item at this stage of the workflow.
    ball_in_court_companies: Optional[list[str]] = None
    # The member group IDs of user roles that are currently assigned to the submittal item at this stage of the workflow.
    ball_in_court_roles: Optional[list[str]] = None
    # 'The type of submittal role assigned to the user currently assigned to the submittal item.Possible values: ``reviewer``, ``manager``, ``subcontractor``.'
    ball_in_court_type: Optional[WithItemIdTransitionPostResponse_ballInCourtType] = None
    # The Autodesk IDs of users who are currently assigned to the submittal item at this stage of the workflow.
    ball_in_court_users: Optional[list[str]] = None
    # The date and time when the submittal item was originally created, formatted as YYYY-MM-DDTHH:mm:ss.SSSSSSZ (ISO 8601) in UTC. For example, ``2018-02-15T12:09:24.198466Z``.
    created_at: Optional[datetime.datetime] = None
    # The Autodesk ID of the user who created the submittal item.
    created_by: Optional[str] = None
    # ``customIdentifier`` and ``customIdentifierHumanReadable`` relate to the ``Number`` column in the UI. Submittal managers assign custom numbers to items (manually or automatically). Custom numbers are configured either in global numbering format: <global number>, or in spec section numbering format: <spec ID>-<sequential number>.For projects with a global numbering format, both ``customIdentifier`` and ``customIdentifierHumanReadable`` represent the global number.For projects with a spec section numbering format (<spec ID>-<sequential number>), ``customIdentifier`` represents the sequential number. For example, for a full number of ``033100-01``, ``customIdentifier`` is ``01``.Note that for unnumbered items ``customIdentifier`` is ``null``.For more information on custom numbering, see the `Help documentation <https://help.autodesk.com/view/BUILD/ENU/?guid=Submittal_Custom_Numbering>`_.
    custom_identifier: Optional[str] = None
    # ``customIdentifierHumanReadable`` and ``customIdentifier`` relate to the ``Number`` column in the UI. Submittal managers assign custom numbers to items (manually or automatically). Custom numbers are configured either in global numbering format: <global number>, or in spec section numbering format: <spec ID>-<sequential number>.For projects with a global numbering format, both ``customIdentifier`` and ``customIdentifierHumanReadable`` represent the global number.For projects with a spec section numbering format (<spec ID>-<sequential number>), ``customIdentifierHumanReadable`` represents the full number - both the spec ID and the sequential number. For example, for a full number of ``033100-01``, ``customIdentifierHumanReadable`` is ``033100-01``.Note that for unnumbered items ``customIdentifierHumanReadable`` is ``Unspecified``. For spec section numbering it also includes the spec ID. For example, ``033100-Unspecified``.For more information on custom numbering, see the `Help documentation <https://help.autodesk.com/view/BUILD/ENU/?guid=Submittal_Custom_Numbering>`_.
    custom_identifier_human_readable: Optional[str] = None
    # The description of the submittal item.
    description: Optional[str] = None
    # The due date for the submittal item, formatted as YYYY-MM-DD in UTC (ISO 8601). For example, ``2018-02-15``.
    due_date: Optional[str] = None
    # The URN of the folder that contains the attachments associated with the submittal items.
    folder_urn: Optional[str] = None
    # The internal, globally unique identifier (UUID) for the submittal item.
    id: Optional[UUID] = None
    # The unique ID assigned to the submittal item within the UI. This ID is system-generated and serves as a reference for users interacting with submittal items through the UI. For example, ``111``.
    identifier: Optional[int] = None
    # The duration (in days) from the approval of the submittal to delivery of materials or products to the construction site.
    lead_time: Optional[int] = None
    # The ID that was assigned to the manager of the submittal item.To determine the type of the manager (user, role, or company), refer to the manager type (``managerType``) attribute.In order to get more info about the manager, use:- `GET projects/users </en/docs/acc/v1/reference/http/admin-projectsprojectId-users-GET>`_ to verify the actual name of the user in case the typs is a ``user`` (1).- `GET companies </en/docs/acc/v1/reference/http/projects-:project_id-companies-GET/>`_ to determine the name of the company in case the typs is a ``company`` (2).Note that we do not currently support verifying names of roles.
    manager: Optional[str] = None
    # The date by which the manager is expected to prepare the submittal item for review, formatted as YYYY-MM-DD in UTC (ISO 8601). For example, ``2018-02-15``. This corresponds to the ``mgr-1`` state ``Open (Submitted)``.
    manager_due_date: Optional[str] = None
    # The type of manager associated with the submittal item.Possible values: ``1`` (user), ``2`` (company), ``3`` (role).
    manager_type: Optional[WithItemIdTransitionPostResponse_managerType] = None
    # The ID of the package associated with the submittal item.
    package_id: Optional[UUID] = None
    # The package identifier as displayed in the UI.
    package_identifier: Optional[str] = None
    # The identifier of the submittal spec associated with the package. This value corresponds to the ``Spec section`` displayed in the UI, such as ``1 - Cement``.
    package_spec_identifier: Optional[str] = None
    # The title of the package associated with the submittal item.
    package_title: Optional[str] = None
    # The list of actions the user is allowed to perform on the submittal item.
    permitted_actions: Optional[list[WithItemIdTransitionPostResponse_permittedActions]] = None
    # The priority of the submittal item.Possible values:- ``Low``- ``Normal``- ``High``
    priority: Optional[WithItemIdTransitionPostResponse_priority] = None
    # The Autodesk ID of the user who published the submittal item.
    published_by: Optional[str] = None
    # The date when the manager closed and distributed the submittal item, in the following format: YYYY-MM-DD (ISO 8601) in UTC. For example, ``2018-02-15``.
    published_date: Optional[datetime.datetime] = None
    # The date and time when the submittal item transitioned from the ``rev`` state ``(Open - In Review)`` to the ``mgr-2`` state ``(Close and distribute)``, formatted as YYYY-MM-DD (ISO 8601) in UTC. For example, ``2022-03-02T12:09:24Z``.
    received_from_review: Optional[datetime.datetime] = None
    # The date when the submittal was received back from the subcontractor after review, formatted as YYYY-MM-DDTHH:mm:ss.SSSSSSZ (ISO 8601) in UTC. For example, ``2018-02-15T12:09:24.198466Z``. This corresponds to transition to ``mgr-1`` state ``Open (Submitted)``.
    received_from_submitter: Optional[datetime.datetime] = None
    # The date by which approval for the submittal is required, formatted as YYYY-MM-DD in UTC (ISO 8601). For example, ``2018-02-15``.
    required_approval_date: Optional[str] = None
    # The date by which the Responsible Contractor must submit the submittal to the submittal manager, formatted as YYYY-MM-DD in UTC (ISO 8601). For example, ``2018-02-15``.
    required_date: Optional[str] = None
    # The date when the materials are expected to arrive on the construction site, formatted as YYYY-MM-DD in UTC (ISO 8601). For example, ``2018-02-15``.
    required_on_job_date: Optional[str] = None
    # The date and time when the response was added, formatted as YYYY-MM-DDTHH:mm:ss.SSSSSSZ (ISO 8601) in UTC. For example, ``2018-02-15T12:09:24.198466Z``.
    responded_at: Optional[datetime.datetime] = None
    # The Autodesk ID of the user that gave the response to the submittal item.
    responded_by: Optional[str] = None
    # The body of the response comment, containing feedback or instructions related to the submittal item.
    response_comment: Optional[str] = None
    # The ID of the response associated with the submittal item, linking to the specific feedback or action taken.
    response_id: Optional[str] = None
    # The revision number of the submittal item, indicating the version of the item in the submittal workflow. For example, ``1`` for the initial submission or ``2`` for the first revision.
    revision: Optional[int] = None
    # An object containing URNs that represent folders associated with the revisions of the submittal item. These URNs can be used to access and identify specific folders related to submittal item revisions within the system.
    revisions_folders_urns: Optional[WithItemIdTransitionPostResponse_revisionsFoldersUrns] = None
    # The date and time when the submittal item transitioned to the ``rev`` state ``(Open - In review)``, formatted as YYYY-MM-DDTHH:mm:ss.SSSSSSZ (ISO 8601) in UTC. For example, ``2018-02-15T12:09:24.198466Z``.
    sent_to_review: Optional[datetime.datetime] = None
    # The Autodesk ID of the user who transitioned the item to the ``rev`` state ``(Open - In review)``.
    sent_to_review_by: Optional[str] = None
    # The date and time when the submittal was sent to the subcontractor for review, formatted as YYYY-MM-DDTHH:mm:ss.SSSSSSZ (ISO 8601) in UTC. For example, ``2018-02-15T12:09:24.198466Z``. This corresponds to transition to the ``sbc-1`` state.
    sent_to_submitter: Optional[datetime.datetime] = None
    # The unique identifier (UUID) of the spec assigned to the submittal item.
    spec_id: Optional[UUID] = None
    # The identifier of the spec section that is associated with the submittal item. The identifier is assigned to the spec section in the UI.
    spec_identifier: Optional[str] = None
    # The title of the spec associated with the submittal item.
    spec_title: Optional[str] = None
    # The current state of the submittal item after the transition.Possible values:``sbc-1`` (Waiting for Submission) - Assigned to the Responsible Contractor, who needs to submit the submittal to the Manager.``mgr-1`` (Open - Submitted) - Assigned to the Manager, who needs to prepare the submittal item for review.``rev`` (Open - In Review) - Under review by the reviewers defined in the submittal item's review workflow.``mgr-2`` (Open - Reviewed) - The review is complete, and the submittal is returned to the Manager, who needs to set the final response and close the submittal.``sbc-2``: (Closed) - The submittal has been closed and assigned to the Responsible Contractor.``void`` (Voided) - The submittal item has been voided.``draft`` (Draft) - Assigned to the Manager, who must send the submittal item to the Responsible Contractor.
    state_id: Optional[WithItemIdTransitionPostResponse_stateId] = None
    # The status of the submittal item.Possible values: ``1`` - (Required), ``2`` - (Open), ``3`` - (Closed), ``4`` - (Void), ``5`` - (Empty), ``6`` - (Draft).To retrieve the full list of possible statuses, call `GET metadata </en/docs/acc/v1/reference/http/submittals-metadata-GET/>`_.
    status_id: Optional[WithItemIdTransitionPostResponse_statusId] = None
    # The ID that was assigned to the subcontractor for the submittal item. If a non-manager user created the submittal item and chose a manager, they are automatically assigned as the ``subcontractor`` of the submittal item.In order to get more info about the subcontractor, use:- `GET projects/users </en/docs/acc/v1/reference/http/admin-projectsprojectId-users-GET>`_ to verify the actual name of the user in case the typs is a ``user`` (1).- `GET companies </en/docs/acc/v1/reference/http/projects-:project_id-companies-GET/>`_ to determine the name of the company in case the typs is a ``company`` (2).Note that we do not currently support verifying names of roles.
    subcontractor: Optional[str] = None
    # The type of subcontractor associated with the submittal item.Possible values: ``1`` (user), ``2`` (company), ``3`` (role).
    subcontractor_type: Optional[WithItemIdTransitionPostResponse_subcontractorType] = None
    # The Autodesk ID of the user who submitted the submittal item. This is the user who transitioned the item to the manager.
    submitted_by: Optional[str] = None
    # The date by which the subcontractor is expected to submit the submittal to the manager, formatted as YYYY-MM-DD in UTC (ISO 8601). For example, ``2018-02-15``. This corresponds to the ``sbc-1`` state ``Waiting for submission``.
    submitter_due_date: Optional[str] = None
    # The sub-spec section associated with the submittal item, providing additional categorization within the main spec.
    subsection: Optional[str] = None
    # The title of the submittal item.
    title: Optional[str] = None
    # The ID representing the type of submittal item.
    type_id: Optional[str] = None
    # The time and date when the submittal item was last updated, formatted as YYYY-MM-DDTHH:mm:ss.SSSSSSZ (ISO 8601) in UTC. For example, ``2018-02-15T12:09:24.198466Z``.
    updated_at: Optional[datetime.datetime] = None
    # The Autodesk ID of the user who last updated the submittal item.
    updated_by: Optional[str] = None
    # A list of project watchers, who can be individual users, roles, or companies.
    watchers: Optional[list[WithItemIdTransitionPostResponse_watchers]] = None
    
    @staticmethod
    def create_from_discriminator_value(parse_node: ParseNode) -> WithItemIdTransitionPostResponse:
        """
        Creates a new instance of the appropriate class based on discriminator value
        param parse_node: The parse node to use to read the discriminator value and create the object
        Returns: WithItemIdTransitionPostResponse
        """
        if parse_node is None:
            raise TypeError("parse_node cannot be null.")
        return WithItemIdTransitionPostResponse()
    
    def get_field_deserializers(self,) -> dict[str, Callable[[ParseNode], None]]:
        """
        The deserialization information for the current model
        Returns: dict[str, Callable[[ParseNode], None]]
        """
        from .with_item_id_transition_post_response_ball_in_court_type import WithItemIdTransitionPostResponse_ballInCourtType
        from .with_item_id_transition_post_response_manager_type import WithItemIdTransitionPostResponse_managerType
        from .with_item_id_transition_post_response_permitted_actions import WithItemIdTransitionPostResponse_permittedActions
        from .with_item_id_transition_post_response_priority import WithItemIdTransitionPostResponse_priority
        from .with_item_id_transition_post_response_revisions_folders_urns import WithItemIdTransitionPostResponse_revisionsFoldersUrns
        from .with_item_id_transition_post_response_state_id import WithItemIdTransitionPostResponse_stateId
        from .with_item_id_transition_post_response_status_id import WithItemIdTransitionPostResponse_statusId
        from .with_item_id_transition_post_response_subcontractor_type import WithItemIdTransitionPostResponse_subcontractorType
        from .with_item_id_transition_post_response_watchers import WithItemIdTransitionPostResponse_watchers

        from .with_item_id_transition_post_response_ball_in_court_type import WithItemIdTransitionPostResponse_ballInCourtType
        from .with_item_id_transition_post_response_manager_type import WithItemIdTransitionPostResponse_managerType
        from .with_item_id_transition_post_response_permitted_actions import WithItemIdTransitionPostResponse_permittedActions
        from .with_item_id_transition_post_response_priority import WithItemIdTransitionPostResponse_priority
        from .with_item_id_transition_post_response_revisions_folders_urns import WithItemIdTransitionPostResponse_revisionsFoldersUrns
        from .with_item_id_transition_post_response_state_id import WithItemIdTransitionPostResponse_stateId
        from .with_item_id_transition_post_response_status_id import WithItemIdTransitionPostResponse_statusId
        from .with_item_id_transition_post_response_subcontractor_type import WithItemIdTransitionPostResponse_subcontractorType
        from .with_item_id_transition_post_response_watchers import WithItemIdTransitionPostResponse_watchers

        fields: dict[str, Callable[[Any], None]] = {
            "ballInCourtCompanies": lambda n : setattr(self, 'ball_in_court_companies', n.get_collection_of_primitive_values(str)),
            "ballInCourtRoles": lambda n : setattr(self, 'ball_in_court_roles', n.get_collection_of_primitive_values(str)),
            "ballInCourtType": lambda n : setattr(self, 'ball_in_court_type', n.get_enum_value(WithItemIdTransitionPostResponse_ballInCourtType)),
            "ballInCourtUsers": lambda n : setattr(self, 'ball_in_court_users', n.get_collection_of_primitive_values(str)),
            "createdAt": lambda n : setattr(self, 'created_at', n.get_datetime_value()),
            "createdBy": lambda n : setattr(self, 'created_by', n.get_str_value()),
            "customIdentifier": lambda n : setattr(self, 'custom_identifier', n.get_str_value()),
            "customIdentifierHumanReadable": lambda n : setattr(self, 'custom_identifier_human_readable', n.get_str_value()),
            "description": lambda n : setattr(self, 'description', n.get_str_value()),
            "dueDate": lambda n : setattr(self, 'due_date', n.get_str_value()),
            "folderUrn": lambda n : setattr(self, 'folder_urn', n.get_str_value()),
            "id": lambda n : setattr(self, 'id', n.get_uuid_value()),
            "identifier": lambda n : setattr(self, 'identifier', n.get_int_value()),
            "leadTime": lambda n : setattr(self, 'lead_time', n.get_int_value()),
            "manager": lambda n : setattr(self, 'manager', n.get_str_value()),
            "managerDueDate": lambda n : setattr(self, 'manager_due_date', n.get_str_value()),
            "managerType": lambda n : setattr(self, 'manager_type', n.get_enum_value(WithItemIdTransitionPostResponse_managerType)),
            "packageId": lambda n : setattr(self, 'package_id', n.get_uuid_value()),
            "packageIdentifier": lambda n : setattr(self, 'package_identifier', n.get_str_value()),
            "packageSpecIdentifier": lambda n : setattr(self, 'package_spec_identifier', n.get_str_value()),
            "packageTitle": lambda n : setattr(self, 'package_title', n.get_str_value()),
            "permittedActions": lambda n : setattr(self, 'permitted_actions', n.get_collection_of_object_values(WithItemIdTransitionPostResponse_permittedActions)),
            "priority": lambda n : setattr(self, 'priority', n.get_enum_value(WithItemIdTransitionPostResponse_priority)),
            "publishedBy": lambda n : setattr(self, 'published_by', n.get_str_value()),
            "publishedDate": lambda n : setattr(self, 'published_date', n.get_datetime_value()),
            "receivedFromReview": lambda n : setattr(self, 'received_from_review', n.get_datetime_value()),
            "receivedFromSubmitter": lambda n : setattr(self, 'received_from_submitter', n.get_datetime_value()),
            "requiredApprovalDate": lambda n : setattr(self, 'required_approval_date', n.get_str_value()),
            "requiredDate": lambda n : setattr(self, 'required_date', n.get_str_value()),
            "requiredOnJobDate": lambda n : setattr(self, 'required_on_job_date', n.get_str_value()),
            "respondedAt": lambda n : setattr(self, 'responded_at', n.get_datetime_value()),
            "respondedBy": lambda n : setattr(self, 'responded_by', n.get_str_value()),
            "responseComment": lambda n : setattr(self, 'response_comment', n.get_str_value()),
            "responseId": lambda n : setattr(self, 'response_id', n.get_str_value()),
            "revision": lambda n : setattr(self, 'revision', n.get_int_value()),
            "revisionsFoldersUrns": lambda n : setattr(self, 'revisions_folders_urns', n.get_object_value(WithItemIdTransitionPostResponse_revisionsFoldersUrns)),
            "sentToReview": lambda n : setattr(self, 'sent_to_review', n.get_datetime_value()),
            "sentToReviewBy": lambda n : setattr(self, 'sent_to_review_by', n.get_str_value()),
            "sentToSubmitter": lambda n : setattr(self, 'sent_to_submitter', n.get_datetime_value()),
            "specId": lambda n : setattr(self, 'spec_id', n.get_uuid_value()),
            "specIdentifier": lambda n : setattr(self, 'spec_identifier', n.get_str_value()),
            "specTitle": lambda n : setattr(self, 'spec_title', n.get_str_value()),
            "stateId": lambda n : setattr(self, 'state_id', n.get_enum_value(WithItemIdTransitionPostResponse_stateId)),
            "statusId": lambda n : setattr(self, 'status_id', n.get_enum_value(WithItemIdTransitionPostResponse_statusId)),
            "subcontractor": lambda n : setattr(self, 'subcontractor', n.get_str_value()),
            "subcontractorType": lambda n : setattr(self, 'subcontractor_type', n.get_enum_value(WithItemIdTransitionPostResponse_subcontractorType)),
            "submittedBy": lambda n : setattr(self, 'submitted_by', n.get_str_value()),
            "submitterDueDate": lambda n : setattr(self, 'submitter_due_date', n.get_str_value()),
            "subsection": lambda n : setattr(self, 'subsection', n.get_str_value()),
            "title": lambda n : setattr(self, 'title', n.get_str_value()),
            "typeId": lambda n : setattr(self, 'type_id', n.get_str_value()),
            "updatedAt": lambda n : setattr(self, 'updated_at', n.get_datetime_value()),
            "updatedBy": lambda n : setattr(self, 'updated_by', n.get_str_value()),
            "watchers": lambda n : setattr(self, 'watchers', n.get_collection_of_object_values(WithItemIdTransitionPostResponse_watchers)),
        }
        return fields
    
    def serialize(self,writer: SerializationWriter) -> None:
        """
        Serializes information the current object
        param writer: Serialization writer to use to serialize this model
        Returns: None
        """
        if writer is None:
            raise TypeError("writer cannot be null.")
        writer.write_collection_of_primitive_values("ballInCourtCompanies", self.ball_in_court_companies)
        writer.write_collection_of_primitive_values("ballInCourtRoles", self.ball_in_court_roles)
        writer.write_enum_value("ballInCourtType", self.ball_in_court_type)
        writer.write_collection_of_primitive_values("ballInCourtUsers", self.ball_in_court_users)
        writer.write_datetime_value("createdAt", self.created_at)
        writer.write_str_value("createdBy", self.created_by)
        writer.write_str_value("customIdentifier", self.custom_identifier)
        writer.write_str_value("customIdentifierHumanReadable", self.custom_identifier_human_readable)
        writer.write_str_value("description", self.description)
        writer.write_str_value("dueDate", self.due_date)
        writer.write_str_value("folderUrn", self.folder_urn)
        writer.write_uuid_value("id", self.id)
        writer.write_int_value("identifier", self.identifier)
        writer.write_int_value("leadTime", self.lead_time)
        writer.write_str_value("manager", self.manager)
        writer.write_str_value("managerDueDate", self.manager_due_date)
        writer.write_enum_value("managerType", self.manager_type)
        writer.write_uuid_value("packageId", self.package_id)
        writer.write_str_value("packageIdentifier", self.package_identifier)
        writer.write_str_value("packageSpecIdentifier", self.package_spec_identifier)
        writer.write_str_value("packageTitle", self.package_title)
        writer.write_collection_of_object_values("permittedActions", self.permitted_actions)
        writer.write_enum_value("priority", self.priority)
        writer.write_str_value("publishedBy", self.published_by)
        writer.write_datetime_value("publishedDate", self.published_date)
        writer.write_datetime_value("receivedFromReview", self.received_from_review)
        writer.write_datetime_value("receivedFromSubmitter", self.received_from_submitter)
        writer.write_str_value("requiredApprovalDate", self.required_approval_date)
        writer.write_str_value("requiredDate", self.required_date)
        writer.write_str_value("requiredOnJobDate", self.required_on_job_date)
        writer.write_datetime_value("respondedAt", self.responded_at)
        writer.write_str_value("respondedBy", self.responded_by)
        writer.write_str_value("responseComment", self.response_comment)
        writer.write_str_value("responseId", self.response_id)
        writer.write_int_value("revision", self.revision)
        writer.write_object_value("revisionsFoldersUrns", self.revisions_folders_urns)
        writer.write_datetime_value("sentToReview", self.sent_to_review)
        writer.write_str_value("sentToReviewBy", self.sent_to_review_by)
        writer.write_datetime_value("sentToSubmitter", self.sent_to_submitter)
        writer.write_uuid_value("specId", self.spec_id)
        writer.write_str_value("specIdentifier", self.spec_identifier)
        writer.write_str_value("specTitle", self.spec_title)
        writer.write_enum_value("stateId", self.state_id)
        writer.write_enum_value("statusId", self.status_id)
        writer.write_str_value("subcontractor", self.subcontractor)
        writer.write_enum_value("subcontractorType", self.subcontractor_type)
        writer.write_str_value("submittedBy", self.submitted_by)
        writer.write_str_value("submitterDueDate", self.submitter_due_date)
        writer.write_str_value("subsection", self.subsection)
        writer.write_str_value("title", self.title)
        writer.write_str_value("typeId", self.type_id)
        writer.write_datetime_value("updatedAt", self.updated_at)
        writer.write_str_value("updatedBy", self.updated_by)
        writer.write_collection_of_object_values("watchers", self.watchers)
    

