<?php
namespace QuickBooksOnline\API\Data;

/**
 * @xmlNamespace http://schema.intuit.com/finance/v3
 * @xmlType
 * @xmlName IPPLine
 * @var IPPLine
 * @xmlDefinition
                Product: ALL
                Description: A line item of a transaction.

 */
class IPPLine
{

        /**
        * Initializes this object, optionally with pre-defined property values
        *
        * Initializes this object and it's property members, using the dictionary
        * of key/value pairs passed as an optional argument.
        *
        * @param dictionary $keyValInitializers key/value pairs to be populated into object's properties
        * @param boolean $verbose specifies whether object should echo warnings
        */
        public function __construct($keyValInitializers=array(), $verbose=false)
        {
            foreach ($keyValInitializers as $initPropName => $initPropVal) {
                if (property_exists('IPPLine', $initPropName)|| property_exists('QuickBooksOnline\API\Data\IPPLine', $initPropName)) {
                    $this->{$initPropName} = $initPropVal;
                } else {
                    if ($verbose) {
                        echo "Property does not exist ($initPropName) in class (".get_class($this).")";
                    }
                }
            }
        }


    /**
     * @Definition
                        Product: QBW
                        Description: ID of the Line Item.
                        Product: QBO
                        Description: ID of the Line Item.[br /]QBO considers a request as an update operation for a line item, if you provide an ID that is greater than zero and the ID exists in QBO.[br /]QBO considers a request as an create operation for a line item in any of the following conditions: No ID provided, ID provided is less than or equal to zero, ID provided is greater than zero and does not exist in QuickBooks.[br /]Required for updating existing lines.[br /]Not supported for BillPayment, Estimate, Invoice, or Payment.
                        Required: QBO

     * @xmlType element
     * @xmlNamespace http://schema.intuit.com/finance/v3
     * @xmlMinOccurs 0
     * @xmlName Id
     * @var com\intuit\schema\finance\v3\IPPid
     */
    public $Id;
    /**
     * @Definition
                        Product: QBW
                        Description: Specifies the position of the line in the collection of transaction lines. Supported only for QuickBooks Windows desktop.

     * @xmlType element
     * @xmlNamespace http://schema.intuit.com/finance/v3
     * @xmlMinOccurs 0
     * @xmlName LineNum
     * @var integer
     */
    public $LineNum;
    /**
     * @Definition
                        Product: QBO
                        Description: Free form text description of the line item that appears in the printed record.[br /]Max. length: 4000 characters.[br /]Not supported for BillPayment or Payment.
                        Product: QBW
                        Description: Free form text description of the line item that appears in the printed record. Max. length: 4000 characters.

     * @xmlType element
     * @xmlNamespace http://schema.intuit.com/finance/v3
     * @xmlMinOccurs 0
     * @xmlName Description
     * @var string
     */
    public $Description;
    /**
     * @Definition
                        Product: QBW
                        Description: The amount of the line, which depends on the type of the line. It can represent the discount amount, charge amount, tax amount, or subtotal amount based on the line type detail.
                        Product: QBO
                        Description: The amount of the line depending on the type of the line. It can represent the discount amount, charge amount, tax amount, or subtotal amount based on the line type detail.[br /]Required for BillPayment, Check, Estimate, Invoice, JournalEntry, Payment, SalesReceipt.
                        Required: QBO

     * @xmlType element
     * @xmlNamespace http://schema.intuit.com/finance/v3
     * @xmlMinOccurs 0
     * @xmlName Amount
     * @var float
     */
    public $Amount;
    /**
     * @Definition
                        Product: ALL
                        Description: A link between this line and a specific transaction.  For example, an invoice line may link to an estimate.

     * @xmlType element
     * @xmlNamespace http://schema.intuit.com/finance/v3
     * @xmlMinOccurs 0
     * @xmlMaxOccurs unbounded
     * @xmlName LinkedTxn
     * @var com\intuit\schema\finance\v3\IPPLinkedTxn
     */
    public $LinkedTxn;
    /**
     * @Definition
                        Product: ALL
                        Description: The type of line in the transaction.[br /]
                        Required: ALL

     * @xmlType element
     * @xmlNamespace http://schema.intuit.com/finance/v3
     * @xmlMinOccurs 0
     * @xmlMaxOccurs 1
     * @xmlName DetailType
     * @var com\intuit\schema\finance\v3\IPPLineDetailTypeEnum
     */
    public $DetailType;
    /**
     * @Definition
                            Product: ALL
                            Description: PaymentDetail type for the transaction.

     * @xmlType element
     * @xmlNamespace http://schema.intuit.com/finance/v3
     * @xmlName PaymentLineDetail
     * @var com\intuit\schema\finance\v3\IPPPaymentLineDetail
     */
    public $PaymentLineDetail;
    /**
     * @Definition
                            Product: ALL
                            Description: DiscountDetail type for the transaction.

     * @xmlType element
     * @xmlNamespace http://schema.intuit.com/finance/v3
     * @xmlName DiscountLineDetail
     * @var com\intuit\schema\finance\v3\IPPDiscountLineDetail
     */
    public $DiscountLineDetail;
    /**
     * @Definition
                            Product: ALL
                            Description: SalesTaxDetail type for the transaction.

     * @xmlType element
     * @xmlNamespace http://schema.intuit.com/finance/v3
     * @xmlName TaxLineDetail
     * @var com\intuit\schema\finance\v3\IPPTaxLineDetail
     */
    public $TaxLineDetail;
    /**
     * @Definition
                            Product: ALL
                            Description: SalesItem type for the transaction.

     * @xmlType element
     * @xmlNamespace http://schema.intuit.com/finance/v3
     * @xmlName SalesItemLineDetail
     * @var com\intuit\schema\finance\v3\IPPSalesItemLineDetail
     */
    public $SalesItemLineDetail;
    /**
     * @Definition
                            Product: QBW
                            Description: Custom field (or data extension). Supported only for QuickBooks Windows desktop.

     * @xmlType element
     * @xmlNamespace http://schema.intuit.com/finance/v3
     * @xmlName DescriptionLineDetail
     * @var com\intuit\schema\finance\v3\IPPDescriptionLineDetail
     */
    public $DescriptionLineDetail;
    /**
     * @Definition
                            Product: ALL
                            Description: ExpenseItem type for the transaction.

     * @xmlType element
     * @xmlNamespace http://schema.intuit.com/finance/v3
     * @xmlName ItemBasedExpenseLineDetail
     * @var com\intuit\schema\finance\v3\IPPItemBasedExpenseLineDetail
     */
    public $ItemBasedExpenseLineDetail;
    /**
     * @Definition
                            Product: ALL
                            Description: AccountExpense type for the transaction.

     * @xmlType element
     * @xmlNamespace http://schema.intuit.com/finance/v3
     * @xmlName AccountBasedExpenseLineDetail
     * @var com\intuit\schema\finance\v3\IPPAccountBasedExpenseLineDetail
     */
    public $AccountBasedExpenseLineDetail;
    /**
     * @Definition
                            Product: ALL
                            Description: Deposit type for the transaction.

     * @xmlType element
     * @xmlNamespace http://schema.intuit.com/finance/v3
     * @xmlName DepositLineDetail
     * @var com\intuit\schema\finance\v3\IPPDepositLineDetail
     */
    public $DepositLineDetail;
    /**
     * @Definition
                            Product: ALL
                            Description: PurchaseOrderItem type for the transaction.

     * @xmlType element
     * @xmlNamespace http://schema.intuit.com/finance/v3
     * @xmlName PurchaseOrderItemLineDetail
     * @var com\intuit\schema\finance\v3\IPPPurchaseOrderItemLineDetail
     */
    public $PurchaseOrderItemLineDetail;
    /**
     * @Definition
                            Product: ALL
                            Description: SalesOrderItem type for the transaction.

     * @xmlType element
     * @xmlNamespace http://schema.intuit.com/finance/v3
     * @xmlName SalesOrderItemLineDetail
     * @var com\intuit\schema\finance\v3\IPPSalesOrderItemLineDetail
     */
    public $SalesOrderItemLineDetail;
    /**
     * @Definition
                            Product: ALL
                            Description: ItemReceipt type for the transaction.

     * @xmlType element
     * @xmlNamespace http://schema.intuit.com/finance/v3
     * @xmlName ItemReceiptLineDetail
     * @var com\intuit\schema\finance\v3\IPPItemReceiptLineDetail
     */
    public $ItemReceiptLineDetail;
    /**
     * @Definition
                            Product: ALL
                            Description: JournalEntry type for the transaction.

     * @xmlType element
     * @xmlNamespace http://schema.intuit.com/finance/v3
     * @xmlName JournalEntryLineDetail
     * @var com\intuit\schema\finance\v3\IPPJournalEntryLineDetail
     */
    public $JournalEntryLineDetail;
    /**
     * @Definition
                            Product: ALL
                            Description: GroupLine type for the transaction.

     * @xmlType element
     * @xmlNamespace http://schema.intuit.com/finance/v3
     * @xmlName GroupLineDetail
     * @var com\intuit\schema\finance\v3\IPPGroupLineDetail
     */
    public $GroupLineDetail;
    /**
     * @Definition
                            Product: ALL
                            Description: SubTotalLine type for the transaction.

     * @xmlType element
     * @xmlNamespace http://schema.intuit.com/finance/v3
     * @xmlName SubTotalLineDetail
     * @var com\intuit\schema\finance\v3\IPPSubTotalLineDetail
     */
    public $SubTotalLineDetail;
    /**
     * @Definition
                            Product: QBO
                            Description: TDS line type for the transaction.

     * @xmlType element
     * @xmlNamespace http://schema.intuit.com/finance/v3
     * @xmlName TDSLineDetail
     * @var com\intuit\schema\finance\v3\IPPTDSLineDetail
     */
    public $TDSLineDetail;
    /**
     * @Definition
                        Product: QBW
                        Description: Custom field (or data extension). Supported only for QuickBooks Windows desktop.

     * @xmlType element
     * @xmlNamespace http://schema.intuit.com/finance/v3
     * @xmlMinOccurs 0
     * @xmlMaxOccurs unbounded
     * @xmlName CustomField
     * @var com\intuit\schema\finance\v3\IPPCustomField
     */
    public $CustomField;
    /**
     * @Definition
                        Product: ALL
                        Description: Internal use only: extension place holder for LineBase

     * @xmlType element
     * @xmlNamespace http://schema.intuit.com/finance/v3
     * @xmlMinOccurs 0
     * @xmlName LineEx
     * @var com\intuit\schema\finance\v3\IPPIntuitAnyType
     */
    public $LineEx;
} // end class IPPLine
