Mage_Adminhtml_Sales_Order_CreditmemoController Class Reference

Inheritance diagram for Mage_Adminhtml_Sales_Order_CreditmemoController:

Mage_Adminhtml_Controller_Sales_Creditmemo Mage_Adminhtml_Controller_Action Mage_Core_Controller_Varien_Action

List of all members.

Public Member Functions

 viewAction ()
 startAction ()
 newAction ()
 updateQtyAction ()
 saveAction ()
 cancelAction ()
 voidAction ()
 addCommentAction ()

Protected Member Functions

 _getItemData ()
 _canCreditmemo ($order)
 _initCreditmemo ($update=false)
 _saveCreditmemo ($creditmemo)
 _needToAddDummy ($item, $qtys)


Detailed Description

Definition at line 34 of file CreditmemoController.php.


Member Function Documentation

_canCreditmemo ( order  )  [protected]

Check order existing

Check creditmemo create availability

Definition at line 48 of file CreditmemoController.php.

00049     {
00050         /**
00051          * Check order existing
00052          */
00053         if (!$order->getId()) {
00054             $this->_getSession()->addError($this->__('Order not longer exist'));
00055             return false;
00056         }
00057 
00058         /**
00059          * Check creditmemo create availability
00060          */
00061         if (!$order->canCreditmemo()) {
00062             $this->_getSession()->addError($this->__('Can not do credit memo for order'));
00063             return false;
00064         }
00065         return true;
00066     }

_getItemData (  )  [protected]

Definition at line 36 of file CreditmemoController.php.

00037     {
00038         $data = $this->getRequest()->getParam('creditmemo');
00039         if (isset($data['items'])) {
00040             $qtys = $data['items'];
00041         }
00042         else {
00043             $qtys = array();
00044         }
00045         return $qtys;
00046     }

_initCreditmemo ( update = false  )  [protected]

Initialize creditmemo model instance

Returns:
Mage_Sales_Model_Order_Creditmemo

Definition at line 73 of file CreditmemoController.php.

