Source of file OrderDiscountModifier.php
Size: 2,417 Bytes - Last Modified: 2021-12-24T06:35:13+00:00
/var/www/docs.ssmods.com/process/src/src/Model/Modifiers/OrderDiscountModifier.php
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109 | <?php namespace SilverShop\Discounts\Model\Modifiers; use SilverShop\Model\Modifiers\OrderModifier; use SilverStripe\Control\Controller; use SilverShop\Discounts\Model\Discount; use SilverShop\Discounts\Calculator; class OrderDiscountModifier extends OrderModifier { private static $subtitle_separator = ', '; private static $defaults = [ 'Type' => 'Deductable' ]; private static $many_many = [ 'Discounts' => Discount::class ]; private static $many_many_extraFields = [ 'Discounts' => [ 'DiscountAmount' => 'Currency' ] ]; private static $singular_name = 'Discount'; private static $plural_name = 'Discounts'; private static $table_name = 'SilverShop_OrderDiscountModifier'; private static $casting = [ 'SubTitle' => 'HTMLFragment', 'UsedCodes' => 'HTMLFragment' ]; public function value($incoming) { $this->Amount = $this->getDiscount(); return $this->Amount; } public function getDiscount() { $context = []; if ($code = $this->getCode()) { $context['CouponCode'] = $code; } $order = $this->Order(); $order->extend('updateDiscountContext', $context); $calculator = Calculator::create($order, $context); $amount = $calculator->calculate(); $this->setField('Amount', $amount); return $amount; } public function getCode() { $code = Controller::curr()->getRequest()->getSession()->get('cart.couponcode'); if (!$code && $this->Order()->exists()) { $discounts = $this->Order()->Discounts(); foreach ($discounts as $discount) { if ($discount->Code) { return $discount->Code; } } } return $code; } public function getSubTitle() { return $this->getUsedCodes(); } /** * @return string */ public function getUsedCodes() { $discounts = $this->Order()->Discounts()->filter("Code:not", ""); if (!$discounts->count()) { return ''; } return implode( $this->config()->subtitle_separator, $discounts->map('ID', 'Title')->toArray() ); } public function ShowInTable() { return $this->Amount() > 0; } } |