# coding: utf-8

"""
    Xero Accounting API

    No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)  # noqa: E501

    Contact: api@xero.com
    Generated by: https://openapi-generator.tech
"""


import re  # noqa: F401

from xero_python.models import BaseModel


class ManualJournal(BaseModel):
    """NOTE: This class is auto generated by OpenAPI Generator.
    Ref: https://openapi-generator.tech

    Do not edit the class manually.
    """

    """
    Attributes:
      openapi_types (dict): The key is attribute name
                            and the value is attribute type.
      attribute_map (dict): The key is attribute name
                            and the value is json key in definition.
    """
    openapi_types = {
        "narration": "str",
        "journal_lines": "list[ManualJournalLine]",
        "date": "date[ms-format]",
        "line_amount_types": "LineAmountTypes",
        "status": "str",
        "url": "str",
        "show_on_cash_basis_reports": "bool",
        "has_attachments": "bool",
        "updated_date_utc": "datetime[ms-format]",
        "manual_journal_id": "str",
        "status_attribute_string": "str",
        "warnings": "list[ValidationError]",
        "validation_errors": "list[ValidationError]",
        "attachments": "list[Attachment]",
    }

    attribute_map = {
        "narration": "Narration",
        "journal_lines": "JournalLines",
        "date": "Date",
        "line_amount_types": "LineAmountTypes",
        "status": "Status",
        "url": "Url",
        "show_on_cash_basis_reports": "ShowOnCashBasisReports",
        "has_attachments": "HasAttachments",
        "updated_date_utc": "UpdatedDateUTC",
        "manual_journal_id": "ManualJournalID",
        "status_attribute_string": "StatusAttributeString",
        "warnings": "Warnings",
        "validation_errors": "ValidationErrors",
        "attachments": "Attachments",
    }

    def __init__(
        self,
        narration=None,
        journal_lines=None,
        date=None,
        line_amount_types=None,
        status=None,
        url=None,
        show_on_cash_basis_reports=None,
        has_attachments=False,
        updated_date_utc=None,
        manual_journal_id=None,
        status_attribute_string=None,
        warnings=None,
        validation_errors=None,
        attachments=None,
    ):  # noqa: E501
        """ManualJournal - a model defined in OpenAPI"""  # noqa: E501

        self._narration = None
        self._journal_lines = None
        self._date = None
        self._line_amount_types = None
        self._status = None
        self._url = None
        self._show_on_cash_basis_reports = None
        self._has_attachments = None
        self._updated_date_utc = None
        self._manual_journal_id = None
        self._status_attribute_string = None
        self._warnings = None
        self._validation_errors = None
        self._attachments = None
        self.discriminator = None

        self.narration = narration
        if journal_lines is not None:
            self.journal_lines = journal_lines
        if date is not None:
            self.date = date
        if line_amount_types is not None:
            self.line_amount_types = line_amount_types
        if status is not None:
            self.status = status
        if url is not None:
            self.url = url
        if show_on_cash_basis_reports is not None:
            self.show_on_cash_basis_reports = show_on_cash_basis_reports
        if has_attachments is not None:
            self.has_attachments = has_attachments
        if updated_date_utc is not None:
            self.updated_date_utc = updated_date_utc
        if manual_journal_id is not None:
            self.manual_journal_id = manual_journal_id
        if status_attribute_string is not None:
            self.status_attribute_string = status_attribute_string
        if warnings is not None:
            self.warnings = warnings
        if validation_errors is not None:
            self.validation_errors = validation_errors
        if attachments is not None:
            self.attachments = attachments

    @property
    def narration(self):
        """Gets the narration of this ManualJournal.  # noqa: E501

        Description of journal being posted  # noqa: E501

        :return: The narration of this ManualJournal.  # noqa: E501
        :rtype: str
        """
        return self._narration

    @narration.setter
    def narration(self, narration):
        """Sets the narration of this ManualJournal.

        Description of journal being posted  # noqa: E501

        :param narration: The narration of this ManualJournal.  # noqa: E501
        :type: str
        """
        if narration is None:
            raise ValueError(
                "Invalid value for `narration`, must not be `None`"
            )  # noqa: E501

        self._narration = narration

    @property
    def journal_lines(self):
        """Gets the journal_lines of this ManualJournal.  # noqa: E501

        See JournalLines  # noqa: E501

        :return: The journal_lines of this ManualJournal.  # noqa: E501
        :rtype: list[ManualJournalLine]
        """
        return self._journal_lines

    @journal_lines.setter
    def journal_lines(self, journal_lines):
        """Sets the journal_lines of this ManualJournal.

        See JournalLines  # noqa: E501

        :param journal_lines: The journal_lines of this ManualJournal.  # noqa: E501
        :type: list[ManualJournalLine]
        """

        self._journal_lines = journal_lines

    @property
    def date(self):
        """Gets the date of this ManualJournal.  # noqa: E501

        Date journal was posted – YYYY-MM-DD  # noqa: E501

        :return: The date of this ManualJournal.  # noqa: E501
        :rtype: date
        """
        return self._date

    @date.setter
    def date(self, date):
        """Sets the date of this ManualJournal.

        Date journal was posted – YYYY-MM-DD  # noqa: E501

        :param date: The date of this ManualJournal.  # noqa: E501
        :type: date
        """

        self._date = date

    @property
    def line_amount_types(self):
        """Gets the line_amount_types of this ManualJournal.  # noqa: E501


        :return: The line_amount_types of this ManualJournal.  # noqa: E501
        :rtype: LineAmountTypes
        """
        return self._line_amount_types

    @line_amount_types.setter
    def line_amount_types(self, line_amount_types):
        """Sets the line_amount_types of this ManualJournal.


        :param line_amount_types: The line_amount_types of this ManualJournal.  # noqa: E501
        :type: LineAmountTypes
        """

        self._line_amount_types = line_amount_types

    @property
    def status(self):
        """Gets the status of this ManualJournal.  # noqa: E501

        See Manual Journal Status Codes  # noqa: E501

        :return: The status of this ManualJournal.  # noqa: E501
        :rtype: str
        """
        return self._status

    @status.setter
    def status(self, status):
        """Sets the status of this ManualJournal.

        See Manual Journal Status Codes  # noqa: E501

        :param status: The status of this ManualJournal.  # noqa: E501
        :type: str
        """
        allowed_values = [
            "DRAFT",
            "POSTED",
            "DELETED",
            "VOIDED",
            "ARCHIVED",
            "None",
        ]  # noqa: E501

        if status:
            if status not in allowed_values:
                raise ValueError(
                    "Invalid value for `status` ({0}), must be one of {1}".format(  # noqa: E501
                        status, allowed_values
                    )
                )

        self._status = status

    @property
    def url(self):
        """Gets the url of this ManualJournal.  # noqa: E501

        Url link to a source document – shown as “Go to [appName]” in the Xero app  # noqa: E501

        :return: The url of this ManualJournal.  # noqa: E501
        :rtype: str
        """
        return self._url

    @url.setter
    def url(self, url):
        """Sets the url of this ManualJournal.

        Url link to a source document – shown as “Go to [appName]” in the Xero app  # noqa: E501

        :param url: The url of this ManualJournal.  # noqa: E501
        :type: str
        """

        self._url = url

    @property
    def show_on_cash_basis_reports(self):
        """Gets the show_on_cash_basis_reports of this ManualJournal.  # noqa: E501

        Boolean – default is true if not specified  # noqa: E501

        :return: The show_on_cash_basis_reports of this ManualJournal.  # noqa: E501
        :rtype: bool
        """
        return self._show_on_cash_basis_reports

    @show_on_cash_basis_reports.setter
    def show_on_cash_basis_reports(self, show_on_cash_basis_reports):
        """Sets the show_on_cash_basis_reports of this ManualJournal.

        Boolean – default is true if not specified  # noqa: E501

        :param show_on_cash_basis_reports: The show_on_cash_basis_reports of this ManualJournal.  # noqa: E501
        :type: bool
        """

        self._show_on_cash_basis_reports = show_on_cash_basis_reports

    @property
    def has_attachments(self):
        """Gets the has_attachments of this ManualJournal.  # noqa: E501

        Boolean to indicate if a manual journal has an attachment  # noqa: E501

        :return: The has_attachments of this ManualJournal.  # noqa: E501
        :rtype: bool
        """
        return self._has_attachments

    @has_attachments.setter
    def has_attachments(self, has_attachments):
        """Sets the has_attachments of this ManualJournal.

        Boolean to indicate if a manual journal has an attachment  # noqa: E501

        :param has_attachments: The has_attachments of this ManualJournal.  # noqa: E501
        :type: bool
        """

        self._has_attachments = has_attachments

    @property
    def updated_date_utc(self):
        """Gets the updated_date_utc of this ManualJournal.  # noqa: E501

        Last modified date UTC format  # noqa: E501

        :return: The updated_date_utc of this ManualJournal.  # noqa: E501
        :rtype: datetime
        """
        return self._updated_date_utc

    @updated_date_utc.setter
    def updated_date_utc(self, updated_date_utc):
        """Sets the updated_date_utc of this ManualJournal.

        Last modified date UTC format  # noqa: E501

        :param updated_date_utc: The updated_date_utc of this ManualJournal.  # noqa: E501
        :type: datetime
        """

        self._updated_date_utc = updated_date_utc

    @property
    def manual_journal_id(self):
        """Gets the manual_journal_id of this ManualJournal.  # noqa: E501

        The Xero identifier for a Manual Journal  # noqa: E501

        :return: The manual_journal_id of this ManualJournal.  # noqa: E501
        :rtype: str
        """
        return self._manual_journal_id

    @manual_journal_id.setter
    def manual_journal_id(self, manual_journal_id):
        """Sets the manual_journal_id of this ManualJournal.

        The Xero identifier for a Manual Journal  # noqa: E501

        :param manual_journal_id: The manual_journal_id of this ManualJournal.  # noqa: E501
        :type: str
        """

        self._manual_journal_id = manual_journal_id

    @property
    def status_attribute_string(self):
        """Gets the status_attribute_string of this ManualJournal.  # noqa: E501

        A string to indicate if a invoice status  # noqa: E501

        :return: The status_attribute_string of this ManualJournal.  # noqa: E501
        :rtype: str
        """
        return self._status_attribute_string

    @status_attribute_string.setter
    def status_attribute_string(self, status_attribute_string):
        """Sets the status_attribute_string of this ManualJournal.

        A string to indicate if a invoice status  # noqa: E501

        :param status_attribute_string: The status_attribute_string of this ManualJournal.  # noqa: E501
        :type: str
        """

        self._status_attribute_string = status_attribute_string

    @property
    def warnings(self):
        """Gets the warnings of this ManualJournal.  # noqa: E501

        Displays array of warning messages from the API  # noqa: E501

        :return: The warnings of this ManualJournal.  # noqa: E501
        :rtype: list[ValidationError]
        """
        return self._warnings

    @warnings.setter
    def warnings(self, warnings):
        """Sets the warnings of this ManualJournal.

        Displays array of warning messages from the API  # noqa: E501

        :param warnings: The warnings of this ManualJournal.  # noqa: E501
        :type: list[ValidationError]
        """

        self._warnings = warnings

    @property
    def validation_errors(self):
        """Gets the validation_errors of this ManualJournal.  # noqa: E501

        Displays array of validation error messages from the API  # noqa: E501

        :return: The validation_errors of this ManualJournal.  # noqa: E501
        :rtype: list[ValidationError]
        """
        return self._validation_errors

    @validation_errors.setter
    def validation_errors(self, validation_errors):
        """Sets the validation_errors of this ManualJournal.

        Displays array of validation error messages from the API  # noqa: E501

        :param validation_errors: The validation_errors of this ManualJournal.  # noqa: E501
        :type: list[ValidationError]
        """

        self._validation_errors = validation_errors

    @property
    def attachments(self):
        """Gets the attachments of this ManualJournal.  # noqa: E501

        Displays array of attachments from the API  # noqa: E501

        :return: The attachments of this ManualJournal.  # noqa: E501
        :rtype: list[Attachment]
        """
        return self._attachments

    @attachments.setter
    def attachments(self, attachments):
        """Sets the attachments of this ManualJournal.

        Displays array of attachments from the API  # noqa: E501

        :param attachments: The attachments of this ManualJournal.  # noqa: E501
        :type: list[Attachment]
        """

        self._attachments = attachments
