PageRenderTime 45ms CodeModel.GetById 15ms RepoModel.GetById 0ms app.codeStats 0ms

/app/code/core/Mage/Sales/Model/Order/Invoice/Item.php

https://bitbucket.org/dnejedly/eaparts
PHP | 335 lines | 139 code | 29 blank | 167 comment | 16 complexity | 409b7014ed8a2471bc62724d1302ac83 MD5 | raw file
  1. <?php
  2. /**
  3. * Magento
  4. *
  5. * NOTICE OF LICENSE
  6. *
  7. * This source file is subject to the Open Software License (OSL 3.0)
  8. * that is bundled with this package in the file LICENSE.txt.
  9. * It is also available through the world-wide-web at this URL:
  10. * http://opensource.org/licenses/osl-3.0.php
  11. * If you did not receive a copy of the license and are unable to
  12. * obtain it through the world-wide-web, please send an email
  13. * to license@magentocommerce.com so we can send you a copy immediately.
  14. *
  15. * DISCLAIMER
  16. *
  17. * Do not edit or add to this file if you wish to upgrade Magento to newer
  18. * versions in the future. If you wish to customize Magento for your
  19. * needs please refer to http://www.magentocommerce.com for more information.
  20. *
  21. * @category Mage
  22. * @package Mage_Sales
  23. * @copyright Copyright (c) 2012 Magento Inc. (http://www.magentocommerce.com)
  24. * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
  25. */
  26. /**
  27. * Enter description here ...
  28. *
  29. * @method Mage_Sales_Model_Resource_Order_Invoice_Item _getResource()
  30. * @method Mage_Sales_Model_Resource_Order_Invoice_Item getResource()
  31. * @method int getParentId()
  32. * @method Mage_Sales_Model_Order_Invoice_Item setParentId(int $value)
  33. * @method float getBasePrice()
  34. * @method Mage_Sales_Model_Order_Invoice_Item setBasePrice(float $value)
  35. * @method float getBaseWeeeTaxRowDisposition()
  36. * @method Mage_Sales_Model_Order_Invoice_Item setBaseWeeeTaxRowDisposition(float $value)
  37. * @method float getWeeeTaxAppliedRowAmount()
  38. * @method Mage_Sales_Model_Order_Invoice_Item setWeeeTaxAppliedRowAmount(float $value)
  39. * @method float getBaseWeeeTaxAppliedAmount()
  40. * @method Mage_Sales_Model_Order_Invoice_Item setBaseWeeeTaxAppliedAmount(float $value)
  41. * @method float getTaxAmount()
  42. * @method Mage_Sales_Model_Order_Invoice_Item setTaxAmount(float $value)
  43. * @method float getBaseRowTotal()
  44. * @method Mage_Sales_Model_Order_Invoice_Item setBaseRowTotal(float $value)
  45. * @method float getDiscountAmount()
  46. * @method Mage_Sales_Model_Order_Invoice_Item setDiscountAmount(float $value)
  47. * @method float getRowTotal()
  48. * @method Mage_Sales_Model_Order_Invoice_Item setRowTotal(float $value)
  49. * @method float getWeeeTaxRowDisposition()
  50. * @method Mage_Sales_Model_Order_Invoice_Item setWeeeTaxRowDisposition(float $value)
  51. * @method float getBaseDiscountAmount()
  52. * @method Mage_Sales_Model_Order_Invoice_Item setBaseDiscountAmount(float $value)
  53. * @method float getBaseWeeeTaxDisposition()
  54. * @method Mage_Sales_Model_Order_Invoice_Item setBaseWeeeTaxDisposition(float $value)
  55. * @method float getPriceInclTax()
  56. * @method Mage_Sales_Model_Order_Invoice_Item setPriceInclTax(float $value)
  57. * @method float getWeeeTaxAppliedAmount()
  58. * @method Mage_Sales_Model_Order_Invoice_Item setWeeeTaxAppliedAmount(float $value)
  59. * @method float getBaseTaxAmount()
  60. * @method Mage_Sales_Model_Order_Invoice_Item setBaseTaxAmount(float $value)
  61. * @method float getBasePriceInclTax()
  62. * @method Mage_Sales_Model_Order_Invoice_Item setBasePriceInclTax(float $value)
  63. * @method float getQty()
  64. * @method float getWeeeTaxDisposition()
  65. * @method Mage_Sales_Model_Order_Invoice_Item setWeeeTaxDisposition(float $value)
  66. * @method float getBaseCost()
  67. * @method Mage_Sales_Model_Order_Invoice_Item setBaseCost(float $value)
  68. * @method float getBaseWeeeTaxAppliedRowAmount()
  69. * @method Mage_Sales_Model_Order_Invoice_Item setBaseWeeeTaxAppliedRowAmount(float $value)
  70. * @method float getPrice()
  71. * @method Mage_Sales_Model_Order_Invoice_Item setPrice(float $value)
  72. * @method float getBaseRowTotalInclTax()
  73. * @method Mage_Sales_Model_Order_Invoice_Item setBaseRowTotalInclTax(float $value)
  74. * @method float getRowTotalInclTax()
  75. * @method Mage_Sales_Model_Order_Invoice_Item setRowTotalInclTax(float $value)
  76. * @method int getProductId()
  77. * @method Mage_Sales_Model_Order_Invoice_Item setProductId(int $value)
  78. * @method int getOrderItemId()
  79. * @method Mage_Sales_Model_Order_Invoice_Item setOrderItemId(int $value)
  80. * @method string getAdditionalData()
  81. * @method Mage_Sales_Model_Order_Invoice_Item setAdditionalData(string $value)
  82. * @method string getDescription()
  83. * @method Mage_Sales_Model_Order_Invoice_Item setDescription(string $value)
  84. * @method string getWeeeTaxApplied()
  85. * @method Mage_Sales_Model_Order_Invoice_Item setWeeeTaxApplied(string $value)
  86. * @method string getSku()
  87. * @method Mage_Sales_Model_Order_Invoice_Item setSku(string $value)
  88. * @method string getName()
  89. * @method Mage_Sales_Model_Order_Invoice_Item setName(string $value)
  90. * @method float getHiddenTaxAmount()
  91. * @method Mage_Sales_Model_Order_Invoice_Item setHiddenTaxAmount(float $value)
  92. * @method float getBaseHiddenTaxAmount()
  93. * @method Mage_Sales_Model_Order_Invoice_Item setBaseHiddenTaxAmount(float $value)
  94. *
  95. * @category Mage
  96. * @package Mage_Sales
  97. * @author Magento Core Team <core@magentocommerce.com>
  98. */
  99. class Mage_Sales_Model_Order_Invoice_Item extends Mage_Core_Model_Abstract
  100. {
  101. protected $_eventPrefix = 'sales_invoice_item';
  102. protected $_eventObject = 'invoice_item';
  103. protected $_invoice = null;
  104. protected $_orderItem = null;
  105. /**
  106. * Initialize resource model
  107. */
  108. function _construct()
  109. {
  110. $this->_init('sales/order_invoice_item');
  111. }
  112. /**
  113. * Init mapping array of short fields to
  114. * its full names
  115. *
  116. * @return Varien_Object
  117. */
  118. protected function _initOldFieldsMap()
  119. {
  120. $this->_oldFieldsMap = Mage::helper('sales')->getOldFieldMap('invoice_item');
  121. return $this;
  122. }
  123. /**
  124. * Declare invoice instance
  125. *
  126. * @param Mage_Sales_Model_Order_Invoice $invoice
  127. * @return Mage_Sales_Model_Order_Invoice_Item
  128. */
  129. public function setInvoice(Mage_Sales_Model_Order_Invoice $invoice)
  130. {
  131. $this->_invoice = $invoice;
  132. return $this;
  133. }
  134. /**
  135. * Retrieve invoice instance
  136. *
  137. * @return Mage_Sales_Model_Order_Invoice
  138. */
  139. public function getInvoice()
  140. {
  141. return $this->_invoice;
  142. }
  143. /**
  144. * Declare order item instance
  145. *
  146. * @param Mage_Sales_Model_Order_Item $item
  147. * @return Mage_Sales_Model_Order_Invoice_Item
  148. */
  149. public function setOrderItem(Mage_Sales_Model_Order_Item $item)
  150. {
  151. $this->_orderItem = $item;
  152. $this->setOrderItemId($item->getId());
  153. return $this;
  154. }
  155. /**
  156. * Retrieve order item instance
  157. *
  158. * @return Mage_Sales_Model_Order_Item
  159. */
  160. public function getOrderItem()
  161. {
  162. if (is_null($this->_orderItem)) {
  163. if ($this->getInvoice()) {
  164. $this->_orderItem = $this->getInvoice()->getOrder()->getItemById($this->getOrderItemId());
  165. }
  166. else {
  167. $this->_orderItem = Mage::getModel('sales/order_item')
  168. ->load($this->getOrderItemId());
  169. }
  170. }
  171. return $this->_orderItem;
  172. }
  173. /**
  174. * Declare qty
  175. *
  176. * @param float $qty
  177. * @return Mage_Sales_Model_Order_Invoice_Item
  178. */
  179. public function setQty($qty)
  180. {
  181. if ($this->getOrderItem()->getIsQtyDecimal()) {
  182. $qty = (float) $qty;
  183. }
  184. else {
  185. $qty = (int) $qty;
  186. }
  187. $qty = $qty > 0 ? $qty : 0;
  188. /**
  189. * Check qty availability
  190. */
  191. $qtyToInvoice = sprintf("%F", $this->getOrderItem()->getQtyToInvoice());
  192. $qty = sprintf("%F", $qty);
  193. if ($qty <= $qtyToInvoice || $this->getOrderItem()->isDummy()) {
  194. $this->setData('qty', $qty);
  195. }
  196. else {
  197. Mage::throwException(
  198. Mage::helper('sales')->__('Invalid qty to invoice item "%s"', $this->getName())
  199. );
  200. }
  201. return $this;
  202. }
  203. /**
  204. * Applying qty to order item
  205. *
  206. * @return Mage_Sales_Model_Order_Invoice_Item
  207. */
  208. public function register()
  209. {
  210. $orderItem = $this->getOrderItem();
  211. $orderItem->setQtyInvoiced($orderItem->getQtyInvoiced()+$this->getQty());
  212. $orderItem->setTaxInvoiced($orderItem->getTaxInvoiced()+$this->getTaxAmount());
  213. $orderItem->setBaseTaxInvoiced($orderItem->getBaseTaxInvoiced()+$this->getBaseTaxAmount());
  214. $orderItem->setHiddenTaxInvoiced($orderItem->getHiddenTaxInvoiced()+$this->getHiddenTaxAmount());
  215. $orderItem->setBaseHiddenTaxInvoiced($orderItem->getBaseHiddenTaxInvoiced()+$this->getBaseHiddenTaxAmount());
  216. $orderItem->setDiscountInvoiced($orderItem->getDiscountInvoiced()+$this->getDiscountAmount());
  217. $orderItem->setBaseDiscountInvoiced($orderItem->getBaseDiscountInvoiced()+$this->getBaseDiscountAmount());
  218. $orderItem->setRowInvoiced($orderItem->getRowInvoiced()+$this->getRowTotal());
  219. $orderItem->setBaseRowInvoiced($orderItem->getBaseRowInvoiced()+$this->getBaseRowTotal());
  220. return $this;
  221. }
  222. /**
  223. * Cancelling invoice item
  224. *
  225. * @return Mage_Sales_Model_Order_Invoice_Item
  226. */
  227. public function cancel()
  228. {
  229. $orderItem = $this->getOrderItem();
  230. $orderItem->setQtyInvoiced($orderItem->getQtyInvoiced()-$this->getQty());
  231. $orderItem->setTaxInvoiced($orderItem->getTaxInvoiced()-$this->getTaxAmount());
  232. $orderItem->setBaseTaxInvoiced($orderItem->getBaseTaxInvoiced()-$this->getBaseTaxAmount());
  233. $orderItem->setHiddenTaxInvoiced($orderItem->getHiddenTaxInvoiced()-$this->getHiddenTaxAmount());
  234. $orderItem->setBaseHiddenTaxInvoiced($orderItem->getBaseHiddenTaxInvoiced()-$this->getBaseHiddenTaxAmount());
  235. $orderItem->setDiscountInvoiced($orderItem->getDiscountInvoiced()-$this->getDiscountAmount());
  236. $orderItem->setBaseDiscountInvoiced($orderItem->getBaseDiscountInvoiced()-$this->getBaseDiscountAmount());
  237. $orderItem->setRowInvoiced($orderItem->getRowInvoiced()-$this->getRowTotal());
  238. $orderItem->setBaseRowInvoiced($orderItem->getBaseRowInvoiced()-$this->getBaseRowTotal());
  239. return $this;
  240. }
  241. /**
  242. * Invoice item row total calculation
  243. *
  244. * @return Mage_Sales_Model_Order_Invoice_Item
  245. */
  246. public function calcRowTotal()
  247. {
  248. $invoice = $this->getInvoice();
  249. $orderItem = $this->getOrderItem();
  250. $orderItemQty = $orderItem->getQtyOrdered();
  251. $rowTotal = $orderItem->getRowTotal() - $orderItem->getRowInvoiced();
  252. $baseRowTotal = $orderItem->getBaseRowTotal() - $orderItem->getBaseRowInvoiced();
  253. $rowTotalInclTax = $orderItem->getRowTotalInclTax();
  254. $baseRowTotalInclTax = $orderItem->getBaseRowTotalInclTax();
  255. if (!$this->isLast()) {
  256. $availableQty = $orderItemQty - $orderItem->getQtyInvoiced();
  257. $rowTotal = $invoice->roundPrice($rowTotal / $availableQty * $this->getQty());
  258. $baseRowTotal = $invoice->roundPrice($baseRowTotal / $availableQty * $this->getQty(), 'base');
  259. }
  260. $this->setRowTotal($rowTotal);
  261. $this->setBaseRowTotal($baseRowTotal);
  262. if ($rowTotalInclTax && $baseRowTotalInclTax) {
  263. $this->setRowTotalInclTax($invoice->roundPrice($rowTotalInclTax / $orderItemQty * $this->getQty(), 'including'));
  264. $this->setBaseRowTotalInclTax($invoice->roundPrice($baseRowTotalInclTax / $orderItemQty * $this->getQty(), 'including_base'));
  265. }
  266. return $this;
  267. }
  268. /**
  269. * Checking if the item is last
  270. *
  271. * @return bool
  272. */
  273. public function isLast()
  274. {
  275. if ((string)(float)$this->getQty() == (string)(float)$this->getOrderItem()->getQtyToInvoice()) {
  276. return true;
  277. }
  278. return false;
  279. }
  280. /**
  281. * Before object save
  282. *
  283. * @return Mage_Sales_Model_Order_Invoice_Item
  284. */
  285. protected function _beforeSave()
  286. {
  287. parent::_beforeSave();
  288. if (!$this->getParentId() && $this->getInvoice()) {
  289. $this->setParentId($this->getInvoice()->getId());
  290. }
  291. return $this;
  292. }
  293. /**
  294. * After object save
  295. *
  296. * @return Mage_Sales_Model_Order_Invoice_Item
  297. */
  298. protected function _afterSave()
  299. {
  300. if (null ==! $this->_orderItem) {
  301. $this->_orderItem->save();
  302. }
  303. parent::_afterSave();
  304. return $this;
  305. }
  306. }