9334978e by Vo Van Khoa

Add all files

0 parents
.vscode
.history
<?php
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
// @codingStandardsIgnoreFile
namespace FGCT\OverrideCreateInvoice\Block\Adminhtml\Items\Renderer;
use Magento\Sales\Model\Order\CreditMemo\Item as CreditMemoItem;
use Magento\Sales\Model\Order\Invoice\Item as InvoiceItem;
use Magento\Sales\Model\Order\Item as OrderItem;
/**
* Order item render block
*
* @api
* @since 100.0.2
*/
class DefaultRenderer extends \Magento\Sales\Block\Adminhtml\Items\Renderer\DefaultRenderer {
public function __construct(
\Magento\Backend\Block\Template\Context $context,
\Magento\CatalogInventory\Api\StockRegistryInterface $stockRegistry,
\Magento\CatalogInventory\Api\StockConfigurationInterface $stockConfiguration,
\Magento\Framework\Registry $registry,
array $data = []
) {
$this->_coreRegistry = $registry;
parent::__construct($context, $stockRegistry, $stockConfiguration, $registry, $data);
}
public function getErrorOutStock($productId) {
$productsId = explode(',',$this->getRequest()->getParam('productsId'));
if(in_array($productId, $productsId)) {
$html = '<div id="messages"><div class="messages"><div class="message message-error error"><div data-ui-id="messages-message-error">This product is out of stock</div></div></div></div>';
return $html;
}
}
}
<?php
namespace FGCT\OverrideCreateInvoice\Helper;
class Data extends \Magento\Framework\App\Helper\AbstractHelper {
protected $_filesystem;
protected $_directory_list;
protected $_resource;
protected $_scopeConfig;
public function __construct(
\Magento\Framework\App\Helper\Context $context,
\Magento\Framework\Filesystem $filesystem,
\Magento\Framework\App\ResourceConnection $resource,
\Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig,
\Magento\Framework\App\Filesystem\DirectoryList $directory_list
) {
parent::__construct($context);
$this->_filesystem = $filesystem;
$this->_directory_list = $directory_list;
$this->_resource = $resource;
$this->_scopeConfig = $scopeConfig;
}
}
<?php
namespace FGCT\OverrideCreateInvoice\Observer;
use Magento\Framework\Event\ObserverInterface;
class OrderInvoiceSaveAfter implements ObserverInterface {
public $_coreRegistry;
protected $_helper;
public function __construct(
\Magento\Framework\Registry $coreRegistry
) {
$this->_coreRegistry = $coreRegistry;
}
public function execute(\Magento\Framework\Event\Observer $observer) {
$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
$productsId = $this->_coreRegistry->registry('fgct_overridecreateinvoice_products_out_stock') ?: [];
if(count($productsId)) {
$msg = "Some of the products are out of stock";
//throw new \Exception($msg);
exit('OrderInvoiceSaveAfter');
}
}
}
<?php
namespace FGCT\OverrideCreateInvoice\Observer;
use Magento\Framework\Event\Observer;
use Magento\Framework\Event\ObserverInterface;
use Magento\Framework\Controller\ResultFactory;
class OrderInvoiceSaveBefore implements ObserverInterface {
public $_coreRegistry;
protected $_helper;
public function __construct(
\Magento\Framework\Registry $coreRegistry,
\Magento\Framework\App\RequestInterface $request,
\Magento\Framework\App\ResponseFactory $responseFactory,
\Magento\Framework\Message\ManagerInterface $messageManager,
\Magento\CatalogInventory\Model\Stock\StockItemRepository $stockItemRepository,
\Magento\Framework\UrlInterface $url
) {
$this->_coreRegistry = $coreRegistry;
$this->_request = $request;
$this->responseFactory = $responseFactory;
$this->url = $url;
$this->_messageManager = $messageManager;
$this->_stockItemRepository = $stockItemRepository;
}
public function execute(\Magento\Framework\Event\Observer $observer) {
$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
$orderId = $this->_request->getParam('order_id');
$invoice = $observer->getEvent()->getInvoice();
$order = $invoice->getOrder();
$productManager = $objectManager->create('Magento\Catalog\Model\Product');
$productsOutStock = $productsNotEnoughQty = [];
foreach ($invoice->getAllItems() as $item) {
$name = $item->getName();
$type = $item->getSku();
$productId = $item->getProductId();
$qty = $item->getQty();
$product = $productManager->load($productId);
$_productStock = $this->_stockItemRepository->get($productId);
// $_productStock->getQty();
if(!$_productStock->getIsInStock()) {
$productsOutStock[$productId] = $name;
}
if($qty > $_productStock->getQty()) {
$productsNotEnoughQty[$productId] = $_productStock->getQty();
}
}
if(count($productsOutStock)) {
$productsId = array_keys($productsOutStock);
$this->_coreRegistry->register('fgct_overridecreateinvoice_products_out_stock', $productsId, true);
$this->_messageManager->addError(__('Some of the products are out of stock'));
$redirectionUrl = $this->url->getUrl('sales/order_invoice/new/*/product/*/', ['order_id' => $orderId, 'productsId' => implode(',', $productsId)]);
$this->responseFactory->create()->setRedirect($redirectionUrl)->sendResponse();
return $this;
}
}
}
<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd">
<event name="sales_order_invoice_save_before">
<observer name="fgc_sales_order_invoice_save_before" instance="FGCT\OverrideCreateInvoice\Observer\OrderInvoiceSaveBefore" />
</event>
<event name="sales_order_invoice_save_after">
<observer name="fgc_sales_order_invoice_save_after" instance="FGCT\OverrideCreateInvoice\Observer\OrderInvoiceSaveAfter" />
</event>
</config>
<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
<preference for="Magento\Sales\Block\Adminhtml\Items\Renderer\DefaultRenderer" type="FGCT\OverrideCreateInvoice\Block\Adminhtml\Items\Renderer\DefaultRenderer" />
</config>
<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../lib/internal/Magento/Framework/Module/etc/module.xsd">
<module name="FGCT_OverrideCreateInvoice" setup_version="1.0.0"></module>
</config>
<?php
\Magento\Framework\Component\ComponentRegistrar::register(
\Magento\Framework\Component\ComponentRegistrar::MODULE,
'FGCT_OverrideCreateInvoice',
__DIR__
);
<?xml version="1.0"?>
<!--
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
-->
<page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd">
<update handle="sales_invoice_item_price"/>
<body>
<!-- <referenceBlock name="order_items.default" remove="true"/> -->
<!-- <referenceContainer name="content">
<block class="FGCT\OverrideCreateInvoice\Block\Adminhtml\Items\Renderer\FgcDefaultRenderer" name="order_items.default" template="FGCT_OverrideCreateInvoice::order/invoice/create/items/renderer/default.phtml"/>
</referenceContainer> -->
<referenceBlock name="order_items.default">
<action method="setTemplate">
<argument name="template" translate="true" xsi:type="string">FGCT_OverrideCreateInvoice::order/invoice/create/items/renderer/default.phtml</argument>
</action>
</referenceBlock>
</body>
</page>
<?php
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
// @codingStandardsIgnoreFile
?>
<?php /** @var $block \Magento\Sales\Block\Adminhtml\Items\Renderer\DefaultRenderer */ ?>
<?php $_item = $block->getItem() ?>
<?php $block->setPriceDataObject($_item)?>
<td class="col-product"><?= $block->getColumnHtml($_item, 'name') ?>
<?= $block->getErrorOutStock($_item->getProductId()) ?>
</td>
<td class="col-price">
<?= $block->getColumnHtml($_item, 'price') ?>
</td>
<td class="col-qty"><?= $block->getColumnHtml($_item, 'qty') ?></td>
<td class="col-qty-invoice">
<?php if ($block->canEditQty()) : ?>
<input type="text" class="input-text admin__control-text qty-input"
name="invoice[items][<?= /* @escapeNotVerified */ $_item->getOrderItemId() ?>]"
value="<?= /* @escapeNotVerified */ $_item->getQty()*1 ?>"/>
<?php else : ?>
<?= /* @escapeNotVerified */ $_item->getQty()*1 ?>
<?php endif; ?>
</td>
<td class="col-subtotal">
<?= $block->getColumnHtml($_item, 'subtotal') ?>
</td>
<td class="col-tax"><?= /* @escapeNotVerified */ $block->displayPriceAttribute('tax_amount') ?></td>
<td class="col-discount"><?= /* @escapeNotVerified */ $block->displayPriceAttribute('discount_amount') ?></td>
<td class="col-total last">
<?= $block->getColumnHtml($_item, 'total') ?>
</td>
app/code/FGCT/OverrideCreateInvoice app/code/FGCT/OverrideCreateInvoice
# GET EXTENSION
Use modman [Linux](https://github.com/colinmollenhour/modman) | [Windows](https://github.com/khoazero123/modman-php) :
cd magento_root/
modman clone http://fgit.fgct.net/vankhoa/M2OverrideCreateInvoice.git
modman deploy M2OverrideCreateInvoice
Use git:
git clone http://fgit.fgct.net/vankhoa/M2OverrideCreateInvoice.git
cp M2OverrideCreateInvoice/* magento_root/
# INSTALLATION
bin/magento setup:upgrade
bin/magento setup:di:compile
bin/magento cache:clean && bin/magento cache:flush
bin/magento setup:static-content:deploy