diff --git a/README.md b/README.md index 64001a19..f6d49bb5 100644 --- a/README.md +++ b/README.md @@ -146,6 +146,32 @@ class Order extends BaseOrder implements SetonoSyliusGiftCardPluginOrderInterfac } } ``` + +**Extend `OrderItemUnit`** + +```php +orderItemUnit = $orderItem; + $orderItem->setGiftCard($this); } public function getOrder(): ?OrderInterface diff --git a/src/Model/GiftCardInterface.php b/src/Model/GiftCardInterface.php index 2e85bd5d..14472e5f 100644 --- a/src/Model/GiftCardInterface.php +++ b/src/Model/GiftCardInterface.php @@ -8,7 +8,6 @@ use Sylius\Component\Core\Model\ChannelInterface; use Sylius\Component\Core\Model\CustomerInterface; use Sylius\Component\Core\Model\OrderInterface; -use Sylius\Component\Core\Model\OrderItemUnitInterface; use Sylius\Component\Resource\Model\CodeAwareInterface; use Sylius\Component\Resource\Model\ResourceInterface; use Sylius\Component\Resource\Model\TimestampableInterface; diff --git a/src/Model/OrderItemUnitInterface.php b/src/Model/OrderItemUnitInterface.php new file mode 100644 index 00000000..3c0a0075 --- /dev/null +++ b/src/Model/OrderItemUnitInterface.php @@ -0,0 +1,14 @@ +giftCard; + } + + public function setGiftCard(GiftCardInterface $giftCard): void + { + $this->giftCard = $giftCard; + } +} diff --git a/src/Model/OrderTrait.php b/src/Model/OrderTrait.php index 4b7794e1..2e747245 100644 --- a/src/Model/OrderTrait.php +++ b/src/Model/OrderTrait.php @@ -4,10 +4,15 @@ namespace Setono\SyliusGiftCardPlugin\Model; +use function assert; use Doctrine\Common\Collections\ArrayCollection; use Doctrine\Common\Collections\Collection; use Doctrine\ORM\Mapping as ORM; +use Sylius\Component\Core\Model\Order; +/** + * @mixin Order + */ trait OrderTrait { /** @@ -38,6 +43,8 @@ public function hasGiftCards(): bool public function addGiftCard(GiftCardInterface $giftCard): void { + assert($this instanceof OrderInterface); + if (!$this->hasGiftCard($giftCard)) { $this->giftCards->add($giftCard); $giftCard->addAppliedOrder($this); @@ -46,6 +53,8 @@ public function addGiftCard(GiftCardInterface $giftCard): void public function removeGiftCard(GiftCardInterface $giftCard): void { + assert($this instanceof OrderInterface); + if ($this->hasGiftCard($giftCard)) { $this->giftCards->removeElement($giftCard); $giftCard->removeAppliedOrder($this); diff --git a/src/Operator/OrderGiftCardOperator.php b/src/Operator/OrderGiftCardOperator.php index 8a2705d2..8cba7efa 100644 --- a/src/Operator/OrderGiftCardOperator.php +++ b/src/Operator/OrderGiftCardOperator.php @@ -9,11 +9,11 @@ use Setono\SyliusGiftCardPlugin\EmailManager\GiftCardEmailManagerInterface; use Setono\SyliusGiftCardPlugin\Factory\GiftCardFactoryInterface; use Setono\SyliusGiftCardPlugin\Model\GiftCardInterface; +use Setono\SyliusGiftCardPlugin\Model\OrderItemUnitInterface; use Setono\SyliusGiftCardPlugin\Model\ProductInterface; use Setono\SyliusGiftCardPlugin\Repository\GiftCardRepositoryInterface; use Sylius\Component\Core\Model\OrderInterface; use Sylius\Component\Core\Model\OrderItemInterface; -use Sylius\Component\Core\Model\OrderItemUnitInterface; use Webmozart\Assert\Assert; /** diff --git a/src/Resources/config/app/fixtures.yaml b/src/Resources/config/app/fixtures.yaml index e7ba7415..db52d513 100644 --- a/src/Resources/config/app/fixtures.yaml +++ b/src/Resources/config/app/fixtures.yaml @@ -24,18 +24,17 @@ sylius_fixtures: code: '1USD' channel: 'FASHION_WEB' currency: 'USD' - initial_amount: 2.00 amount: 1.00 gift_card_two_usd: code: '2USD' channel: 'FASHION_WEB' - initial_amount: 2.00 + amount: 2.00 setono_gift_card_configuration: options: custom: default_configuration: code: 'default_configuration' - background_image: '@SetonoSyliusGiftCardPlugin/Resources/fixtures/default_background.jpg' + background_image: '@SetonoSyliusGiftCardPlugin/Resources/fixtures/default_background.png' enabled: true default: true diff --git a/src/Resources/config/doctrine/model/GiftCard.orm.xml b/src/Resources/config/doctrine/model/GiftCard.orm.xml index 79acf90b..23ce53c5 100644 --- a/src/Resources/config/doctrine/model/GiftCard.orm.xml +++ b/src/Resources/config/doctrine/model/GiftCard.orm.xml @@ -1,6 +1,5 @@ - @@ -8,8 +7,8 @@ - + @@ -28,12 +27,13 @@ - + + - + + - diff --git a/src/Resources/fixtures/default_background.jpg b/src/Resources/fixtures/default_background.jpg deleted file mode 100644 index 06841c61..00000000 Binary files a/src/Resources/fixtures/default_background.jpg and /dev/null differ diff --git a/src/Resources/fixtures/default_background.png b/src/Resources/fixtures/default_background.png new file mode 100644 index 00000000..0c3a1fb0 Binary files /dev/null and b/src/Resources/fixtures/default_background.png differ diff --git a/src/Resources/views/Shop/GiftCard/pdf.html.twig b/src/Resources/views/Shop/GiftCard/pdf.html.twig index 6cdcf3ee..67edf041 100644 --- a/src/Resources/views/Shop/GiftCard/pdf.html.twig +++ b/src/Resources/views/Shop/GiftCard/pdf.html.twig @@ -4,25 +4,25 @@ {% endif %} - - Gift card: {{ giftCard.code }} - - - - - -{{- giftCard.code -}}
-{{- giftCard.amount|sylius_format_money(giftCard.currencyCode, sylius_base_locale) -}} - + img { + display: block; + } + + + + {{- giftCard.code -}}
+ {{- giftCard.amount|sylius_format_money(giftCard.currencyCode, sylius_base_locale) -}} + diff --git a/tests/Application/Model/OrderItemUnit.php b/tests/Application/Model/OrderItemUnit.php new file mode 100644 index 00000000..9bac153e --- /dev/null +++ b/tests/Application/Model/OrderItemUnit.php @@ -0,0 +1,19 @@ + + + {% include '@SyliusAdmin/Product/_info.html.twig' %} + {# @var \Setono\SyliusGiftCardPlugin\Model\OrderItemUnitInterface itemUnit #} + {% for itemUnit in item.units %} + {% set giftCard = itemUnit.giftCard %} + {% if giftCard is not null %} + {{ giftCard.code }} + {% endif %} + {% endfor %} + + + {{ money.format(item.unitPrice, order.currencyCode) }} + + + {{ money.format(item.units.first.adjustmentsTotal(unitPromotionAdjustment), order.currencyCode) }} + + + ~ {{ money.format(item.units.first.adjustmentsTotal(orderPromotionAdjustment), order.currencyCode) }} + + + {{ money.format(item.fullDiscountedUnitPrice, order.currencyCode) }} + + + {{ item.quantity }} + + + {{ money.format(subtotal, order.currencyCode) }} + + +
{{ money.format(taxExcluded, order.currencyCode) }}
+
+
{{ money.format(taxIncluded, order.currencyCode) }} +
+ ({{ 'sylius.ui.included_in_price'|trans }}) +
+ + + {{ money.format(item.total, order.currencyCode) }} + +