Skip to content

Commit 478faec

Browse files
committed
Discounts update (#2774)
* Added update instructions * Fixed link
1 parent d290ecd commit 478faec

File tree

1 file changed

+146
-0
lines changed

1 file changed

+146
-0
lines changed

docs/update_and_migration/from_4.6/update_from_4.6.md

Lines changed: 146 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -352,14 +352,160 @@ With the product updated to the latest version, you can now finish the update pr
352352
[LTS Updates](editions.md#lts-updates) are standalone packages with their own update procedures.
353353
To use the [latest features](ibexa_dxp_v4.6.md) added to them, update them separately with the following commands:
354354

355+
=== "Discounts"
356+
357+
Run the following command to get the latest version:
358+
359+
```bash
360+
composer require ibexa/discounts:[[= latest_tag_4_6 =]] ibexa/discounts-codes:[[= latest_tag_4_6 =]]
361+
```
362+
363+
Then apply manually the changes described below.
364+
365+
## 4.6.20
366+
367+
### Policy changes
368+
369+
The `discount/view` policy is no longer required for the store customers to use a discount and must be removed from all users who are not managing discounts.
370+
The policy allows to access all the discount details, including the coupon codes to activate them, which could lead to system abuse.
371+
372+
To learn more, see the [discounts policies overview](policies.md#discounts).
373+
374+
### Database update
375+
376+
Run the following scripts:
377+
378+
=== "MySQL"
379+
380+
``` sql
381+
CREATE TABLE ibexa_discount_code_usage (
382+
id INT AUTO_INCREMENT NOT NULL,
383+
discount_code_id INT NOT NULL,
384+
order_id INT NOT NULL,
385+
discriminator VARCHAR(10) NOT NULL,
386+
used_at DATETIME NOT NULL COMMENT '(DC2Type:datetime_immutable)',
387+
INDEX ibexa_discount_code_usage_discount_code_idx (discount_code_id),
388+
INDEX ibexa_discount_code_usage_order_idx (order_id),
389+
PRIMARY KEY(id)
390+
) DEFAULT CHARACTER SET utf8mb4 COLLATE `utf8mb4_unicode_520_ci` ENGINE = InnoDB;
391+
392+
CREATE TABLE ibexa_discount_code_usage_email (
393+
id INT NOT NULL,
394+
user_email VARCHAR(190) DEFAULT NULL,
395+
INDEX ibexa_discount_code_usage_email_idx (user_email),
396+
UNIQUE INDEX ibexa_discount_codes_usage_email_uidx (id, user_email),
397+
PRIMARY KEY(id)
398+
) DEFAULT CHARACTER SET utf8mb4 COLLATE `utf8mb4_unicode_520_ci` ENGINE = InnoDB;
399+
400+
CREATE TABLE ibexa_discount_code_usage_user (
401+
id INT NOT NULL,
402+
user_id INT DEFAULT NULL,
403+
INDEX ibexa_discount_code_usage_user_idx (user_id),
404+
UNIQUE INDEX ibexa_discount_codes_usage_user_uidx (id, user_id),
405+
PRIMARY KEY(id)
406+
) DEFAULT CHARACTER SET utf8mb4 COLLATE `utf8mb4_unicode_520_ci` ENGINE = InnoDB;
407+
408+
ALTER TABLE ibexa_discount_code_usage
409+
ADD CONSTRAINT ibexa_discount_code_usage_code_fk FOREIGN KEY (discount_code_id)
410+
REFERENCES ibexa_discount_code (id) ON UPDATE CASCADE ON DELETE CASCADE;
411+
412+
ALTER TABLE ibexa_discount_code_usage
413+
ADD CONSTRAINT ibexa_discount_code_usage_order_fk FOREIGN KEY (order_id)
414+
REFERENCES ibexa_order (id) ON UPDATE CASCADE ON DELETE CASCADE;
415+
416+
ALTER TABLE ibexa_discount_code_usage_email
417+
ADD CONSTRAINT ibexa_discount_code_usage_email_fk FOREIGN KEY (id)
418+
REFERENCES ibexa_discount_code_usage (id) ON UPDATE CASCADE ON DELETE CASCADE;
419+
420+
ALTER TABLE ibexa_discount_code_usage_user
421+
ADD CONSTRAINT ibexa_discount_code_usage_user_fk FOREIGN KEY (id)
422+
REFERENCES ibexa_discount_code_usage (id) ON UPDATE CASCADE ON DELETE CASCADE;
423+
424+
ALTER TABLE ibexa_discount_code_usage_user
425+
ADD CONSTRAINT ibexa_discount_code_usage_user_content_fk FOREIGN KEY (user_id)
426+
REFERENCES ezuser (contentobject_id) ON UPDATE CASCADE ON DELETE CASCADE;
427+
```
428+
429+
=== "PostgreSQL"
430+
431+
``` sql
432+
CREATE TABLE ibexa_discount_code_usage
433+
(
434+
id SERIAL NOT NULL,
435+
discount_code_id INT NOT NULL,
436+
order_id INT NOT NULL,
437+
discriminator VARCHAR(10) NOT NULL,
438+
used_at TIMESTAMP(0) WITHOUT TIME ZONE NOT NULL,
439+
PRIMARY KEY(id)
440+
);
441+
442+
CREATE INDEX ibexa_discount_code_usage_discount_code_idx
443+
ON ibexa_discount_code_usage (discount_code_id);
444+
445+
CREATE INDEX ibexa_discount_code_usage_order_idx
446+
ON ibexa_discount_code_usage (order_id);
447+
448+
COMMENT ON COLUMN ibexa_discount_code_usage.used_at IS '(DC2Type:datetime_immutable)';
449+
450+
CREATE TABLE ibexa_discount_code_usage_email (
451+
id INT NOT NULL,
452+
user_email VARCHAR(190) DEFAULT NULL,
453+
PRIMARY KEY(id)
454+
);
455+
456+
CREATE INDEX ibexa_discount_code_usage_email_idx
457+
ON ibexa_discount_code_usage_email (user_email);
458+
459+
CREATE UNIQUE INDEX ibexa_discount_codes_usage_email_uidx
460+
ON ibexa_discount_code_usage_email (id, user_email);
461+
462+
CREATE TABLE ibexa_discount_code_usage_user
463+
(
464+
id INT NOT NULL,
465+
user_id INT DEFAULT NULL,
466+
PRIMARY KEY(id)
467+
);
468+
469+
CREATE INDEX ibexa_discount_code_usage_user_idx
470+
ON ibexa_discount_code_usage_user (user_id);
471+
472+
CREATE UNIQUE INDEX ibexa_discount_codes_usage_user_uidx
473+
ON ibexa_discount_code_usage_user (id, user_id);
474+
475+
ALTER TABLE ibexa_discount_code_usage
476+
ADD CONSTRAINT ibexa_discount_code_usage_code_fk FOREIGN KEY (discount_code_id)
477+
REFERENCES ibexa_discount_code (id) ON UPDATE CASCADE ON DELETE CASCADE NOT DEFERRABLE INITIALLY IMMEDIATE;
478+
479+
ALTER TABLE ibexa_discount_code_usage
480+
ADD CONSTRAINT ibexa_discount_code_usage_order_fk FOREIGN KEY (order_id)
481+
REFERENCES ibexa_order (id) ON UPDATE CASCADE ON DELETE CASCADE NOT DEFERRABLE INITIALLY IMMEDIATE;
482+
483+
ALTER TABLE ibexa_discount_code_usage_email
484+
ADD CONSTRAINT ibexa_discount_code_usage_email_fk FOREIGN KEY (id)
485+
REFERENCES ibexa_discount_code_usage (id) ON UPDATE CASCADE ON DELETE CASCADE NOT DEFERRABLE INITIALLY IMMEDIATE;
486+
487+
ALTER TABLE ibexa_discount_code_usage_user
488+
ADD CONSTRAINT ibexa_discount_code_usage_user_fk FOREIGN KEY (id)
489+
REFERENCES ibexa_discount_code_usage (id) ON UPDATE CASCADE ON DELETE CASCADE NOT DEFERRABLE INITIALLY IMMEDIATE;
490+
491+
ALTER TABLE ibexa_discount_code_usage_user
492+
ADD CONSTRAINT ibexa_discount_code_usage_user_content_fk FOREIGN KEY (user_id)
493+
REFERENCES ezuser (contentobject_id) ON UPDATE CASCADE ON DELETE CASCADE NOT DEFERRABLE INITIALLY IMMEDIATE;
494+
```
495+
355496
=== "AI actions"
356497

498+
Run the following command to get the latest version:
499+
357500
```bash
358501
composer require ibexa/connector-ai:[[= latest_tag_4_6 =]] ibexa/connector-openai:[[= latest_tag_4_6 =]]
359502
```
360503

361504
=== "Date and time attribute"
362505

506+
Run the following command to get the latest version:
507+
363508
```bash
364509
composer require ibexa/product-catalog-date-time-attribute:[[= latest_tag_4_6 =]]
365510
```
511+

0 commit comments

Comments
 (0)