00074     {
00075         $creditmemo = false;
00076         if ($creditmemoId = $this->getRequest()->getParam('creditmemo_id')) {
00077             $creditmemo = Mage::getModel('sales/order_creditmemo')->load($creditmemoId);
00078         }
00079         elseif ($orderId = $this->getRequest()->getParam('order_id')) {
00080             $data   = $this->getRequest()->getParam('creditmemo');
00081             $order  = Mage::getModel('sales/order')->load($orderId);
00082             $invoiceId = $this->getRequest()->getParam('invoice_id');
00083             $invoice= null;
00084 
00085             if (!$this->_canCreditmemo($order)) {
00086                 return false;
00087             }
00088 
00089             if ($invoiceId) {
00090                 $invoice = Mage::getModel('sales/order_invoice')
00091                     ->load($invoiceId)
00092                     ->setOrder($order);
00093             }
00094 
00095             $convertor  = Mage::getModel('sales/convert_order');
00096             $creditmemo = $convertor->toCreditmemo($order)
00097                 ->setInvoice($invoice);
00098 
00099             $savedData = $this->_getItemData();
00100 
00101             if ($invoice && $invoice->getId()) {
00102                 foreach ($invoice->getAllItems() as $invoiceItem) {
00103                     $orderItem = $invoiceItem->getOrderItem();
00104 
00105                     if (!$orderItem->isDummy() && !$orderItem->getQtyToRefund()) {
00106                         continue;
00107                     }
00108 
00109                     if (!$update && $orderItem->isDummy() && !empty($savedData) && !$this->_needToAddDummy($orderItem, $savedData)) {
00110                         continue;
00111                     }
00112 
00113                     $item = $convertor->itemToCreditmemoItem($orderItem);
00114                     if (isset($savedData[$orderItem->getId()]['qty'])) {
00115                         $qty = $savedData[$orderItem->getId()]['qty'];
00116                     }
00117                     else {
00118                         if ($orderItem->isDummy()) {
00119                             if ($orderItem->getParentItem() && isset($savedData[$orderItem->getParentItem()->getId()]['qty'])) {
00120                                 $parentItemNewQty = $savedData[$orderItem->getParentItem()->getId()]['qty'];
00121                                 $parentItemOrigQty = $orderItem->getParentItem()->getQtyOrdered();
00122                                 $itemOrigQty = $orderItem->getQtyOrdered()/$parentItemOrigQty;
00123                                 $qty = $itemOrigQty*$parentItemNewQty;
00124                                 if (isset($savedData[$orderItem->getParentItem()->getId()]['back_to_stock'])) {
00125                                     $savedData[$orderItem->getId()]['back_to_stock'] = 1;
00126                                 }
00127                             } else {
00128                                 $qty = 1;
00129                             }
00130                         } else {
00131                             $qty = min($orderItem->getQtyToRefund(), $invoiceItem->getQty());
00132                         }
00133                     }
00134 
00135                     $item->setQty($qty);
00136 
00137                     $children = $orderItem->getChildrenItems();
00138                     if (!empty($children)) {
00139                         $item->setBackToStock(false);
00140                     } else {
00141                         $item->setBackToStock(isset($savedData[$orderItem->getId()]['back_to_stock']));
00142                     }
00143 
00144                     $creditmemo->addItem($item);
00145                 }
00146             } else {
00147                 foreach ($order->getAllItems() as $orderItem) {
00148 
00149                     if (!$orderItem->isDummy() && !$orderItem->getQtyToRefund()) {
00150                         continue;
00151                     }
00152 
00153                     if (!$update && $orderItem->isDummy() && !empty($savedData) && !$this->_needToAddDummy($orderItem, $savedData)) {
00154                         continue;
00155                     }
00156 
00157                     $item = $convertor->itemToCreditmemoItem($orderItem);
00158                     if (isset($savedData[$orderItem->getId()]['qty'])) {
00159                         $qty = $savedData[$orderItem->getId()]['qty'];
00160                     }
00161                     else {
00162                         if ($orderItem->isDummy()) {
00163                             if ($orderItem->getParentItem() && isset($savedData[$orderItem->getParentItem()->getId()]['qty'])) {
00164                                 $parentItemNewQty = $savedData[$orderItem->getParentItem()->getId()]['qty'];
00165                                 $parentItemOrigQty = $orderItem->getParentItem()->getQtyOrdered();
00166                                 $itemOrigQty = $orderItem->getQtyOrdered()/$parentItemOrigQty;
00167                                 $qty = $itemOrigQty*$parentItemNewQty;
00168                                 if (isset($savedData[$orderItem->getParentItem()->getId()]['back_to_stock'])) {
00169                                     $savedData[$orderItem->getId()]['back_to_stock'] = 1;
00170                                 }
00171                             } else {
00172                                 $qty = 1;
00173                             }
00174                         } else {
00175                             $qty = $orderItem->getQtyToRefund();
00176                         }
00177                     }
00178 
00179                     $item->setQty($qty);
00180 
00181                     $children = $orderItem->getChildrenItems();
00182                     if (!empty($children)) {
00183                         $item->setBackToStock(false);
00184                     } else {
00185                         $item->setBackToStock(isset($savedData[$orderItem->getId()]['back_to_stock']));
00186                     }
00187 
00188                     $creditmemo->addItem($item);
00189                 }
00190             }
00191 
00192             if (isset($data['shipping_amount'])) {
00193                 $creditmemo->setShippingAmount($data['shipping_amount']);
00194             } elseif ($invoice) {
00195                 $creditmemo->setShippingAmount($invoice->getShippingAmount());
00196             }
00197             else {
00198                 $creditmemo->setShippingAmount(
00199                     $order->getBaseShippingAmount()-$order->getBaseShippingRefunded()
00200                 );
00201             }
00202 
00203             if (isset($data['adjustment_positive'])) {
00204                 $creditmemo->setAdjustmentPositive($data['adjustment_positive']);
00205             }
00206             if (isset($data['adjustment_negative'])) {
00207                 $creditmemo->setAdjustmentNegative($data['adjustment_negative']);
00208             }
00209 
00210             $creditmemo->collectTotals();
00211         }
00212 
00213         $args = array(
00214             'creditmemo' => $creditmemo,
00215             'request'    => $this->getRequest(),
00216         );
00217         Mage::dispatchEvent('adminhtml_sales_order_creditmemo_register_before', $args);
00218 
00219         Mage::register('current_creditmemo', $creditmemo);
00220         return $creditmemo;
00221     }

_needToAddDummy ( item,
qtys 
) [protected]

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

Parameters:
Mage_Sales_Model_Order_Item $item
array $qtys
Returns:
bool

Definition at line 459 of file CreditmemoController.php.

