php - 在 magento 下订单后库存数量未更新

标签 php magento magento-1.7

下面的代码可以很好地让我在magento下订单,但是库存数量没有更新,它保持原样,但是当我从前端下订单时,订单被下达并且库存被更新,但是当我使用下面时代码下订单,库存数量保持不变。 下订单后,默认邮件也会成功发送给客户。

      $id=$custid; // get Customer Id
      $customer = Mage::getModel('customer/customer')->load($id);
      $transaction = Mage::getModel('core/resource_transaction');
      $storeId = $customer->getStoreId();
      $reservedOrderId = Mage::getSingleton('eav/config')->getEntityType('order')->fetchNewIncrementId($storeId);

      $order = Mage::getModel('sales/order')
        ->setIncrementId($reservedOrderId)
        ->setStoreId($storeId)
        ->setQuoteId(0)
        ->setGlobal_currency_code('USD')
        ->setBase_currency_code('USD')
        ->setStore_currency_code('USD')
        ->setOrder_currency_code('USD');

        // set Customer data
       $order->setCustomer_email($customer->getEmail())
        ->setCustomerFirstname($customer->getFirstname())
        ->setCustomerLastname($customer->getLastname())
        ->setCustomerGroupId($customer->getGroupId())
        ->setCustomer_is_guest(0)
        ->setCustomer($customer);

       // set Billing Address
       $billing = $customer->getDefaultBillingAddress();
       $billingAddress = Mage::getModel('sales/order_address')
         ->setStoreId($storeId)
         ->setAddressType(Mage_Sales_Model_Quote_Address::TYPE_BILLING)
         ->setCustomerId($customer->getId())
         ->setCustomerAddressId($customer->getDefaultBilling())
         ->setCustomer_address_id($billing->getEntityId())
         ->setPrefix($billing->getPrefix())
         ->setFirstname($billing->getFirstname())
         ->setMiddlename($billing->getMiddlename())
         ->setLastname($billing->getLastname())
         ->setSuffix($billing->getSuffix())
         ->setCompany($billing->getCompany())
         ->setStreet($billing->getStreet())
         ->setCity($billing->getCity())
         ->setCountry_id($billing->getCountryId())
         ->setRegion($billing->getRegion())
         ->setRegion_id($billing->getRegionId())
         ->setPostcode($billing->getPostcode())
         ->setTelephone($billing->getTelephone())
         ->setFax($billing->getFax());

        $order->setBillingAddress($billingAddress);
        $shipping = $customer->getDefaultShippingAddress();
        $shippingAddress = Mage::getModel('sales/order_address')
         ->setStoreId($storeId)
         ->setAddressType(Mage_Sales_Model_Quote_Address::TYPE_SHIPPING)
         ->setCustomerId($customer->getId())
         ->setCustomerAddressId($customer->getDefaultShipping())
         ->setCustomer_address_id($shipping->getEntityId())
         ->setPrefix($shipping->getPrefix())
         ->setFirstname($shipping->getFirstname())
         ->setMiddlename($shipping->getMiddlename())
         ->setLastname($shipping->getLastname())
         ->setSuffix($shipping->getSuffix())
         ->setCompany($shipping->getCompany())
         ->setStreet($shipping->getStreet())
         ->setCity($shipping->getCity())
         ->setCountry_id($shipping->getCountryId())
         ->setRegion($shipping->getRegion())
         ->setRegion_id($shipping->getRegionId())
         ->setPostcode($shipping->getPostcode())
         ->setTelephone($shipping->getTelephone())
         ->setFax($shipping->getFax());

       $order->setShippingAddress($shippingAddress)
         ->setShipping_method('flatrate_flatrate')
         ->setShippingDescription('flatrate');

       $orderPayment = Mage::getModel('sales/order_payment')
         ->setStoreId($storeId)
         ->setCustomerPaymentId(0)
         ->setMethod('purchaseorder')
         ->setPo_number(' - ');
       $order->setPayment($orderPayment);

          // let say, we have 2 products
          $subTotal = 0;
       $products = array('9' => array('qty' => 2),'18' =>array('qty' => 2));
       foreach ($products as $productId=>$product) {
           $_product = Mage::getModel('catalog/product')->load($productId);
           $rowTotal = $_product->getPrice() * $product['qty'];
           $orderItem = Mage::getModel('sales/order_item')
              ->setStoreId($storeId)
              ->setQuoteItemId(0)
              ->setQuoteParentItemId(NULL)
              ->setProductId($productId)
              ->setProductType($_product->getTypeId())
              ->setQtyBackordered(NULL)
              ->setTotalQtyOrdered($product['rqty'])
              ->setQtyOrdered($product['qty'])
              ->setName($_product->getName())
              ->setSku($_product->getSku())
              ->setPrice($_product->getPrice())
              ->setBasePrice($_product->getPrice())
              ->setOriginalPrice($_product->getPrice())
              ->setRowTotal($rowTotal)
              ->setBaseRowTotal($rowTotal);

            $subTotal += $rowTotal;
            $order->addItem($orderItem);
         }

        $order->setSubtotal($subTotal)
          ->setBaseSubtotal($subTotal)
          ->setGrandTotal($subTotal)
          ->setBaseGrandTotal($subTotal);

        $transaction->addObject($order);
        $transaction->addCommitCallback(array($order, 'place'));
        $transaction->addCommitCallback(array($order, 'save'));
        $transaction->save();
        $order->sendNewOrderEmail();

最佳答案

添加以下代码将更新数量,一切正常。

//get total quantity
$totalqty = (int)Mage::getModel('cataloginventory/stock_item')
           ->loadByProduct($productId)
           ->getQty();
//calculate new quantity
$newqty = $totalqty-$product['qty'];

//update new quantity
Mage::getModel('cataloginventory/stock_item')
       ->loadByProduct($productId)
       ->setQty($newqty)
       ->save();

关于php - 在 magento 下订单后库存数量未更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19022250/

相关文章:

php - Nginx 上的 Magento - 配置

xml - 我的帐户页面的 Magento 1.7* : How do I add "Logout"-link in the sidebar,

php - 如何在magento中动态改变价格值

php - 在编辑器上更新 header.php 时 Wordpress 主题崩溃

php - 如何从 Magento 1.7 REST API 获取访问 token 和访问 token secret

javascript - 值未传递到 process.php

php - wordpress fishpig magento 安装 - getPostListHtml()

php - Magento : showing sub sub categories in same order as in admin backend tree structure

javascript - 带有 2 个参数的 href 到 ajax 和 php

php - 从 MySQL 更新到 MySQLi 时出现从数据库中提取数据的问题