| Server IP : 213.186.33.4 / Your IP : 216.73.216.193 Web Server : Apache System : Linux webm006.cluster103.gra.hosting.ovh.net 5.15.206-ovh-vps-grsec-zfs-classid #1 SMP Fri May 15 02:41:25 UTC 2026 x86_64 User : awebpaca ( 35430) PHP Version : 8.5.0 Disable Function : _dyuweyrj4,_dyuweyrj4r,dl MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : ON | Sudo : OFF | Pkexec : OFF Directory : /home/awebpaca/boutiques/app/code/core/Mage/Adminhtml/controllers/Sales/Order/ |
Upload File : |
<?php
/**
* Magento
*
* NOTICE OF LICENSE
*
* This source file is subject to the Open Software License (OSL 3.0)
* that is bundled with this package in the file LICENSE.txt.
* It is also available through the world-wide-web at this URL:
* http://opensource.org/licenses/osl-3.0.php
* If you did not receive a copy of the license and are unable to
* obtain it through the world-wide-web, please send an email
* to license@magentocommerce.com so we can send you a copy immediately.
*
* DISCLAIMER
*
* Do not edit or add to this file if you wish to upgrade Magento to newer
* versions in the future. If you wish to customize Magento for your
* needs please refer to http://www.magentocommerce.com for more information.
*
* @category Mage
* @package Mage_Adminhtml
* @copyright Copyright (c) 2010 Magento Inc. (http://www.magentocommerce.com)
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
*/
/**
* Adminhtml sales order edit controller
*
* @category Mage
* @package Mage_Adminhtml
* @author Magento Core Team <core@magentocommerce.com>
*/
class Mage_Adminhtml_Sales_Order_InvoiceController extends Mage_Adminhtml_Controller_Sales_Invoice
{
/**
* Get requested items qty's from request
*/
protected function _getItemQtys()
{
$data = $this->getRequest()->getParam('invoice');
if (isset($data['items'])) {
$qtys = $data['items'];
} else {
$qtys = array();
}
return $qtys;
}
/**
* Initialize invoice model instance
*
* @return Mage_Sales_Model_Order_Invoice
*/
protected function _initInvoice($update = false)
{
$this->_title($this->__('Sales'))->_title($this->__('Invoices'));
$invoice = false;
$itemsToInvoice = 0;
$invoiceId = $this->getRequest()->getParam('invoice_id');
$orderId = $this->getRequest()->getParam('order_id');
if ($invoiceId) {
$invoice = Mage::getModel('sales/order_invoice')->load($invoiceId);
} elseif ($orderId) {
$order = Mage::getModel('sales/order')->load($orderId);
/**
* Check order existing
*/
if (!$order->getId()) {
$this->_getSession()->addError($this->__('The order no longer exists.'));
return false;
}
/**
* Check invoice create availability
*/
if (!$order->canInvoice()) {
$this->_getSession()->addError($this->__('The order does not allow creating an invoice.'));
return false;
}
$savedQtys = $this->_getItemQtys();
$invoice = Mage::getModel('sales/service_order', $order)->prepareInvoice($savedQtys);
if (!$invoice->getTotalQty()) {
Mage::throwException($this->__('Cannot create an invoice without products.'));
}
}
Mage::register('current_invoice', $invoice);
return $invoice;
}
/**
* Save data for invoice and related order
*
* @param Mage_Sales_Model_Order_Invoice $invoice
* @return Mage_Adminhtml_Sales_Order_InvoiceController
*/
protected function _saveInvoice($invoice)
{
$invoice->getOrder()->setIsInProcess(true);
$transactionSave = Mage::getModel('core/resource_transaction')
->addObject($invoice)
->addObject($invoice->getOrder())
->save();
return $this;
}
/**
* Prepare shipment
*
* @param Mage_Sales_Model_Order_Invoice $invoice
* @return Mage_Sales_Model_Order_Shipment
*/
protected function _prepareShipment($invoice)
{
$savedQtys = $this->_getItemQtys();
$shipment = Mage::getModel('sales/service_order', $invoice->getOrder())->prepareShipment($savedQtys);
if (!$shipment->getTotalQty()) {
return false;
}
$shipment->register();
$tracks = $this->getRequest()->getPost('tracking');
if ($tracks) {
foreach ($tracks as $data) {
$track = Mage::getModel('sales/order_shipment_track')
->addData($data);
$shipment->addTrack($track);
}
}
return $shipment;
}
/**
* Invoice information page
*/
public function viewAction()
{
$invoice = $this->_initInvoice();
if ($invoice) {
$this->_title(sprintf("#%s", $invoice->getIncrementId()));
$this->loadLayout()
->_setActiveMenu('sales/order');
$this->getLayout()->getBlock('sales_invoice_view')
->updateBackButtonUrl($this->getRequest()->getParam('come_from'));
$this->renderLayout();
}
else {
$this->_forward('noRoute');
}
}
/**
* Start create invoice action
*/
public function startAction()
{
/**
* Clear old values for invoice qty's
*/
$this->_getSession()->getInvoiceItemQtys(true);
$this->_redirect('*/*/new', array('order_id'=>$this->getRequest()->getParam('order_id')));
}
/**
* Invoice create page
*/
public function newAction()
{
$invoice = $this->_initInvoice();
if ($invoice) {
$this->_title($this->__('New Invoice'));
if ($comment = Mage::getSingleton('adminhtml/session')->getCommentText(true)) {
$invoice->setCommentText($comment);
}
$this->loadLayout()
->_setActiveMenu('sales/order')
->renderLayout();
} else {
$this->_redirect('*/sales_order/view', array('order_id'=>$this->getRequest()->getParam('order_id')));
}
}
/**
* Update items qty action
*/
public function updateQtyAction()
{
try {
$invoice = $this->_initInvoice(true);
$this->loadLayout();
$response = $this->getLayout()->getBlock('order_items')->toHtml();
} catch (Mage_Core_Exception $e) {
$response = array(
'error' => true,
'message' => $e->getMessage()
);
$response = Mage::helper('core')->jsonEncode($response);
} catch (Exception $e) {
$response = array(
'error' => true,
'message' => $this->__('Cannot update item quantity.')
);
$response = Mage::helper('core')->jsonEncode($response);
}
$this->getResponse()->setBody($response);
}
/**
* Save invoice
* We can save only new invoice. Existing invoices are not editable
*/
public function saveAction()
{
$data = $this->getRequest()->getPost('invoice');
$orderId = $this->getRequest()->getParam('order_id');
if (!empty($data['comment_text'])) {
Mage::getSingleton('adminhtml/session')->setCommentText($data['comment_text']);
}
try {
$invoice = $this->_initInvoice();
if ($invoice) {
if (!empty($data['capture_case'])) {
$invoice->setRequestedCaptureCase($data['capture_case']);
}
if (!empty($data['comment_text'])) {
$invoice->addComment($data['comment_text'], isset($data['comment_customer_notify']));
}
$invoice->register();
if (!empty($data['send_email'])) {
$invoice->setEmailSent(true);
}
$invoice->getOrder()->setCustomerNoteNotify(!empty($data['send_email']));
$invoice->getOrder()->setIsInProcess(true);
$transactionSave = Mage::getModel('core/resource_transaction')
->addObject($invoice)
->addObject($invoice->getOrder());
$shipment = false;
if (!empty($data['do_shipment']) || (int) $invoice->getOrder()->getForcedDoShipmentWithInvoice()) {
$shipment = $this->_prepareShipment($invoice);
if ($shipment) {
$shipment->setEmailSent($invoice->getEmailSent());
$transactionSave->addObject($shipment);
}
}
$transactionSave->save();
if (!empty($data['do_shipment'])) {
$this->_getSession()->addSuccess($this->__('The invoice and shipment have been created.'));
} else {
$this->_getSession()->addSuccess($this->__('The invoice has been created.'));
}
// send invoice/shipment emails
$comment = '';
if (isset($data['comment_customer_notify'])) {
$comment = $data['comment_text'];
}
try {
$invoice->sendEmail(!empty($data['send_email']), $comment);
} catch (Exception $e) {
Mage::logException($e);
$this->_getSession()->addError($this->__('Unable to send the invoice email.'));
}
if ($shipment) {
try {
$shipment->sendEmail(!empty($data['send_email']));
} catch (Exception $e) {
Mage::logException($e);
$this->_getSession()->addError($this->__('Unable to send the shipment email.'));
}
}
Mage::getSingleton('adminhtml/session')->getCommentText(true);
$this->_redirect('*/sales_order/view', array('order_id' => $orderId));
} else {
$this->_redirect('*/*/new', array('order_id' => $orderId));
}
return;
} catch (Mage_Core_Exception $e) {
$this->_getSession()->addError($e->getMessage());
} catch (Exception $e) {
$this->_getSession()->addError($this->__('Unable to save the invoice.'));
Mage::logException($e);
}
$this->_redirect('*/*/new', array('order_id' => $orderId));
}
/**
* Capture invoice action
*/
public function captureAction()
{
if ($invoice = $this->_initInvoice()) {
try {
$invoice->capture();
$this->_saveInvoice($invoice);
$this->_getSession()->addSuccess($this->__('The invoice has been captured.'));
} catch (Mage_Core_Exception $e) {
$this->_getSession()->addError($e->getMessage());
} catch (Exception $e) {
$this->_getSession()->addError($this->__('Invoice capturing error.'));
}
$this->_redirect('*/*/view', array('invoice_id'=>$invoice->getId()));
} else {
$this->_forward('noRoute');
}
}
/**
* Cancel invoice action
*/
public function cancelAction()
{
if ($invoice = $this->_initInvoice()) {
try {
$invoice->cancel();
$this->_saveInvoice($invoice);
$this->_getSession()->addSuccess($this->__('The invoice has been canceled.'));
} catch (Mage_Core_Exception $e) {
$this->_getSession()->addError($e->getMessage());
} catch (Exception $e) {
$this->_getSession()->addError($this->__('Invoice canceling error.'));
}
$this->_redirect('*/*/view', array('invoice_id'=>$invoice->getId()));
} else {
$this->_forward('noRoute');
}
}
/**
* Void invoice action
*/
public function voidAction()
{
if ($invoice = $this->_initInvoice()) {
try {
$invoice->void();
$this->_saveInvoice($invoice);
$this->_getSession()->addSuccess($this->__('The invoice has been voided.'));
} catch (Mage_Core_Exception $e) {
$this->_getSession()->addError($e->getMessage());
} catch (Exception $e) {
$this->_getSession()->addError($this->__('Invoice voiding error.'));
}
$this->_redirect('*/*/view', array('invoice_id'=>$invoice->getId()));
} else {
$this->_forward('noRoute');
}
}
public function addCommentAction()
{
try {
$this->getRequest()->setParam('invoice_id', $this->getRequest()->getParam('id'));
$data = $this->getRequest()->getPost('comment');
if (empty($data['comment'])) {
Mage::throwException($this->__('The Comment Text field cannot be empty.'));
}
$invoice = $this->_initInvoice();
$invoice->addComment($data['comment'], isset($data['is_customer_notified']));
$invoice->sendUpdateEmail(!empty($data['is_customer_notified']), $data['comment']);
$invoice->_hasDataChanges = true;
$invoice->save();
$this->loadLayout();
$response = $this->getLayout()->getBlock('invoice_comments')->toHtml();
} catch (Mage_Core_Exception $e) {
$response = array(
'error' => true,
'message' => $e->getMessage()
);
$response = Mage::helper('core')->jsonEncode($response);
} catch (Exception $e) {
$response = array(
'error' => true,
'message' => $this->__('Cannot add new comment.')
);
$response = Mage::helper('core')->jsonEncode($response);
}
$this->getResponse()->setBody($response);
}
/**
* Decides if we need to create dummy invoice item or not
* for eaxample we don't need create dummy parent if all
* children are not in process
*
* @deprecated after 1.4, Mage_Sales_Model_Service_Order used
* @param Mage_Sales_Model_Order_Item $item
* @param array $qtys
* @return bool
*/
protected function _needToAddDummy($item, $qtys) {
if ($item->getHasChildren()) {
foreach ($item->getChildrenItems() as $child) {
if (isset($qtys[$child->getId()]) && $qtys[$child->getId()] > 0) {
return true;
}
}
return false;
} else if($item->getParentItem()) {
if (isset($qtys[$item->getParentItem()->getId()]) && $qtys[$item->getParentItem()->getId()] > 0) {
return true;
}
return false;
}
}
/**
* Decides if we need to create dummy shipment item or not
* for eaxample we don't need create dummy parent if all
* children are not in process
*
* @deprecated after 1.4, Mage_Sales_Model_Service_Order used
* @param Mage_Sales_Model_Order_Item $item
* @param array $qtys
* @return bool
*/
protected function _needToAddDummyForShipment($item, $qtys) {
if ($item->getHasChildren()) {
foreach ($item->getChildrenItems() as $child) {
if ($child->getIsVirtual()) {
continue;
}
if (isset($qtys[$child->getId()]) && $qtys[$child->getId()] > 0) {
return true;
}
}
if ($item->isShipSeparately()) {
return true;
}
return false;
} else if($item->getParentItem()) {
if ($item->getIsVirtual()) {
return false;
}
if (isset($qtys[$item->getParentItem()->getId()]) && $qtys[$item->getParentItem()->getId()] > 0) {
return true;
}
return false;
}
}
}