예제 #1
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);
예제 #2
0
 private function updateVariants($service_id, $variants)
 {
     $add = array();
     $update = array();
     $variants_model = new shopServiceVariantsModel();
     $products_model = new shopProductServicesModel();
     $old_variants = $variants_model->getByField('service_id', $service_id, 'id');
     $sort = 0;
     foreach ($variants as $item) {
         $item['sort'] = $sort;
         $sort += 1;
         if (empty($item['id']) || empty($old_variants[$item['id']])) {
             $item['service_id'] = $service_id;
             $add[] = $item;
         } else {
             $variant_id = $item['id'];
             $update[$variant_id] = $item;
             unset($old_variants[$variant_id]);
         }
     }
     $default_id = null;
     foreach ($add as $item) {
         $added_id = $variants_model->insert($item);
         if (!empty($item['default'])) {
             $default_id = $added_id;
         }
     }
     foreach ($update as $id => $item) {
         if (!empty($item['default'])) {
             $default_id = $id;
         }
         $variants_model->updateById($id, $item);
     }
     if ($old_variants) {
         $ids = array_keys($old_variants);
         $variants_model->delete($ids);
         $products_model->deleteByVariants($ids);
     }
     if (!$default_id) {
         $default_id = $this->query("\n                SELECT id FROM `shop_service_variants`\n                WHERE service_id = " . (int) $service_id . " LIMIT 1\n            ")->fetchField('id');
         $default_id = $default_id ? $default_id : null;
     }
     $this->updateById($service_id, array('variant_id' => $default_id));
     return array_keys($variants_model->getByField('service_id', $service_id, 'id'));
 }