00459                                                      {
00460         if ($item->getHasChildren()) {
00461             foreach ($item->getChildrenItems() as $child) {
00462                 if (isset($qtys[$child->getId()])
00463                     && isset($qtys[$child->getId()]['qty'])
00464                     && $qtys[$child->getId()]['qty'] > 0)
00465                 {
00466                     return true;
00467                 }
00468             }
00469             return false;
00470         } else if($item->getParentItem()) {
00471             if (isset($qtys[$item->getParentItem()->getId()])
00472                 && isset($qtys[$item->getParentItem()->getId()]['qty'])
00473                 && $qtys[$item->getParentItem()->getId()]['qty'] > 0)
00474             {
00475                 return true;
00476             }
00477             return false;
00478         }
00479     }

_saveCreditmemo ( creditmemo  )  [protected]

Definition at line 223 of file CreditmemoController.php.

00224     {
00225         $transactionSave = Mage::getModel('core/resource_transaction')
00226             ->addObject($creditmemo)
00227             ->addObject($creditmemo->getOrder());
00228         if ($creditmemo->getInvoice()) {
00229             $transactionSave->addObject($creditmemo->getInvoice());
00230         }
00231         $transactionSave->save();
00232 
00233         return $this;
00234     }

addCommentAction (  ) 

Definition at line 414 of file CreditmemoController.php.

00415     {
00416         try {
00417             $this->getRequest()->setParam(
00418                 'creditmemo_id',
00419                 $this->getRequest()->getParam('id')
00420             );
00421             $data = $this->getRequest()->getPost('comment');
00422             if (empty($data['comment'])) {
00423                 Mage::throwException($this->__('Comment text field can not be empty.'));
00424             }
00425             $creditmemo = $this->_initCreditmemo();
00426             $creditmemo->addComment($data['comment'], isset($data['is_customer_notified']));
00427             $creditmemo->save();
00428             $creditmemo->sendUpdateEmail(!empty($data['is_customer_notified']), $data['comment']);
00429 
00430             $this->loadLayout();
00431             $response = $this->getLayout()->getBlock('creditmemo_comments')->toHtml();
00432         }
00433         catch (Mage_Core_Exception $e) {
00434             $response = array(
00435                 'error'     => true,
00436                 'message'   => $e->getMessage()
00437             );
00438             $response = Zend_Json::encode($response);
00439         }
00440         catch (Exception $e) {
00441             $response = array(
00442                 'error'     => true,
00443                 'message'   => $this->__('Can not add new comment.')
00444             );
00445             $response = Zend_Json::encode($response);
00446         }
00447         $this->getResponse()->setBody($response);
00448     }

cancelAction (  ) 

Cancel creditmemo action

Definition at line 369 of file CreditmemoController.php.

00370     {
00371         if ($creditmemo = $this->_initCreditmemo()) {
00372             try {
00373                 $creditmemo->cancel();
00374                 $this->_saveCreditmemo($creditmemo);
00375                 $this->_getSession()->addSuccess($this->__('Credit Memo was successfully canceled.'));
00376             }
00377             catch (Mage_Core_Exception $e) {
00378                 $this->_getSession()->addError($e->getMessage());
00379             }
00380             catch (Exception $e) {
00381                 $this->_getSession()->addError($this->__('Credit Memo cancel error.'));
00382             }
00383             $this->_redirect('*/*/view', array('creditmemo_id'=>$creditmemo->getId()));
00384         }
00385         else {
00386             $this->_forward('noRoute');
00387         }
00388     }

newAction (  ) 

creditmemo create page

Definition at line 267 of file CreditmemoController.php.

00268     {
00269         if ($creditmemo = $this->_initCreditmemo()) {
00270             $commentText = Mage::getSingleton('adminhtml/session')->getCommentText(true);
00271 
00272             $creditmemo->addData(array('commentText'=>$commentText));
00273 
00274             $this->loadLayout()
00275                 ->_setActiveMenu('sales/order')
00276                 ->renderLayout();
00277         }
00278         else {
00279             $this->_forward('noRoute');
00280         }
00281     }

saveAction (  ) 

Save creditmemo We can save only new creditmemo. Existing creditmemos are not editable

Definition at line 314 of file CreditmemoController.php.

