Example #1
0
 public function index()
 {
     $this->loadLanguageFile('backend/abstract/ActiveGridQuickEdit');
     $this->updateApplicationUri();
     // order stats
     $conditions = array('last' => new EqualsOrMoreCond(new ARFieldHandle('CustomerOrder', 'dateCompleted'), time() - 86400), 'new' => new IsNullCond(new ARFieldHandle('CustomerOrder', 'status')), 'processing' => new EqualsCond(new ARFieldHandle('CustomerOrder', 'status'), CustomerOrder::STATUS_PROCESSING), 'total' => new EqualsCond(new ARFieldHandle('CustomerOrder', 'isFinalized'), true));
     foreach ($conditions as $key => $cond) {
         $f = new ARSelectFilter($cond);
         $f->mergeCondition(new EqualsCond(new ARFieldHandle('CustomerOrder', 'isFinalized'), true));
         $f->mergeCondition(new EqualsCond(new ARFieldHandle('CustomerOrder', 'isCancelled'), false));
         $orderCount[$key] = ActiveRecordModel::getRecordCount('CustomerOrder', $f);
     }
     // messages
     $f = new ARSelectFilter(new EqualsCond(new ARFieldHandle('OrderNote', 'isAdmin'), 0));
     $f->mergeCondition(new EqualsCond(new ARFieldHandle('OrderNote', 'isRead'), 0));
     $orderCount['messages'] = ActiveRecordModel::getRecordCount('OrderNote', $f);
     // inventory stats
     $lowStock = new EqualsOrLessCond(new ARFieldHandle('Product', 'stockCount'), $this->config->get('LOW_STOCK'));
     $lowStock->addAnd(new MoreThanCond(new ARFieldHandle('Product', 'stockCount'), 0));
     $conditions = array('lowStock' => $lowStock, 'outOfStock' => new EqualsOrLessCond(new ARFieldHandle('Product', 'stockCount'), 0));
     foreach ($conditions as $key => $cond) {
         $cond->addAnd(new EqualsCond(new ARFieldHandle('Product', 'isEnabled'), true));
         $inventoryCount[$key] = ActiveRecordModel::getRecordCount('Product', new ARSelectFilter($cond));
     }
     // overall stats
     $rootCat = Category::getRootNode();
     $rootCat->load();
     $response = new ActionResponse();
     $response->set('orderCount', $orderCount);
     $response->set('inventoryCount', $inventoryCount);
     $response->set('rootCat', $rootCat->toArray());
     $response->set('thisMonth', date('m'));
     $response->set('lastMonth', date('Y-m', strtotime(date('m') . '/15 -1 month')));
     $response->set('ordersLast24', $this->getOrderCount('-24 hours', 'now'));
     $response->set('ordersThisWeek', $this->getOrderCount('w:Monday', 'now'));
     $response->set('ordersThisMonth', $this->getOrderCount(date('m') . '/1', 'now'));
     $response->set('ordersLastMonth', $this->getOrderCount($response->get('lastMonth') . '-1', date('m') . '/1'));
     $response->set('lastOrders', $this->getLastOrders());
     return $response;
 }
