Có sự kiện hoặc địa điểm nào tôi có thể bổ sung khi quy tắc giá của giỏ hàng không còn hiệu lực (chẳng hạn như khi hết hạn hoặc nếu bạn thay đổi số lượng sản phẩm khác khi không còn áp dụng)? Tôi biết rằng nó được tự động xóa khỏi giỏ hàng, nhưng dường như tôi không thể tìm thấy nơi này đang xảy ra trong mã.
Tôi đang viết một mô-đun thêm một sản phẩm miễn phí vào giỏ hàng cho một phiếu giảm giá trong đó tổng phụ nhiều hơn số tiền X. Tất cả đều hoạt động ngoại trừ khi giảm số lượng mặt hàng trong giỏ hàng có tổng phụ nằm dưới X. Phiếu giảm giá đang bị xóa, nhưng sản phẩm của tôi vẫn ở trong giỏ hàng.
Cho đến nay tôi đã tham gia vào các sự kiện sau đây để làm những gì tôi cần cho đến nay ...
salesrule_validator_process
checkout_cart_update_items_after
sales_quote_collect_totals_before
Tôi đã tìm thấy Magento\Quote\Model\CouponManagement
điều có vẻ hứa hẹn vì nó có set()
và remove()
phương pháp, nhưng chúng dường như không được gọi khi giỏ hàng được cập nhật.
Ở checkout_cart_update_items_after
đây có vẻ như là một nơi logic tôi có thể kiểm tra, nhưng có vẻ như quy tắc vẫn được đặt theo$cart->getQuote()->getAppliedRuleIds()
CẬP NHẬT: Cuối cùng tôi đã thêm một người quan sát cho checkout_cart_save_after
sự kiện diễn ra sau collectTotals()
đó để biết liệu quy tắc có còn trên giỏ hàng hay không. Sau đó, tôi về cơ bản so sánh $quote->getAppliedRuleIds()
với $quote->getOrigData('applied_rule_ids')
để xem nếu quy tắc đã được gỡ bỏ. Tôi cảm thấy như có một cách tốt hơn để làm điều này, nhưng nó hoạt động vào lúc này. Tôi vẫn gặp vấn đề với các phiếu giảm giá hết hạn mặc dù ...