コード例 #1
0
ファイル: nightly.batch.php プロジェクト: phpsmith/IS4C
/* why is this file such a mess?

   SQL for UPDATE against multiple tables is different 
   for MSSQL and MySQL. There's not a particularly clean
   way around it that I can think of, hence alternates
   for all queries.
*/
include dirname(__FILE__) . '/../config.php';
if (!class_exists('FannieAPI')) {
    include $FANNIE_ROOT . 'classlib2.0/FannieAPI.php';
}
if (!function_exists('cron_msg')) {
    include $FANNIE_ROOT . 'src/cron_msg.php';
}
set_time_limit(0);
$sql = new SQLManager($FANNIE_SERVER, $FANNIE_SERVER_DBMS, $FANNIE_OP_DB, $FANNIE_SERVER_USER, $FANNIE_SERVER_PW);
$b_def = $sql->tableDefinition('batches');
$p_def = $sql->tableDefinition('products');
$has_limit = isset($b_def['transLimit']) && isset($p_def['special_limit']) ? true : false;
// unsale everything
$sql->query("UPDATE products SET\n        special_price=0,\n        specialpricemethod=0,\n        specialquantity=0,\n        specialgroupprice=0,\n        " . ($has_limit ? 'special_limit=0,' : '') . "\n        discounttype=0,\n        start_date='1900-01-01',\n        end_date='1900-01-01'");
// resale things that should be on sale
if (strstr($FANNIE_SERVER_DBMS, "MYSQL")) {
    $sql->query("UPDATE products AS p\n        INNER JOIN upcLike AS u ON p.upc=u.upc\n        SET p.mixmatchcode=convert(u.likeCode+500,char)");
    $sql->query("UPDATE products AS p\n        LEFT JOIN batchList AS l ON p.upc=l.upc\n        LEFT JOIN batches AS b ON l.batchID=b.batchID\n        SET\n        p.special_price = l.salePrice,\n        p.specialpricemethod = l.pricemethod,\n        p.specialgroupprice=CASE WHEN l.salePrice < 0 THEN -1*l.salePrice ELSE l.salePrice END,\n        p.specialquantity = l.quantity,\n        " . ($has_limit ? 'p.special_limit=b.transLimit,' : '') . "\n        p.start_date = b.startDate,\n        p.end_date = b.endDate,\n        p.discounttype = b.discounttype,\n        p.mixmatchcode = CASE \n            WHEN l.pricemethod IN (3,4) AND l.salePrice >= 0 THEN convert(l.batchID,char)\n            WHEN l.pricemethod IN (3,4) AND l.salePrice < 0 THEN convert(-1*l.batchID,char)\n            ELSE p.mixmatchcode \n        END \n        WHERE l.upc NOT LIKE 'LC%'\n        AND CURDATE() >= b.startDate AND CURDATE() <= b.endDate\n        AND b.discounttype <> 0");
    $sql->query("UPDATE products AS p LEFT JOIN\n        upcLike AS v ON v.upc=p.upc LEFT JOIN\n        batchList AS l ON l.upc=concat('LC',convert(v.likeCode,char))\n        LEFT JOIN batches AS b ON l.batchID=b.batchID\n        SET p.special_price = l.salePrice,\n        p.end_date = b.endDate,p.start_date=b.startDate,\n        p.specialgroupprice=CASE WHEN l.salePrice < 0 THEN -1*l.salePrice ELSE l.salePrice END,\n        p.specialquantity=l.quantity,\n        p.specialpricemethod=l.pricemethod,\n        " . ($has_limit ? 'p.special_limit=b.transLimit,' : '') . "\n        p.discounttype = b.discounttype,\n        p.mixmatchcode = CASE \n            WHEN l.pricemethod IN (3,4) AND l.salePrice >= 0 THEN convert(l.batchID,char)\n            WHEN l.pricemethod IN (3,4) AND l.salePrice < 0 THEN convert(-1*l.batchID,char)\n            ELSE p.mixmatchcode \n        END \n        WHERE l.upc LIKE 'LC%'\n        AND CURDATE() >= b.startDate AND CURDATE() <= b.endDate\n        AND b.discounttype <> 0");
} else {
    $sql->query("UPDATE products\n        SET mixmatchcode=convert(varchar,u.likecode+500)\n        FROM \n        products AS p\n        INNER JOIN upcLike AS u\n        ON p.upc=u.upc");
    $sql->query("UPDATE products \n        SET\n        special_price = l.salePrice,\n        specialpricemethod = l.pricemethod,\n        specialgroupprice=CASE WHEN l.salePrice < 0 THEN -1*l.salePrice ELSE l.salePrice END,\n        specialquantity = l.quantity,\n        " . ($has_limit ? 'special_limit=b.transLimit,' : '') . "\n        start_date = b.startDate,\n        end_date = b.endDate,\n        discounttype = b.discountType,\n        mixmatchcode = CASE \n            WHEN l.pricemethod IN (3,4) AND l.salePrice >= 0 THEN convert(varchar,b.batchID)\n            WHEN l.pricemethod IN (3,4) AND l.salePrice < 0 THEN convert(varchar,-1*b.batchID)\n            ELSE p.mixmatchcode \n        END\n        FROM products AS p\n        LEFT JOIN batchList AS l ON p.upc=l.upc\n        LEFT JOIN batches AS b ON l.batchID=b.batchID\n        WHERE l.upc NOT LIKE 'LC%'\n        AND b.discountType <> 0");
    $sql->query("UPDATE products SET special_price = l.salePrice,\n        end_date = b.enddate,start_date=b.startdate,\n        specialgroupprice=CASE WHEN l.salePrice < 0 THEN -1*l.salePrice ELSE l.salePrice END,\n        specialquantity=l.quantity,\n        specialpricemethod=l.pricemethod,\n        " . ($has_limit ? 'special_limit=b.transLimit,' : '') . "\n        discounttype = b.discounttype,\n        mixmatchcode = CASE \n            WHEN l.pricemethod IN (3,4) AND l.salePrice >= 0 THEN convert(varchar,b.batchID)\n            WHEN l.pricemethod IN (3,4) AND l.salePrice < 0 THEN convert(varchar,-1*b.batchID)\n            ELSE p.mixmatchcode \n        END\n        FROM products AS p LEFT JOIN\n        upcLike AS v ON v.upc=p.upc LEFT JOIN\n        batchList AS l ON l.upc='LC'+convert(varchar,v.likecode)\n        LEFT JOIN batches AS b ON l.batchID=b.batchID\n        WHERE l.upc LIKE 'LC%'\n        AND b.discountType <> 0");
}