<?php
namespace QuickBooksOnline\API\Data;

/**
 * @xmlNamespace http://schema.intuit.com/finance/v3
 * @xmlType IntuitEntity
 * @xmlName IPPItem
 * @var IPPItem
 * @xmlDefinition 
				Product: QBO
				Description: The Item resource
				represents any product or service that is sold or purchased.
				Inventory items are not currently supported.
				Product: QBW
				Description: An item is a thing that your company buys, sells,
				or re-sells, such as products, shipping and handling charges,
				discounts, and sales tax (if applicable). An item is shown as a line
				on an invoice or other sales form. The Item.Type property, which
				specifies how the item is used, may have one of the following
				values: [li]Assembly: The Assembly item allows you combine inventory
				part items and other assembly items (subassemblies) into a single
				item by defining a Bill of Materials, that lists the component parts
				of the assembly item. You can also include the cost of building the
				assembly item by adding the non-inventory part items, service items,
				and other charge items to the Bill of Materials. [/li][li] Fixed
				Asset: The Fixed Asset item represents those business assets that
				you do not convert to cash one year of normal operation. A fixed
				asset is usually something that is integral to your business
				operations. For example, a truck or computer. [/li][li]Group: The
				Group item helps you to quickly enter a group of individual items
				that you often purchase or sell together. [li]Inventory: The
				Inventory item is used to track merchandise which your business
				purchases, stocks as inventory, and re-sells. QuickBooks tracks the
				current number of inventory items in stock and the average value of
				the inventory after the purchase and sale of every item.
				[/li][li]Other Charge: The Other Charge item is used to charge
				customers for the mileage expense.[/li] [li]Product The Product item
				is used to record the sales information of a product.
				[/li][li]Payment: The Payment item subtracts the amount of a
				customer payment from the total amount of an invoice or statement.
				You must create a payment item if you receive payment for an invoice
				or statement in parts. If you receive full payment at the time of
				sale, use a sales receipt form instead of an invoice with a payment
				item.[/li] [li]Service: The Service item is used for the services
				that you charge on the purchase. For example, including specialized
				labor, consulting hours, and professional fees. [/li][li]Subtotal:
				The Subtotal item is used when you want the total of all the items.
				You can use this item to apply a percentage discount or
				surcharge.[/li]
				Business Rules: [li]The item name must be unique.
				[/li][li]The item type must not be NULL. [/li][li]The item cannot
				define both unit price and unit price percent simultaneously.
				[/li][li]For the Service, Product, and Other Charge items, you must
				specify the ID or name of the expense account or both. [/li][li]If
				the purchase order cost is specified for the Service, Product, and
				Other Charge items, you must specify the ID or name of the expense
				account or both.[/li] For the Inventory and Assembly items, you must
				specify: [li]the ID or name of the income account or both
				[/li][li]the ID or name of the cogs account or both [/li][li]the ID
				or name of the asset account or both [/li][li]For the Group item,
				you must specify the tax ID or tax name or both.[/li] For the Fixed
				Asset item, you must: [li]set the asset account type to Asset[/li]
				[li]specify the purchase date [/li][li]specify the ID or name of the
				income account or both[/li]
			
 */
