我在以编程方式为某些订单创建发货时遇到问题。对于没有发票的订单,他们可以毫无问题地发货。
我已经在这里粘贴了我的代码,你能帮我解决这个问题吗?
<?php
/*
check if orderId is set
*/
if(isset($orderId)){
$Semail = false;
$includeComment = true;
$shipment = false;
/*
Update order control systems table with tracking
*/
$dispatchOrder = $sql->query("update _trackingOrders SET trackingNumber = '".$trackingNumber."' where order_number = '".$orderId."'");
$dispatchOrderCustomer = $sql->query("update _trackingCustomer SET orderStatus = 'dispatched' where order_number = '".$orderId."'");
/*
End of updates
*/
if(($dispatchOrder)&&($dispatchOrderCustomer)){
/*
Load order by id
*/
$order = Mage::getModel('sales/order')->load($orderId);
/*
check if order exist
*/
if (!$order->getId()) {
echo 'The order no longer exists.';
return false;
}
**EDIT:**
/*
check if order can be invoiced
*/
if(!$order->canInvoice()){
echo 'order can not be invoiced';
return false;
}
/*
check if order can be ship
*/
if (!$order->canShip()) {
echo 'Order can not be shipped';
return false;
}
/*
* New shipment coding begins here
*/
$shipment = Mage::getModel('sales/service_order', $order)->prepareShipment();
/*
**END OF EDIT**
*/
/*
get all items from the order
*/
foreach ($order->getAllItems() as $orderItem) {
if (!$orderItem->getQtyToShip()) {
continue;
}
if ($orderItem->getIsVirtual()) {
continue;
}
$item = $convertor->itemToShipmentItem($orderItem);
$qty = $orderItem->getQtyToShip();
$item->setQty($qty);
$shipment->addItem($item);
}
/*
shipment details
*/
$tracking = array();
$tracking['carrier_code'] = 'Royalmail';
$tracking['title'] = $shippingMethod;
$tracking['number'] = $trackingNumber;
/*
add shipment tracking details
*/
$track = Mage::getModel('sales/order_shipment_track')->addData($tracking);
$shipment->addTrack($track);
/*
register current shipment
*/
Mage::register('current_shipment_'.$orderId.'', $shipment);
/*
register shipment
add comment to shipment
send shipment email
*/
$shipment->register();
$shipment->addComment($comments, $Semail && $includeComment);
$shipment->setEmailSent(true);
/*
set order state as processign
set order is in process
set order status as complete
*/
$shipment->getOrder()->setState(Mage_Sales_Model_Order::STATE_PROCESSING, true);
$shipment->getOrder()->setIsInProcess(false);
$shipment->getOrder()->setStatus('complete');
/*
get shipment order
add statushistory
*/
$_order = $shipment->getOrder();
$_order->addStatusHistoryComment($comments, 'complete')
->setIsVisibleOnFront(1)
->setIsCustomerNotified(1);
$_order->sendOrderUpdateEmail('1', $comments);
$_order->save();
/*
save transactions
*/
$transactionSave = Mage::getModel('core/resource_transaction')
->addObject($shipment)
->addObject($shipment->getOrder())
->save();
echo "order has been dispatched";
?>
提前致谢。
杰伊