00315     {
00316         $data = $this->getRequest()->getPost('creditmemo');
00317         try {
00318             if ($creditmemo = $this->_initCreditmemo()) {
00319                 if (($creditmemo->getGrandTotal() <=0) && (!$creditmemo->getAllowZeroGrandTotal())) {
00320                     Mage::throwException(
00321                         $this->__('Credit Memo total must be positive.')
00322                     );
00323                 }
00324 
00325                 Mage::getSingleton('adminhtml/session')->setCommentText($data['comment_text']);
00326 
00327                 $comment = '';
00328                 if (!empty($data['comment_text'])) {
00329                     $comment = $data['comment_text'];
00330                     $creditmemo->addComment($data['comment_text'], isset($data['comment_customer_notify']));
00331                 }
00332 
00333                 if (isset($data['do_refund'])) {
00334                     $creditmemo->setRefundRequested(true);
00335                 }
00336                 if (isset($data['do_offline'])) {
00337                     $creditmemo->setOfflineRequested($data['do_offline']);
00338                 }
00339 
00340                 $creditmemo->register();
00341                 if (!empty($data['send_email'])) {
00342                     $creditmemo->setEmailSent(true);
00343                 }
00344 
00345                 $this->_saveCreditmemo($creditmemo);
00346                 $creditmemo->sendEmail(!empty($data['send_email']), $comment);
00347                 $this->_getSession()->addSuccess($this->__('Credit Memo was successfully created'));
00348                 Mage::getSingleton('adminhtml/session')->getCommentText(true);
00349                 $this->_redirect('*/sales_order/view', array('order_id' => $creditmemo->getOrderId()));
00350                 return;
00351             }
00352             else {
00353                 $this->_forward('noRoute');
00354                 return;
00355             }
00356         }
00357         catch (Mage_Core_Exception $e) {
00358             $this->_getSession()->addError($e->getMessage());
00359         }
00360         catch (Exception $e) {
00361             $this->_getSession()->addError($this->__('Can not save credit memo'));
00362         }
00363         $this->_redirect('*/*/new', array('_current' => true));
00364     }

startAction (  ) 

Start create creditmemo action

Clear old values for creditmemo qty's

Definition at line 256 of file CreditmemoController.php.

00257     {
00258         /**
00259          * Clear old values for creditmemo qty's
00260          */
00261         $this->_redirect('*/*/new', array('_current'=>true));
00262     }

updateQtyAction (  ) 

Update items qty action

Definition at line 286 of file CreditmemoController.php.

00287     {
00288         try {
00289             $creditmemo = $this->_initCreditmemo(true);
00290             $this->loadLayout();
00291             $response = $this->getLayout()->getBlock('order_items')->toHtml();
00292         }
00293         catch (Mage_Core_Exception $e) {
00294             $response = array(
00295                 'error'     => true,
00296                 'message'   => $e->getMessage()
00297             );
00298             $response = Zend_Json::encode($response);
00299         }
00300         catch (Exception $e) {
00301             $response = array(
00302                 'error'     => true,
00303                 'message'   => $this->__('Can not update item qty')
00304             );
00305             $response = Zend_Json::encode($response);
00306         }
00307         $this->getResponse()->setBody($response);
00308     }

viewAction (  ) 

creditmemo information page

Reimplemented from Mage_Adminhtml_Controller_Sales_Creditmemo.

Definition at line 239 of file CreditmemoController.php.

00240     {
00241         if ($creditmemo = $this->_initCreditmemo()) {
00242             $this->loadLayout();
00243             $this->getLayout()->getBlock('sales_creditmemo_view')
00244                 ->updateBackButtonUrl($this->getRequest()->getParam('come_from'));
00245             $this->_setActiveMenu('sales/order')
00246                 ->renderLayout();
00247         }
00248         else {
00249             $this->_forward('noRoute');
00250         }
00251     }

voidAction (  ) 

Void creditmemo action

Definition at line 393 of file CreditmemoController.php.

00394     {
00395         if ($invoice = $this->_initCreditmemo()) {
00396             try {
00397                 $creditmemo->void();
00398                 $this->_saveCreditmemo($creditmemo);
00399                 $this->_getSession()->addSuccess($this->__('Credit Memo was successfully voided'));
00400             }
00401             catch (Mage_Core_Exception $e) {
00402                 $this->_getSession()->addError($e->getMessage());
00403             }
00404             catch (Exception $e) {
00405                 $this->_getSession()->addError($this->__('Credit Memo void error'));
00406             }
00407             $this->_redirect('*/*/view', array('creditmemo_id'=>$creditmemo->getId()));
00408         }
00409         else {
00410             $this->_forward('noRoute');
00411         }
00412     }


The documentation for this class was generated from the following file:

Generated on Sat Jul 4 17:23:29 2009 for Magento by  doxygen 1.5.8