관리자의 모든 보류 중인 주문에서 특정 제품 제거/취소
-
29-09-2020 - |
문제
나는 모든 보류 주문을 한 번에 선택하고 관리자의 주문 관리 페이지에서 완료 상태로 이동해야 하는 마젠토 프로젝트를 하고 있습니다.
나는이 수정을했고 잘 작동합니다.그러나 요구 사항은 해당 주문을 완료 상태로 이동하는 동안 주문이 하나의 특정 제품으로 구성된 경우 해당 제품을 제거하거나 수량을 0으로 변경하고 처리해야 한다는 것입니다.
마젠토의 초보자로서 나는 여기에 논리/아이디어가 부족합니다.도움을 주시면 대단히 감사하겠습니다.
해결책
약간의 분석과 인터넷 검색 후 아래 코드를 사용하여 달성했습니다.
$orderIds = $this->getRequest()->getPost('order_ids', array()); // get all order ids
$countCompleteOrder = 0;
$_resource = Mage::getSingleton('catalog/product')->getResource();
$mailBody = '';
$mailSend = 0;
foreach ($orderIds as $orderId) {
$order = Mage::getModel('sales/order')->load($orderId);
//echo '<pre>'; print_r($order); exit;
$customer = Mage::getModel("customer/customer")->load($order->getCustomerId());
$items = $order->getAllItems();
$pass = 0;
$true = $k = 0;
$items_count = count($items);
foreach ($items as $item) {
//echo '<pre>'; print_r($item); exit;
$k++;
if ($k == 1) {
$product = Mage::getModel('catalog/product')->load($item->getProductId());
$cats = $product->getCategoryIds();
$category_id = $cats[0];
$_cat = Mage::getModel('catalog/category')->setStoreId(Mage::app()->getStore()->getId())->load($category_id);
}
$base_grand_total = $order->getBaseGrandTotal();
$base_subtotal = $order->getBaseSubtotal();
$base_tva = $order->getBaseTaxAmount();
$grand_total = $order->getGrandTotal();
$subtotal = $order->getSubtotal();
$tva = $order->getTaxAmount();
$base_subtotal_incl_tax = $order->getBaseSubtotalInclTax();
$subtotal_incl_tax = $order->getSubtotalInclTax();
$total_item_count = $order->getTotalItemCount();
$minorderqty = $_resource->getAttributeRawValue($item->getProductId(), 'min_order_qty', Mage::app()->getStore());
$report = Mage::getResourceModel('reports/product_sold_collection')
->addOrderedQty()
->addAttributeToSelect(array('name', 'id'))
->addFieldToFilter('entity_id', $item->getProductId())
->getFirstItem();
$ordered_qty = intval($report->getOrderedQty());
for ($i = 0; $i < $items_count; $i++) {
if ($ordered_qty >= $minorderqty) {
$true++;
}
}
if (($ordered_qty < $minorderqty) && ($true > 0)) {
$item_price = $item->getPrice();
$item_tva = $item->getTaxAmount();
if ($items_count > 1) {
$item->delete();
$order->setBaseGrandTotal($base_grand_total - $item_price - $item_tva);
$order->setBaseSubtotal($base_subtotal - $item_price);
$order->setBaseTaxAmount($base_tva - $item_tva);
$order->setGrandTotal($grand_total - $item_price - $item_tva);
$order->setSubtotal($subtotal - $item_price);
$order->setTaxAmount($tva - $item_tva);
$order->setBaseSubtotalInclTax($base_subtotal_incl_tax - $item_price);
$order->setSubtotalInclTax($subtotal_incl_tax - $item_price);
$order->setTotalItemCount(count($items) - 1);
$order->save();
$mailSend++;
}
}
}
}
제휴하지 않습니다 magento.stackexchange