protected static function _getData()
 {
     $return = array();
     $myobCodeType = ProductCodeType::get(ProductCodeType::ID_MYOB);
     foreach (Product::getAllByCriteria('updated <= 2015-12-06 04:00:00', array(), false) as $product) {
         $logs = ProductQtyLog::getAllByCriteria('productId = ? and created <= ?', array($product->getId(), trim($toDate)), true, 1, 1, array('id' => 'desc'));
         $log = count($logs) > 0 ? $logs[0] : null;
         $myobCodes = ProductCode::getCodes($product, $myobCodeType, true, 1, 1);
         $return[] = array('sku' => $product->getSku(), 'name' => $product->getName(), 'short description' => $product->getShortDescription(), 'category' => join(', ', array_map(create_function('$a', 'return $a->getCategory()->getName();'), $product->getCategories())), 'assetAccNo' => $product->getAssetAccNo(), 'revenueAccNo' => $product->getRevenueAccNo(), 'costAccNo' => $product->getCostAccNo(), 'Stock On PO' => $log instanceof ProductQtyLog ? $log->getStockOnPO() : $product->getStockOnPO(), 'Stock On Order' => $log instanceof ProductQtyLog ? $log->getStockOnOrder() : $product->getStockOnOrder(), 'Stock On Hand' => $log instanceof ProductQtyLog ? $log->getStockOnHand() : $product->getStockOnHand(), 'Total On Hand Value' => $log instanceof ProductQtyLog ? $log->getTotalOnHandValue() : $product->getTotalOnHandValue(), 'Stock In Parts' => $log instanceof ProductQtyLog ? $log->getStockInParts() : $product->getStockInParts(), 'Total In Parts Value' => $log instanceof ProductQtyLog ? $log->getTotalInPartsValue() : $product->getTotalInPartsValue(), 'Stock In RMA' => $log instanceof ProductQtyLog ? $log->getStockInRMA() : $product->getStockInRMA(), 'Total RMA Value' => $log instanceof ProductQtyLog ? $log->getTotalRMAValue() : $product->getTotalRMAValue(), 'active' => intval($product->getActive()) === 1 ? 'Y' : 'N', 'MYOB' => count($myobCodes) > 0 ? $myobCodes[0]->getCode() : '');
     }
     return $return;
 }
 protected static function _getData()
 {
     if (count(self::$_dateRange) === 0) {
         $yesterdayLocal = new UDate('now', 'Australia/Melbourne');
         $yesterdayLocal->modify('-1 day');
         $fromDate = new UDate($yesterdayLocal->format('Y-m-d') . ' 00:00:00', 'Australia/Melbourne');
         $fromDate->setTimeZone('UTC');
         $toDate = new UDate($yesterdayLocal->format('Y-m-d') . ' 23:59:59', 'Australia/Melbourne');
         $toDate->setTimeZone('UTC');
     } else {
         $fromDate = self::$_dateRange['start'];
         $toDate = self::$_dateRange['end'];
     }
     $dataType = 'created';
     $items = ProductQtyLog::getAllByCriteria($dataType . ' >= :fromDate and ' . $dataType . ' < :toDate and type in (:type1, :type2)', array('fromDate' => trim($fromDate), 'toDate' => trim($toDate), 'type1' => ProductQtyLog::TYPE_SALES_ORDER, 'type2' => ProductQtyLog::TYPE_STOCK_ADJ));
     $now = new UDate();
     $now->setTimeZone('Australia/Melbourne');
     $return = array();
     foreach ($items as $item) {
         if (!($product = $item->getProduct()) instanceof Product) {
             continue;
         }
         $narration = '';
         if ($item->getEntity() instanceof BaseEntityAbstract) {
             if ($item->getEntity() instanceof PurchaseOrderItem) {
                 $narration = $item->getEntity()->getPurchaseOrder() instanceof PurchaseOrder ? $item->getEntity()->getPurchaseOrder()->getPurchaseOrderNo() : '';
             } else {
                 if ($item->getEntity() instanceof PurchaseOrder) {
                     $narration = $item->getEntity()->getPurchaseOrderNo();
                 } else {
                     if ($item->getEntity() instanceof OrderItem) {
                         $narration = $item->getEntity()->getOrder() instanceof Order ? ($invoiceNo = trim($item->getEntity()->getOrder()->getInvNo())) === '' ? $item->getEntity()->getOrder()->getOrderNo() : $invoiceNo : '';
                     } else {
                         if ($item->getEntity() instanceof Order) {
                             $narration = ($invoiceNo = trim($item->getEntity()->getInvNo())) === '' ? $item->getEntity()->getOrderNo() : $invoiceNo;
                         }
                     }
                 }
             }
         }
         $comments = $item->getComments();
         $return[] = array('Narration' => $narration, 'Date' => trim($item->getCreated()->setTimeZone('Australia/Melbourne')), 'Description' => $product->getSku(), 'AccountCode' => $product->getAssetAccNo(), 'TaxRate' => 'BAS Excluded', 'Amount' => $item->getTotalOnHandValueVar(), 'TrackingName1' => $item->getType(), 'TrackingOption1' => '', 'TrackingName2' => '', 'TrackingOption2' => '', 'Comments' => $comments);
         $return[] = array('Narration' => $narration, 'Date' => trim($item->getCreated()->setTimeZone('Australia/Melbourne')), 'Description' => $product->getSku(), 'AccountCode' => $product->getCostAccNo(), 'TaxRate' => 'BAS Excluded', 'Amount' => 0 - $item->getTotalOnHandValueVar(), 'TrackingName1' => $item->getType(), 'TrackingOption1' => '', 'TrackingName2' => '', 'TrackingOption2' => '', 'Comments' => $comments);
     }
     return $return;
 }
 private static function _getProductQtyLogs(Product $product, $pageNumber, $pageSize = self::PAGE_SIZE)
 {
     return ProductQtyLog::getAllByCriteria('pql.active = 1 and pql.productId = ? and pql.stockOnHandVar > 0 and pql.type in (?, ?, ?)', array($product->getId(), ProductQtyLog::TYPE_PO, ProductQtyLog::TYPE_STOCK_MOVE_INTERNAL, ProductQtyLog::TYPE_STOCK_ADJ), true, $pageNumber, $pageSize, array('id' => 'desc'));
 }