/**
  * build out the order item payload
  * @param  IOrderItem
  * @param  Mage_Sales_Model_Order_Item
  * @param  Mage_Sales_Model_Order_Address
  * @param  int
  * @param  string
  * @param  bool
  * @return IOrderItem
  */
 public function buildOrderItem(IOrderItem $payload, Mage_Sales_Model_Order_Item $item, Mage_Sales_Model_Order_Address $address, $lineNumber, $includeShipping = false)
 {
     $merch = $payload->getMerchandisePricing();
     $this->prepareMerchandisePricing($item, $merch);
     if ($includeShipping) {
         $this->prepareShippingPriceGroup($address, $payload);
     }
     list($itemSize, $itemSizeId) = $this->getItemSizeInfo($item);
     list($itemColor, $itemColorId) = $this->getItemColorInfo($item);
     $payload->setLineNumber($lineNumber)->setItemId($item->getSku())->setQuantity($item->getQtyOrdered())->setDescription($item->getName())->setMerchandisePricing($merch)->setColor($itemColor)->setColorId($itemColorId)->setSize($itemSize)->setSizeId($itemSizeId)->setDepartment($item->getProduct()->getDepartment())->setShippingMethod($this->getItemShippingMethod($item, $address))->setShippingMethodDisplayText($this->getItemShippingDescription($item, $address))->setVendorId($item->getProduct()->getDropShipSupplierNumber())->setVendorName($item->getProduct()->getDropShipSupplierName())->setFulfillmentChannel($payload::FULFILLMENT_CHANNEL_SHIP_TO_HOME);
     return $this->addGiftCardDataToPayload($payload, $item);
 }
 /**
  * verify
  * - discounts are applied to the merchandises pricegroup
  */
 public function testBuildOrderItemsWithItemDiscounts()
 {
     $lineNumber = 1;
     $this->itemStub->setEbayEnterpriseOrderDiscountData(['1' => ['id' => '1']]);
     $handler = $this->getModelMockBuilder('ebayenterprise_order/create_orderitem')->setMethods(['loadOrderItemOptions', 'prepareShippingPriceGroup'])->setConstructorArgs([['shipping_helper' => $this->shippingHelper]])->getMock();
     $handler->expects($this->any())->method('loadOrderItemOptions')->will($this->returnValue($this->optionValueCollectionStub));
     $handler->expects($this->any())->method('prepareShippingPriceGroup')->will($this->returnSelf());
     $handler->buildOrderItem($this->payload, $this->itemStub, $this->orderStub, $this->addressStub, $lineNumber, true);
     // merchandise price group should always exist
     $pg = $this->payload->getMerchandisePricing();
     $this->assertCount(1, $pg->getDiscounts());
 }
 /**
  * Add tax data for tax totals for the merchandise prices and discounts.
  *
  * @return self
  */
 protected function _addMerchandiseTaxes()
 {
     $taxes = $this->_getTaxRecordsBySource(EbayEnterprise_Tax_Model_Record::SOURCE_MERCHANDISE);
     $discountTaxes = $this->_getTaxRecordsBySource(EbayEnterprise_Tax_Model_Record::SOURCE_MERCHANDISE_DISCOUNT);
     if ($taxes || $discountTaxes) {
         $priceGroup = $this->_orderItemPayload->getMerchandisePricing() ?: $this->_orderItemPayload->getEmptyPriceGroup();
         $priceGroup->setTaxClass($this->_itemProduct->getTaxCode());
         $this->_addTaxRecordsToContainer($taxes, $priceGroup)->_addDiscountTaxRecords($discountTaxes, $priceGroup);
         $this->_orderItemPayload->setMerchandisePricing($priceGroup);
     }
     return $this;
 }