Apakah ada tempat acara atau plugin untuk saat aturan kereta tidak lagi valid?

13

Apakah ada acara atau tempat saya dapat plugin ketika aturan harga keranjang belanja tidak lagi berlaku (seperti ketika itu berakhir atau jika Anda mengubah jumlah produk lain di mana tidak berlaku lagi)? Saya tahu bahwa secara otomatis dihapus dari keranjang, tetapi saya tidak dapat menemukan tempat ini terjadi dalam kode.

Saya menulis modul yang menambahkan produk gratis ke troli untuk kupon di mana subtotal lebih dari jumlah X. Semuanya berfungsi kecuali saat mengurangi jumlah item di troli tempat subtotalnya di bawah X. Kuponnya dihapus, tetapi produk saya tetap berada di gerobak.

Sejauh ini saya telah memanfaatkan acara-acara berikut untuk melakukan apa yang saya butuhkan sejauh ini ...

salesrule_validator_process
checkout_cart_update_items_after
sales_quote_collect_totals_before

Saya memang menemukan Magento\Quote\Model\CouponManagementyang tampaknya menjanjikan karena memiliki set()dan remove()metode, tetapi mereka tampaknya tidak dipanggil ketika keranjang diperbarui.

Di checkout_cart_update_items_afterdalamnya juga tampak seperti tempat logis yang bisa saya periksa, tetapi tampaknya aturannya masih diatur menurut$cart->getQuote()->getAppliedRuleIds()


UPDATE: Saya akhirnya menambahkan pengamat untuk checkout_cart_save_afteracara yang berjalan setelah collectTotals()jadi tahu apakah aturannya masih ada di kereta atau tidak. Maka pada dasarnya saya membandingkan $quote->getAppliedRuleIds()dengan $quote->getOrigData('applied_rule_ids')untuk melihat apakah aturan tersebut telah dihapus. Saya merasa ada cara yang lebih baik untuk melakukan ini, tetapi itu berhasil untuk saat ini. Saya masih memiliki masalah dengan kupon yang kedaluwarsa ...

Cakar Berantakan
sumber
dapatkah Anda jelaskan secara singkat, ini sangat kompleks
Anas Mansuri

Jawaban:

0

Saya akan melakukannya dengan plugin sekitar untuk

\ Magento \ SalesRule \ Model \ RulesApplier :: applyRules

Di sana Anda memiliki parameter $ rules yang akan menjadi larik yang berisi id aturan yang diterapkan lama, dan hasil dari panggilan $ continue () akan menjadi larik id yang diterapkan. Mungkin tempat yang lebih baik dapat ditemukan jika Anda mengungkapkan apa yang ingin Anda lakukan dengannya.

Zivorad
sumber