আমার কাছে এমন একটি বিভাগের পণ্য রয়েছে যা যখন আপনি নির্দিষ্ট পরিমাণের চেয়ে বেশি অর্ডার দিচ্ছেন তখন (আইনগতভাবে) তাদের করের হার পরিবর্তন করা দরকার। আপনি কার্টে নতুন পণ্য যুক্ত করার সময় আমি এই কাজটি করার জন্য বিভিন্ন করের মডেলগুলি প্রসারিত করেছি, তবে যখন ব্যবহারকারী কার্টের পরিমাণগুলি আপডেট করে বা অতিরিক্ত পণ্য যুক্ত করে যা কার্টের মধ্যে ইতিমধ্যে থ্রেশহোল্ডের উপরের পরিমাণগুলি টিপ দেয় তখন আমার সমস্যা হয় পরিমাণ।
সমস্যা 1:
প্রথমত, আমি কোন ইভেন্ট (গুলি) পালন করব তা 100% নই। আমি নিম্নলিখিত চেষ্টা করেছি;
checkout_cart_save_after
(এর উপর ভিত্তি করে -> https://stackoverflow.com/questions/14362702/magento-programatic-update-cart-via-event )
checkout_cart_update_items_after
(এর উপর ভিত্তি করে -> https://stackoverflow.com/questions/5104482/programmatic-add-product-to-cart-with-price- পরিবর্তন )
sales_quote_save_before
(এর উপর ভিত্তি করে -> https://stackoverflow.com/questions/7638858/magento-recalculate-cart-total-in-observer )
সমস্যা 2:
আমি কার্ট থেকে উদ্ধৃতি আইটেমগুলি অ্যাক্সেস করতে সক্ষম হয়েছি, এমন অনেকগুলি উপায় আছে যা দেখে মনে হয়। আমি কার্টের পৃথক আইটেমগুলির মাধ্যমে পুনরাবৃত্তি করতে সক্ষম হয়েছি, সেই আইটেমগুলির বৈশিষ্ট্য আপডেট করতে এবং তারপরে আইটেমগুলি সংরক্ষণ করতে পারি (কমপক্ষে অস্থায়ীভাবে)। যাইহোক, আমি তখনই উদ্ধৃতিটি সংরক্ষণ করতে এবং চেকআউটে করগুলি পুনরায় গণনা করতে সক্ষম নই।
কারণটির অংশটি হ'ল আমি যখন কার্টের উদ্ধৃতিটি অ্যাক্সেস করতে পারি তখন আমি কোন পদ্ধতিটি এটিতে লিখতে সক্ষম হব তা নিশ্চিত।
আমি যা চেষ্টা করেছি:
কার্টের সামগ্রীগুলি অ্যাক্সেসের ক্ষেত্রে আমি কী চেষ্টা করেছি তা আমি পর্যবেক্ষণ করা ইভেন্টের উপর নির্ভর করে তবে নীচের সমস্তগুলি চেষ্টা করেছি;
1.
$item = $observer->getQuoteItem;
2.
$cart = Mage::getSingleton('checkout/cart');
$cartItems = $cart->getCart()->getItems();
3.
$cart = $observer->getData('cart');
$quote = $cart->getData('quote');
$cartItems = $quote->getAllVisibleItems();
4.
$cartHelper = Mage::helper('checkout/cart');
$cartItems = $cartHelper->getCart()->getItems();
5.
$quote = Mage::getModel('checkout/cart');
$cartItems = $quote->getItems();
অন্ততপক্ষে আমাকে উদ্ধৃতিটি অ্যাক্সেস করতে, তাদের মাধ্যমে চালানো এবং আইটেমগুলি আপডেট করার অনুমতি দিচ্ছে বলে মনে হচ্ছে
6.
$quote = Mage::getSingleton('checkout/session')->getQuote();
$cartItems = $quote->getAllVisibleItems();
আমি যখন পুনরাবৃত্তি করি তখন প্রতিটি উদ্ধৃতি আইটেম আপডেট করার অনুমতি দেয় (আমি বিশ্বাস করি যে যাদু সেটটারগুলি ব্যবহার করে কারণ আমি কোনও সম্পর্কিত পদ্ধতি খুঁজে পাচ্ছি না)। আমি উদ্ধৃত আইটেমের জন্য ট্যাক্স ক্লাসের আইডি আপডেট করতে সক্ষম হবো এবং তারপরে করগুলি পুনরায় গণনা করতে সক্ষম হব। আমি যদি নিম্নলিখিতটি ব্যবহার করি (যেখানে qu ট্যাক্সক্লাসআইড প্রতিটি উদ্ধৃতি আইটেম দ্বারা ইতিমধ্যে ব্যবহৃত একের চেয়ে আলাদা);
$item->setTaxClassId( $taxClassId );
$item->getProduct()->setIsSuperMode(true);
$item->save;
এবং তারপরে ফলাফলগুলি লগ করুন;
Mage::log($item->debug(), null,'taxobserver.log', true);
এটি দেখায় যে আমি সত্যই এই উদ্ধৃতি আইটেমটি আপডেট করেছি এবং করের আইডি পরিবর্তন করেছি। তবে আমি যদি এরপরে অনুসরণ করি এবং পরিবর্তিত উদ্ধৃতিটি সংরক্ষণ করার চেষ্টা করি;
$quote->setTotalsCollectedFlag(false)->collectTotals();
$quote->save();
এবং তারপরে আবার ডিবাগ করুন;
Mage::log($item->debug(), null,'taxobserver.log', true);
আমার পরিবর্তনগুলি সংরক্ষণ করা হয়নি, উদ্ধৃতি আইটেম পরিবর্তন পুনরায় সেট করা হয়েছে এবং কার্টের योगগুলি পুনরায় গণনা করা হয়নি। ঝাঁপিয়ে পড়ার জন্য কোনও লম্বা বিল্ডিং খুঁজে পাওয়া এটির জন্য সমাধান হতে পারে কিনা তা ভাবতে শুরু করে।