Version Notes
This extension Is still in beta otherwise it's running in production on some stores.
Download this release
Release Info
| Developer | Emanuele Gian |
| Extension | Eg_SaveInvoice |
| Version | 0.1.1 |
| Comparing to | |
| See all releases | |
Version 0.1.1
- app/code/community/Eg/SaveInvoice/Helper/Data.php +39 -0
- app/code/community/Eg/SaveInvoice/Model/Export.php +72 -0
- app/code/community/Eg/SaveInvoice/Model/Observer.php +19 -0
- app/code/community/Eg/SaveInvoice/etc/config.xml +38 -0
- app/code/community/Eg/SaveInvoice/etc/system.xml +37 -0
- app/etc/modules/Eg_SaveInvoice.xml +10 -0
- package.xml +20 -0
- shell/EgSaveInvoice.php +62 -0
app/code/community/Eg/SaveInvoice/Helper/Data.php
ADDED
|
@@ -0,0 +1,39 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
/**
|
| 4 |
+
* Class Eg_SaveInvoice_Helper_Data
|
| 5 |
+
*/
|
| 6 |
+
class Eg_SaveInvoice_Helper_Data extends Mage_Core_Helper_Abstract
|
| 7 |
+
{
|
| 8 |
+
|
| 9 |
+
public function formatInvoiceData($InvoiceData)
|
| 10 |
+
{
|
| 11 |
+
return Mage::getModel('core/date')->date('Ymd', strtotime($InvoiceData));
|
| 12 |
+
}
|
| 13 |
+
|
| 14 |
+
public function getDefaultStoreID()
|
| 15 |
+
{
|
| 16 |
+
$defaultStoreId = Mage::app()
|
| 17 |
+
->getWebsite(true)
|
| 18 |
+
->getDefaultGroup()
|
| 19 |
+
->getDefaultStoreId();
|
| 20 |
+
return $defaultStoreId;
|
| 21 |
+
}
|
| 22 |
+
|
| 23 |
+
protected function getInvoiceEntityTypeId() {
|
| 24 |
+
$entityType = Mage::getModel('eav/config')->getEntityType('invoice');
|
| 25 |
+
return $entityType->getEntityTypeId();
|
| 26 |
+
}
|
| 27 |
+
|
| 28 |
+
public function getInvoiceIncrementPrefix() {
|
| 29 |
+
$entityStoreConfig = Mage::getModel('eav/entity_store')
|
| 30 |
+
->loadByEntityStore($this->getInvoiceEntityTypeId(), $this->getDefaultStoreID());
|
| 31 |
+
return $entityStoreConfig->getIncrementPrefix();
|
| 32 |
+
|
| 33 |
+
}
|
| 34 |
+
|
| 35 |
+
public function _log($msg) {
|
| 36 |
+
Mage::log($msg, null, 'Eg_SaveInvoice.log', true);
|
| 37 |
+
}
|
| 38 |
+
|
| 39 |
+
}
|
app/code/community/Eg/SaveInvoice/Model/Export.php
ADDED
|
@@ -0,0 +1,72 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
/**
|
| 4 |
+
* Class Eg_SaveInvoice_Model_Export
|
| 5 |
+
*/
|
| 6 |
+
class Eg_SaveInvoice_Model_Export extends Mage_Core_Model_Abstract
|
| 7 |
+
{
|
| 8 |
+
const XML_PATH_SAVE_INVOICE_ENABLED = 'sales/saveinvoice/enabled';
|
| 9 |
+
const XML_PATH_PDF_EXPORT_FOLDER = 'sales/saveinvoice/export_folder';
|
| 10 |
+
|
| 11 |
+
const INVOICE_EXTENSION = '.pdf';
|
| 12 |
+
|
| 13 |
+
protected function getPdfExportFolder()
|
| 14 |
+
{
|
| 15 |
+
return $this->checkPath(Mage::getStoreConfig(self::XML_PATH_PDF_EXPORT_FOLDER)) . DS;
|
| 16 |
+
}
|
| 17 |
+
|
| 18 |
+
protected function isSavePdfInvoiceEnabled()
|
| 19 |
+
{
|
| 20 |
+
return Mage::getStoreConfig(self::XML_PATH_SAVE_INVOICE_ENABLED);
|
| 21 |
+
}
|
| 22 |
+
|
| 23 |
+
private function getIoAdapter()
|
| 24 |
+
{
|
| 25 |
+
if (is_null($this->_ioFile)) {
|
| 26 |
+
$this->_ioFile = new Varien_Io_File();
|
| 27 |
+
}
|
| 28 |
+
return $this->_ioFile;
|
| 29 |
+
}
|
| 30 |
+
|
| 31 |
+
protected function checkPath($pathToCheck) {
|
| 32 |
+
$ioAdapter = $this->getIoAdapter();
|
| 33 |
+
try {
|
| 34 |
+
$path = $ioAdapter->getCleanPath($pathToCheck);
|
| 35 |
+
$ioAdapter->checkAndCreateFolder($path);
|
| 36 |
+
}
|
| 37 |
+
catch (Exception $e) {
|
| 38 |
+
Mage::helper('eg_saveinvoice')->_log("*** SaveInvoice ERROR: " . $e->getMessage());
|
| 39 |
+
}
|
| 40 |
+
return $pathToCheck;
|
| 41 |
+
}
|
| 42 |
+
|
| 43 |
+
public function createInvoiceFileName($IncrementID) {
|
| 44 |
+
return $IncrementID . self::INVOICE_EXTENSION;
|
| 45 |
+
}
|
| 46 |
+
|
| 47 |
+
public function _saveInvoicePdf($_invoice) {
|
| 48 |
+
|
| 49 |
+
if (!$this->isSavePdfInvoiceEnabled())
|
| 50 |
+
return;
|
| 51 |
+
|
| 52 |
+
$orderId = $_invoice->getOrder()->getId();
|
| 53 |
+
|
| 54 |
+
$orderModel = Mage::getModel('sales/order')->load($orderId);
|
| 55 |
+
$invoices = $orderModel->getInvoiceCollection();
|
| 56 |
+
$invoicesSet = array();
|
| 57 |
+
foreach ($invoices as $_invoice) {
|
| 58 |
+
array_push($invoicesSet, $_invoice);
|
| 59 |
+
}
|
| 60 |
+
try {
|
| 61 |
+
$pdf = Mage::getModel('sales/order_pdf_invoice')->getPdf($invoicesSet);
|
| 62 |
+
$InvoiceIncrementId = $_invoice->getIncrementId();
|
| 63 |
+
$InvoiceFileName = $this->createInvoiceFileName($InvoiceIncrementId);
|
| 64 |
+
$pdf->save($this->getPdfExportFolder() . $InvoiceFileName);
|
| 65 |
+
Mage::helper('eg_saveinvoice')->_log( 'PDF invoice ' . $InvoiceFileName . ' saved on ' . $this->getPdfExportFolder());
|
| 66 |
+
|
| 67 |
+
} catch (Exception $ex) {
|
| 68 |
+
Mage::helper('eg_saveinvoice')->_log("saveInvoice:" . $ex->getMessage());
|
| 69 |
+
}
|
| 70 |
+
}
|
| 71 |
+
|
| 72 |
+
}
|
app/code/community/Eg/SaveInvoice/Model/Observer.php
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
/**
|
| 4 |
+
* Class Eg_SaveInvoice_Model_Observer
|
| 5 |
+
*/
|
| 6 |
+
class Eg_SaveInvoice_Model_Observer
|
| 7 |
+
{
|
| 8 |
+
public function saveInvoice(Varien_Event_Observer $observer)
|
| 9 |
+
{
|
| 10 |
+
$_export = Mage::getModel('eg_saveinvoice/export');
|
| 11 |
+
|
| 12 |
+
$_event = $observer->getEvent();
|
| 13 |
+
$_invoice = $_event->getInvoice();
|
| 14 |
+
|
| 15 |
+
Mage::helper('eg_saveinvoice')->_log('Eg_SaveInvoice_Model_Observer :: called');
|
| 16 |
+
|
| 17 |
+
$_export->_saveInvoicePdf($_invoice);
|
| 18 |
+
}
|
| 19 |
+
}
|
app/code/community/Eg/SaveInvoice/etc/config.xml
ADDED
|
@@ -0,0 +1,38 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?xml version="1.0"?>
|
| 2 |
+
<config>
|
| 3 |
+
<modules>
|
| 4 |
+
<Eg_SaveInvoice>
|
| 5 |
+
<version>0.1.1</version>
|
| 6 |
+
</Eg_SaveInvoice>
|
| 7 |
+
</modules>
|
| 8 |
+
<global>
|
| 9 |
+
<models>
|
| 10 |
+
<eg_saveinvoice>
|
| 11 |
+
<class>Eg_SaveInvoice_Model</class>
|
| 12 |
+
</eg_saveinvoice>
|
| 13 |
+
</models>
|
| 14 |
+
<helpers>
|
| 15 |
+
<eg_saveinvoice>
|
| 16 |
+
<class>Eg_SaveInvoice_Helper</class>
|
| 17 |
+
</eg_saveinvoice>
|
| 18 |
+
</helpers>
|
| 19 |
+
<events>
|
| 20 |
+
<sales_order_invoice_save_after>
|
| 21 |
+
<observers>
|
| 22 |
+
<eg_saveinvoice_invoice_observer>
|
| 23 |
+
<class>eg_saveinvoice/observer</class>
|
| 24 |
+
<method>saveInvoice</method>
|
| 25 |
+
</eg_saveinvoice_invoice_observer>
|
| 26 |
+
</observers>
|
| 27 |
+
</sales_order_invoice_save_after>
|
| 28 |
+
</events>
|
| 29 |
+
</global>
|
| 30 |
+
<default>
|
| 31 |
+
<sales>
|
| 32 |
+
<saveinvoice>
|
| 33 |
+
<enabled>0</enabled>
|
| 34 |
+
<export_folder>var/importexport/invoices</export_folder>
|
| 35 |
+
</saveinvoice>
|
| 36 |
+
</sales>
|
| 37 |
+
</default>
|
| 38 |
+
</config>
|
app/code/community/Eg/SaveInvoice/etc/system.xml
ADDED
|
@@ -0,0 +1,37 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?xml version="1.0"?>
|
| 2 |
+
<config>
|
| 3 |
+
<sections>
|
| 4 |
+
<sales>
|
| 5 |
+
<groups>
|
| 6 |
+
<saveinvoice translate="label">
|
| 7 |
+
<label>Save Pdf Invoice to file system</label>
|
| 8 |
+
<sort_order>10</sort_order>
|
| 9 |
+
<show_in_default>1</show_in_default>
|
| 10 |
+
<show_in_website>1</show_in_website>
|
| 11 |
+
<show_in_store>1</show_in_store>
|
| 12 |
+
<fields>
|
| 13 |
+
<enabled translate="label">
|
| 14 |
+
<label>Enabled</label>
|
| 15 |
+
<frontend_type>select</frontend_type>
|
| 16 |
+
<source_model>adminhtml/system_config_source_yesno</source_model>
|
| 17 |
+
<sort_order>1</sort_order>
|
| 18 |
+
<show_in_default>1</show_in_default>
|
| 19 |
+
<show_in_website>1</show_in_website>
|
| 20 |
+
<show_in_store>1</show_in_store>
|
| 21 |
+
<comment>Enabling saving invoice</comment>
|
| 22 |
+
</enabled>
|
| 23 |
+
<export_folder translate="label">
|
| 24 |
+
<label>PDF saving folder</label>
|
| 25 |
+
<frontend_type>text</frontend_type>
|
| 26 |
+
<sort_order>3</sort_order>
|
| 27 |
+
<show_in_default>1</show_in_default>
|
| 28 |
+
<show_in_website>1</show_in_website>
|
| 29 |
+
<show_in_store>1</show_in_store>
|
| 30 |
+
<comment>Folder where invoices will be saved</comment>
|
| 31 |
+
</export_folder>
|
| 32 |
+
</fields>
|
| 33 |
+
</saveinvoice>
|
| 34 |
+
</groups>
|
| 35 |
+
</sales>
|
| 36 |
+
</sections>
|
| 37 |
+
</config>
|
app/etc/modules/Eg_SaveInvoice.xml
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?xml version="1.0"?>
|
| 2 |
+
<config>
|
| 3 |
+
<modules>
|
| 4 |
+
<Eg_SaveInvoice>
|
| 5 |
+
<active>true</active>
|
| 6 |
+
<codePool>community</codePool>
|
| 7 |
+
<depends></depends>
|
| 8 |
+
</Eg_SaveInvoice>
|
| 9 |
+
</modules>
|
| 10 |
+
</config>
|
package.xml
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?xml version="1.0"?>
|
| 2 |
+
<package>
|
| 3 |
+
<name>Eg_SaveInvoice</name>
|
| 4 |
+
<version>0.1.1</version>
|
| 5 |
+
<stability>beta</stability>
|
| 6 |
+
<license>GNU</license>
|
| 7 |
+
<channel>community</channel>
|
| 8 |
+
<extends/>
|
| 9 |
+
<summary>This magento extension enables saving PDF invoices on filesystem.</summary>
|
| 10 |
+
<description>Every invoice created will be saved as pdf file on filesystem in a configurable path from admin.
|
| 11 |
+

