55 */
66namespace Magento \Quote \Model \ResourceModel \Quote \Address \Rate ;
77
8+ use Magento \Quote \Model \ResourceModel \Quote \Address \Rate ;
9+
810/**
911 * Quote addresses shipping rates collection
1012 *
11- * @author Magento Core Team <core@magentocommerce.com>
13+ * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
1214 */
1315class Collection extends \Magento \Framework \Model \ResourceModel \Db \VersionControl \Collection
1416{
@@ -24,15 +26,21 @@ class Collection extends \Magento\Framework\Model\ResourceModel\Db\VersionContro
2426 */
2527 private $ _carrierFactory ;
2628
29+ /**
30+ * @var Delete
31+ */
32+ private Delete $ deleteRates ;
33+
2734 /**
2835 * @param \Magento\Framework\Data\Collection\EntityFactory $entityFactory
2936 * @param \Psr\Log\LoggerInterface $logger
3037 * @param \Magento\Framework\Data\Collection\Db\FetchStrategyInterface $fetchStrategy
3138 * @param \Magento\Framework\Event\ManagerInterface $eventManager
3239 * @param \Magento\Framework\Model\ResourceModel\Db\VersionControl\Snapshot $entitySnapshot
3340 * @param \Magento\Shipping\Model\CarrierFactoryInterface $carrierFactory
34- * @param \Magento\Framework\DB\Adapter\AdapterInterface $connection
35- * @param \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource
41+ * @param Delete $deleteRates
42+ * @param \Magento\Framework\DB\Adapter\AdapterInterface|null $connection
43+ * @param \Magento\Framework\Model\ResourceModel\Db\AbstractDb|null $resource
3644 */
3745 public function __construct (
3846 \Magento \Framework \Data \Collection \EntityFactory $ entityFactory ,
@@ -41,8 +49,9 @@ public function __construct(
4149 \Magento \Framework \Event \ManagerInterface $ eventManager ,
4250 \Magento \Framework \Model \ResourceModel \Db \VersionControl \Snapshot $ entitySnapshot ,
4351 \Magento \Shipping \Model \CarrierFactoryInterface $ carrierFactory ,
52+ Delete $ deleteRates ,
4453 \Magento \Framework \DB \Adapter \AdapterInterface $ connection = null ,
45- \Magento \Framework \Model \ResourceModel \Db \AbstractDb $ resource = null
54+ \Magento \Framework \Model \ResourceModel \Db \AbstractDb $ resource = null ,
4655 ) {
4756 parent ::__construct (
4857 $ entityFactory ,
@@ -53,6 +62,7 @@ public function __construct(
5362 $ connection ,
5463 $ resource
5564 );
65+ $ this ->deleteRates = $ deleteRates ;
5666 $ this ->_carrierFactory = $ carrierFactory ;
5767 }
5868
@@ -112,4 +122,27 @@ public function addItem(\Magento\Framework\DataObject $rate)
112122 }
113123 return parent ::addItem ($ rate );
114124 }
125+
126+ /**
127+ * @inheritdoc
128+ */
129+ public function save ()
130+ {
131+ $ itemsToDelete = [];
132+ $ itemsToSave = [];
133+ /** @var Rate $item */
134+ foreach ($ this ->getItems () as $ item ) {
135+ if ($ item ->isDeleted ()) {
136+ $ itemsToDelete [] = $ item ;
137+ } else {
138+ $ itemsToSave [] = $ item ;
139+ }
140+ }
141+ $ this ->deleteRates ->execute ($ itemsToDelete );
142+ /** @var Rate $item */
143+ foreach ($ itemsToSave as $ item ) {
144+ $ item ->save ();
145+ }
146+ return $ this ;
147+ }
115148}
0 commit comments