Changeset View
Changeset View
Standalone View
Standalone View
modules/in-commerce/units/orders/order_calculator.php
Show First 20 Lines • Show All 666 Lines • ▼ Show 20 Line(s) | |||||
'di.ItemType = ' . DiscountItemType::PRODUCT . ' OR (di.ItemType = ' . DiscountItemType::WHOLE_ORDER . ' AND d.Type = ' . DiscountType::PERCENT . ')', | 'di.ItemType = ' . DiscountItemType::PRODUCT . ' OR (di.ItemType = ' . DiscountItemType::WHOLE_ORDER . ' AND d.Type = ' . DiscountType::PERCENT . ')', | ||||
'd.Status = ' . STATUS_ACTIVE, | 'd.Status = ' . STATUS_ACTIVE, | ||||
'd.GroupId IN (' . $this->Application->getUserGroups($user_id) . ')', | 'd.GroupId IN (' . $this->Application->getUserGroups($user_id) . ')', | ||||
'd.Start IS NULL OR d.Start < ' . $this->getOrder()->GetDBField('OrderDate'), | 'd.Start IS NULL OR d.Start < ' . $this->getOrder()->GetDBField('OrderDate'), | ||||
'd.End IS NULL OR d.End > ' . $this->getOrder()->GetDBField('OrderDate'), | 'd.End IS NULL OR d.End > ' . $this->getOrder()->GetDBField('OrderDate'), | ||||
); | ); | ||||
$sql = 'SELECT | $sql = 'SELECT | ||||
CASE d.Type | ROUND(CASE d.Type | ||||
WHEN ' . DiscountType::FLAT . ' THEN ' . $price . ' - d.Amount | WHEN ' . DiscountType::FLAT . ' THEN ' . $price . ' - d.Amount | ||||
WHEN ' . DiscountType::PERCENT . ' THEN ' . $price . ' * (1 - d.Amount / 100) | WHEN ' . DiscountType::PERCENT . ' THEN ' . $price . ' * (1 - d.Amount / 100) | ||||
ELSE ' . $price . ' | ELSE ' . $price . ' | ||||
END, d.DiscountId | END, 4), d.DiscountId | ||||
FROM ' . TABLE_PREFIX . 'Products AS p | FROM ' . TABLE_PREFIX . 'Products AS p | ||||
LEFT JOIN ' . TABLE_PREFIX . 'ProductsDiscountItems AS di ON (di.ItemResourceId = p.ResourceId) OR (di.ItemType = ' . DiscountItemType::WHOLE_ORDER . ') | LEFT JOIN ' . TABLE_PREFIX . 'ProductsDiscountItems AS di ON (di.ItemResourceId = p.ResourceId) OR (di.ItemType = ' . DiscountItemType::WHOLE_ORDER . ') | ||||
LEFT JOIN ' . TABLE_PREFIX . 'ProductsDiscounts AS d ON (' . implode(') AND (', $join_clause) . ') | LEFT JOIN ' . TABLE_PREFIX . 'ProductsDiscounts AS d ON (' . implode(') AND (', $join_clause) . ') | ||||
WHERE (p.ProductId = ' . $product_id . ') AND (d.DiscountId IS NOT NULL)'; | WHERE (p.ProductId = ' . $product_id . ') AND (d.DiscountId IS NOT NULL)'; | ||||
$pricing = $this->Conn->GetCol($sql, 'DiscountId'); | $pricing = $this->Conn->GetCol($sql, 'DiscountId'); | ||||
if (!$pricing) { | if (!$pricing) { | ||||
return $price; | return $price; | ||||
▲ Show 20 Lines • Show All 47 Lines • ▼ Show 20 Line(s) | |||||
$join_clause = Array ( | $join_clause = Array ( | ||||
'c.CouponId = ci.CouponId', | 'c.CouponId = ci.CouponId', | ||||
'ci.ItemType = ' . CouponItemType::PRODUCT . ' OR (ci.ItemType = ' . CouponItemType::WHOLE_ORDER . ' AND c.Type = ' . CouponType::PERCENT . ')', | 'ci.ItemType = ' . CouponItemType::PRODUCT . ' OR (ci.ItemType = ' . CouponItemType::WHOLE_ORDER . ' AND c.Type = ' . CouponType::PERCENT . ')', | ||||
); | ); | ||||
$sql = 'SELECT | $sql = 'SELECT | ||||
MIN( | MIN( | ||||
CASE c.Type | ROUND(CASE c.Type | ||||
WHEN ' . CouponType::FLAT . ' THEN ' . $price . ' - c.Amount | WHEN ' . CouponType::FLAT . ' THEN ' . $price . ' - c.Amount | ||||
WHEN ' . CouponType::PERCENT . ' THEN ' . $price . ' * (1 - c.Amount / 100) | WHEN ' . CouponType::PERCENT . ' THEN ' . $price . ' * (1 - c.Amount / 100) | ||||
ELSE ' . $price . ' | ELSE ' . $price . ' | ||||
END | END, 4) | ||||
) | ) | ||||
FROM ' . TABLE_PREFIX . 'Products AS p | FROM ' . TABLE_PREFIX . 'Products AS p | ||||
LEFT JOIN ' . TABLE_PREFIX . 'ProductsCouponItems AS ci ON (ci.ItemResourceId = p.ResourceId) OR (ci.ItemType = ' . CouponItemType::WHOLE_ORDER . ') | LEFT JOIN ' . TABLE_PREFIX . 'ProductsCouponItems AS ci ON (ci.ItemResourceId = p.ResourceId) OR (ci.ItemType = ' . CouponItemType::WHOLE_ORDER . ') | ||||
LEFT JOIN ' . TABLE_PREFIX . 'ProductsCoupons AS c ON (' . implode(') AND (', $join_clause) . ') | LEFT JOIN ' . TABLE_PREFIX . 'ProductsCoupons AS c ON (' . implode(') AND (', $join_clause) . ') | ||||
WHERE p.ProductId = ' . $product_id . ' AND ci.CouponId = ' . $this->getCoupon() . ' | WHERE p.ProductId = ' . $product_id . ' AND ci.CouponId = ' . $this->getCoupon() . ' | ||||
GROUP BY p.ProductId'; | GROUP BY p.ProductId'; | ||||
$coupon_price = $this->Conn->GetOne($sql); | $coupon_price = $this->Conn->GetOne($sql); | ||||
▲ Show 20 Lines • Show All 104 Lines • Show Last 20 Lines |