|
| 12 |
+
A shell utility is provided for saving invoice manually by increment id. </description>
|
| 13 |
+
<notes>This extension Is still in beta otherwise it's running in production on some stores.</notes>
|
| 14 |
+
<authors><author><name>Emanuele Gian</name><user>emastyle</user><email>emastyle@libero.it</email></author></authors>
|
| 15 |
+
<date>2016-02-27</date>
|
| 16 |
+
<time>17:12:48</time>
|
| 17 |
+
<contents><target name="magecommunity"><dir name="Eg"><dir name="SaveInvoice"><dir name="Helper"><file name="Data.php" hash="548bb0e5d1c06ab862e2e8fa5ff959e6"/></dir><dir name="Model"><file name="Export.php" hash="cbbb9ecd404aa8349f3c3b5d522a9952"/><file name="Observer.php" hash="b97a2d9dd6c353856fb507838a067059"/></dir><dir name="etc"><file name="config.xml" hash="689cd412fd9e53c6c4554dfcad603a8b"/><file name="system.xml" hash="c9b173b12e31ca515288d4c7245f0ee5"/></dir></dir></dir></target><target name="mageetc"><dir name="modules"><file name="Eg_SaveInvoice.xml" hash="0c57fd8ee1c2d0dcc2aee492fec1925a"/></dir></target><target name="mage"><dir name="."><dir name="shell"><file name="EgSaveInvoice.php" hash="bdfcd3e59af4c3eb600c9d23d493253d"/></dir></dir></target></contents>
|
| 18 |
+
<compatible/>
|
| 19 |
+
<dependencies><required><php><min>5.2.17</min><max>5.6.0</max></php></required></dependencies>
|
| 20 |
+
</package>
|
shell/EgSaveInvoice.php
ADDED
|
@@ -0,0 +1,62 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
require_once 'abstract.php';
|
| 3 |
+
|
| 4 |
+
class Mage_Shell_Runtime extends Mage_Shell_Abstract
|
| 5 |
+
{
|
| 6 |
+
|
| 7 |
+
/**
|
| 8 |
+
* Additional initialize instruction
|
| 9 |
+
*
|
| 10 |
+
* @return Mage_Shell_Abstract
|
| 11 |
+
*/
|
| 12 |
+
protected function _construct()
|
| 13 |
+
{
|
| 14 |
+
parent::_construct();
|
| 15 |
+
Mage::app()->loadArea(Mage_Core_Model_App_Area::AREA_ADMINHTML);
|
| 16 |
+
Mage::app()->setCurrentStore(1);
|
| 17 |
+
return $this;
|
| 18 |
+
}
|
| 19 |
+
|
| 20 |
+
public function run()
|
| 21 |
+
{
|
| 22 |
+
if ($this->getArg('increment_id') && $this->getArg('increment_id') != '' && $this->getArg('increment_id') != ' ') {
|
| 23 |
+
|
| 24 |
+
$invoiceIncrementId = $this->getArg('increment_id');
|
| 25 |
+
Mage::helper('eg_saveinvoice')->_log('Invoice saving by shell script was called for invoice increment_id ' . $invoiceIncrementId);
|
| 26 |
+
$saveInvoiceModel = Mage::getModel('eg_saveinvoice/export');
|
| 27 |
+
|
| 28 |
+
$_invoice = Mage::getModel('sales/order_invoice')->loadByIncrementId($invoiceIncrementId);
|
| 29 |
+
|
| 30 |
+
/** got to shop root directory **/
|
| 31 |
+
chdir('../');
|
| 32 |
+
$saveInvoiceModel->_saveInvoicePdf($_invoice);
|
| 33 |
+
|
| 34 |
+
echo 'Invoice ' . $invoiceIncrementId . ' created' . PHP_EOL;
|
| 35 |
+
} else {
|
| 36 |
+
echo $this->usageHelp();
|
| 37 |
+
}
|
| 38 |
+
|
| 39 |
+
}
|
| 40 |
+
|
| 41 |
+
/**
|
| 42 |
+
* Retrieve Usage Help Message
|
| 43 |
+
*
|
| 44 |
+
*/
|
| 45 |
+
public function usageHelp()
|
| 46 |
+
{
|
| 47 |
+
return <<<USAGE
|
| 48 |
+
Usage: php -f saveinvoice.php -- [parameters]
|
| 49 |
+
|
| 50 |
+
--increment_id <invoice increment id> Save PDF invoice on filesystem passing invoice increment_id
|
| 51 |
+
help This help
|
| 52 |
+
|
| 53 |
+
|
| 54 |
+
USAGE;
|
| 55 |
+
}
|
| 56 |
+
}
|
| 57 |
+
|
| 58 |
+
$shell = new Mage_Shell_Runtime();
|
| 59 |
+
$shell->run();
|
| 60 |
+
|
| 61 |
+
|
| 62 |
+
|