Example #2
0
 /**
  * Calculate a delivery rate for a particular shipment
  *
  * @return ShipmentDeliveryRate
  */
 public function getDeliveryRate(Shipment $shipment)
 {
     $hasFreeShipping = false;
     // get applicable rates
     if (self::WEIGHT_BASED == $this->rangeType->get()) {
         $weight = $shipment->getChargeableWeight($this->deliveryZone->get());
         $cond = new EqualsOrLessCond(new ARFieldHandle('ShippingRate', 'weightRangeStart'), $weight * 1.000001);
         $cond->addAND(new EqualsOrMoreCond(new ARFieldHandle('ShippingRate', 'weightRangeEnd'), $weight * 0.99999));
     } else {
         $total = $shipment->getSubTotal(Shipment::WITHOUT_TAXES);
         $cond = new EqualsOrLessCond(new ARFieldHandle('ShippingRate', 'subtotalRangeStart'), $total * 1.000001);
         $cond->addAND(new EqualsOrMoreCond(new ARFieldHandle('ShippingRate', 'subtotalRangeEnd'), $total * 0.99999));
     }
     $f = new ARSelectFilter(new EqualsCond(new ARFieldHandle('ShippingRate', 'shippingServiceID'), $this->getID()));
     $f->mergeCondition($cond);
     $rates = ActiveRecordModel::getRecordSet('ShippingRate', $f);
     if (!$rates->size()) {
         return null;
     }
     $itemCount = $shipment->getChargeableItemCount($this->deliveryZone->get());
     $maxRate = 0;
     foreach ($rates as $rate) {
         $charge = $rate->flatCharge->get();
         foreach ($shipment->getItems() as $item) {
             $charge += $rate->getItemCharge($item) * $item->getCount();
         }
         if (self::WEIGHT_BASED == $this->rangeType->get()) {
             $charge += $rate->perKgCharge->get() * $weight;
         } else {
             $charge += $rate->subtotalPercentCharge->get() / 100 * $total;
         }
         if ($charge > $maxRate) {
             $maxRate = $charge;
         }
     }
     return ShipmentDeliveryRate::getNewInstance($this, $maxRate);
 }
Example #3
0
 private static function getCategoryCondition(Category $category)
 {
     $own = new EqualsCond(new ARFieldHandle(__CLASS__, 'categoryID'), $category->getID());
     $parent = new EqualsOrLessCond(new ARFieldHandle('Category', 'lft'), $category->lft->get());
     $parent->addAND(new EqualsOrMoreCond(new ARFieldHandle('Category', 'rgt'), $category->rgt->get()));
     $parent->addAND(new EqualsCond(new ARFieldHandle(__CLASS__, 'isSubcategories'), true));
     $own->addOR($parent);
     return $own;
 }
Example #4
0
 public static function loadOptionsForProductSet(ARSet $products)
 {
     // load category options
     $f = new ARSelectFilter();
     $categories = $productIDs = array();
     foreach ($products as $product) {
         foreach ($product->getAllCategories() as $cat) {
             $categories[$cat->getID()] = $cat;
         }
         $productIDs[] = $product->getID();
         if ($product->parent->get()) {
             $productIDs[] = $product->parent->get()->getID();
         }
     }
     foreach ($categories as $category) {
         if ($category->isLoaded() == false) {
             $category->load();
         }
         $c = new EqualsOrLessCond(new ARFieldHandle('Category', 'lft'), $category->lft->get());
         $c->addAND(new EqualsOrMoreCond(new ARFieldHandle('Category', 'rgt'), $category->rgt->get()));
         if (!isset($categoryCond)) {
             $categoryCond = $c;
         } else {
             $categoryCond->addOR($c);
         }
     }
     // product options
     $productCond = new INCond(new ARFieldHandle('ProductOption', 'productID'), $productIDs);
     if (!isset($categoryCond)) {
         $categoryCond = $productCond;
     } else {
         $categoryCond->addOR($productCond);
     }
     $f->setCondition($categoryCond);
     // ordering
     $f->setOrder(new ARFieldHandle('ProductOption', 'productID'), 'DESC');
     $f->setOrder(new ARFieldHandle('Category', 'lft'), 'DESC');
     $f->setOrder(new ARFieldHandle('ProductOption', 'position'), 'DESC');
     $options = ProductOption::getRecordSet($f, array('DefaultChoice' => 'ProductOptionChoice', 'Category'));
     self::loadChoicesForRecordSet($options);
     // sort by products
     $sorted = array();
     foreach ($products as $product) {
         foreach ($options as $index => $option) {
             if ($option->product->get() && ($option->product->get()->getID() == $product->getID() || $product->parent->get() && $option->product->get()->getID() == $product->parent->get()->getID())) {
                 $sorted[$product->getID()][] = $option;
             }
             if ($option->category->get()) {
                 $option->category->get()->load();
                 foreach ($product->getAllCategories() as $category) {
                     if ($option->category->get()->isAncestorOf($category)) {
                         $sorted[$product->getID()][] = $option;
                         break;
                     }
                 }
             }
         }
     }
     return $sorted;
 }