public function getServices($product_id, $sku_id)
 {
     $product_model = new shopProductModel();
     $product = $product_model->getById($product_id);
     $type_service_model = new shopTypeServicesModel();
     $service_ids = $type_service_model->getServiceIds($product['type_id']);
     $sql = "SELECT v.*, ps.price p_price, ps.status, ps.sku_id, s.currency FROM shop_service_variants v\n                LEFT JOIN shop_product_services ps ON v.id = ps.service_variant_id AND ps.product_id = i:product_id\n                JOIN shop_service s ON v.service_id = s.id\n                WHERE " . ($service_ids ? "v.service_id IN (i:service_ids) OR " : '') . "\n                ps.product_id = i:product_id OR ps.sku_id = i:sku_id\n                ORDER BY ps.sku_id";
     $product_services_model = new shopProductServicesModel();
     $rows = $product_services_model->query($sql, array('service_ids' => $service_ids, 'product_id' => $product_id, 'sku_id' => $sku_id))->fetchAll();
     $services = array();
     foreach ($rows as $row) {
         $services[$row['service_id']][$row['id']] = array('name' => $row['name'], 'price' => $row['p_price'] ? $row['p_price'] : $row['price'], 'currency' => $row['currency']);
     }
     return $services;
 }
예제 #2
0
<?php

$model = new waModel();
$service_variants_model = new shopServiceVariantsModel();
$product_services_model = new shopProductServicesModel();
// one service - at least one variant
$sql = "SELECT s.* FROM `shop_service` s\n            LEFT JOIN `shop_service_variants` sv ON s.id = sv.service_id\n        WHERE sv.id IS NULL";
foreach ($model->query($sql) as $service) {
    $id = $service_variants_model->insert(array('service_id' => $service['id'], 'name' => '', 'price' => $service['price'], 'primary_price' => $service['primary_price']));
}
// default variant_id
$model->exec("\n    UPDATE `shop_service` s JOIN `shop_service_variants` sv ON s.id = sv.service_id\n    SET s.variant_id = sv.id\n    WHERE s.variant_id IS NULL\n");
// one service - at least one variant, so correct shop_product_services
$model->exec("\n    UPDATE `shop_product_services` ps JOIN `shop_service` s ON s.id = ps.service_id\n    SET ps.service_variant_id = s.variant_id\n    WHERE ps.service_variant_id IS NULL\n");
foreach ($product_services_model->query($sql) as $item) {
    $product_services_model->updateById($item['id'], array('status' => (int) ($item['status'] > 0)));
}
$model->exec("\n    ALTER TABLE `shop_product_services` CHANGE service_variant_id service_variant_id INT (11) NOT NULL\n");
$model->exec("\n    ALTER TABLE `shop_service` CHANGE variant_id variant_id INT(11) NOT NULL\n");
$model->exec("\n    ALTER TABLE `shop_service_variants` CHANGE price price decimal(15,4) NOT NULL DEFAULT 0\n");
$model->exec("\n    ALTER TABLE `shop_service_variants` CHANGE primary_price primary_price decimal(15,4) NOT NULL DEFAULT 0\n");
try {
    $sql = "UPDATE `shop_service` SET price = primary_price";
    $model->exec($sql);
    $model->exec("\n        ALTER TABLE `shop_service` DROP primary_price\n    ");
} catch (waDbException $e) {
}
$sql = "UPDATE `shop_service` s\n        JOIN `shop_service_variants` sv ON s.id = sv.service_id AND s.variant_id = sv.id\n        SET s.price = sv.primary_price\n        WHERE s.price != sv.primary_price";
$model->exec($sql);
$sql = "UPDATE `shop_order_items` oi\n        JOIN `shop_service` s ON oi.service_id = s.id\n        SET oi.service_variant_id = s.variant_id\n        WHERE oi.type = 'service' AND service_variant_id IS NULL";
$model->exec($sql);
예제 #3
0
 /**
  * Returns total cost of current shopping cart's item with specified id, expressed in default currency.
  * 
  * @param int|array $item_id Item id or item data array.
  * @return float
  */
 public function getItemTotal($item_id)
 {
     if (is_array($item_id)) {
         $item = $item_id;
     } else {
         $item = $this->getItem($item_id);
     }
     $cart_items_model = new shopCartItemsModel();
     $items = $cart_items_model->getByField('parent_id', $item['id'], true);
     $price = shop_currency($item['price'] * $item['quantity'], $item['currency'], null, false);
     if (!$items) {
         return $price;
     }
     $variants = array();
     foreach ($items as $s) {
         $variants[] = $s['service_variant_id'];
     }
     $product_services_model = new shopProductServicesModel();
     $sql = "SELECT v.id, s.currency, ps.sku_id, ps.price, v.price base_price FROM shop_service_variants v\n                LEFT JOIN shop_product_services ps ON\n                v.id = ps.service_variant_id AND ps.product_id = i:0 AND (ps.sku_id = i:1 OR ps.sku_id IS NULL)\n                JOIN shop_service s ON v.service_id = s.id\n                WHERE v.id IN (i:2)\n                ORDER BY ps.sku_id";
     $rows = $product_services_model->query($sql, $item['product_id'], $item['sku_id'], $variants)->fetchAll();
     $prices = array();
     foreach ($rows as $row) {
         if (!isset($prices[$row['id']]) || $row['price']) {
             if ($row['price'] === null) {
                 $row['price'] = $row['base_price'];
             }
             $prices[$row['id']] = $row;
         }
     }
     foreach ($items as $s) {
         $v = $prices[$s['service_variant_id']];
         if ($v['currency'] == '%') {
             $v['price'] = $v['price'] * $item['price'] / 100;
             $v['currency'] = $item['currency'];
         }
         $price += shop_currency($v['price'] * $item['quantity'], $v['currency'], null, false);
     }
     return $price;
 }