# coding: utf-8

"""
    BillForward REST API


    OpenAPI spec version: 1.0.0
    
    Generated by: https://github.com/swagger-api/swagger-codegen.git

    Licensed under the Apache License, Version 2.0 (the "License");
    you may not use this file except in compliance with the License.
    You may obtain a copy of the License at

        http://www.apache.org/licenses/LICENSE-2.0

    Unless required by applicable law or agreed to in writing, software
    distributed under the License is distributed on an "AS IS" BASIS,
    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    See the License for the specific language governing permissions and
    limitations under the License.
"""

from pprint import pformat
from six import iteritems
import re


class InvoiceLine(object):
    """
    NOTE: This class is auto generated by the swagger code generator program.
    Do not edit the class manually.
    """
    def __init__(self, unit_of_measure=None, pricing_component_type=None, charge_type=None, period_start=None, period_end=None, created=None, changed_by=None, updated=None, id=None, invoice_id=None, unit_of_measure_id=None, subscription_id=None, product_rate_plan_id=None, public_product_rate_plan_name=None, product_rate_plan_name=None, product_id=None, public_product_name=None, product_name=None, organization_id=None, name=None, description=None, calculation=None, cost=None, tax=None, component_value=None, pricing_component_id=None, public_pricing_component_name=None, pricing_component_name=None, subscription_charge_id=None, child_invoice_id=None, type=None):
        """
        InvoiceLine - a model defined in Swagger

        :param dict swaggerTypes: The key is attribute name
                                  and the value is attribute type.
        :param dict attributeMap: The key is attribute name
                                  and the value is json key in definition.
        """
        self.swagger_types = {
            'unit_of_measure': 'UnitOfMeasure',
            'pricing_component_type': 'str',
            'charge_type': 'str',
            'period_start': 'datetime',
            'period_end': 'datetime',
            'created': 'datetime',
            'changed_by': 'str',
            'updated': 'datetime',
            'id': 'str',
            'invoice_id': 'str',
            'unit_of_measure_id': 'str',
            'subscription_id': 'str',
            'product_rate_plan_id': 'str',
            'public_product_rate_plan_name': 'str',
            'product_rate_plan_name': 'str',
            'product_id': 'str',
            'public_product_name': 'str',
            'product_name': 'str',
            'organization_id': 'str',
            'name': 'str',
            'description': 'str',
            'calculation': 'str',
            'cost': 'float',
            'tax': 'float',
            'component_value': 'int',
            'pricing_component_id': 'str',
            'public_pricing_component_name': 'str',
            'pricing_component_name': 'str',
            'subscription_charge_id': 'str',
            'child_invoice_id': 'str',
            'type': 'str'
        }

        self.attribute_map = {
            'unit_of_measure': 'unitOfMeasure',
            'pricing_component_type': 'pricingComponentType',
            'charge_type': 'chargeType',
            'period_start': 'periodStart',
            'period_end': 'periodEnd',
            'created': 'created',
            'changed_by': 'changedBy',
            'updated': 'updated',
            'id': 'id',
            'invoice_id': 'invoiceID',
            'unit_of_measure_id': 'unitOfMeasureID',
            'subscription_id': 'subscriptionID',
            'product_rate_plan_id': 'productRatePlanID',
            'public_product_rate_plan_name': 'publicProductRatePlanName',
            'product_rate_plan_name': 'productRatePlanName',
            'product_id': 'productID',
            'public_product_name': 'publicProductName',
            'product_name': 'productName',
            'organization_id': 'organizationID',
            'name': 'name',
            'description': 'description',
            'calculation': 'calculation',
            'cost': 'cost',
            'tax': 'tax',
            'component_value': 'componentValue',
            'pricing_component_id': 'pricingComponentID',
            'public_pricing_component_name': 'publicPricingComponentName',
            'pricing_component_name': 'pricingComponentName',
            'subscription_charge_id': 'subscriptionChargeID',
            'child_invoice_id': 'childInvoiceID',
            'type': 'type'
        }

        self._unit_of_measure = unit_of_measure
        self._pricing_component_type = pricing_component_type
        self._charge_type = charge_type
        self._period_start = period_start
        self._period_end = period_end
        self._created = created
        self._changed_by = changed_by
        self._updated = updated
        self._id = id
        self._invoice_id = invoice_id
        self._unit_of_measure_id = unit_of_measure_id
        self._subscription_id = subscription_id
        self._product_rate_plan_id = product_rate_plan_id
        self._public_product_rate_plan_name = public_product_rate_plan_name
        self._product_rate_plan_name = product_rate_plan_name
        self._product_id = product_id
        self._public_product_name = public_product_name
        self._product_name = product_name
        self._organization_id = organization_id
        self._name = name
        self._description = description
        self._calculation = calculation
        self._cost = cost
        self._tax = tax
        self._component_value = component_value
        self._pricing_component_id = pricing_component_id
        self._public_pricing_component_name = public_pricing_component_name
        self._pricing_component_name = pricing_component_name
        self._subscription_charge_id = subscription_charge_id
        self._child_invoice_id = child_invoice_id
        self._type = type

    @property
    def unit_of_measure(self):
        """
        Gets the unit_of_measure of this InvoiceLine.
        { \"description\" : \"The unit-of-measure associated with the invoice-line.\", \"verbs\":[\"POST\",\"PUT\",\"GET\"] }

        :return: The unit_of_measure of this InvoiceLine.
        :rtype: UnitOfMeasure
        """
        return self._unit_of_measure

    @unit_of_measure.setter
    def unit_of_measure(self, unit_of_measure):
        """
        Sets the unit_of_measure of this InvoiceLine.
        { \"description\" : \"The unit-of-measure associated with the invoice-line.\", \"verbs\":[\"POST\",\"PUT\",\"GET\"] }

        :param unit_of_measure: The unit_of_measure of this InvoiceLine.
        :type: UnitOfMeasure
        """

        self._unit_of_measure = unit_of_measure

    @property
    def pricing_component_type(self):
        """
        Gets the pricing_component_type of this InvoiceLine.
        { \"description\" : \"The type of the pricing component associated with the invoice line.\", \"verbs\":[\"POST\",\"PUT\",\"GET\"] }

        :return: The pricing_component_type of this InvoiceLine.
        :rtype: str
        """
        return self._pricing_component_type

    @pricing_component_type.setter
    def pricing_component_type(self, pricing_component_type):
        """
        Sets the pricing_component_type of this InvoiceLine.
        { \"description\" : \"The type of the pricing component associated with the invoice line.\", \"verbs\":[\"POST\",\"PUT\",\"GET\"] }

        :param pricing_component_type: The pricing_component_type of this InvoiceLine.
        :type: str
        """
        allowed_values = ["setup", "subscription", "arrears", "usage"]
        if pricing_component_type not in allowed_values:
            raise ValueError(
                "Invalid value for `pricing_component_type` ({0}), must be one of {1}"
                .format(pricing_component_type, allowed_values)
            )

        self._pricing_component_type = pricing_component_type

    @property
    def charge_type(self):
        """
        Gets the charge_type of this InvoiceLine.
        { \"description\" : \"charge-type.\", \"verbs\":[\"POST\",\"PUT\",\"GET\"] }

        :return: The charge_type of this InvoiceLine.
        :rtype: str
        """
        return self._charge_type

    @charge_type.setter
    def charge_type(self, charge_type):
        """
        Sets the charge_type of this InvoiceLine.
        { \"description\" : \"charge-type.\", \"verbs\":[\"POST\",\"PUT\",\"GET\"] }

        :param charge_type: The charge_type of this InvoiceLine.
        :type: str
        """
        allowed_values = ["Credit", "Debit"]
        if charge_type not in allowed_values:
            raise ValueError(
                "Invalid value for `charge_type` ({0}), must be one of {1}"
                .format(charge_type, allowed_values)
            )

        self._charge_type = charge_type

    @property
    def period_start(self):
        """
        Gets the period_start of this InvoiceLine.
        The period start of the charge.

        :return: The period_start of this InvoiceLine.
        :rtype: datetime
        """
        return self._period_start

    @period_start.setter
    def period_start(self, period_start):
        """
        Sets the period_start of this InvoiceLine.
        The period start of the charge.

        :param period_start: The period_start of this InvoiceLine.
        :type: datetime
        """

        self._period_start = period_start

    @property
    def period_end(self):
        """
        Gets the period_end of this InvoiceLine.
        The period end of the charge.

        :return: The period_end of this InvoiceLine.
        :rtype: datetime
        """
        return self._period_end

    @period_end.setter
    def period_end(self, period_end):
        """
        Sets the period_end of this InvoiceLine.
        The period end of the charge.

        :param period_end: The period_end of this InvoiceLine.
        :type: datetime
        """

        self._period_end = period_end

    @property
    def created(self):
        """
        Gets the created of this InvoiceLine.
        { \"description\" : \"The UTC DateTime when the object was created.\", \"verbs\":[] }

        :return: The created of this InvoiceLine.
        :rtype: datetime
        """
        return self._created

    @created.setter
    def created(self, created):
        """
        Sets the created of this InvoiceLine.
        { \"description\" : \"The UTC DateTime when the object was created.\", \"verbs\":[] }

        :param created: The created of this InvoiceLine.
        :type: datetime
        """

        self._created = created

    @property
    def changed_by(self):
        """
        Gets the changed_by of this InvoiceLine.
        { \"description\" : \"ID of the user who last updated the entity.\", \"verbs\":[] }

        :return: The changed_by of this InvoiceLine.
        :rtype: str
        """
        return self._changed_by

    @changed_by.setter
    def changed_by(self, changed_by):
        """
        Sets the changed_by of this InvoiceLine.
        { \"description\" : \"ID of the user who last updated the entity.\", \"verbs\":[] }

        :param changed_by: The changed_by of this InvoiceLine.
        :type: str
        """

        self._changed_by = changed_by

    @property
    def updated(self):
        """
        Gets the updated of this InvoiceLine.
        { \"description\" : \"The UTC DateTime when the object was last updated.\", \"verbs\":[] }

        :return: The updated of this InvoiceLine.
        :rtype: datetime
        """
        return self._updated

    @updated.setter
    def updated(self, updated):
        """
        Sets the updated of this InvoiceLine.
        { \"description\" : \"The UTC DateTime when the object was last updated.\", \"verbs\":[] }

        :param updated: The updated of this InvoiceLine.
        :type: datetime
        """

        self._updated = updated

    @property
    def id(self):
        """
        Gets the id of this InvoiceLine.
        { \"description\" : \"ID of the invoice-line.\", \"verbs\":[\"POST\",\"PUT\",\"GET\"] }

        :return: The id of this InvoiceLine.
        :rtype: str
        """
        return self._id

    @id.setter
    def id(self, id):
        """
        Sets the id of this InvoiceLine.
        { \"description\" : \"ID of the invoice-line.\", \"verbs\":[\"POST\",\"PUT\",\"GET\"] }

        :param id: The id of this InvoiceLine.
        :type: str
        """

        self._id = id

    @property
    def invoice_id(self):
        """
        Gets the invoice_id of this InvoiceLine.
        { \"description\" : \"invoice associated with the invoice-line.\", \"verbs\":[\"POST\",\"PUT\",\"GET\"] }

        :return: The invoice_id of this InvoiceLine.
        :rtype: str
        """
        return self._invoice_id

    @invoice_id.setter
    def invoice_id(self, invoice_id):
        """
        Sets the invoice_id of this InvoiceLine.
        { \"description\" : \"invoice associated with the invoice-line.\", \"verbs\":[\"POST\",\"PUT\",\"GET\"] }

        :param invoice_id: The invoice_id of this InvoiceLine.
        :type: str
        """

        self._invoice_id = invoice_id

    @property
    def unit_of_measure_id(self):
        """
        Gets the unit_of_measure_id of this InvoiceLine.
        { \"description\" : \"unit-of-measure associated with the invoice-line.\", \"verbs\":[\"POST\",\"PUT\",\"GET\"] }

        :return: The unit_of_measure_id of this InvoiceLine.
        :rtype: str
        """
        return self._unit_of_measure_id

    @unit_of_measure_id.setter
    def unit_of_measure_id(self, unit_of_measure_id):
        """
        Sets the unit_of_measure_id of this InvoiceLine.
        { \"description\" : \"unit-of-measure associated with the invoice-line.\", \"verbs\":[\"POST\",\"PUT\",\"GET\"] }

        :param unit_of_measure_id: The unit_of_measure_id of this InvoiceLine.
        :type: str
        """

        self._unit_of_measure_id = unit_of_measure_id

    @property
    def subscription_id(self):
        """
        Gets the subscription_id of this InvoiceLine.
        { \"description\" : \"the subscription ID associated with the invoice-line.\", \"verbs\":[\"POST\",\"PUT\",\"GET\"] }

        :return: The subscription_id of this InvoiceLine.
        :rtype: str
        """
        return self._subscription_id

    @subscription_id.setter
    def subscription_id(self, subscription_id):
        """
        Sets the subscription_id of this InvoiceLine.
        { \"description\" : \"the subscription ID associated with the invoice-line.\", \"verbs\":[\"POST\",\"PUT\",\"GET\"] }

        :param subscription_id: The subscription_id of this InvoiceLine.
        :type: str
        """

        self._subscription_id = subscription_id

    @property
    def product_rate_plan_id(self):
        """
        Gets the product_rate_plan_id of this InvoiceLine.
        { \"description\" : \"the product rate plan ID associated with the invoice-line.\", \"verbs\":[\"POST\",\"PUT\",\"GET\"] }

        :return: The product_rate_plan_id of this InvoiceLine.
        :rtype: str
        """
        return self._product_rate_plan_id

    @product_rate_plan_id.setter
    def product_rate_plan_id(self, product_rate_plan_id):
        """
        Sets the product_rate_plan_id of this InvoiceLine.
        { \"description\" : \"the product rate plan ID associated with the invoice-line.\", \"verbs\":[\"POST\",\"PUT\",\"GET\"] }

        :param product_rate_plan_id: The product_rate_plan_id of this InvoiceLine.
        :type: str
        """

        self._product_rate_plan_id = product_rate_plan_id

    @property
    def public_product_rate_plan_name(self):
        """
        Gets the public_product_rate_plan_name of this InvoiceLine.
        { \"description\" : \"the public product rate plan name associated with the invoice-line.\", \"verbs\":[\"POST\",\"PUT\",\"GET\"] }

        :return: The public_product_rate_plan_name of this InvoiceLine.
        :rtype: str
        """
        return self._public_product_rate_plan_name

    @public_product_rate_plan_name.setter
    def public_product_rate_plan_name(self, public_product_rate_plan_name):
        """
        Sets the public_product_rate_plan_name of this InvoiceLine.
        { \"description\" : \"the public product rate plan name associated with the invoice-line.\", \"verbs\":[\"POST\",\"PUT\",\"GET\"] }

        :param public_product_rate_plan_name: The public_product_rate_plan_name of this InvoiceLine.
        :type: str
        """

        self._public_product_rate_plan_name = public_product_rate_plan_name

    @property
    def product_rate_plan_name(self):
        """
        Gets the product_rate_plan_name of this InvoiceLine.
        { \"description\" : \"the product rate plan name associated with the invoice-line.\", \"verbs\":[\"POST\",\"PUT\",\"GET\"] }

        :return: The product_rate_plan_name of this InvoiceLine.
        :rtype: str
        """
        return self._product_rate_plan_name

    @product_rate_plan_name.setter
    def product_rate_plan_name(self, product_rate_plan_name):
        """
        Sets the product_rate_plan_name of this InvoiceLine.
        { \"description\" : \"the product rate plan name associated with the invoice-line.\", \"verbs\":[\"POST\",\"PUT\",\"GET\"] }

        :param product_rate_plan_name: The product_rate_plan_name of this InvoiceLine.
        :type: str
        """

        self._product_rate_plan_name = product_rate_plan_name

    @property
    def product_id(self):
        """
        Gets the product_id of this InvoiceLine.
        { \"description\" : \"the product ID associated with the invoice-line.\", \"verbs\":[\"POST\",\"PUT\",\"GET\"] }

        :return: The product_id of this InvoiceLine.
        :rtype: str
        """
        return self._product_id

    @product_id.setter
    def product_id(self, product_id):
        """
        Sets the product_id of this InvoiceLine.
        { \"description\" : \"the product ID associated with the invoice-line.\", \"verbs\":[\"POST\",\"PUT\",\"GET\"] }

        :param product_id: The product_id of this InvoiceLine.
        :type: str
        """

        self._product_id = product_id

    @property
    def public_product_name(self):
        """
        Gets the public_product_name of this InvoiceLine.
        { \"description\" : \"the public product name associated with the invoice-line.\", \"verbs\":[\"POST\",\"PUT\",\"GET\"] }

        :return: The public_product_name of this InvoiceLine.
        :rtype: str
        """
        return self._public_product_name

    @public_product_name.setter
    def public_product_name(self, public_product_name):
        """
        Sets the public_product_name of this InvoiceLine.
        { \"description\" : \"the public product name associated with the invoice-line.\", \"verbs\":[\"POST\",\"PUT\",\"GET\"] }

        :param public_product_name: The public_product_name of this InvoiceLine.
        :type: str
        """

        self._public_product_name = public_product_name

    @property
    def product_name(self):
        """
        Gets the product_name of this InvoiceLine.
        { \"description\" : \"the product name associated with the invoice-line.\", \"verbs\":[\"POST\",\"PUT\",\"GET\"] }

        :return: The product_name of this InvoiceLine.
        :rtype: str
        """
        return self._product_name

    @product_name.setter
    def product_name(self, product_name):
        """
        Sets the product_name of this InvoiceLine.
        { \"description\" : \"the product name associated with the invoice-line.\", \"verbs\":[\"POST\",\"PUT\",\"GET\"] }

        :param product_name: The product_name of this InvoiceLine.
        :type: str
        """

        self._product_name = product_name

    @property
    def organization_id(self):
        """
        Gets the organization_id of this InvoiceLine.
        { \"description\" : \"ID of the organization associated with the invoice-line.\", \"verbs\":[\"POST\",\"PUT\",\"GET\"] }

        :return: The organization_id of this InvoiceLine.
        :rtype: str
        """
        return self._organization_id

    @organization_id.setter
    def organization_id(self, organization_id):
        """
        Sets the organization_id of this InvoiceLine.
        { \"description\" : \"ID of the organization associated with the invoice-line.\", \"verbs\":[\"POST\",\"PUT\",\"GET\"] }

        :param organization_id: The organization_id of this InvoiceLine.
        :type: str
        """

        self._organization_id = organization_id

    @property
    def name(self):
        """
        Gets the name of this InvoiceLine.
        { \"description\" : \"The human readable name of the invoice-line.\", \"verbs\":[\"POST\",\"PUT\",\"GET\"] }

        :return: The name of this InvoiceLine.
        :rtype: str
        """
        return self._name

    @name.setter
    def name(self, name):
        """
        Sets the name of this InvoiceLine.
        { \"description\" : \"The human readable name of the invoice-line.\", \"verbs\":[\"POST\",\"PUT\",\"GET\"] }

        :param name: The name of this InvoiceLine.
        :type: str
        """

        self._name = name

    @property
    def description(self):
        """
        Gets the description of this InvoiceLine.
        { \"description\" : \"The human readable description of the invoice-line.\", \"verbs\":[\"POST\",\"PUT\",\"GET\"] }

        :return: The description of this InvoiceLine.
        :rtype: str
        """
        return self._description

    @description.setter
    def description(self, description):
        """
        Sets the description of this InvoiceLine.
        { \"description\" : \"The human readable description of the invoice-line.\", \"verbs\":[\"POST\",\"PUT\",\"GET\"] }

        :param description: The description of this InvoiceLine.
        :type: str
        """

        self._description = description

    @property
    def calculation(self):
        """
        Gets the calculation of this InvoiceLine.
        { \"description\" : \"A human readable explanation of how the value of the invoice-line was calculated.\", \"verbs\":[\"POST\",\"PUT\",\"GET\"] }

        :return: The calculation of this InvoiceLine.
        :rtype: str
        """
        return self._calculation

    @calculation.setter
    def calculation(self, calculation):
        """
        Sets the calculation of this InvoiceLine.
        { \"description\" : \"A human readable explanation of how the value of the invoice-line was calculated.\", \"verbs\":[\"POST\",\"PUT\",\"GET\"] }

        :param calculation: The calculation of this InvoiceLine.
        :type: str
        """

        self._calculation = calculation

    @property
    def cost(self):
        """
        Gets the cost of this InvoiceLine.
        { \"description\" : \"The cost of the invoice-line including tax.\", \"verbs\":[\"POST\",\"PUT\",\"GET\"] }

        :return: The cost of this InvoiceLine.
        :rtype: float
        """
        return self._cost

    @cost.setter
    def cost(self, cost):
        """
        Sets the cost of this InvoiceLine.
        { \"description\" : \"The cost of the invoice-line including tax.\", \"verbs\":[\"POST\",\"PUT\",\"GET\"] }

        :param cost: The cost of this InvoiceLine.
        :type: float
        """

        self._cost = cost

    @property
    def tax(self):
        """
        Gets the tax of this InvoiceLine.
        { \"description\" : \"The cumulative tax of the invoice-line.\", \"verbs\":[\"POST\",\"PUT\",\"GET\"] }

        :return: The tax of this InvoiceLine.
        :rtype: float
        """
        return self._tax

    @tax.setter
    def tax(self, tax):
        """
        Sets the tax of this InvoiceLine.
        { \"description\" : \"The cumulative tax of the invoice-line.\", \"verbs\":[\"POST\",\"PUT\",\"GET\"] }

        :param tax: The tax of this InvoiceLine.
        :type: float
        """

        self._tax = tax

    @property
    def component_value(self):
        """
        Gets the component_value of this InvoiceLine.
        { \"description\" : \"The component value for the unit-of-measure that is associated with the invoice-line.\", \"verbs\":[\"POST\",\"PUT\",\"GET\"] }

        :return: The component_value of this InvoiceLine.
        :rtype: int
        """
        return self._component_value

    @component_value.setter
    def component_value(self, component_value):
        """
        Sets the component_value of this InvoiceLine.
        { \"description\" : \"The component value for the unit-of-measure that is associated with the invoice-line.\", \"verbs\":[\"POST\",\"PUT\",\"GET\"] }

        :param component_value: The component_value of this InvoiceLine.
        :type: int
        """

        self._component_value = component_value

    @property
    def pricing_component_id(self):
        """
        Gets the pricing_component_id of this InvoiceLine.
        The ID of the pricing-component that is associated with the invoice-line.

        :return: The pricing_component_id of this InvoiceLine.
        :rtype: str
        """
        return self._pricing_component_id

    @pricing_component_id.setter
    def pricing_component_id(self, pricing_component_id):
        """
        Sets the pricing_component_id of this InvoiceLine.
        The ID of the pricing-component that is associated with the invoice-line.

        :param pricing_component_id: The pricing_component_id of this InvoiceLine.
        :type: str
        """

        self._pricing_component_id = pricing_component_id

    @property
    def public_pricing_component_name(self):
        """
        Gets the public_pricing_component_name of this InvoiceLine.
        The public name of the pricing-component that is associated with the invoice-line.

        :return: The public_pricing_component_name of this InvoiceLine.
        :rtype: str
        """
        return self._public_pricing_component_name

    @public_pricing_component_name.setter
    def public_pricing_component_name(self, public_pricing_component_name):
        """
        Sets the public_pricing_component_name of this InvoiceLine.
        The public name of the pricing-component that is associated with the invoice-line.

        :param public_pricing_component_name: The public_pricing_component_name of this InvoiceLine.
        :type: str
        """

        self._public_pricing_component_name = public_pricing_component_name

    @property
    def pricing_component_name(self):
        """
        Gets the pricing_component_name of this InvoiceLine.
        The name of the pricing-component that is associated with the invoice-line.

        :return: The pricing_component_name of this InvoiceLine.
        :rtype: str
        """
        return self._pricing_component_name

    @pricing_component_name.setter
    def pricing_component_name(self, pricing_component_name):
        """
        Sets the pricing_component_name of this InvoiceLine.
        The name of the pricing-component that is associated with the invoice-line.

        :param pricing_component_name: The pricing_component_name of this InvoiceLine.
        :type: str
        """

        self._pricing_component_name = pricing_component_name

    @property
    def subscription_charge_id(self):
        """
        Gets the subscription_charge_id of this InvoiceLine.
        The ID of the subscription-charge that is associated with the invoice-line.

        :return: The subscription_charge_id of this InvoiceLine.
        :rtype: str
        """
        return self._subscription_charge_id

    @subscription_charge_id.setter
    def subscription_charge_id(self, subscription_charge_id):
        """
        Sets the subscription_charge_id of this InvoiceLine.
        The ID of the subscription-charge that is associated with the invoice-line.

        :param subscription_charge_id: The subscription_charge_id of this InvoiceLine.
        :type: str
        """

        self._subscription_charge_id = subscription_charge_id

    @property
    def child_invoice_id(self):
        """
        Gets the child_invoice_id of this InvoiceLine.
        The ID of the invoice that is associated with the invoice-line.

        :return: The child_invoice_id of this InvoiceLine.
        :rtype: str
        """
        return self._child_invoice_id

    @child_invoice_id.setter
    def child_invoice_id(self, child_invoice_id):
        """
        Sets the child_invoice_id of this InvoiceLine.
        The ID of the invoice that is associated with the invoice-line.

        :param child_invoice_id: The child_invoice_id of this InvoiceLine.
        :type: str
        """

        self._child_invoice_id = child_invoice_id

    @property
    def type(self):
        """
        Gets the type of this InvoiceLine.
        The type of the invoice-line.

        :return: The type of this InvoiceLine.
        :rtype: str
        """
        return self._type

    @type.setter
    def type(self, type):
        """
        Sets the type of this InvoiceLine.
        The type of the invoice-line.

        :param type: The type of this InvoiceLine.
        :type: str
        """
        allowed_values = ["PricingComponent", "Coupon", "Migration", "AggregatedInvoice"]
        if type not in allowed_values:
            raise ValueError(
                "Invalid value for `type` ({0}), must be one of {1}"
                .format(type, allowed_values)
            )

        self._type = type

    def to_dict(self):
        """
        Returns the model properties as a dict
        """
        result = {}

        for attr, _ in iteritems(self.swagger_types):
            value = getattr(self, attr)
            if isinstance(value, list):
                result[attr] = list(map(
                    lambda x: x.to_dict() if hasattr(x, "to_dict") else x,
                    value
                ))
            elif hasattr(value, "to_dict"):
                result[attr] = value.to_dict()
            elif isinstance(value, dict):
                result[attr] = dict(map(
                    lambda item: (item[0], item[1].to_dict())
                    if hasattr(item[1], "to_dict") else item,
                    value.items()
                ))
            else:
                result[attr] = value

        return result

    def to_str(self):
        """
        Returns the string representation of the model
        """
        return pformat(self.to_dict())

    def __repr__(self):
        """
        For `print` and `pprint`
        """
        return self.to_str()

    def __eq__(self, other):
        """
        Returns true if both objects are equal
        """
        return self.__dict__ == other.__dict__

    def __ne__(self, other):
        """
        Returns true if both objects are not equal
        """
        return not self == other