class IPPItem
	extends IPPIntuitEntity	{

		/**                                                                       
		* 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 array $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)
		{
			parent::__construct($keyValInitializers, $verbose);
			
			foreach($keyValInitializers as $initPropName => $initPropVal)
			{
				if (property_exists('IPPItem',$initPropName) || property_exists('QuickBooksOnline\API\Data\IPPItem',$initPropName))
				{
					$this->{$initPropName} = $initPropVal;
				}
				else
				{
					if ($verbose)
						echo "Property does not exist ($initPropName) in class (".get_class($this).")";
				}
			}
		}

	
	/**
	 * @Definition 
								Product: QBW
								Description: User recognizable name
								for the Item.[br /]Max. length: 31 characters.
								Product: QBO
								Description: User recognizable name for the Item.[br /]Max.
								length: 100 characters.
								Filterable: ALL
								Sortable: ALL
								Required: QBW
							
	 * @xmlType element
	 * @xmlNamespace 
	 * @xmlMinOccurs 0
	 * @xmlName Name
	 * @var string
	 */
	public $Name;
	/**
	 * @Definition 
								Product: QBO
								Description: Stock Keeping Unit -
								User entered item identifier that identifies an item uniquely
								[br /]Max. length: 100 characters.
								Filterable: ALL
								Sortable: ALL
							
	 * @xmlType element
	 * @xmlNamespace 
	 * @xmlMinOccurs 0
	 * @xmlName Sku
	 * @var string
	 */
	public $Sku;
	/**
	 * @Definition 
								Product: QBW
								Description: User entered
								description for the item that describes the details of the
								service or product.[br /]Max. length: 4000 characters.
								Product:
								QBO
								Description: User entered description for the item that
								describes the details of the service or product.[br /]Max.
								length: 4000 characters.
								Filterable: QBO
								Sortable: QBO
							
	 * @xmlType element
	 * @xmlNamespace 
	 * @xmlMinOccurs 0
	 * @xmlName Description
	 * @var string
	 */
	public $Description;
	/**
	 * @Definition 
								Product: QBW
								Description: True if active.
								Inactive items may be hidden from display and may not be used in
								financial transactions.
								Filterable: QBW
							
	 * @xmlType element
	 * @xmlNamespace 
	 * @xmlMinOccurs 0
	 * @xmlName Active
	 * @var boolean
	 */
	public $Active;
	/**
	 * @Definition 
								Product: ALL
								Description: True if the item is a
								subitem; false or null indicates a top-level item.
							
	 * @xmlType element
	 * @xmlNamespace 
	 * @xmlMinOccurs 0
	 * @xmlName SubItem
	 * @var boolean
	 */
	public $SubItem;
	/**
	 * @Definition 
								Product: ALL
								Description: Reference to the
								item's parent entity.
							
	 * @xmlType element
	 * @xmlNamespace 
	 * @xmlMinOccurs 0
	 * @xmlName ParentRef
	 * @var IPPReferenceType
	 */
	public $ParentRef;
	/**
	 * @Definition 
								Product: ALL
								Description: Specifies the level of
								the item, 0 if top level parent, otherwise specifies the depth
								from the top parent.
							
	 * @xmlType element
	 * @xmlNamespace 
	 * @xmlMinOccurs 0
	 * @xmlName Level
	 * @var integer
	 */
	public $Level;
	/**
	 * @Definition 
								Product: ALL
								Description: Fully qualified name
								of the entity. The fully qualified name prepends the topmost
								parent, followed by each sub element separated by colons. Takes
								the form of: [br /] Parent:Customer:Job:Sub-job [br /] Limited
								to 5 levels. Max. length: 41 characters (single name) or 209
								characters (fully qualified name).
							
	 * @xmlType element
	 * @xmlNamespace 
	 * @xmlMinOccurs 0
	 * @xmlName FullyQualifiedName
	 * @var string
	 */
	public $FullyQualifiedName;
	/**
	 * @Definition 
								Product: ALL
								Description: True if the item is
								subject to tax.
							
	 * @xmlType element
	 * @xmlNamespace 
	 * @xmlMinOccurs 0
	 * @xmlName Taxable
	 * @var boolean
	 */
	public $Taxable;
	/**
	 * @Definition 
								Product: ALL
								Description: True if the sales tax
								is included in the item amount, and therefore is not calculated
								for the transaction.
							
	 * @xmlType element
	 * @xmlNamespace 
	 * @xmlMinOccurs 0
	 * @xmlName SalesTaxIncluded
	 * @var boolean
	 */
	public $SalesTaxIncluded;
	/**
	 * @Definition 
								Product: ALL
								Description: True if the tax amount
								is percentage based.
							
	 * @xmlType element
	 * @xmlNamespace 
	 * @xmlMinOccurs 0
	 * @xmlMaxOccurs 1
	 * @xmlName PercentBased
	 * @var boolean
	 */
	public $PercentBased;
	/**
	 * @Definition 
								Product: ALL
								Description: Monetary value of the
								service or product, as expressed in the home currency.
								Filterable: QBW
								Sortable: QBW
							
	 * @xmlType element
	 * @xmlNamespace 
	 * @xmlMinOccurs 0
	 * @xmlName UnitPrice
	 * @var float
	 */
	public $UnitPrice;
	/**
	 * @Definition 
								Product: ALL
								Description: The tax amount
								expressed as a percent of charges entered in the current
								transaction. To enter a rate of 10% use 10.0, not 0.01.[br
								/]Applicable to the Service, OtherCharge or Part (Non-Inventory)
								item types only, and only if the Purchase part of the item does
								not exist, that is, the item is not used as a reimbursable item,
								or as a part in assemblies.
							
	 * @xmlType element
	 * @xmlNamespace 
	 * @xmlMinOccurs 0
	 * @xmlName RatePercent
	 * @var float
	 */
	public $RatePercent;
	/**
	 * @Definition 
								Product: ALL
								Description: Classification that
								specifies the use of this item. See the description at the top
								of the Item entity page for details. [br /]
								Filterable: ALL
							
	 * @xmlType element
	 * @xmlNamespace 
	 * @xmlMinOccurs 0
	 * @xmlName Type
	 * @var IPPItemTypeEnum
	 */
	public $Type;
	/**
	 * @Definition 
								Product: ALL
								Description: Reference to a
								PaymentMethod for an item of type Payment.
							
	 * @xmlType element
	 * @xmlNamespace 
	 * @xmlMinOccurs 0
	 * @xmlName PaymentMethodRef
	 * @var IPPReferenceType
	 */
	public $PaymentMethodRef;
	/**
	 * @Definition 
								Product: ALL
								Description: Reference to the unit
								of measure set (UOM) entity used by this item.
							
	 * @xmlType element
	 * @xmlNamespace 
	 * @xmlMinOccurs 0
	 * @xmlName UOMSetRef
	 * @var IPPReferenceType
	 */
	public $UOMSetRef;
	/**
	 * @Definition 
								Product: ALL
								Description: Reference to the
								posting account, that is, the account that records the proceeds
								from the sale of this item.[br /]Required for the the following
								types: Assembly, Inventory, Other Charge, Product, Service.
								Required: ALL
							
	 * @xmlType element
	 * @xmlNamespace 
	 * @xmlMinOccurs 0
	 * @xmlName IncomeAccountRef
	 * @var IPPReferenceType
	 */
	public $IncomeAccountRef;
	/**
	 * @Definition 
								Product: ALL
								Description: User entered purchase
								description for the item.
							
	 * @xmlType element
	 * @xmlNamespace 
	 * @xmlMinOccurs 0
	 * @xmlName PurchaseDesc
	 * @var string
	 */
	public $PurchaseDesc;
	/**
	 * @Definition 
								Product: ALL
								Description: True if the purchase
								tax is included in the item amount, and therefore is not
								calculated for the transaction.
							
	 * @xmlType element
	 * @xmlNamespace 
	 * @xmlMinOccurs 0
	 * @xmlName PurchaseTaxIncluded
	 * @var boolean
	 */
	public $PurchaseTaxIncluded;
	/**
	 * @Definition 
								Product: ALL
								Description: Amount paid when
								buying or ordering the item, as expressed in the home currency.
							
	 * @xmlType element
	 * @xmlNamespace 
	 * @xmlMinOccurs 0
	 * @xmlName PurchaseCost
	 * @var float
	 */
	public $PurchaseCost;
	/**
	 * @Definition 
								Product: ALL
								Description: Reference to the
								expense account used to pay the vendor for this item.[br /]Note:
								for a service item, this may also be an equity account to record
								a draw against the company equity to pay for the service.[br
								/]If the Purchase information (PurchaseDesc,
								PurchaseTaxIncluded, PurchaseCost, etc.) is provided, this
								account is required for the the following item types: Other
								Charge, Product, Service.
								Required: ALL
							
	 * @xmlType element
	 * @xmlNamespace 
	 * @xmlMinOccurs 0
	 * @xmlName ExpenseAccountRef
	 * @var IPPReferenceType
	 */
	public $ExpenseAccountRef;
	/**
	 * @Definition 
								Product: ALL
								Description: Reference to the Cost
								of Goods Sold account for the inventory item.[br /]Required for
								the the following item types: Assembly, Inventory.
								Required: ALL
							
	 * @xmlType element
	 * @xmlNamespace 
	 * @xmlMinOccurs 0
	 * @xmlName COGSAccountRef
	 * @var IPPReferenceType
	 */
	public $COGSAccountRef;
	/**
	 * @Definition 
								Product: ALL
								Description: Reference to the
								Inventory Asset account that tracks the current value of the
								inventory. If the same account is used for all inventory items,
								the current balance of this account will represent the current
								total value of the inventory.[br /]Required for the the
								following item types: Assembly, Inventory.
								Required: ALL
							
	 * @xmlType element
	 * @xmlNamespace 
	 * @xmlMinOccurs 0
	 * @xmlName AssetAccountRef
	 * @var IPPReferenceType
	 */
	public $AssetAccountRef;
	/**
	 * @Definition 
								Product: ALL
								Description: Reference to the
								preferred vendor of this item.
							
	 * @xmlType element
	 * @xmlNamespace 
	 * @xmlMinOccurs 0
	 * @xmlName PrefVendorRef
	 * @var IPPReferenceType
	 */
	public $PrefVendorRef;
	/**
	 * @Definition 
								Product: ALL
								Description: Average cost of the
								item, expressed in the home currency.
							
	 * @xmlType element
	 * @xmlNamespace 
	 * @xmlMinOccurs 0
	 * @xmlName AvgCost
	 * @var float
	 */
	public $AvgCost;
	/**
	 * @Definition 
								Product: QBO
								Description: Quantity on hand to be
								tracked.
							
	 * @xmlType element
	 * @xmlNamespace 
	 * @xmlMinOccurs 0
	 * @xmlName TrackQtyOnHand
	 * @var boolean
	 */
	public $TrackQtyOnHand;
	/**
	 * @Definition 
								Product: ALL
								Description: Current quantity of
								the inventory items available for sale.
								Sortable: QBW
							
	 * @xmlType element
	 * @xmlNamespace 
	 * @xmlMinOccurs 0
	 * @xmlName QtyOnHand
	 * @var float
	 */
	public $QtyOnHand;
	/**
	 * @Definition 
								Product: ALL
								Description: Quantity of the
								inventory item being ordered, for which there is a purchase
								order issued.
							
	 * @xmlType element
	 * @xmlNamespace 
	 * @xmlMinOccurs 0
	 * @xmlName QtyOnPurchaseOrder
	 * @var float
	 */
	public $QtyOnPurchaseOrder;
	/**
	 * @Definition 
								Product: ALL
								Description: Quantity of the
								inventory item that is placed on sales orders.
							
	 * @xmlType element
	 * @xmlNamespace 
	 * @xmlMinOccurs 0
	 * @xmlName QtyOnSalesOrder
	 * @var float
	 */
	public $QtyOnSalesOrder;
	/**
	 * @Definition 
								Product: ALL
								Description: Quantity on hand
								threshold below which a purchase order against this inventory
								item should be issued. When the QtyOnHand is less than the
								ReorderPoint, the QuickBooks purchase order system will prompt
								the user to reorder.
							
	 * @xmlType element
	 * @xmlNamespace 
	 * @xmlMinOccurs 0
	 * @xmlName ReorderPoint
	 * @var float
	 */
	public $ReorderPoint;
	/**
	 * @Definition 
								Product: ALL
								Description: Identifier provided by
								manufacturer for the Item, for example, the model number.[br
								/]Applicable for the the following item types: Inventory,
								Product.
							
	 * @xmlType element
	 * @xmlNamespace 
	 * @xmlMinOccurs 0
	 * @xmlName ManPartNum
	 * @var string
	 */
	public $ManPartNum;
	/**
	 * @Definition 
								Product: ALL
								Description: Optional reference to
								the account in which the payment money is deposited.[br /]If not
								specified, the Undeposited Funds account will be used.
								Applicable to the Payment item type only.
							
	 * @xmlType element
	 * @xmlNamespace 
	 * @xmlMinOccurs 0
	 * @xmlName DepositToAccountRef
	 * @var IPPReferenceType
	 */
	public $DepositToAccountRef;
	/**
	 * @Definition 
								Product: ALL
								Description: Reference to the sales tax code for the item.[br /]Applicable
								to the Service, Other Charge, Part (Non-Inventory), Inventory
								and Assembly item types only.
							
	 * @xmlType element
	 * @xmlNamespace 
	 * @xmlMinOccurs 0
	 * @xmlName SalesTaxCodeRef
	 * @var IPPReferenceType
	 */
	public $SalesTaxCodeRef;
	/**
	 * @Definition 
								Product: ALL
								Description: Reference to the
								purchase tax code for the item.[br /]Applicable to the Service,
								Other Charge, and Part (Non-Inventory) item types.
							
	 * @xmlType element
	 * @xmlNamespace 
	 * @xmlMinOccurs 0
	 * @xmlName PurchaseTaxCodeRef
	 * @var IPPReferenceType
	 */
	public $PurchaseTaxCodeRef;
	/**
	 * @Definition 
								Product: ALL
								Description: Date of the opening
								balance for the inventory transaction. QuickBooks creates the
								Opening Balance inventory transaction as of the given date, and
								calculates the total value by multiplying the cost by the
								quantity on hand.[br /]Applies to the Quantity On Hand and Total
								Value.[br /]Applicable to the Inventory and Assembly item types
								only.
							
	 * @xmlType element
	 * @xmlNamespace 
	 * @xmlMinOccurs 0
	 * @xmlName InvStartDate
	 * @var string
	 */
	public $InvStartDate;
	/**
	 * @Definition 
								Product: ALL
								Description: Assembly item
								QuantityOnHand threshold below which more assemblies should be
								built.[br /]Applicable to the Assembly Item type only.[br /]When
								he quantity of the assembly item gets below the BuildPoint
								number, QuickBooks will remind the user to build more.
							
	 * @xmlType element
	 * @xmlNamespace 
	 * @xmlMinOccurs 0
	 * @xmlName BuildPoint
	 * @var float
	 */
	public $BuildPoint;
	/**
	 * @Definition 
								Product: QBW
								Description: Lets us know if the user wants to display the subitems as a
								group. Applicable to items of Group type only.
								Filterable: QBW
							
	 * @xmlType element
	 * @xmlNamespace 
	 * @xmlMinOccurs 0
	 * @xmlName PrintGroupedItems
	 * @var boolean
	 */
	public $PrintGroupedItems;
	/**
	 * @Definition 
								Product: ALL
								Description: True if this is a
								special item used by QuickBooks in certain accounting functions,
								including miscellaneous charges that do not fall into the
								categories of service, labor, materials, or parts. Examples
								include delivery charges, setup fees, and service charges.
							
	 * @xmlType element
	 * @xmlNamespace 
	 * @xmlMinOccurs 0
	 * @xmlName SpecialItem
	 * @var boolean
	 */
	public $SpecialItem;
	/**
	 * @Definition 
								Product: ALL
								Description Type of special item,
								if SpecialItem is true.[br /]
							
	 * @xmlType element
	 * @xmlNamespace 
	 * @xmlMinOccurs 0
	 * @xmlName SpecialItemType
	 * @var IPPSpecialItemTypeEnum
	 */
	public $SpecialItemType;
	/**
	 * @Definition 
								Product: ALL
								Description: Contains the detailed
								components of the group. Applicable to a group item only.
							
	 * @xmlType element
	 * @xmlNamespace 
	 * @xmlMinOccurs 0
	 * @xmlName ItemGroupDetail
	 * @var IPPItemGroupDetail
	 */
	public $ItemGroupDetail;
	/**
	 * @Definition 
								Product: ALL
								Description: Contains the detailed
								inventory parts used when the assembly is built. Applicable to
								an inventory assembly item only.
							
	 * @xmlType element
	 * @xmlNamespace 
	 * @xmlMinOccurs 0
	 * @xmlName ItemAssemblyDetail
	 * @var IPPItemAssemblyDetail
	 */
	public $ItemAssemblyDetail;
	/**
	 * @Definition 
								Product: QBO
								Description: India sales tax
								abatement rate.
							
	 * @xmlType element
	 * @xmlNamespace 
	 * @xmlMinOccurs 0
	 * @xmlName AbatementRate
	 * @var float
	 */
	public $AbatementRate;
	/**
	 * @Definition 
								Product: QBO
								Description: India sales tax
								reverse charge rate.
							
	 * @xmlType element
	 * @xmlNamespace 
	 * @xmlMinOccurs 0
	 * @xmlName ReverseChargeRate
	 * @var float
	 */
	public $ReverseChargeRate;
	/**
	 * @Definition 
								Product: QBO
								Description: India sales tax
								service type, see ServiceTypeEnum for values.
							
	 * @xmlType element
	 * @xmlNamespace 
	 * @xmlMinOccurs 0
	 * @xmlName ServiceType
	 * @var string
	 */
	public $ServiceType;
	/**
	 * @Definition 
								Product: QBO
								Description: Categorizes the given item as a product or a service. The
								applicable values are those exposed through the
								ItemCategoryTypeEnum. This is currently applicable only in FR
								region.
							
	 * @xmlType element
	 * @xmlNamespace 
	 * @xmlMinOccurs 0
	 * @xmlName ItemCategoryType
	 * @var string
	 */
	public $ItemCategoryType;
	/**
	 * @Definition Internal use only: extension place holder for
								Item
	 * @xmlType element
	 * @xmlNamespace 
	 * @xmlMinOccurs 0
	 * @xmlName ItemEx
	 * @var IPPIntuitAnyType
	 */
	public $ItemEx;


} // end class IPPItem
