Easy_PDF_Invoice - Version 1.2.0.1.24

Version Notes

- Allow to print orders
- Allow to print invoices
- Allow to print packingslips
- Allow to print credit memos
- Allow to attach order pdf in email
- Allow to attach invoice pdf in email
- Compatible with Aschroder_SMTPPro

Download this release

Release Info

Developer Easy PDF Invoice
Extension Easy_PDF_Invoice
Version 1.2.0.1.24
Comparing to
See all releases


Version 1.2.0.1.24

Files changed (76) hide show
  1. app/code/community/VES/PdfPro/Block/Adminhtml/Key.php +11 -0
  2. app/code/community/VES/PdfPro/Block/Adminhtml/Key/Edit.php +37 -0
  3. app/code/community/VES/PdfPro/Block/Adminhtml/Key/Edit/Form.php +19 -0
  4. app/code/community/VES/PdfPro/Block/Adminhtml/Key/Edit/Tab/Form.php +84 -0
  5. app/code/community/VES/PdfPro/Block/Adminhtml/Key/Edit/Tabs.php +25 -0
  6. app/code/community/VES/PdfPro/Block/Adminhtml/Key/Grid.php +82 -0
  7. app/code/community/VES/PdfPro/Block/Adminhtml/Key/Grid/Renderer/Group.php +13 -0
  8. app/code/community/VES/PdfPro/Block/Adminhtml/Key/Grid/Renderer/Store.php +11 -0
  9. app/code/community/VES/PdfPro/Block/Adminhtml/Sales/Order/Creditmemo/View.php +44 -0
  10. app/code/community/VES/PdfPro/Block/Adminhtml/Sales/Order/Invoice/View.php +44 -0
  11. app/code/community/VES/PdfPro/Block/Adminhtml/Sales/Order/Shipment/View.php +44 -0
  12. app/code/community/VES/PdfPro/Block/Adminhtml/Sales/Order/View.php +41 -0
  13. app/code/community/VES/PdfPro/Block/Adminhtml/System/Config/Form/Fieldset.php +29 -0
  14. app/code/community/VES/PdfPro/Block/Adminhtml/Version.php +98 -0
  15. app/code/community/VES/PdfPro/Block/Checkout/Onepage/Success.php +35 -0
  16. app/code/community/VES/PdfPro/Block/Sales/Order/Creditmemo/Items.php +23 -0
  17. app/code/community/VES/PdfPro/Block/Sales/Order/Info.php +18 -0
  18. app/code/community/VES/PdfPro/Block/Sales/Order/Info/Buttons.php +22 -0
  19. app/code/community/VES/PdfPro/Block/Sales/Order/Invoice/Items.php +23 -0
  20. app/code/community/VES/PdfPro/Block/Sales/Order/Shipment/Items.php +21 -0
  21. app/code/community/VES/PdfPro/Controller/Abstract.php +248 -0
  22. app/code/community/VES/PdfPro/Helper/Data.php +103 -0
  23. app/code/community/VES/PdfPro/Helper/Giftmessage.php +39 -0
  24. app/code/community/VES/PdfPro/Model/Abstract.php +100 -0
  25. app/code/community/VES/PdfPro/Model/Communication/Method/Abstract.php +6 -0
  26. app/code/community/VES/PdfPro/Model/Communication/Method/Soap.php +14 -0
  27. app/code/community/VES/PdfPro/Model/Communication/Method/Xmlrpc.php +14 -0
  28. app/code/community/VES/PdfPro/Model/Email/Template.php +156 -0
  29. app/code/community/VES/PdfPro/Model/Email/Template/Mailer.php +38 -0
  30. app/code/community/VES/PdfPro/Model/Key.php +10 -0
  31. app/code/community/VES/PdfPro/Model/Mysql4/Key.php +10 -0
  32. app/code/community/VES/PdfPro/Model/Mysql4/Key/Collection.php +10 -0
  33. app/code/community/VES/PdfPro/Model/Observer.php +333 -0
  34. app/code/community/VES/PdfPro/Model/Order.php +290 -0
  35. app/code/community/VES/PdfPro/Model/Order/Creditmemo.php +240 -0
  36. app/code/community/VES/PdfPro/Model/Order/Creditmemo/Item.php +279 -0
  37. app/code/community/VES/PdfPro/Model/Order/Invoice.php +239 -0
  38. app/code/community/VES/PdfPro/Model/Order/Invoice/Item.php +280 -0
  39. app/code/community/VES/PdfPro/Model/Order/Item.php +277 -0
  40. app/code/community/VES/PdfPro/Model/Order/Shipment.php +146 -0
  41. app/code/community/VES/PdfPro/Model/Order/Shipment/Item.php +280 -0
  42. app/code/community/VES/PdfPro/Model/PdfPro.php +202 -0
  43. app/code/community/VES/PdfPro/Model/Processors/Easypdf.php +19 -0
  44. app/code/community/VES/PdfPro/Model/Sales/Order.php +285 -0
  45. app/code/community/VES/PdfPro/Model/Sales/Order/Invoice.php +294 -0
  46. app/code/community/VES/PdfPro/Model/Sales/Order/Pdf/Total/Default.php +19 -0
  47. app/code/community/VES/PdfPro/Model/Sales/Order/Shipment.php +286 -0
  48. app/code/community/VES/PdfPro/Model/Source/Attach.php +19 -0
  49. app/code/community/VES/PdfPro/Model/Source/Communication/Method.php +16 -0
  50. app/code/community/VES/PdfPro/Model/Source/Key.php +15 -0
  51. app/code/community/VES/PdfPro/Model/Source/Processor.php +15 -0
  52. app/code/community/VES/PdfPro/Model/System/Config/Backend/Easypdf.php +6 -0
  53. app/code/community/VES/PdfPro/controllers/Adminhtml/KeyController.php +101 -0
  54. app/code/community/VES/PdfPro/controllers/Adminhtml/PrintController.php +328 -0
  55. app/code/community/VES/PdfPro/controllers/GuestController.php +285 -0
  56. app/code/community/VES/PdfPro/controllers/PrintController.php +344 -0
  57. app/code/community/VES/PdfPro/etc/config.xml +258 -0
  58. app/code/community/VES/PdfPro/etc/system.xml +878 -0
  59. app/code/community/VES/PdfPro/sql/pdfpro_setup/mysql4-install-0.1.0.php +23 -0
  60. app/design/adminhtml/default/default/layout/ves_pdfpro.xml +39 -0
  61. app/design/adminhtml/default/default/template/ves_pdfpro/notifications.phtml +44 -0
  62. app/etc/modules/VES_PdfPro.xml +9 -0
  63. app/locale/en_US/VES_PdfPro.csv +23 -0
  64. app/locale/he_IL/VES_PdfPro.csv +20 -0
  65. app/locale/vi_VN/VES_PdfPro.csv +20 -0
  66. media/ves_pdfpro/logos/logo-200x50.jpg +0 -0
  67. media/ves_pdfpro/logos/logo.png +0 -0
  68. media/ves_pdfpro/logos/logo_1.png +0 -0
  69. media/ves_pdfpro/logos/logo_green.png +0 -0
  70. media/ves_pdfpro/logos/logo_red.png +0 -0
  71. media/ves_pdfpro/pdf.data +1 -0
  72. package.xml +24 -0
  73. skin/adminhtml/default/default/ves_pdfpro/easypdf.png +0 -0
  74. skin/adminhtml/default/default/ves_pdfpro/favicon.png +0 -0
  75. skin/adminhtml/default/default/ves_pdfpro/js.js +3 -0
  76. skin/adminhtml/default/default/ves_pdfpro/styles.css +3 -0
app/code/community/VES/PdfPro/Block/Adminhtml/Key.php ADDED
@@ -0,0 +1,11 @@
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ class VES_PdfPro_Block_Adminhtml_Key extends Mage_Adminhtml_Block_Widget_Grid_Container
3
+ {
4
+ public function __construct()
5
+ {
6
+ $this->_controller = 'adminhtml_key';
7
+ $this->_blockGroup = 'pdfpro';
8
+ $this->_headerText = Mage::helper('pdfpro')->__('API Key Manager');
9
+ parent::__construct();
10
+ }
11
+ }
app/code/community/VES/PdfPro/Block/Adminhtml/Key/Edit.php ADDED
@@ -0,0 +1,37 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class VES_PdfPro_Block_Adminhtml_Key_Edit extends Mage_Adminhtml_Block_Widget_Form_Container
4
+ {
5
+ public function __construct()
6
+ {
7
+ parent::__construct();
8
+
9
+ $this->_objectId = 'id';
10
+ $this->_blockGroup = 'pdfpro';
11
+ $this->_controller = 'adminhtml_key';
12
+
13
+ $this->_updateButton('save', 'label', Mage::helper('pdfpro')->__('Save API Key'));
14
+ $this->_updateButton('delete', 'label', Mage::helper('pdfpro')->__('Delete API Key'));
15
+
16
+ $this->_addButton('saveandcontinue', array(
17
+ 'label' => Mage::helper('adminhtml')->__('Save And Continue Edit'),
18
+ 'onclick' => 'submitAndContinueEdit()',
19
+ 'class' => 'save',
20
+ ), -100);
21
+
22
+ $this->_formScripts[] = "
23
+ function submitAndContinueEdit(){
24
+ editForm.submit($('edit_form').action+'back/edit/');
25
+ }
26
+ ";
27
+ }
28
+
29
+ public function getHeaderText()
30
+ {
31
+ if( Mage::registry('key_data') && Mage::registry('key_data')->getId() ) {
32
+ return Mage::helper('pdfpro')->__("Edit API Key '%s'", $this->htmlEscape(Mage::registry('key_data')->getId()));
33
+ } else {
34
+ return Mage::helper('pdfpro')->__('Add API Key');
35
+ }
36
+ }
37
+ }
app/code/community/VES/PdfPro/Block/Adminhtml/Key/Edit/Form.php ADDED
@@ -0,0 +1,19 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class VES_PdfPro_Block_Adminhtml_Key_Edit_Form extends Mage_Adminhtml_Block_Widget_Form
4
+ {
5
+ protected function _prepareForm()
6
+ {
7
+ $form = new Varien_Data_Form(array(
8
+ 'id' => 'edit_form',
9
+ 'action' => $this->getUrl('*/*/save', array('id' => $this->getRequest()->getParam('id'))),
10
+ 'method' => 'post',
11
+ 'enctype' => 'multipart/form-data'
12
+ )
13
+ );
14
+
15
+ $form->setUseContainer(true);
16
+ $this->setForm($form);
17
+ return parent::_prepareForm();
18
+ }
19
+ }
app/code/community/VES/PdfPro/Block/Adminhtml/Key/Edit/Tab/Form.php ADDED
@@ -0,0 +1,84 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class VES_PdfPro_Block_Adminhtml_Key_Edit_Tab_Form extends Mage_Adminhtml_Block_Widget_Form
4
+ {
5
+ protected function _prepareForm()
6
+ {
7
+ $form = new Varien_Data_Form();
8
+ $this->setForm($form);
9
+ $fieldset = $form->addFieldset('apikey_form', array('legend'=>Mage::helper('pdfpro')->__('API Key information')));
10
+ Mage::dispatchEvent('ves_pdfpro_apikey_form_prepare_before',array('fieldset'=>$fieldset));
11
+ $fieldset->addField('api_key', 'text', array(
12
+ 'label' => Mage::helper('pdfpro')->__('API Key'),
13
+ 'class' => 'required-entry',
14
+ 'required' => true,
15
+ 'name' => 'api_key',
16
+ ));
17
+
18
+ /**
19
+ * Check is single store mode
20
+ */
21
+ if (!Mage::app()->isSingleStoreMode()) {
22
+ $field = $fieldset->addField('store_ids', 'multiselect', array(
23
+ 'name' => 'store_ids[]',
24
+ 'label' => Mage::helper('cms')->__('Store View'),
25
+ 'title' => Mage::helper('cms')->__('Store View'),
26
+ 'required' => true,
27
+ 'values' => Mage::getSingleton('adminhtml/system_store')->getStoreValuesForForm(false, true),
28
+ ));
29
+ //$renderer = $this->getLayout()->createBlock('adminhtml/store_switcher_form_renderer_fieldset_element');
30
+ //$field->setRenderer($renderer);
31
+ }
32
+ else {
33
+ $fieldset->addField('store_ids', 'hidden', array(
34
+ 'name' => 'store_ids[]',
35
+ 'value' => Mage::app()->getStore(true)->getId()
36
+ ));
37
+ Mage::registry('key_data')->setStoreIds(Mage::app()->getStore(true)->getId());
38
+ }
39
+
40
+
41
+ $customerGroups = Mage::getResourceModel('customer/group_collection')->load()->toOptionArray();
42
+ $found = false;
43
+
44
+ foreach ($customerGroups as $group) {
45
+ if ($group['value']==0) {
46
+ $found = true;
47
+ }
48
+ }
49
+ if (!$found) {
50
+ array_unshift($customerGroups, array(
51
+ 'value' => 0,
52
+ 'label' => Mage::helper('salesrule')->__('NOT LOGGED IN'))
53
+ );
54
+ }
55
+
56
+ $fieldset->addField('customer_group_ids', 'multiselect', array(
57
+ 'name' => 'customer_group_ids[]',
58
+ 'label' => Mage::helper('salesrule')->__('Customer Groups'),
59
+ 'title' => Mage::helper('salesrule')->__('Customer Groups'),
60
+ 'required' => true,
61
+ 'values' => Mage::getResourceModel('customer/group_collection')->toOptionArray(),
62
+ ));
63
+ $fieldset->addField('comment', 'editor', array(
64
+ 'label' => Mage::helper('pdfpro')->__('Comment'),
65
+ 'required' => false,
66
+ 'name' => 'comment',
67
+ ));
68
+ $fieldset->addField('priority', 'text', array(
69
+ 'label' => Mage::helper('pdfpro')->__('Priority'),
70
+ 'class' => 'required-entry',
71
+ 'required' => true,
72
+ 'name' => 'priority',
73
+ ));
74
+ Mage::dispatchEvent('ves_pdfpro_apikey_form_prepare_after',array('fieldset'=>$fieldset));
75
+ if ( Mage::getSingleton('adminhtml/session')->getFormData() )
76
+ {
77
+ $form->setValues(Mage::getSingleton('adminhtml/session')->getFormData());
78
+ Mage::getSingleton('adminhtml/session')->setFormData(null);
79
+ } elseif ( Mage::registry('key_data') ) {
80
+ $form->setValues(Mage::registry('key_data')->getData());
81
+ }
82
+ return parent::_prepareForm();
83
+ }
84
+ }
app/code/community/VES/PdfPro/Block/Adminhtml/Key/Edit/Tabs.php ADDED
@@ -0,0 +1,25 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class VES_PdfPro_Block_Adminhtml_Key_Edit_Tabs extends Mage_Adminhtml_Block_Widget_Tabs
4
+ {
5
+
6
+ public function __construct()
7
+ {
8
+ parent::__construct();
9
+ $this->setId('apikey_tabs');
10
+ $this->setDestElementId('edit_form');
11
+ $this->setTitle(Mage::helper('pdfpro')->__('API Key Information'));
12
+ }
13
+
14
+ protected function _beforeToHtml()
15
+ {
16
+ Mage::dispatchEvent('ves_pdfpro_apikey_tabs_before',array('block'=>$this));
17
+ $this->addTab('form', array(
18
+ 'label' => Mage::helper('pdfpro')->__('API Key Information'),
19
+ 'title' => Mage::helper('pdfpro')->__('API Key Information'),
20
+ 'content' => $this->getLayout()->createBlock('pdfpro/adminhtml_key_edit_tab_form')->toHtml(),
21
+ ));
22
+ Mage::dispatchEvent('ves_pdfpro_apikey_tabs_after',array('block'=>$this));
23
+ return parent::_beforeToHtml();
24
+ }
25
+ }
app/code/community/VES/PdfPro/Block/Adminhtml/Key/Grid.php ADDED
@@ -0,0 +1,82 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class VES_PdfPro_Block_Adminhtml_Key_Grid extends Mage_Adminhtml_Block_Widget_Grid
4
+ {
5
+ public function __construct()
6
+ {
7
+ parent::__construct();
8
+ $this->setId('apiKeyGrid');
9
+ $this->setSaveParametersInSession(true);
10
+ $this->setDefaultSort('priority');
11
+ $this->setDefaultDir('ASC');
12
+ }
13
+
14
+ protected function _prepareCollection()
15
+ {
16
+ $collection = Mage::getModel('pdfpro/key')->getCollection();
17
+ $this->setCollection($collection);
18
+ return parent::_prepareCollection();
19
+ }
20
+
21
+ protected function _prepareColumns()
22
+ {
23
+ $this->addColumn('entity_id', array(
24
+ 'header' => Mage::helper('pdfpro')->__('ID'),
25
+ 'align' =>'left',
26
+ 'index' => 'entity_id',
27
+ 'width' => '50px',
28
+ ));
29
+ $this->addColumn('api_key', array(
30
+ 'header' => Mage::helper('pdfpro')->__('API Key'),
31
+ 'align' =>'left',
32
+ 'index' => 'api_key',
33
+ ));
34
+ /**
35
+ * Check is single store mode
36
+ */
37
+ if (!Mage::app()->isSingleStoreMode()) {
38
+ $this->addColumn('store_id', array(
39
+ 'header' => Mage::helper('cms')->__('Store View'),
40
+ 'index' => 'store_ids',
41
+ 'type' => 'store',
42
+ 'store_all' => true,
43
+ 'store_view' => true,
44
+ 'sortable' => false,
45
+ 'filter' => false,
46
+ 'renderer' => new VES_PdfPro_Block_Adminhtml_Key_Grid_Renderer_Store(),
47
+ ));
48
+ }
49
+ $this->addColumn('customer_group_ids', array(
50
+ 'header' => Mage::helper('cms')->__('Customer Group'),
51
+ 'index' => 'customer_group_ids',
52
+ 'type' => 'store',
53
+ 'store_all' => true,
54
+ 'store_view' => true,
55
+ 'sortable' => false,
56
+ 'filter' => false,
57
+ 'renderer' => new VES_PdfPro_Block_Adminhtml_Key_Grid_Renderer_Group(),
58
+ ));
59
+ $this->addColumn('comment', array(
60
+ 'header' => Mage::helper('pdfpro')->__('Comment'),
61
+ 'align' =>'left',
62
+ 'index' => 'comment',
63
+ 'width' => '400px',
64
+ ));
65
+
66
+ $this->addColumn('priority', array(
67
+ 'header' => Mage::helper('pdfpro')->__('Priority'),
68
+ 'align' =>'center',
69
+ 'index' => 'priority',
70
+ 'width' => '50px',
71
+ ));
72
+ return parent::_prepareColumns();
73
+ }
74
+ public function getRowUrl($row)
75
+ {
76
+ return $this->getUrl('*/*/edit', array('id' => $row->getId()));
77
+ }
78
+ protected function _prepareMassaction()
79
+ {
80
+ return $this;
81
+ }
82
+ }
app/code/community/VES/PdfPro/Block/Adminhtml/Key/Grid/Renderer/Group.php ADDED
@@ -0,0 +1,13 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ class VES_PdfPro_Block_Adminhtml_Key_Grid_Renderer_Group extends Mage_Adminhtml_Block_Widget_Grid_Column_Renderer_Abstract
3
+ {
4
+ public function render(Varien_Object $row)
5
+ {
6
+ $value = $row->getData($this->getColumn()->getIndex());
7
+ $groups = Mage::getModel('customer/group')->getCollection()->addFieldToFilter('customer_group_id',array('in'=>explode(',', $value)));
8
+ $result = '';
9
+ foreach($groups as $group){$result.=$group->getCustomerGroupCode()."<br />";}
10
+ return $result;
11
+ }
12
+
13
+ }
app/code/community/VES/PdfPro/Block/Adminhtml/Key/Grid/Renderer/Store.php ADDED
@@ -0,0 +1,11 @@
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ class VES_PdfPro_Block_Adminhtml_Key_Grid_Renderer_Store extends Mage_Adminhtml_Block_Widget_Grid_Column_Renderer_Store
3
+ {
4
+ public function render(Varien_Object $row)
5
+ {
6
+ $value = $row->getData($this->getColumn()->getIndex());
7
+ $row->setData($this->getColumn()->getIndex(),explode(',', $value));
8
+ return parent::render($row);
9
+ }
10
+
11
+ }
app/code/community/VES/PdfPro/Block/Adminhtml/Sales/Order/Creditmemo/View.php ADDED
@@ -0,0 +1,44 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * VES_PdfPro_Block_Adminhtml_Sales_Order_Creditmemo_View
4
+ *
5
+ * @author VnEcoms Team <support@vnecoms.com>
6
+ * @website http://www.vnecoms.com
7
+ */
8
+ class VES_PdfPro_Block_Adminhtml_Sales_Order_Creditmemo_View extends Mage_Adminhtml_Block_Template
9
+ {
10
+ /**
11
+ * Retrieve invoice model instance
12
+ *
13
+ * @return Mage_Sales_Model_Order_Invoice
14
+ */
15
+ public function getCreditmemo()
16
+ {
17
+ return Mage::registry('current_creditmemo');
18
+ }
19
+ /**
20
+ * Get Print Url
21
+ * @return string
22
+ */
23
+ public function getPrintUrl(){
24
+ return $this->getUrl('pdfpro_cp/adminhtml_print/creditmemo',array('creditmemo_id'=>$this->getCreditmemo()->getId()));
25
+ }
26
+
27
+ /**
28
+ * Add PDF Pro Print button to view invoice page
29
+ * @see Mage_Core_Block_Abstract::_prepareLayout()
30
+ */
31
+ protected function _prepareLayout(){
32
+ if(!Mage::getStoreConfig('pdfpro/config/enabled')) return;
33
+ $block = $this->getLayout()->getBlock('sales_creditmemo_view');
34
+ if(Mage::getStoreConfig('pdfpro/config/remove_default_print')){
35
+ $block->removeButton('print');
36
+ }
37
+ $block->addButton('pdfpro_print', array(
38
+ 'label' => 'Easy PDF - '.Mage::helper('sales')->__('Print Credit Memo'),
39
+ 'class' => 'save',
40
+ 'onclick' => 'setLocation(\''.$this->getPrintUrl().'\')'
41
+ )
42
+ );
43
+ }
44
+ }
app/code/community/VES/PdfPro/Block/Adminhtml/Sales/Order/Invoice/View.php ADDED
@@ -0,0 +1,44 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * VES_PdfPro_Block_Adminhtml_Sales_Order_Invoice_View
4
+ *
5
+ * @author VnEcoms Team <support@vnecoms.com>
6
+ * @website http://www.vnecoms.com
7
+ */
8
+ class VES_PdfPro_Block_Adminhtml_Sales_Order_Invoice_View extends Mage_Adminhtml_Block_Template
9
+ {
10
+ /**
11
+ * Retrieve invoice model instance
12
+ *
13
+ * @return Mage_Sales_Model_Order_Invoice
14
+ */
15
+ public function getInvoice()
16
+ {
17
+ return Mage::registry('current_invoice');
18
+ }
19
+ /**
20
+ * Get Print Url
21
+ * @return string
22
+ */
23
+ public function getPrintUrl(){
24
+ return $this->getUrl('pdfpro_cp/adminhtml_print/invoice',array('invoice_id'=>$this->getInvoice()->getId()));
25
+ }
26
+
27
+ /**
28
+ * Add PDF Pro Print button to view invoice page
29
+ * @see Mage_Core_Block_Abstract::_prepareLayout()
30
+ */
31
+ protected function _prepareLayout(){
32
+ if(!Mage::getStoreConfig('pdfpro/config/enabled')) return;
33
+ $block = $this->getLayout()->getBlock('sales_invoice_view');
34
+ if(Mage::getStoreConfig('pdfpro/config/remove_default_print')){
35
+ $block->removeButton('print');
36
+ }
37
+ $block->addButton('pdfpro_print', array(
38
+ 'label' => 'Easy PDF - '.Mage::helper('sales')->__('Print Invoice'),
39
+ 'class' => 'save',
40
+ 'onclick' => 'setLocation(\''.$this->getPrintUrl().'\')'
41
+ )
42
+ );
43
+ }
44
+ }
app/code/community/VES/PdfPro/Block/Adminhtml/Sales/Order/Shipment/View.php ADDED
@@ -0,0 +1,44 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * VES_PdfPro_Block_Adminhtml_Sales_Order_Shipment_View
4
+ *
5
+ * @author VnEcoms Team <support@vnecoms.com>
6
+ * @website http://www.vnecoms.com
7
+ */
8
+ class VES_PdfPro_Block_Adminhtml_Sales_Order_Shipment_View extends Mage_Adminhtml_Block_Template
9
+ {
10
+ /**
11
+ * Retrieve invoice model instance
12
+ *
13
+ * @return Mage_Sales_Model_Order_Invoice
14
+ */
15
+ public function getShipment()
16
+ {
17
+ return Mage::registry('current_shipment');
18
+ }
19
+ /**
20
+ * Get Print Url
21
+ * @return string
22
+ */
23
+ public function getPrintUrl(){
24
+ return $this->getUrl('pdfpro_cp/adminhtml_print/shipment',array('shipment_id'=>$this->getShipment()->getId()));
25
+ }
26
+
27
+ /**
28
+ * Add PDF Pro Print button to view invoice page
29
+ * @see Mage_Core_Block_Abstract::_prepareLayout()
30
+ */
31
+ protected function _prepareLayout(){
32
+ if(!Mage::getStoreConfig('pdfpro/config/enabled')) return;
33
+ $block = $this->getLayout()->getBlock('sales_shipment_view');
34
+ if(Mage::getStoreConfig('pdfpro/config/remove_default_print')){
35
+ $block->removeButton('print');
36
+ }
37
+ $block->addButton('pdfpro_print', array(
38
+ 'label' => 'Easy PDF - '.Mage::helper('sales')->__('Print Packingslip'),
39
+ 'class' => 'save',
40
+ 'onclick' => 'setLocation(\''.$this->getPrintUrl().'\')'
41
+ )
42
+ );
43
+ }
44
+ }
app/code/community/VES/PdfPro/Block/Adminhtml/Sales/Order/View.php ADDED
@@ -0,0 +1,41 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * VES_PdfPro_Block_Adminhtml_Sales_Order_Invoice_View
4
+ *
5
+ * @author VnEcoms Team <support@vnecoms.com>
6
+ * @website http://www.vnecoms.com
7
+ */
8
+ class VES_PdfPro_Block_Adminhtml_Sales_Order_View extends Mage_Adminhtml_Block_Template
9
+ {
10
+ /**
11
+ * Retrieve invoice model instance
12
+ *
13
+ * @return Mage_Sales_Model_Order_Invoice
14
+ */
15
+ public function getOrder()
16
+ {
17
+ return Mage::registry('current_order');
18
+ }
19
+ /**
20
+ * Get Print Url
21
+ * @return string
22
+ */
23
+ public function getPrintUrl(){
24
+ return $this->getUrl('pdfpro_cp/adminhtml_print/order',array('order_id'=>$this->getOrder()->getId()));
25
+ }
26
+
27
+ /**
28
+ * Add PDF Pro Print button to view invoice page
29
+ * @see Mage_Core_Block_Abstract::_prepareLayout()
30
+ */
31
+ protected function _prepareLayout(){
32
+ if(!Mage::getStoreConfig('pdfpro/config/enabled') || !Mage::getStoreConfig('pdfpro/config/admin_print_order')) return;
33
+ $block = $this->getLayout()->getBlock('sales_order_edit');
34
+ $block->addButton('pdfpro_print', array(
35
+ 'label' => 'Easy PDF - '.Mage::helper('sales')->__('Print Order'),
36
+ 'class' => 'save',
37
+ 'onclick' => 'setLocation(\''.$this->getPrintUrl().'\')'
38
+ )
39
+ );
40
+ }
41
+ }
app/code/community/VES/PdfPro/Block/Adminhtml/System/Config/Form/Fieldset.php ADDED
@@ -0,0 +1,29 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Config form fieldset renderer
4
+ *
5
+ * @category VES
6
+ * @package VES_PdfPro
7
+ * @author Easy PDF Invoice Team <support@easypdfinvoice.com>
8
+ */
9
+ class VES_PdfPro_Block_Adminhtml_System_Config_Form_Fieldset extends Mage_Adminhtml_Block_System_Config_Form_Fieldset
10
+ {
11
+ /**
12
+ * Return header comment part of html for fieldset
13
+ *
14
+ * @param Varien_Data_Form_Element_Abstract $element
15
+ * @return string
16
+ */
17
+ protected function _getHeaderCommentHtml($element)
18
+ {
19
+ $html = '
20
+ <div style="display: block;">
21
+ <table class="form-list">
22
+ <tr>
23
+ <td class="label">Extension Version</td><td><strong style="color: #1f5e00;">'.PdfPro::getVersion().'</strong></td>
24
+ </tr>
25
+ </table>
26
+ </div>';
27
+ return $html.$element->getComment();
28
+ }
29
+ }
app/code/community/VES/PdfPro/Block/Adminhtml/Version.php ADDED
@@ -0,0 +1,98 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * VES_PdfPro_Block_Adminhtml_Version
4
+ *
5
+ * @author VnEcoms Team <support@vnecoms.com>
6
+ * @website http://www.vnecoms.com
7
+ */
8
+ class VES_PdfPro_Block_Adminhtml_Version extends Mage_Adminhtml_Block_Template
9
+ {
10
+ /**
11
+ * Write version information from server to local file
12
+ * @param string $versionFile
13
+ */
14
+ public function writeVersionFile($versionFile){
15
+ $date = Mage::getModel('core/date')->date('Y-m-d');
16
+ $serverVersion = Mage::helper('pdfpro')->getServerVersion();
17
+ try{
18
+ $fp = fopen($versionFile, 'w');
19
+ fwrite($fp, base64_encode(json_encode(array('date'=>$date,'version'=>$serverVersion))));
20
+ fclose($fp);
21
+ }catch(Exception $e){
22
+
23
+ }
24
+ return $serverVersion;
25
+ }
26
+ /**
27
+ * Get version of PDF Pro From server
28
+ */
29
+ public function getServerVersion(){
30
+ $versionFile = Mage::getBaseDir('media').DS.'ves_pdfpro'.DS.'version.txt';
31
+ if(!file_exists($versionFile)){
32
+ //$serverVersion = $this->writeVersionFile($versionFile);
33
+ return false;
34
+ }else{
35
+ $date = Mage::getModel('core/date')->date('Y-m-d');
36
+ $info = file_get_contents($versionFile);
37
+ $info = json_decode(base64_decode($info),true);
38
+ if($info['date'] != $date){
39
+ $serverVersion = $this->writeVersionFile($versionFile);
40
+ }else{
41
+ $serverVersion = $info['version'];
42
+ }
43
+ }
44
+ return $serverVersion;
45
+ }
46
+ /**
47
+ * get Message from server
48
+ * @param string $versionFile
49
+ */
50
+ public function writeServerMessage($messageFile){
51
+ $message = Mage::helper('pdfpro')->getServerMessage();
52
+ $date = Mage::getModel('core/date')->date('Y-m-d');
53
+ try{
54
+ $fp = fopen($messageFile, 'w');
55
+ fwrite($fp, base64_encode(json_encode(array('date'=>$date,'message'=>$message))));
56
+ fclose($fp);
57
+ }catch(Exception $e){
58
+
59
+ }
60
+ return $message;
61
+ }
62
+
63
+ /**
64
+ * Get Message from server
65
+ */
66
+ public function getServerMessage(){
67
+ $messageFile = Mage::getBaseDir('media').DS.'ves_pdfpro'.DS.'message.txt';
68
+ if(!file_exists($messageFile)){
69
+ //$message = $this->writeServerMessage($messageFile);
70
+ return false;
71
+ }else{
72
+ $date = Mage::getModel('core/date')->date('Y-m-d');
73
+ $info = file_get_contents($messageFile);
74
+ $info = json_decode(base64_decode($info),true);
75
+ if($info['date'] != $date){
76
+ $message = $this->writeServerMessage($messageFile);
77
+ }else{
78
+ $message = $info['message'];
79
+ }
80
+ }
81
+ return $message;
82
+ }
83
+
84
+ public function canDisplayNotice(){
85
+ return Mage::getStoreConfig('pdfpro/notification/notice');
86
+ }
87
+
88
+ public function canDisplayNews(){
89
+ return Mage::getStoreConfig('pdfpro/notification/news');
90
+ }
91
+
92
+ public function canDisplayDefaultApiKeyMsg(){
93
+ $defaultKey = Mage::getStoreConfig('pdfpro/config/default_key');
94
+ if(!$defaultKey) return true;
95
+ $keyModel = Mage::getModel('pdfpro/key')->load($defaultKey);
96
+ return !($keyModel->getApiKey());
97
+ }
98
+ }
app/code/community/VES/PdfPro/Block/Checkout/Onepage/Success.php ADDED
@@ -0,0 +1,35 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * VES_PdfPro_Block_Checkout_Onepage_Success
4
+ *
5
+ * @author VnEcoms Team <support@vnecoms.com>
6
+ * @website http://www.vnecoms.com
7
+ */
8
+ class VES_PdfPro_Block_Checkout_Onepage_Success extends Mage_Checkout_Block_Onepage_Success
9
+ {
10
+ /**
11
+ * Get last order ID from session, fetch it and check whether it can be viewed, printed etc
12
+ */
13
+ protected function _prepareLastOrder()
14
+ {
15
+ if(!Mage::getStoreConfig('pdfpro/config/enabled') || !Mage::getStoreConfig('pdfpro/config/allow_customer_print') || !Mage::helper('pdfpro')->getDefaultApiKey()){
16
+ return parent::_prepareLastOrder();
17
+ }
18
+ $orderId = Mage::getSingleton('checkout/session')->getLastOrderId();
19
+ if ($orderId) {
20
+ $order = Mage::getModel('sales/order')->load($orderId);
21
+ if ($order->getId()) {
22
+ $isVisible = !in_array($order->getState(),
23
+ Mage::getSingleton('sales/order_config')->getInvisibleOnFrontStates());
24
+ $this->addData(array(
25
+ 'is_order_visible' => $isVisible,
26
+ 'view_order_id' => $this->getUrl('sales/order/view/', array('order_id' => $orderId)),
27
+ 'print_url' => $this->getUrl('pdfpro/print/order', array('order_id'=> $orderId)),
28
+ 'can_print_order' => $isVisible,
29
+ 'can_view_order' => Mage::getSingleton('customer/session')->isLoggedIn() && $isVisible,
30
+ 'order_id' => $order->getIncrementId(),
31
+ ));
32
+ }
33
+ }
34
+ }
35
+ }
app/code/community/VES/PdfPro/Block/Sales/Order/Creditmemo/Items.php ADDED
@@ -0,0 +1,23 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * VES_PdfPro_Block_Sales_Order_Creditmemo_Items
4
+ *
5
+ * @author VnEcoms Team <support@vnecoms.com>
6
+ * @website http://www.vnecoms.com
7
+ */
8
+ class VES_PdfPro_Block_Sales_Order_Creditmemo_Items extends Mage_Sales_Block_Order_Creditmemo_Items
9
+ {
10
+ public function getPrintCreditmemoUrl($creditmemo)
11
+ {
12
+ if(!Mage::getStoreConfig('pdfpro/config/enabled') || !Mage::getStoreConfig('pdfpro/config/allow_customer_print') || !Mage::helper('pdfpro')->getDefaultApiKey()) return parent::getPrintCreditmemoUrl($creditmemo);
13
+ if(Mage::getSingleton('customer/session')->isLoggedIn()) return Mage::getUrl('pdfpro/print/creditmemo', array('creditmemo_id' => $creditmemo->getId()));
14
+ return Mage::getUrl('pdfpro/guest/printCreditmemo', array('creditmemo_id' => $creditmemo->getId()));
15
+ }
16
+
17
+ public function getPrintAllCreditmemosUrl($order)
18
+ {
19
+ if(!Mage::getStoreConfig('pdfpro/config/enabled') || !Mage::getStoreConfig('pdfpro/config/allow_customer_print') || !Mage::helper('pdfpro')->getDefaultApiKey()) return parent::getPrintAllCreditmemosUrl($order);
20
+ if(Mage::getSingleton('customer/session')->isLoggedIn()) return Mage::getUrl('pdfpro/print/creditmemos', array('order_id' => $order->getId()));
21
+ return Mage::getUrl('pdfpro/guest/printCreditmemos', array('order_id' => $order->getId()));
22
+ }
23
+ }
app/code/community/VES/PdfPro/Block/Sales/Order/Info.php ADDED
@@ -0,0 +1,18 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * VES_PdfPro_Block_Sales_Order_Info
5
+ *
6
+ * @author VnEcoms Team <support@vnecoms.com>
7
+ * @website http://www.vnecoms.com
8
+ */
9
+ class VES_PdfPro_Block_Sales_Order_Info extends Mage_Sales_Block_Order_Info
10
+ {
11
+ public function getPrintUrl($order)
12
+ {
13
+ if(!Mage::getStoreConfig('pdfpro/config/enabled') || !Mage::getStoreConfig('pdfpro/config/allow_customer_print') || !Mage::helper('pdfpro')->getDefaultApiKey()) return parent::getPrintUrl($order);
14
+ if(Mage::getSingleton('customer/session')->isLoggedIn()) return $this->getUrl('pdfpro/print/order', array('order_id' => $order->getId()));
15
+ return $this->getUrl('pdfpro/guest/printOrder', array('order_id' => $order->getId()));
16
+ }
17
+
18
+ }
app/code/community/VES/PdfPro/Block/Sales/Order/Info/Buttons.php ADDED
@@ -0,0 +1,22 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * VES_PdfPro_Block_Sales_Order_Info_Buttons
4
+ *
5
+ * @author VnEcoms Team <support@vnecoms.com>
6
+ * @website http://www.vnecoms.com
7
+ */
8
+ class VES_PdfPro_Block_Sales_Order_Info_Buttons extends Mage_Sales_Block_Order_Info_Buttons
9
+ {
10
+ /**
11
+ * Get url for printing order
12
+ *
13
+ * @param Mage_Sales_Order $order
14
+ * @return string
15
+ */
16
+ public function getPrintUrl($order)
17
+ {
18
+ if(!Mage::getStoreConfig('pdfpro/config/enabled') || !Mage::getStoreConfig('pdfpro/config/allow_customer_print') || !Mage::helper('pdfpro')->getDefaultApiKey()) return parent::getPrintUrl($order);
19
+ if(Mage::getSingleton('customer/session')->isLoggedIn()) return $this->getUrl('pdfpro/print/order', array('order_id' => $order->getId()));
20
+ return $this->getUrl('pdfpro/guest/printOrder', array('order_id' => $order->getId()));
21
+ }
22
+ }
app/code/community/VES/PdfPro/Block/Sales/Order/Invoice/Items.php ADDED
@@ -0,0 +1,23 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * VES_PdfPro_Block_Sales_Order_Invoice_Items
4
+ *
5
+ * @author VnEcoms Team <support@vnecoms.com>
6
+ * @website http://www.vnecoms.com
7
+ */
8
+ class VES_PdfPro_Block_Sales_Order_Invoice_Items extends Mage_Sales_Block_Order_Invoice_Items
9
+ {
10
+ public function getPrintInvoiceUrl($invoice)
11
+ {
12
+ if(!Mage::getStoreConfig('pdfpro/config/enabled') || !Mage::getStoreConfig('pdfpro/config/allow_customer_print') || !Mage::helper('pdfpro')->getDefaultApiKey()) return parent::getPrintInvoiceUrl($invoice);
13
+ if(Mage::getSingleton('customer/session')->isLoggedIn()) return Mage::getUrl('pdfpro/print/invoice', array('invoice_id' => $invoice->getId()));
14
+ return Mage::getUrl('pdfpro/guest/printInvoice', array('invoice_id' => $invoice->getId()));
15
+ }
16
+
17
+ public function getPrintAllInvoicesUrl($order)
18
+ {
19
+ if(!Mage::getStoreConfig('pdfpro/config/enabled') || !Mage::getStoreConfig('pdfpro/config/allow_customer_print') || !Mage::helper('pdfpro')->getDefaultApiKey()) return parent::getPrintAllInvoicesUrl($order);
20
+ if(Mage::getSingleton('customer/session')->isLoggedIn()) return Mage::getUrl('pdfpro/print/invoices', array('order_id' => $order->getId()));
21
+ return Mage::getUrl('pdfpro/guest/printInvoices', array('order_id' => $order->getId()));
22
+ }
23
+ }
app/code/community/VES/PdfPro/Block/Sales/Order/Shipment/Items.php ADDED
@@ -0,0 +1,21 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * VES_PdfPro_Block_Sales_Order_Shipment_Items
4
+ *
5
+ * @author VnEcoms Team <support@vnecoms.com>
6
+ * @website http://www.vnecoms.com
7
+ */
8
+ class VES_PdfPro_Block_Sales_Order_Shipment_Items extends Mage_Sales_Block_Order_Shipment_Items
9
+ {
10
+ public function getPrintShipmentUrl($shipment){
11
+ if(!Mage::getStoreConfig('pdfpro/config/enabled') || !Mage::getStoreConfig('pdfpro/config/allow_customer_print') || !Mage::helper('pdfpro')->getDefaultApiKey()) return parent::getPrintShipmentUrl($shipment);
12
+ if(Mage::getSingleton('customer/session')->isLoggedIn()) return Mage::getUrl('pdfpro/print/shipment', array('shipment_id' => $shipment->getId()));
13
+ return Mage::getUrl('pdfpro/guest/printShipment', array('shipment_id' => $shipment->getId()));
14
+ }
15
+
16
+ public function getPrintAllShipmentsUrl($order){
17
+ if(!Mage::getStoreConfig('pdfpro/config/enabled') || !Mage::getStoreConfig('pdfpro/config/allow_customer_print') || !Mage::helper('pdfpro')->getDefaultApiKey()) return parent::getPrintAllShipmentsUrl($order);
18
+ if(Mage::getSingleton('customer/session')->isLoggedIn()) return Mage::getUrl('pdfpro/print/shipments', array('order_id' => $order->getId()));
19
+ return Mage::getUrl('pdfpro/guest/printShipments', array('order_id' => $order->getId()));
20
+ }
21
+ }
app/code/community/VES/PdfPro/Controller/Abstract.php ADDED
@@ -0,0 +1,248 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * VES_PdfPro_Controller_Abstract
4
+ * @extends Mage_Core_Controller_Front_Action
5
+ *
6
+ * @author VnEcoms Team <support@vnecoms.com>
7
+ * @website http://www.vnecoms.com
8
+ */
9
+
10
+ abstract class VES_PdfPro_Controller_Abstract extends Mage_Core_Controller_Front_Action
11
+ {
12
+ /**
13
+ * Check order view availability
14
+ *
15
+ * @param Mage_Sales_Model_Order $order
16
+ * @return bool
17
+ */
18
+ protected function _canViewOrder($order)
19
+ {
20
+ $customerId = Mage::getSingleton('customer/session')->getCustomerId();
21
+ $availableStates = Mage::getSingleton('sales/order_config')->getVisibleOnFrontStates();
22
+ if ($order->getId() && $order->getCustomerId() && ($order->getCustomerId() == $customerId)
23
+ && in_array($order->getState(), $availableStates, $strict = true)
24
+ ) {
25
+ return true;
26
+ }
27
+ return false;
28
+ }
29
+
30
+ /**
31
+ * Init layout, messages and set active block for customer
32
+ *
33
+ * @return null
34
+ */
35
+ protected function _viewAction()
36
+ {
37
+ if (!$this->_loadValidOrder()) {
38
+ return;
39
+ }
40
+
41
+ $this->loadLayout();
42
+ $this->_initLayoutMessages('catalog/session');
43
+
44
+ $navigationBlock = $this->getLayout()->getBlock('customer_account_navigation');
45
+ if ($navigationBlock) {
46
+ $navigationBlock->setActive('sales/order/history');
47
+ }
48
+ $this->renderLayout();
49
+ }
50
+
51
+ /**
52
+ * Try to load valid order by order_id and register it
53
+ *
54
+ * @param int $orderId
55
+ * @return bool
56
+ */
57
+ protected function _loadValidOrder($orderId = null)
58
+ {
59
+ if (null === $orderId) {
60
+ $orderId = (int) $this->getRequest()->getParam('order_id');
61
+ }
62
+ if (!$orderId) {
63
+ $this->_forward('noRoute');
64
+ return false;
65
+ }
66
+
67
+ $order = Mage::getModel('sales/order')->load($orderId);
68
+
69
+ if ($this->_canViewOrder($order)) {
70
+ Mage::register('current_order', $order);
71
+ return true;
72
+ } else {
73
+ $this->_redirect('*/*/history');
74
+ }
75
+ return false;
76
+ }
77
+
78
+ /**
79
+ * Order view page
80
+ */
81
+ public function viewAction()
82
+ {
83
+ $this->_viewAction();
84
+ }
85
+
86
+ /**
87
+ * Invoice page
88
+ */
89
+ public function invoiceAction()
90
+ {
91
+ $this->_viewAction();
92
+ }
93
+
94
+ /**
95
+ * Shipment page
96
+ */
97
+ public function shipmentAction()
98
+ {
99
+ $this->_viewAction();
100
+ }
101
+
102
+ /**
103
+ * Creditmemo page
104
+ */
105
+ public function creditmemoAction()
106
+ {
107
+ $this->_viewAction();
108
+ }
109
+
110
+ /**
111
+ * Action for reorder
112
+ */
113
+ public function reorderAction()
114
+ {
115
+ if (!$this->_loadValidOrder()) {
116
+ return;
117
+ }
118
+ $order = Mage::registry('current_order');
119
+
120
+ $cart = Mage::getSingleton('checkout/cart');
121
+ $cartTruncated = false;
122
+ /* @var $cart Mage_Checkout_Model_Cart */
123
+
124
+ $items = $order->getItemsCollection();
125
+ foreach ($items as $item) {
126
+ try {
127
+ $cart->addOrderItem($item);
128
+ } catch (Mage_Core_Exception $e){
129
+ if (Mage::getSingleton('checkout/session')->getUseNotice(true)) {
130
+ Mage::getSingleton('checkout/session')->addNotice($e->getMessage());
131
+ }
132
+ else {
133
+ Mage::getSingleton('checkout/session')->addError($e->getMessage());
134
+ }
135
+ $this->_redirect('*/*/history');
136
+ } catch (Exception $e) {
137
+ Mage::getSingleton('checkout/session')->addException($e,
138
+ Mage::helper('checkout')->__('Cannot add the item to shopping cart.')
139
+ );
140
+ $this->_redirect('checkout/cart');
141
+ }
142
+ }
143
+
144
+ $cart->save();
145
+ $this->_redirect('checkout/cart');
146
+ }
147
+
148
+ /**
149
+ * Print Order Action
150
+ */
151
+ public function printAction()
152
+ {
153
+ if (!$this->_loadValidOrder()) {
154
+ return;
155
+ }
156
+ $this->loadLayout('print');
157
+ $this->renderLayout();
158
+ }
159
+
160
+ /**
161
+ * Print Invoice Action
162
+ */
163
+ public function printInvoiceAction()
164
+ {
165
+ $invoiceId = (int) $this->getRequest()->getParam('invoice_id');
166
+ if ($invoiceId) {
167
+ $invoice = Mage::getModel('sales/order_invoice')->load($invoiceId);
168
+ $order = $invoice->getOrder();
169
+ } else {
170
+ $orderId = (int) $this->getRequest()->getParam('order_id');
171
+ $order = Mage::getModel('sales/order')->load($orderId);
172
+ }
173
+
174
+ if ($this->_canViewOrder($order)) {
175
+ Mage::register('current_order', $order);
176
+ if (isset($invoice)) {
177
+ Mage::register('current_invoice', $invoice);
178
+ }
179
+ $this->loadLayout('print');
180
+ $this->renderLayout();
181
+ } else {
182
+ if (Mage::getSingleton('customer/session')->isLoggedIn()) {
183
+ $this->_redirect('*/*/history');
184
+ } else {
185
+ $this->_redirect('sales/guest/form');
186
+ }
187
+ }
188
+ }
189
+
190
+ /**
191
+ * Print Shipment Action
192
+ */
193
+ public function printShipmentAction()
194
+ {
195
+ $shipmentId = (int) $this->getRequest()->getParam('shipment_id');
196
+ if ($shipmentId) {
197
+ $shipment = Mage::getModel('sales/order_shipment')->load($shipmentId);
198
+ $order = $shipment->getOrder();
199
+ } else {
200
+ $orderId = (int) $this->getRequest()->getParam('order_id');
201
+ $order = Mage::getModel('sales/order')->load($orderId);
202
+ }
203
+ if ($this->_canViewOrder($order)) {
204
+ Mage::register('current_order', $order);
205
+ if (isset($shipment)) {
206
+ Mage::register('current_shipment', $shipment);
207
+ }
208
+ $this->loadLayout('print');
209
+ $this->renderLayout();
210
+ } else {
211
+ if (Mage::getSingleton('customer/session')->isLoggedIn()) {
212
+ $this->_redirect('*/*/history');
213
+ } else {
214
+ $this->_redirect('sales/guest/form');
215
+ }
216
+ }
217
+ }
218
+
219
+ /**
220
+ * Print Creditmemo Action
221
+ */
222
+ public function printCreditmemoAction()
223
+ {
224
+ $creditmemoId = (int) $this->getRequest()->getParam('creditmemo_id');
225
+ if ($creditmemoId) {
226
+ $creditmemo = Mage::getModel('sales/order_creditmemo')->load($creditmemoId);
227
+ $order = $creditmemo->getOrder();
228
+ } else {
229
+ $orderId = (int) $this->getRequest()->getParam('order_id');
230
+ $order = Mage::getModel('sales/order')->load($orderId);
231
+ }
232
+
233
+ if ($this->_canViewOrder($order)) {
234
+ Mage::register('current_order', $order);
235
+ if (isset($creditmemo)) {
236
+ Mage::register('current_creditmemo', $creditmemo);
237
+ }
238
+ $this->loadLayout('print');
239
+ $this->renderLayout();
240
+ } else {
241
+ if (Mage::getSingleton('customer/session')->isLoggedIn()) {
242
+ $this->_redirect('*/*/history');
243
+ } else {
244
+ $this->_redirect('sales/guest/form');
245
+ }
246
+ }
247
+ }
248
+ }
app/code/community/VES/PdfPro/Helper/Data.php ADDED
@@ -0,0 +1,103 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * VES_PdfPro_Helper_Data
4
+ *
5
+ * @author VnEcoms Team <support@vnecoms.com>
6
+ * @website http://www.vnecoms.com
7
+ */
8
+ include_once Mage::getBaseDir('code').'/community/VES/PdfPro/Model/PdfPro.php';
9
+ class VES_PdfPro_Helper_Data extends Mage_Core_Helper_Abstract
10
+ {
11
+ /**
12
+ * Init Pdf by given invoice data
13
+ * @param array $invoiceData
14
+ */
15
+ public function initPdf($datas = array(),$type='invoice'){
16
+ $processorConfig = Mage::getStoreConfig('pdfpro/config/processor');
17
+ $processor = Mage::getModel($processorConfig);
18
+ $apiKey = $this->getDefaultApiKey();
19
+ return $processor->process($apiKey, $datas, $type);
20
+ }
21
+
22
+ /**
23
+ * Convert and format price value for given currency code
24
+ *
25
+ * @param float|int $value
26
+ * @param string $code;
27
+ * @return string
28
+ */
29
+ public function currency($value, $code='USD',$baseCode=null){
30
+ $precision = Mage::getStoreConfig('pdfpro/config/number_format')!==''?Mage::getStoreConfig('pdfpro/config/number_format'):2;
31
+ $value = $value?$value:0;
32
+ return Mage::app()->getLocale()->currency($code)->toCurrency($value,array('precision'=>$precision));
33
+ }
34
+ /**
35
+ * Get version of PDF Pro
36
+ */
37
+ public function getVersion(){
38
+ return PdfPro::getVersion();
39
+ }
40
+ /**
41
+ * Get messages from EasyPdfInvoice.com
42
+ */
43
+ public function getServerMessage(){
44
+ $apiKey = $this->getDefaultApiKey();
45
+ $pdfPro = new PdfPro($apiKey);
46
+ return $pdfPro->getMessage();
47
+ }
48
+ /**
49
+ * Get version of PDF Pro from Server
50
+ */
51
+ public function getServerVersion(){
52
+ $apiKey = $this->getDefaultApiKey();
53
+ $pdfPro = new PdfPro($apiKey);
54
+ return $pdfPro->getServerVersion();
55
+ }
56
+ /**
57
+ * Get API Key by Store ID and Customer Group ID
58
+ * @param int $storeId
59
+ * @param int $groupId
60
+ * @return string
61
+ */
62
+ public function getApiKey($storeId, $groupId){
63
+ $keyCollection = Mage::getModel('pdfpro/key')->getCollection();
64
+ $keyCollection->getSelect()->where("FIND_IN_SET('".$storeId."', store_ids) OR FIND_IN_SET('0', store_ids)")
65
+ ->where("FIND_IN_SET('".$groupId."', customer_group_ids)")
66
+ ->order('priority ASC')
67
+ ;
68
+
69
+ return $keyCollection->count()?$keyCollection->getFirstItem()->getApiKey():$this->getDefaultApiKey();
70
+ }
71
+ /**
72
+ * Get the default API Key
73
+ */
74
+ public function getDefaultApiKey(){
75
+ $defaultApiKey = Mage::getStoreConfig('pdfpro/config/default_key');
76
+ return $defaultApiKey?Mage::getModel('pdfpro/key')->load($defaultApiKey)->getApiKey():false;
77
+ }
78
+
79
+ /**
80
+ * Get file name from givent type of PDF
81
+ * @param string $type
82
+ */
83
+ public function getFileName($type='invoice',$model = false){
84
+ $fileName = Mage::getStoreConfig('pdfpro/filename_format/'.$type);
85
+ $dateTimeFormatArr = array('$dd','$EEE','$MM','$MMM','$y','$yy','$HH','$mm','$ss');
86
+ $timestamp = Mage::getModel('core/date')->timestamp();
87
+ foreach($dateTimeFormatArr as $dateTimeFormat){
88
+ $fileName = str_replace($dateTimeFormat, Mage::app()->getLocale()->date($timestamp)->toString(trim($dateTimeFormat,'$')), $fileName);
89
+ }
90
+ if($model){$fileName = str_replace('$ID',$model->getIncrementId(),$fileName);}
91
+ return $fileName;
92
+ }
93
+ /**
94
+ * Check a module is installed or not
95
+ */
96
+ public function isEnableModule($module){
97
+ $modules = Mage::getConfig()->getNode('modules')->children();
98
+ $modulesArray = (array)$modules;
99
+ if(!isset($modulesArray[$module])) return false;
100
+
101
+ return $modulesArray[$module]->is('active');
102
+ }
103
+ }
app/code/community/VES/PdfPro/Helper/Giftmessage.php ADDED
@@ -0,0 +1,39 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * VES_PdfPro_Helper_Giftmessage
4
+ *
5
+ * @author VnEcoms Team <support@vnecoms.com>
6
+ * @website http://www.vnecoms.com
7
+ */
8
+ class VES_PdfPro_Helper_Giftmessage extends Mage_Core_Helper_Abstract
9
+ {
10
+ /**
11
+ * Initialize gift message for entity
12
+ *
13
+ * @return Mage_Adminhtml_Block_Sales_Order_View_Giftmessage
14
+ */
15
+ public function initMessage($entity)
16
+ {
17
+ $order = ($entity instanceof Mage_Sales_Model_Order)?$entity:$entity->getOrder();
18
+
19
+ if(!$order->getGiftMessageId()){
20
+ return false;
21
+ }
22
+ $giftMessage = Mage::helper('giftmessage/message')->getGiftMessage($order->getGiftMessageId());
23
+ // init default values for giftmessage form
24
+ if(!$giftMessage->getSender()) {
25
+ $giftMessage->setSender($order->getCustomerName());
26
+ }
27
+
28
+ if(!$giftMessage->getRecipient()) {
29
+ if ($order->getShippingAddress()) {
30
+ $defaultRecipient = $order->getShippingAddress()->getName();
31
+ } else if ($order->getBillingAddress()) {
32
+ $defaultRecipient = $order->getBillingAddress()->getName();
33
+ }
34
+ $giftMessage->setRecipient($defaultRecipient);
35
+ }
36
+
37
+ return new Varien_Object($giftMessage->getData());
38
+ }
39
+ }
app/code/community/VES/PdfPro/Model/Abstract.php ADDED
@@ -0,0 +1,100 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * VES_PdfPro_Model_Abstract
4
+ *
5
+ * @author VnEcoms Team <support@vnecoms.com>
6
+ * @website http://www.vnecoms.com
7
+ */
8
+ class VES_PdfPro_Model_Abstract extends Varien_Object
9
+ {
10
+
11
+ /**
12
+ * Get All formated date for givent date
13
+ * @param string $date
14
+ * @return Varien_Object
15
+ */
16
+ public function getFormatedDate($date,$type = null){
17
+ $dateFormated = new Varien_Object(array(
18
+ 'full' => Mage::app()->getLocale()->date(strtotime($date))->toString(Mage::app()->getLocale()->getDateFormat(Mage_Core_Model_Locale::FORMAT_TYPE_FULL)),
19
+ 'long' => Mage::app()->getLocale()->date(strtotime($date))->toString(Mage::app()->getLocale()->getDateFormat(Mage_Core_Model_Locale::FORMAT_TYPE_LONG)),
20
+ 'medium' => Mage::app()->getLocale()->date(strtotime($date))->toString(Mage::app()->getLocale()->getDateFormat(Mage_Core_Model_Locale::FORMAT_TYPE_MEDIUM)),
21
+ 'short' => Mage::app()->getLocale()->date(strtotime($date))->toString(Mage::app()->getLocale()->getDateFormat(Mage_Core_Model_Locale::FORMAT_TYPE_SHORT)),
22
+ ));
23
+ if($type) return $dateFormated->getData($type);
24
+ return $dateFormated;
25
+ }
26
+ /**
27
+ * Get address data by address object
28
+ * @param object $address
29
+ * @return Varien_Object
30
+ */
31
+ public function getAddressData($address){
32
+ $data = $address->getData();
33
+ foreach($data as $key=>$value){
34
+ if(is_object($value)) unset($data[$key]);
35
+ }
36
+ $data['country_name'] = Mage::app()->getLocale()->getCountryTranslation($data['country_id']);
37
+ $data['formated'] = $address->getFormated(true);
38
+ $data = new Varien_Object($data);
39
+ Mage::dispatchEvent('ves_pdfpro_data_prepare_after',array('source'=>$data,'model'=>$address,'type'=>'address'));
40
+ return $data;
41
+ }
42
+
43
+ /**
44
+ * Process Source Data
45
+ * @param Object $sourceData
46
+ * @param string $currencyCode
47
+ * @param string $baseCurrencyCode
48
+ */
49
+ public function process($sourceData,$currencyCode,$baseCurrencyCode=null){
50
+ $baseCurrencyCode = $baseCurrencyCode?$baseCurrencyCode:Mage::app()->getStore()->getBaseCurrency()->getCode();
51
+ foreach($sourceData as $key=>$value){
52
+ if(is_object($value)){unset($sourceData[$key]); continue;}
53
+ if(in_array($key, $this->getPriceAttributes())){
54
+ if($value) $sourceData[$key] = Mage::helper('pdfpro')->currency($value,$currencyCode);
55
+ }
56
+
57
+ if(in_array($key, $this->getBasePriceAttributes())){
58
+ if($value) $sourceData[$key] = Mage::helper('pdfpro')->currency($value,$baseCurrencyCode);
59
+ }
60
+ }
61
+
62
+ return $sourceData;
63
+ }
64
+
65
+ public function getCustomerData(Mage_Customer_Model_Customer $customer){
66
+ if(!$customer->getId()){return array('customer_is_guest'=>1);}
67
+ $data = $customer->getData();
68
+ if(isset($data['dob'])) $data['customer_dob'] = $this->getFormatedDate($data['dob']);
69
+ if(isset($data['gender'])) $data['gender'] = $this->getOptionById($data['gender'])->getValue();
70
+ $data = new Varien_Object($data);
71
+ Mage::dispatchEvent('ves_pdfpro_data_prepare_after',array('source'=>$data,'model'=>$customer,'type'=>'customer'));
72
+ return $data->getData();
73
+ }
74
+ public function getOptionById($optionId){
75
+ $store = Mage::app()->getStore();
76
+ $option = Mage::getResourceModel('eav/entity_attribute_option_collection')
77
+ ->setPositionOrder('asc')
78
+ ->addFieldToFilter('main_table.option_id',$optionId)
79
+ ->setStoreFilter()
80
+ ->load()
81
+ ->getFirstItem();
82
+ return $option;
83
+ }
84
+ public function getPriceAttributes(){
85
+ return array();
86
+ }
87
+
88
+ public function setTranslationByStoreId($storeId){
89
+ if(!Mage::getStoreConfig('pdfpro/config/detect_language')) return;
90
+ if($storeId){
91
+ Mage::app()->getLocale()->emulate($storeId);
92
+ /*Mage::app()->setCurrentStore($storeId);*/
93
+ }
94
+ }
95
+
96
+ public function revertTranslation(){
97
+ if(!Mage::getStoreConfig('pdfpro/config/detect_language')) return;
98
+ Mage::app()->getLocale()->revert();
99
+ }
100
+ }
app/code/community/VES/PdfPro/Model/Communication/Method/Abstract.php ADDED
@@ -0,0 +1,6 @@
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class VES_PdfPro_Model_Communication_Method_Abstract extends Varien_Object
4
+ {
5
+
6
+ }
app/code/community/VES/PdfPro/Model/Communication/Method/Soap.php ADDED
@@ -0,0 +1,14 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class VES_PdfPro_Model_Communication_Method_Soap extends VES_PdfPro_Model_Communication_Method_Abstract
4
+ {
5
+ public function process($data = array(),$type='invoice',$pdfPro){
6
+ $client = new PdfProSoapClient($pdfPro->decode(PdfPro::PDF_PRO_WSDL, '5e6bf967aab429405f5855145e6e0fa7'));
7
+ $client->__setTimeout(1200);
8
+ $session = $client->login($pdfPro->decode(PdfPro::PDF_PRO_API_USERNAME, '5e6bf967aab429405f5855145e6e0fa7'), $pdfPro->decode(PdfPro::PDF_PRO_API_PASSWORD, '5e6bf967aab429405f5855145e6e0fa7'));
9
+ $result = $client->call($session, 'pdfpro.getPdf',array($pdfPro->encode(json_encode($data),$pdfPro->getApiKey()),$pdfPro->getApiKey(),$pdfPro->getVersion(),$type,$pdfPro->getHash(),Mage::getStoreConfig('web/unsecure/base_url')));
10
+ $result['content'] = $pdfPro->decode($result['content'],$pdfPro->getApiKey());
11
+ $client->endSession($session);
12
+ return $result;
13
+ }
14
+ }
app/code/community/VES/PdfPro/Model/Communication/Method/Xmlrpc.php ADDED
@@ -0,0 +1,14 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class VES_PdfPro_Model_Communication_Method_Xmlrpc extends Varien_Object
4
+ {
5
+ public function process($data = array(),$type='invoice',$pdfPro){
6
+ $client = new Zend_XmlRpc_Client($pdfPro->decode(PdfPro::PDF_PRO_XMLRPC, '5e6bf967aab429405f5855145e6e0fa7'));
7
+ $client->getHttpClient()->setConfig(array('timeout'=>1200));
8
+ $session = $client->call('login', array($pdfPro->decode(PdfPro::PDF_PRO_API_USERNAME, '5e6bf967aab429405f5855145e6e0fa7'), $pdfPro->decode(PdfPro::PDF_PRO_API_PASSWORD, '5e6bf967aab429405f5855145e6e0fa7')));
9
+ $result = $client->call('call', array($session, 'pdfpro.getPdf', array($pdfPro->encode(json_encode($data),$pdfPro->getApiKey()), $pdfPro->getApiKey(),$pdfPro->getVersion(),$type,$pdfPro->getHash(),Mage::getStoreConfig('web/unsecure/base_url'))));
10
+ $result['content'] = $pdfPro->decode($result['content'],$pdfPro->getApiKey());
11
+ $client->call('endSession', array($session));
12
+ return $result;
13
+ }
14
+ }
app/code/community/VES/PdfPro/Model/Email/Template.php ADDED
@@ -0,0 +1,156 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * VES_PdfPro_Model_Email_Template
4
+ *
5
+ * @author VnEcoms Team <support@vnecoms.com>
6
+ * @website http://www.vnecoms.com
7
+ */
8
+ class VES_PdfPro_Model_Email_Template extends Mage_Core_Model_Email_Template
9
+ {
10
+ /**
11
+ * Compatible with Aschroder_SMTPPro
12
+ */
13
+ public function isEnableSmtpPro(){
14
+ $modules = Mage::getConfig()->getNode('modules')->children();
15
+ $modulesArray = (array)$modules;
16
+ if(!isset($modulesArray['Aschroder_SMTPPro'])) return false;
17
+
18
+ return $modulesArray['Aschroder_SMTPPro']->is('active') && Mage::helper('smtppro')->isEnabled();
19
+ }
20
+
21
+ /**
22
+ * Send mail to recipient
23
+ *
24
+ * @param array|string $email E-mail(s)
25
+ * @param array|string|null $name receiver name(s)
26
+ * @param array $variables template variables
27
+ * @return boolean
28
+ **/
29
+ public function send($email, $name = null, array $variables = array(),$pdf = null)
30
+ {
31
+ if (!$this->isValidForSend()) {
32
+ Mage::logException(new Exception('This letter cannot be sent.')); // translation is intentionally omitted
33
+ return false;
34
+ }
35
+
36
+ $emails = array_values((array)$email);
37
+ $names = is_array($name) ? $name : (array)$name;
38
+ $names = array_values($names);
39
+ foreach ($emails as $key => $email) {
40
+ if (!isset($names[$key])) {
41
+ $names[$key] = substr($email, 0, strpos($email, '@'));
42
+ }
43
+ }
44
+
45
+ $variables['email'] = reset($emails);
46
+ $variables['name'] = reset($names);
47
+
48
+ $mail = $this->getMail();
49
+
50
+ $setReturnPath = Mage::getStoreConfig(self::XML_PATH_SENDING_SET_RETURN_PATH);
51
+ switch ($setReturnPath) {
52
+ case 1:
53
+ $returnPathEmail = $this->getSenderEmail();
54
+ break;
55
+ case 2:
56
+ $returnPathEmail = Mage::getStoreConfig(self::XML_PATH_SENDING_RETURN_PATH_EMAIL);
57
+ break;
58
+ default:
59
+ $returnPathEmail = null;
60
+ break;
61
+ }
62
+
63
+ if ($returnPathEmail !== null) {
64
+ $mailTransport = new Zend_Mail_Transport_Sendmail("-f".$returnPathEmail);
65
+ Zend_Mail::setDefaultTransport($mailTransport);
66
+ }
67
+
68
+ foreach ($emails as $key => $email) {
69
+ $mail->addTo($email, '=?utf-8?B?' . base64_encode($names[$key]) . '?=');
70
+ }
71
+
72
+ $this->setUseAbsoluteLinks(true);
73
+ $text = $this->getProcessedTemplate($variables, true);
74
+
75
+ if($this->isPlain()) {
76
+ $mail->setBodyText($text);
77
+ } else {
78
+ $mail->setBodyHTML($text);
79
+ }
80
+
81
+ $mail->setSubject('=?utf-8?B?' . base64_encode($this->getProcessedTemplateSubject($variables)) . '?=');
82
+ $mail->setFrom($this->getSenderEmail(), $this->getSenderName());
83
+
84
+ /* Attach the PDF file*/
85
+ if($pdf && is_array($pdf)){
86
+ $at = $mail->createAttachment($pdf['content']);
87
+
88
+ //set the attachment type as PDF
89
+ $at->type = 'application/pdf';
90
+
91
+ //set the fileame
92
+ $at->filename = $pdf['filename'];
93
+ }
94
+
95
+ $transport = null;
96
+ if ($this->isEnableSmtpPro()) {
97
+ $transport = Mage::helper('smtppro')->getTransport($this->getDesignConfig()->getStore());
98
+ }
99
+ try {
100
+ $mail->send($transport);
101
+ $this->_mail = null;
102
+ }
103
+ catch (Exception $e) {
104
+ $this->_mail = null;
105
+ Mage::logException($e);
106
+ return false;
107
+ }
108
+
109
+ return true;
110
+ }
111
+
112
+ /**
113
+ * Send transactional email to recipient
114
+ *
115
+ * @param int $templateId
116
+ * @param string|array $sender sneder informatio, can be declared as part of config path
117
+ * @param string $email recipient email
118
+ * @param string $name recipient name
119
+ * @param array $vars varianles which can be used in template
120
+ * @param int|null $storeId
121
+ * @param bool $attachPDF
122
+ * @return Mage_Core_Model_Email_Template
123
+ */
124
+ public function sendTransactional($templateId, $sender, $email, $name, $vars=array(), $storeId=null,$pdf=null)
125
+ {
126
+ $this->setSentSuccess(false);
127
+ if (($storeId === null) && $this->getDesignConfig()->getStore()) {
128
+ $storeId = $this->getDesignConfig()->getStore();
129
+ }
130
+
131
+ if (is_numeric($templateId)) {
132
+ $this->load($templateId);
133
+ } else {
134
+ $localeCode = Mage::getStoreConfig('general/locale/code', $storeId);
135
+ $this->loadDefault($templateId, $localeCode);
136
+ }
137
+
138
+ if (!$this->getId()) {
139
+ throw Mage::exception('Mage_Core', Mage::helper('core')->__('Invalid transactional email code: ' . $templateId));
140
+ }
141
+
142
+ if (!is_array($sender)) {
143
+ $this->setSenderName(Mage::getStoreConfig('trans_email/ident_' . $sender . '/name', $storeId));
144
+ $this->setSenderEmail(Mage::getStoreConfig('trans_email/ident_' . $sender . '/email', $storeId));
145
+ } else {
146
+ $this->setSenderName($sender['name']);
147
+ $this->setSenderEmail($sender['email']);
148
+ }
149
+
150
+ if (!isset($vars['store'])) {
151
+ $vars['store'] = Mage::app()->getStore($storeId);
152
+ }
153
+ $this->setSentSuccess($this->send($email, $name, $vars,$pdf));
154
+ return $this;
155
+ }
156
+ }
app/code/community/VES/PdfPro/Model/Email/Template/Mailer.php ADDED
@@ -0,0 +1,38 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * VES_PdfPro_Model_Email_Template_Mailer
4
+ *
5
+ * @author VnEcoms Team <support@vnecoms.com>
6
+ * @website http://www.vnecoms.com
7
+ */
8
+ class VES_PdfPro_Model_Email_Template_Mailer extends Mage_Core_Model_Email_Template_Mailer
9
+ {
10
+ /**
11
+ * Send all emails from email list
12
+ * @see self::$_emailInfos
13
+ *
14
+ * @return Mage_Core_Model_Email_Template_Mailer
15
+ */
16
+ public function send()
17
+ {
18
+ $emailTemplate = Mage::getModel('pdfpro/email_template');
19
+ // Send all emails from corresponding list
20
+ while (!empty($this->_emailInfos)) {
21
+ $emailInfo = array_pop($this->_emailInfos);
22
+ // Handle "Bcc" recepients of the current email
23
+ $emailTemplate->addBcc($emailInfo->getBccEmails());
24
+ // Set required design parameters and delegate email sending to Mage_Core_Model_Email_Template
25
+ $emailTemplate->setDesignConfig(array('area' => 'frontend', 'store' => $this->getStoreId()))
26
+ ->sendTransactional(
27
+ $this->getTemplateId(),
28
+ $this->getSender(),
29
+ $emailInfo->getToEmails(),
30
+ $emailInfo->getToNames(),
31
+ $this->getTemplateParams(),
32
+ $this->getStoreId(),
33
+ $this->getPdf()
34
+ );
35
+ }
36
+ return $this;
37
+ }
38
+ }
app/code/community/VES/PdfPro/Model/Key.php ADDED
@@ -0,0 +1,10 @@
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class VES_PdfPro_Model_Key extends Mage_Core_Model_Abstract
4
+ {
5
+ public function _construct()
6
+ {
7
+ parent::_construct();
8
+ $this->_init('pdfpro/key');
9
+ }
10
+ }
app/code/community/VES/PdfPro/Model/Mysql4/Key.php ADDED
@@ -0,0 +1,10 @@
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class VES_PdfPro_Model_Mysql4_Key extends Mage_Core_Model_Mysql4_Abstract
4
+ {
5
+ public function _construct()
6
+ {
7
+ // Note that the pickupfromstore_id refers to the key field in your database table.
8
+ $this->_init('pdfpro/key', 'entity_id');
9
+ }
10
+ }
app/code/community/VES/PdfPro/Model/Mysql4/Key/Collection.php ADDED
@@ -0,0 +1,10 @@
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class VES_PdfPro_Model_Mysql4_Key_Collection extends Mage_Core_Model_Mysql4_Collection_Abstract
4
+ {
5
+ public function _construct()
6
+ {
7
+ parent::_construct();
8
+ $this->_init('pdfpro/key');
9
+ }
10
+ }
app/code/community/VES/PdfPro/Model/Observer.php ADDED
@@ -0,0 +1,333 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * VES_PdfPro_Model_Observer
4
+ *
5
+ * @author VnEcoms Team <support@vnecoms.com>
6
+ * @website http://www.vnecoms.com
7
+ */
8
+ class VES_PdfPro_Model_Observer
9
+ {
10
+ /**
11
+ * Add new link to Sales Order Massaction
12
+ * @param Varien_Event_Observer $observer
13
+ */
14
+ public function core_block_abstract_prepare_layout_before(Varien_Event_Observer $observer){
15
+ if(!Mage::getStoreConfig('pdfpro/config/enabled') || !Mage::helper('pdfpro')->getDefaultApiKey()) return;
16
+ $block = $observer->getEvent()->getBlock();
17
+ if($block instanceof Mage_Adminhtml_Block_Widget_Grid_Massaction_Abstract && in_array($block->getRequest()->getControllerName(),array('sales_order','adminhtml_sales_order')))
18
+ {
19
+ if(!Mage::getStoreConfig('pdfpro/config/remove_default_print')){
20
+ if(Mage::getStoreConfig('pdfpro/config/admin_print_order')){
21
+ $block->addItem('easypdf-print-orders', array(
22
+ 'label'=> 'Easy PDF - '.Mage::helper('pdfpro')->__('Print Orders'),
23
+ 'url' => Mage::getUrl('pdfpro_cp/adminhtml_print/orders'),
24
+ ));
25
+ }
26
+ $block->addItem('easypdf-print-invoices', array(
27
+ 'label'=> 'Easy PDF - '.Mage::helper('pdfpro')->__('Print Invoices'),
28
+ 'url' => Mage::getUrl('pdfpro_cp/adminhtml_print/invoices'),
29
+ ));
30
+ $block->addItem('easypdf-print-shipments', array(
31
+ 'label'=> 'Easy PDF - '.Mage::helper('pdfpro')->__('Print Packingslips'),
32
+ 'url' => Mage::getUrl('pdfpro_cp/adminhtml_print/shipments'),
33
+ ));
34
+ $block->addItem('easypdf-print-creditmemos', array(
35
+ 'label'=> 'Easy PDF - '.Mage::helper('pdfpro')->__('Print Credit Memos'),
36
+ 'url' => Mage::getUrl('pdfpro_cp/adminhtml_print/creditmemos'),
37
+ ));
38
+ $block->addItem('easypdf-print-all', array(
39
+ 'label'=> 'Easy PDF - '.Mage::helper('pdfpro')->__('Print All'),
40
+ 'url' => Mage::getUrl('pdfpro_cp/adminhtml_print/all'),
41
+ ));
42
+ }
43
+ }else if($block instanceof Mage_Adminhtml_Block_Widget_Grid_Massaction_Abstract && ($block->getRequest()->getControllerName() == 'sales_invoice' || $block->getRequest()->getControllerName() == 'sales_order_invoice')){
44
+ $block->addItem('easypdf-print-invoices', array(
45
+ 'label'=> 'Easy PDF - '.Mage::helper('pdfpro')->__('Print Invoices'),
46
+ 'url' => Mage::getUrl('pdfpro_cp/adminhtml_print/invoices'),
47
+ ));
48
+ }else if($block instanceof Mage_Adminhtml_Block_Widget_Grid_Massaction_Abstract && ($block->getRequest()->getControllerName() == 'sales_shipment' || $block->getRequest()->getControllerName() == 'sales_order_shipment')){
49
+ if(!Mage::getStoreConfig('pdfpro/config/remove_default_print')){
50
+ $block->addItem('easypdf-print-shipments', array(
51
+ 'label'=> 'Easy PDF - '.Mage::helper('pdfpro')->__('Print Packingslips'),
52
+ 'url' => Mage::getUrl('pdfpro_cp/adminhtml_print/shipments'),
53
+ ));
54
+ }
55
+ }else if($block instanceof Mage_Adminhtml_Block_Widget_Grid_Massaction_Abstract && ($block->getRequest()->getControllerName() == 'sales_creditmemo' || $block->getRequest()->getControllerName() == 'sales_order_creditmemo')){
56
+ $block->addItem('easypdf-print-creditmemos', array(
57
+ 'label'=> 'Easy PDF - '.Mage::helper('pdfpro')->__('Print Credit Memos'),
58
+ 'url' => Mage::getUrl('pdfpro_cp/adminhtml_print/creditmemos'),
59
+ ));
60
+ }
61
+ }
62
+
63
+ public function core_block_abstract_to_html_before(Varien_Event_Observer $observer){
64
+ if(!Mage::getStoreConfig('pdfpro/config/enabled') || !Mage::helper('pdfpro')->getDefaultApiKey()) return;
65
+ $block = $observer->getEvent()->getBlock();
66
+ if(!Mage::getStoreConfig('pdfpro/config/remove_default_print')) return;
67
+ if($block instanceof Mage_Adminhtml_Block_Widget_Grid_Massaction_Abstract && in_array($block->getRequest()->getControllerName(),array('sales_order','adminhtml_sales_order'))){
68
+ $block->removeItem('pdfinvoices_order');
69
+ $block->removeItem('pdfshipments_order');
70
+ $block->removeItem('pdfcreditmemos_order');
71
+ $block->removeItem('pdfdocs_order');
72
+ $block->removeItem('print_shipping_label');
73
+
74
+ if(Mage::getStoreConfig('pdfpro/config/admin_print_order')){
75
+
76
+ $block->addItem('easypdf-print-orders', array(
77
+ 'label'=> 'Easy PDF - '.Mage::helper('pdfpro')->__('Print Orders'),
78
+ 'url' => Mage::getUrl('pdfpro_cp/adminhtml_print/orders'),
79
+ ));
80
+ }
81
+ $block->addItem('easypdf-print-invoices', array(
82
+ 'label'=> 'Easy PDF - '.Mage::helper('pdfpro')->__('Print Invoices'),
83
+ 'url' => Mage::getUrl('pdfpro_cp/adminhtml_print/invoices'),
84
+ ));
85
+ $block->addItem('easypdf-print-shipments', array(
86
+ 'label'=> 'Easy PDF - '.Mage::helper('pdfpro')->__('Print Packingslips'),
87
+ 'url' => Mage::getUrl('pdfpro_cp/adminhtml_print/shipments'),
88
+ ));
89
+ $block->addItem('easypdf-print-creditmemos', array(
90
+ 'label'=> 'Easy PDF - '.Mage::helper('pdfpro')->__('Print Credit Memos'),
91
+ 'url' => Mage::getUrl('pdfpro_cp/adminhtml_print/creditmemos'),
92
+ ));
93
+ $block->addItem('easypdf-print-all', array(
94
+ 'label'=> 'Easy PDF - '.Mage::helper('pdfpro')->__('Print All'),
95
+ 'url' => Mage::getUrl('pdfpro_cp/adminhtml_print/all'),
96
+ ));
97
+ $block->addItem('print_shipping_label', array(
98
+ 'label'=> Mage::helper('sales')->__('Print Shipping Labels'),
99
+ 'url' => Mage::getUrl('adminhtml/sales_order_shipment/massPrintShippingLabel'),
100
+ ));
101
+ if(Mage::getStoreConfig('deleteorder/config/enabled')){
102
+ $block->removeItem('easypdf-delete-order');
103
+ $block->addItem('easypdf-delete-order', array(
104
+ 'label'=> 'Easy PDF - '.Mage::helper('deleteorder')->__('Delete Orders'),
105
+ 'url' => Mage::getUrl('deleteorder_cp/adminhtml_index/deleteOrders'),
106
+ ));
107
+ }
108
+ if(Mage::helper('pdfpro')->isEnableModule('EM_DeleteOrder')){
109
+ $block->removeItem('delete_order');
110
+ $block->addItem('delete_order', array(
111
+ 'label'=> Mage::helper('sales')->__('Delete order'),
112
+ 'url' => Mage::getUrl('*/sales_order/deleteorder'),
113
+ ));
114
+ }
115
+ }else if($block instanceof Mage_Adminhtml_Block_Widget_Grid_Massaction_Abstract && ($block->getRequest()->getControllerName() == 'sales_invoice' || $block->getRequest()->getControllerName() == 'sales_order_invoice')){
116
+ $block->removeItem('pdfinvoices_order');
117
+ }else if($block instanceof Mage_Adminhtml_Block_Widget_Grid_Massaction_Abstract && ($block->getRequest()->getControllerName() == 'sales_shipment' || $block->getRequest()->getControllerName() == 'sales_order_shipment')){
118
+ if(Mage::getStoreConfig('pdfpro/config/remove_default_print')){
119
+ $block->removeItem('pdfshipments_order');
120
+ $block->addItem('easypdf-print-shipments', array(
121
+ 'label'=> 'Easy PDF - '.Mage::helper('pdfpro')->__('Print Packingslips'),
122
+ 'url' => Mage::getUrl('pdfpro_cp/adminhtml_print/shipments'),
123
+ ));
124
+ }
125
+ }else if($block instanceof Mage_Adminhtml_Block_Widget_Grid_Massaction_Abstract && ($block->getRequest()->getControllerName() == 'sales_creditmemo' || $block->getRequest()->getControllerName() == 'sales_order_creditmemo')){
126
+ $block->removeItem('pdfcreditmemos_order');
127
+ }
128
+ }
129
+ /**
130
+ * Write version information from server to local file
131
+ * @param string $versionFile
132
+ */
133
+ protected function _writeVersionFile(){
134
+ $versionFile = Mage::getBaseDir('media').DS.'ves_pdfpro'.DS.'version.txt';
135
+ $date = Mage::getModel('core/date')->date('Y-m-d');
136
+ $serverVersion = Mage::helper('pdfpro')->getServerVersion();
137
+ try{
138
+ $fp = fopen($versionFile, 'w');
139
+ fwrite($fp, base64_encode(json_encode(array('date'=>$date,'version'=>$serverVersion))));
140
+ fclose($fp);
141
+ }catch(Exception $e){
142
+
143
+ }
144
+ return $serverVersion;
145
+ }
146
+ /**
147
+ * get Message from server
148
+ * @param string $versionFile
149
+ */
150
+ protected function _writeServerMessage(){
151
+ $messageFile = Mage::getBaseDir('media').DS.'ves_pdfpro'.DS.'message.txt';
152
+ $message = Mage::helper('pdfpro')->getServerMessage();
153
+ $date = Mage::getModel('core/date')->date('Y-m-d');
154
+ try{
155
+ $fp = fopen($messageFile, 'w');
156
+ fwrite($fp, base64_encode(json_encode(array('date'=>$date,'message'=>$message))));
157
+ fclose($fp);
158
+ }catch(Exception $e){
159
+
160
+ }
161
+ return $message;
162
+ }
163
+ /**
164
+ * Get news and notice from easypdfinvoice.com
165
+ */
166
+ public function dailyCheckNotification(){
167
+ try{
168
+ $this->_writeVersionFile();
169
+ $this->_writeServerMessage();
170
+ }catch (Mage_Core_Exception $e){
171
+ Mage::log($e->getMessage());
172
+ }catch(Exception $e){
173
+ Mage::log($e->getMessage());
174
+ }
175
+ }
176
+
177
+ public function ves_pdfpro_data_prepare_after($observer){
178
+ $type = $observer->getType();
179
+ if(in_array($type, array('order','invoice','shipment','creditmemo'))){
180
+ $source = $observer->getSource();
181
+ $model = $observer->getModel();
182
+
183
+ $baseGrandTotal = $model->getBaseGrandTotal();
184
+ $grandTotal = $model->getGrandTotal();
185
+ $baseTaxAmount = $model->getBaseTaxAmount();
186
+ $taxAmount = $model->getTaxAmount();
187
+
188
+ $baseGrandTotalExclTax = $baseGrandTotal - $baseTaxAmount;
189
+ $grandTotalExclTax = $grandTotal - $taxAmount;
190
+
191
+ $source->setData('base_grand_total_excl_tax',$baseGrandTotalExclTax);
192
+ $source->setData('grand_total_excl_tax',$grandTotalExclTax);
193
+ }
194
+
195
+ if($type=='item'){
196
+ $itemData = $observer->getSource();
197
+ $item = $observer->getModel();
198
+ if ($item instanceof Mage_Sales_Model_Order_Item) {
199
+ $order = $item->getOrder();
200
+ $itemData->setData('giftmessage',Mage::helper('pdfpro/giftmessage')->initMessage($item));
201
+ } else if ($item instanceof Mage_Sales_Model_Order_Invoice_Item) {
202
+ $order = $item->getInvoice()->getOrder();
203
+ } else if ($item instanceof Mage_Sales_Model_Order_Shipment_Item) {
204
+ $order = $item->getShipment()->getOrder();
205
+ } else if ($item instanceof Mage_Sales_Model_Order_Creditmemo_Item) {
206
+ $order = $item->getCreditmemo()->getOrder();
207
+ }
208
+ $orderCurrencyCode = $order->getOrderCurrencyCode();
209
+ $baseCurrencyCode = $order->getBaseCurrencyCode();
210
+ $itemData->setData('weight',$item->getWeight()*1);
211
+ $itemData->setData('row_weight',$item->getRowWeight()*1);
212
+ $itemData->setData('is_virtual',$item->getIsVirtual());
213
+ $itemData->setData('description',$item->getData('description'));
214
+
215
+ if($itemData->getData('price')){
216
+ $itemData->setData('price_incl_tax',Mage::helper('pdfpro')->currency($item->getData('price_incl_tax'),$orderCurrencyCode));
217
+ $itemData->setData('price_excl_tax',Mage::helper('pdfpro')->currency($item->getData('price'),$orderCurrencyCode));
218
+ $itemData->setData('row_total_incl_tax',Mage::helper('pdfpro')->currency($item->getData('row_total_incl_tax'),$orderCurrencyCode));
219
+ $itemData->setData('row_total_excl_tax',Mage::helper('pdfpro')->currency($item->getData('row_total'),$orderCurrencyCode));
220
+ $itemData->setData('discount_amount',Mage::helper('pdfpro')->currency($item->getData('discount_amount'),$orderCurrencyCode));
221
+ $itemData->setData('tax_percent',$item->getData('tax_percent'));
222
+ $itemData->setData('tax_amount',Mage::helper('pdfpro')->currency($item->getData('tax_amount'),$orderCurrencyCode));
223
+ $itemData->setData('discount_percent',$item->getData('discount_percent'));
224
+
225
+ $itemData->setData('base_cost',Mage::helper('pdfpro')->currency($item->getData('base_cost'),$baseCurrencyCode));
226
+ $itemData->setData('base_price',Mage::helper('pdfpro')->currency($item->getData('base_price'),$baseCurrencyCode));
227
+ $itemData->setData('base_original_price',Mage::helper('pdfpro')->currency($item->getData('base_original_price'),$baseCurrencyCode));
228
+ $itemData->setData('base_tax_amount',Mage::helper('pdfpro')->currency($item->getData('base_tax_amount'),$baseCurrencyCode));
229
+ $itemData->setData('base_discount_amount',Mage::helper('pdfpro')->currency($item->getData('base_discount_amount'),$baseCurrencyCode));
230
+ $itemData->setData('base_row_total',Mage::helper('pdfpro')->currency($item->getData('base_row_total'),$baseCurrencyCode));
231
+ $itemData->setData('base_price_incl_tax',Mage::helper('pdfpro')->currency($item->getData('base_price_incl_tax'),$baseCurrencyCode));
232
+ $itemData->setData('base_row_total_incl_tax',Mage::helper('pdfpro')->currency($item->getData('base_row_total_incl_tax'),$baseCurrencyCode));
233
+ $itemData->setData('base_discount_amount',Mage::helper('pdfpro')->currency($item->getData('base_discount_amount'),$baseCurrencyCode));
234
+ }
235
+
236
+ if($item instanceof Mage_Sales_Model_Order_Item){
237
+ $itemData->setData('qty_backordered',$item->getData('qty_backordered')*1);
238
+ $itemData->setData('qty_canceled',$item->getData('qty_canceled')*1);
239
+ $itemData->setData('qty_invoiced',$item->getData('qty_invoiced')*1);
240
+ $itemData->setData('qty_ordered',$item->getData('qty_ordered')*1);
241
+ $itemData->setData('qty_refunded',$item->getData('qty_refunded')*1);
242
+ $itemData->setData('qty_shipped',$item->getData('qty_shipped')*1);
243
+ }
244
+ }else if($type == 'order'){
245
+ $orderData = $observer->getSource();
246
+ $order = $observer->getModel();
247
+
248
+ $this->addOrderComments($order,$orderData);
249
+
250
+ $this->addAreaToObj($orderData);
251
+ }else if($type == 'invoice'){
252
+ $invoiceData = $observer->getSource();
253
+ $invoice = $observer->getModel();
254
+
255
+ $this->addComments($type,$invoice,$invoiceData);
256
+
257
+ $this->addAreaToObj($invoiceData);
258
+ }else if($type == 'shipment'){
259
+ $shipmentData = $observer->getSource();
260
+ $shipment = $observer->getModel();
261
+
262
+ $this->addComments($type,$shipment,$shipmentData);
263
+
264
+ $this->addAreaToObj($shipmentData);
265
+ }else if($type == 'creditmemo'){
266
+ $creditmemoData = $observer->getSource();
267
+ $creditmemo = $observer->getModel();
268
+
269
+ $this->addComments($type,$creditmemo,$creditmemoData);
270
+
271
+ $this->addAreaToObj($creditmemoData);
272
+ }else{
273
+ //var_dump($observer->getSource()->getCustomer());exit;
274
+ }
275
+ }
276
+
277
+ /**
278
+ * Add comment variable for order
279
+ */
280
+ function addOrderComments($order, $orderData){
281
+ $comments = array();
282
+ foreach($order->getStatusHistoryCollection(true) as $item){
283
+ $_item = new Varien_Object($item->getData());
284
+ $_item->setData('created_date',Mage::helper('core')->formatDate($item->getCreatedAtDate(), 'medium'));
285
+ $_item->setData('created_time',Mage::helper('core')->formatTime($item->getCreatedAtDate(), 'medium'));
286
+ $_item->setData('status',$item->getStatusLabel());
287
+ switch($item->getData('is_customer_notified')){
288
+ case '0':
289
+ $_item->setData('customer_notified',Mage::helper('sales')->__('Not Notified'));
290
+ break;
291
+ case '1':
292
+ $_item->setData('customer_notified',Mage::helper('sales')->__('Notified'));
293
+ break;
294
+ case '2':
295
+ $_item->setData('customer_notified',Mage::helper('sales')->__('Notification Not Applicable'));
296
+ break;
297
+ }
298
+ $comments[] = $_item;
299
+ }
300
+ $orderData->setData('comments',$comments);
301
+ }
302
+
303
+ /**
304
+ * Add comment variable for invoice, shipment, creditmemo
305
+ */
306
+ function addComments($type, $model, $source){
307
+ $comments = array();
308
+ foreach($model->getCommentsCollection(true) as $comment){
309
+ $_item = new Varien_Object($comment->getData());
310
+ $_item->setData('created_date',Mage::helper('core')->formatDate($comment->getCreatedAtDate(), 'medium'));
311
+ $_item->setData('created_time',Mage::helper('core')->formatTime($comment->getCreatedAtDate(), 'medium'));
312
+ switch($comment->getData('is_customer_notified')){
313
+ case '0':
314
+ $_item->setData('customer_notified',Mage::helper('sales')->__('Not Notified'));
315
+ break;
316
+ case '1':
317
+ $_item->setData('customer_notified',Mage::helper('sales')->__('Notified'));
318
+ break;
319
+ case '2':
320
+ $_item->setData('customer_notified',Mage::helper('sales')->__('Notification Not Applicable'));
321
+ break;
322
+ }
323
+ $comments[] = $_item;
324
+ }
325
+ $source->setData('comments',$comments);
326
+ }
327
+ /*
328
+ * Add area variable to objects :order, invoice, shipment, creditmemo
329
+ */
330
+ function addAreaToObj($source){
331
+ $source->setIsPrintedFromFrontend(Mage::getDesign()->getArea() == 'frontend');
332
+ }
333
+ }
app/code/community/VES/PdfPro/Model/Order.php ADDED
@@ -0,0 +1,290 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * VES_PdfPro_Model_Order
4
+ *
5
+ * @author VnEcoms Team <support@vnecoms.com>
6
+ * @website http://www.vnecoms.com
7
+ */
8
+ class VES_PdfPro_Model_Order extends VES_PdfPro_Model_Abstract
9
+ {
10
+ protected $_defaultTotalModel = 'pdfpro/sales_order_pdf_total_default';
11
+ protected $_item_model;
12
+
13
+ public function getItemModel($item){
14
+ return Mage::getModel('pdfpro/order_item')->setItem($item);
15
+ }
16
+
17
+ /**
18
+ * Sort totals list
19
+ *
20
+ * @param array $a
21
+ * @param array $b
22
+ * @return int
23
+ */
24
+ protected function _sortTotalsList($a, $b) {
25
+ if (!isset($a['sort_order']) || !isset($b['sort_order'])) {
26
+ return 0;
27
+ }
28
+
29
+ if ($a['sort_order'] == $b['sort_order']) {
30
+ return 0;
31
+ }
32
+
33
+ return ($a['sort_order'] > $b['sort_order']) ? 1 : -1;
34
+ }
35
+ /**
36
+ * Get Total List
37
+ * @param Mage_Sales_Model_Order_Invoice $source
38
+ * @return array
39
+ */
40
+
41
+ protected function _getTotalsList($source)
42
+ {
43
+ $totals = Mage::getConfig()->getNode('global/pdf/totals')->asArray();
44
+ usort($totals, array($this, '_sortTotalsList'));
45
+ $totalModels = array();
46
+ foreach ($totals as $index => $totalInfo) {
47
+ if (!empty($totalInfo['model'])) {
48
+ $totalModel = Mage::getModel($totalInfo['model']);
49
+ if ($totalModel instanceof Mage_Sales_Model_Order_Pdf_Total_Default) {
50
+ $totalInfo['model'] = $totalModel;
51
+ } else {
52
+ Mage::throwException(
53
+ Mage::helper('sales')->__('PDF total model should extend Mage_Sales_Model_Order_Pdf_Total_Default')
54
+ );
55
+ }
56
+ } else {
57
+ $totalModel = Mage::getModel($this->_defaultTotalModel);
58
+ }
59
+ $totalModel->setData($totalInfo);
60
+ $totalModels[] = $totalModel;
61
+ }
62
+ return $totalModels;
63
+ }
64
+
65
+
66
+ /**
67
+ * Init invoice data
68
+ * @param Mage_Sales_Model_Order_Invoice $invoice
69
+ * @return array
70
+ */
71
+ public function initOrderData($source){
72
+ $order = $source;
73
+ $this->setTranslationByStoreId($order->getStoreId());
74
+
75
+ $orderCurrencyCode = $order->getOrderCurrencyCode();
76
+ $baseCurrencyCode = $order->getBaseCurrencyCode();
77
+ $sourceData = $this->process($source->getData(),$orderCurrencyCode,$baseCurrencyCode);
78
+ $sourceData['customer'] = $this->getCustomerData(Mage::getModel('customer/customer')->load($order->getCustomerId()));
79
+ $sourceData['created_at_formated'] = $this->getFormatedDate($source->getCreatedAt());
80
+ $sourceData['updated_at_formated'] = $this->getFormatedDate($source->getUpdatedAt());
81
+ /*Init gift message*/
82
+ $sourceData['giftmessage'] = Mage::helper('pdfpro/giftmessage')->initMessage($order);
83
+
84
+ $sourceData['billing'] = $this->getAddressData($source->getBillingAddress());
85
+ $sourceData['customer_dob'] = isset($sourceData['customer_dob'])?$this->getFormatedDate($sourceData['customer_dob']):'';
86
+ /*if order is not virtual */
87
+ if(!$source->getIsVirtual())
88
+ $sourceData['shipping'] = $this->getAddressData($source->getShippingAddress());
89
+ /*Get Payment Info */
90
+
91
+ Mage::getDesign()->setPackageName('default'); /*Set package to default*/
92
+ $paymentInfo = Mage::helper('payment')->getInfoBlock($order->getPayment())
93
+ ->setIsSecureMode(true)
94
+ ->setArea('adminhtml')
95
+ ->toPdf();
96
+ $paymentInfo = str_replace('{{pdf_row_separator}}', "<br />", $paymentInfo);
97
+ $sourceData['payment'] = array('code'=>$order->getPayment()->getMethodInstance()->getCode(),
98
+ 'name'=>$order->getPayment()->getMethodInstance()->getTitle(),
99
+ 'info'=>$paymentInfo,
100
+ );
101
+ $sourceData['payment_info'] = $paymentInfo;
102
+ $sourceData['totals'] = array();
103
+ $sourceData['items'] = array();
104
+
105
+ /*
106
+ * Get Items information
107
+ */
108
+ foreach($source->getAllItems() as $item){
109
+ if ($item->getParentItem()) {
110
+ continue;
111
+ }
112
+ $itemModel = $this->getItemModel($item);
113
+ if($item->getProductType()=='bundle'){
114
+ $itemData = array('is_bundle'=>1,'name'=>$item->getName(),'sku'=>$item->getSku());
115
+ if($itemModel->canShowPriceInfo($item)){
116
+ $itemData['price'] = Mage::helper('pdfpro')->currency($item->getPrice(),$orderCurrencyCode);
117
+ $itemData['qty'] = $item->getQtyOrdered() * 1;
118
+ $itemData['tax'] = Mage::helper('pdfpro')->currency($item->getTaxAmount(),$orderCurrencyCode);
119
+ $itemData['subtotal'] = Mage::helper('pdfpro')->currency($item->getRowTotal(),$orderCurrencyCode);
120
+ $itemData['row_total'] = Mage::helper('pdfpro')->currency($item->getRowTotalInclTax(),$orderCurrencyCode);
121
+ }
122
+ $items = $itemModel->getChilds($item);
123
+ $itemData['sub_items'] = array();
124
+
125
+ foreach ($items as $_item) {
126
+ $bundleItem = array();
127
+ $attributes = $itemModel->getSelectionAttributes($_item);
128
+ if(!$attributes['option_label']) continue;
129
+ $bundleItem['label'] = $attributes['option_label'];
130
+ /*Product name */
131
+ if ($_item->getParentItem()) {
132
+ $name = $itemModel->getValueHtml($_item);
133
+ } else {
134
+ $name = $_item->getName();
135
+ }
136
+ $bundleItem['value'] = $name;
137
+ $bundleItem['sku'] = $_item->getSku();
138
+ /* price */
139
+ if ($itemModel->canShowPriceInfo($_item)) {
140
+ $price = $order->formatPriceTxt($_item->getPrice());
141
+ $bundleItem['price'] = Mage::helper('pdfpro')->currency($_item->getPrice(),$orderCurrencyCode);
142
+ $bundleItem['qty'] = $_item->getQtyOrdered()*1;
143
+ $bundleItem['tax'] = Mage::helper('pdfpro')->currency($_item->getTaxAmount(),$orderCurrencyCode);
144
+ $bundleItem['subtotal'] = Mage::helper('pdfpro')->currency($_item->getRowTotal(),$orderCurrencyCode);
145
+ $bundleItem['row_total']= Mage::helper('pdfpro')->currency($_item->getRowTotalInclTax(),$orderCurrencyCode);
146
+ }
147
+ $bundleItem = new Varien_Object($bundleItem);
148
+ Mage::dispatchEvent('ves_pdfpro_data_prepare_after',array('source'=>$bundleItem,'model'=>$_item,'type'=>'item'));
149
+ $itemData['sub_items'][] = $bundleItem;
150
+ }
151
+ }else{
152
+ $itemData = array(
153
+ 'name' => $item->getName(),
154
+ 'sku' => $item->getSku(),
155
+ 'price' => Mage::helper('pdfpro')->currency($item->getPrice(),$orderCurrencyCode),
156
+ 'qty' => $item->getQtyOrdered() * 1,
157
+ 'tax' => Mage::helper('pdfpro')->currency($item->getTaxAmount(),$orderCurrencyCode),
158
+ 'subtotal' => Mage::helper('pdfpro')->currency($item->getRowTotal(),$orderCurrencyCode),
159
+ 'row_total' => Mage::helper('pdfpro')->currency($item->getRowTotalInclTax(),$orderCurrencyCode)
160
+ );
161
+ $options = $itemModel->getItemOptions($item);
162
+ $itemData['options'] = array();
163
+ if ($options) {
164
+ foreach ($options as $option) {
165
+ $optionData = array();
166
+ $optionData['label'] = strip_tags($option['label']);
167
+
168
+ if ($option['value']) {
169
+ $printValue = isset($option['print_value']) ? $option['print_value'] : strip_tags($option['value']);
170
+ $optionData['value'] = $printValue;
171
+ }
172
+ $itemData['options'][] = new Varien_Object($optionData);
173
+ }
174
+ }
175
+ }
176
+ $itemData = new Varien_Object($itemData);
177
+ Mage::dispatchEvent('ves_pdfpro_data_prepare_after',array('source'=>$itemData,'model'=>$item,'type'=>'item'));
178
+ $sourceData['items'][] = $itemData;
179
+ }
180
+ /*
181
+ * Get Totals information.
182
+ */
183
+ $totals = $this->_getTotalsList($source);
184
+ $totalArr = array();
185
+ foreach ($totals as $total) {
186
+ $total->setOrder($order)
187
+ ->setSource($source);
188
+ if ($total->canDisplay()) {
189
+ $area = $total->getSourceField()=='grand_total'?'footer':'body';
190
+ foreach ($total->getTotalsForDisplay() as $totalData) {
191
+ $totalArr[$area][] = new Varien_Object(array('label'=>$totalData['label'], 'value'=>$totalData['amount']));
192
+ }
193
+ }
194
+ }
195
+ $sourceData['totals'] = new Varien_Object($totalArr);
196
+ $apiKey = Mage::helper('pdfpro')->getApiKey($order->getStoreId(),$order->getCustomerGroupId());
197
+
198
+ $sourceData = new Varien_Object($sourceData);
199
+
200
+ Mage::dispatchEvent('ves_pdfpro_data_prepare_after',array('source'=>$sourceData,'model'=>$order,'type'=>'order'));
201
+ $orderData = new Varien_Object(array('key'=>$apiKey,'data'=>$sourceData));
202
+ $this->revertTranslation();
203
+ return serialize($orderData);
204
+ }
205
+ public function getBasePriceAttributes(){
206
+ return array(
207
+ 'base_discount_amount',
208
+ 'base_discount_canceled',
209
+ 'base_discount_invoiced',
210
+ 'base_discount_refunded',
211
+ 'base_grand_total',
212
+ 'base_shipping_amount',
213
+ 'base_shipping_canceled',
214
+ 'base_shipping_invoiced',
215
+ 'base_shipping_refunded',
216
+ 'base_shipping_tax_amount',
217
+ 'base_shipping_tax_refunded',
218
+ 'base_subtotal',
219
+ 'base_subtotal_canceled',
220
+ 'base_subtotal_invoiced',
221
+ 'base_subtotal_refunded',
222
+ 'base_tax_amount',
223
+ 'base_tax_canceled',
224
+ 'base_tax_invoiced',
225
+ 'base_tax_refunded',
226
+ 'base_to_global_rate',
227
+ 'base_to_order_rate',
228
+ 'base_to_order_rate',
229
+ 'base_total_canceled',
230
+ 'base_total_invoiced',
231
+ 'base_total_invoiced_cost',
232
+ 'base_total_offline_refunded',
233
+ 'base_total_online_refunded',
234
+ 'base_total_paid',
235
+ 'base_total_refunded',
236
+ 'base_adjustment_negative',
237
+ 'base_adjustment_positive',
238
+ 'base_shipping_discount_amount',
239
+ 'base_subtotal_incl_tax',
240
+ 'base_total_due',
241
+ 'base_shipping_hidden_tax_amnt',
242
+ 'base_hidden_tax_invoiced',
243
+ 'base_hidden_tax_refunded',
244
+ 'base_shipping_incl_tax',
245
+ 'base_shipping_hidden_tax_amount',
246
+ );
247
+ }
248
+ /*Get all price attribute */
249
+ public function getPriceAttributes(){
250
+ return array(
251
+ 'discount_amount',
252
+ 'discount_canceled',
253
+ 'discount_invoiced',
254
+ 'discount_refunded',
255
+ 'grand_total',
256
+ 'shipping_amount',
257
+ 'shipping_canceled',
258
+ 'shipping_invoiced',
259
+ 'shipping_refunded',
260
+ 'shipping_tax_amount',
261
+ 'shipping_tax_refunded',
262
+ 'store_to_base_rate',
263
+ 'subtotal',
264
+ 'subtotal_canceled',
265
+ 'subtotal_invoiced',
266
+ 'subtotal_refunded',
267
+ 'tax_amount',
268
+ 'tax_canceled',
269
+ 'tax_invoiced',
270
+ 'tax_refunded',
271
+ 'total_canceled',
272
+ 'total_invoiced',
273
+ 'total_offline_refunded',
274
+ 'total_online_refunded',
275
+ 'total_paid',
276
+ 'total_refunded',
277
+ 'adjustment_negative',
278
+ 'adjustment_positive',
279
+ 'payment_authorization_amount',
280
+ 'shipping_discount_amount',
281
+ 'subtotal_incl_tax',
282
+ 'total_due',
283
+ 'hidden_tax_amount',
284
+ 'shipping_hidden_tax_amount',
285
+ 'hidden_tax_invoiced',
286
+ 'hidden_tax_refunded',
287
+ 'shipping_incl_tax',
288
+ );
289
+ }
290
+ }
app/code/community/VES/PdfPro/Model/Order/Creditmemo.php ADDED
@@ -0,0 +1,240 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * VES_PdfPro_Model_Order_Creditmemo
4
+ *
5
+ * @author VnEcoms Team <support@vnecoms.com>
6
+ * @website http://www.vnecoms.com
7
+ */
8
+ class VES_PdfPro_Model_Order_Creditmemo extends VES_PdfPro_Model_Abstract
9
+ {
10
+ protected $_defaultTotalModel = 'pdfpro/sales_order_pdf_total_default';
11
+ protected $_item_model;
12
+
13
+ public function getItemModel($item){
14
+ return Mage::getModel('pdfpro/order_creditmemo_item')->setItem($item);
15
+ }
16
+ /**
17
+ * Sort totals list
18
+ *
19
+ * @param array $a
20
+ * @param array $b
21
+ * @return int
22
+ */
23
+ protected function _sortTotalsList($a, $b) {
24
+ if (!isset($a['sort_order']) || !isset($b['sort_order'])) {
25
+ return 0;
26
+ }
27
+
28
+ if ($a['sort_order'] == $b['sort_order']) {
29
+ return 0;
30
+ }
31
+
32
+ return ($a['sort_order'] > $b['sort_order']) ? 1 : -1;
33
+ }
34
+ /**
35
+ * Get Total List
36
+ * @param Mage_Sales_Model_Order_Invoice $source
37
+ * @return array
38
+ */
39
+
40
+ protected function _getTotalsList($source)
41
+ {
42
+ $totals = Mage::getConfig()->getNode('global/pdf/totals')->asArray();
43
+ usort($totals, array($this, '_sortTotalsList'));
44
+ $totalModels = array();
45
+ foreach ($totals as $index => $totalInfo) {
46
+ if (!empty($totalInfo['model'])) {
47
+ $totalModel = Mage::getModel($totalInfo['model']);
48
+ if ($totalModel instanceof Mage_Sales_Model_Order_Pdf_Total_Default) {
49
+ $totalInfo['model'] = $totalModel;
50
+ } else {
51
+ Mage::throwException(
52
+ Mage::helper('sales')->__('PDF total model should extend Mage_Sales_Model_Order_Pdf_Total_Default')
53
+ );
54
+ }
55
+ } else {
56
+ $totalModel = Mage::getModel($this->_defaultTotalModel);
57
+ }
58
+ $totalModel->setData($totalInfo);
59
+ $totalModels[] = $totalModel;
60
+ }
61
+ return $totalModels;
62
+ }
63
+
64
+
65
+ /**
66
+ * Init invoice data
67
+ * @param Mage_Sales_Model_Order_Invoice $invoice
68
+ * @return array
69
+ */
70
+
71
+ public function initCreditmemoData($creditmemo){
72
+ $order = $creditmemo->getOrder();
73
+ $this->setTranslationByStoreId($creditmemo->getStoreId());
74
+ $orderCurrencyCode = $order->getOrderCurrencyCode();
75
+ $baseCurrencyCode = $order->getBaseCurrencyCode();
76
+ $creditmemoData = $this->process($creditmemo->getData(),$orderCurrencyCode,$baseCurrencyCode);
77
+ $orderData = Mage::getModel('pdfpro/order')->initOrderData($order);
78
+ $creditmemoData['order'] = unserialize($orderData);
79
+ $creditmemoData['customer'] = $this->getCustomerData(Mage::getModel('customer/customer')->load($order->getCustomerId()));
80
+ $creditmemoData['created_at_formated'] = $this->getFormatedDate($creditmemo->getCreatedAt());
81
+ $creditmemoData['updated_at_formated'] = $this->getFormatedDate($creditmemo->getUpdatedAt());
82
+
83
+ $creditmemoData['billing'] = $this->getAddressData($creditmemo->getBillingAddress());
84
+ /*if order is not virtual */
85
+ if(!$order->getIsVirtual())
86
+ $creditmemoData['shipping'] = $this->getAddressData($creditmemo->getShippingAddress());
87
+ /*Get Payment Info */
88
+ Mage::getDesign()->setPackageName('default'); /*Set package to default*/
89
+ $paymentInfo = Mage::helper('payment')->getInfoBlock($order->getPayment())
90
+ ->setIsSecureMode(true)
91
+ ->setArea('adminhtml')
92
+ ->toPdf();
93
+ $paymentInfo = str_replace('{{pdf_row_separator}}', "<br />", $paymentInfo);
94
+ $creditmemoData['payment'] = array('code'=>$order->getPayment()->getMethodInstance()->getCode(),
95
+ 'name'=>$order->getPayment()->getMethodInstance()->getTitle(),
96
+ 'info'=>$paymentInfo,
97
+ );
98
+ $creditmemoData['payment_info'] = $paymentInfo;
99
+ $creditmemoData['shipping_description'] = $order->getShippingDescription();
100
+
101
+ $creditmemoData['items'] = array();
102
+ $orderCurrencyCode = $order->getOrderCurrencyCode();
103
+ /*
104
+ * Get Items information
105
+ */
106
+
107
+ foreach($creditmemo->getAllItems() as $item){
108
+ if ($item->getOrderItem()->getParentItem()) {
109
+ continue;
110
+ }
111
+ $itemModel = $this->getItemModel($item);
112
+ if($item->getOrderItem()->getProductType()=='bundle'){
113
+ $itemData = array('is_bundle'=>1,'name'=>$item->getName(),'sku'=>$item->getSku());
114
+ if($itemModel->canShowPriceInfo($item)){
115
+ $itemData['price'] = Mage::helper('pdfpro')->currency($item->getPrice(),$orderCurrencyCode);
116
+ $itemData['qty'] = $item->getQty() * 1;
117
+ $itemData['tax'] = Mage::helper('pdfpro')->currency($item->getTaxAmount(),$orderCurrencyCode);
118
+ $itemData['subtotal'] = Mage::helper('pdfpro')->currency($item->getRowTotal(),$orderCurrencyCode);
119
+ $itemData['row_total'] = Mage::helper('pdfpro')->currency($item->getRowTotalInclTax(),$orderCurrencyCode);
120
+ }
121
+ $itemData['sub_items'] = array();
122
+ $items = $itemModel->getChilds($item);
123
+ //$items = array_merge(array($item->getOrderItem()), $item->getOrderItem()->getChildrenItems());
124
+ foreach ($items as $_item) {
125
+ $bundleItem = array();
126
+ $attributes = $itemModel->getSelectionAttributes($_item);
127
+ // draw SKUs
128
+ if (!$_item->getOrderItem()->getParentItem()) {
129
+ continue;
130
+ }
131
+ $bundleItem['label'] = $attributes['option_label'];
132
+ /*Product name */
133
+ if ($_item->getOrderItem()->getParentItem()) {
134
+ $name = $itemModel->getValueHtml($_item);
135
+ } else {
136
+ $name = $_item->getName();
137
+ }
138
+ $bundleItem['value'] = $name;
139
+ $bundleItem['sku'] = $_item->getSku();
140
+ if ($itemModel->canShowPriceInfo($_item)) {
141
+ $price = $order->formatPriceTxt($_item->getPrice());
142
+ $bundleItem['price'] = Mage::helper('pdfpro')->currency($_item->getPrice(),$orderCurrencyCode);
143
+ $bundleItem['qty'] = $_item->getQty() * 1;
144
+ $bundleItem['tax'] = Mage::helper('pdfpro')->currency($_item->getTaxAmount(),$orderCurrencyCode);
145
+ $bundleItem['subtotal'] = Mage::helper('pdfpro')->currency($_item->getRowTotal(),$orderCurrencyCode);
146
+ $bundleItem['row_total']= Mage::helper('pdfpro')->currency($_item->getRowTotalInclTax(),$orderCurrencyCode);
147
+ }
148
+ $bundleItem = new Varien_Object($bundleItem);
149
+ Mage::dispatchEvent('ves_pdfpro_data_prepare_after',array('source'=>$bundleItem,'model'=>$_item,'type'=>'item'));
150
+ $itemData['sub_items'][] = $bundleItem;
151
+ }
152
+
153
+ }else{
154
+ $itemData = array(
155
+ 'name' => $item->getName(),
156
+ 'sku' => $item->getSku(),
157
+ 'price' => Mage::helper('pdfpro')->currency($item->getPrice(),$orderCurrencyCode),
158
+ 'qty' => $item->getQty() * 1,
159
+ 'tax' => Mage::helper('pdfpro')->currency($item->getTaxAmount(),$orderCurrencyCode),
160
+ 'subtotal' => Mage::helper('pdfpro')->currency($item->getRowTotal(),$orderCurrencyCode),
161
+ 'row_total' => Mage::helper('pdfpro')->currency($item->getRowTotalInclTax(),$orderCurrencyCode)
162
+ );
163
+ $options = $itemModel->getItemOptions($item);
164
+ $itemData['options'] = array();
165
+ if ($options) {
166
+ foreach ($options as $option) {
167
+ $optionData = array();
168
+ $optionData['label'] = strip_tags($option['label']);
169
+
170
+ if ($option['value']) {
171
+ $printValue = isset($option['print_value']) ? $option['print_value'] : strip_tags($option['value']);
172
+ $optionData['value'] = $printValue;
173
+ }
174
+ $itemData['options'][] = new Varien_Object($optionData);
175
+ }
176
+ }
177
+ }
178
+ $itemData = new Varien_Object($itemData);
179
+ Mage::dispatchEvent('ves_pdfpro_data_prepare_after',array('source'=>$itemData,'model'=>$item,'type'=>'item'));
180
+ $creditmemoData['items'][] = $itemData;
181
+ }
182
+ /*
183
+ * Get Totals information.
184
+ */
185
+ $totals = $this->_getTotalsList($creditmemo);
186
+ $totalArr = array();
187
+ foreach ($totals as $total) {
188
+ $total->setOrder($order)
189
+ ->setSource($creditmemo);
190
+ if ($total->canDisplay()) {
191
+ $area = $total->getSourceField()=='grand_total'?'footer':'body';
192
+ foreach ($total->getTotalsForDisplay() as $totalData) {
193
+ $totalArr[$area][] = new Varien_Object(array('label'=>$totalData['label'], 'value'=>$totalData['amount']));
194
+ }
195
+ }
196
+ }
197
+ $creditmemoData['totals'] = new Varien_Object($totalArr);
198
+ $apiKey = Mage::helper('pdfpro')->getApiKey($order->getStoreId(),$order->getCustomerGroupId());
199
+
200
+ $creditmemoData = new Varien_Object($creditmemoData);
201
+ Mage::dispatchEvent('ves_pdfpro_data_prepare_after',array('source'=>$creditmemoData,'model'=>$creditmemo,'type'=>'creditmemo'));
202
+ $creditmemoData = new Varien_Object(array('key'=>$apiKey,'data'=>$creditmemoData));
203
+ $this->revertTranslation();
204
+ return serialize($creditmemoData);
205
+ }
206
+
207
+ public function getBasePriceAttributes(){
208
+ return array(
209
+ 'base_shipping_tax_amount',
210
+ 'base_discount_amount',
211
+ 'base_adjustment_negative',
212
+ 'base_subtotal_incl_tax',
213
+ 'base_shipping_amount',
214
+ 'base_adjustment',
215
+ 'base_subtotal',
216
+ 'base_grand_total',
217
+ 'base_adjustment_positive',
218
+ 'base_tax_amount',
219
+ 'base_hidden_tax_amount',
220
+ 'base_shipping_incl_tax',
221
+ );
222
+ }
223
+ /*Get all price attribute */
224
+ public function getPriceAttributes(){
225
+ return array(
226
+ 'adjustment_positive',
227
+ 'grand_total',
228
+ 'shipping_amount',
229
+ 'subtotal_incl_tax',
230
+ 'adjustment_negative',
231
+ 'discount_amount',
232
+ 'subtotal',
233
+ 'adjustment',
234
+ 'shipping_tax_amount',
235
+ 'tax_amount',
236
+ 'hidden_tax_amount',
237
+ 'shipping_incl_tax',
238
+ );
239
+ }
240
+ }
app/code/community/VES/PdfPro/Model/Order/Creditmemo/Item.php ADDED
@@ -0,0 +1,279 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * VES_PdfPro_Model_Order_Creditmemo_Item
4
+ *
5
+ * @author VnEcoms Team <support@vnecoms.com>
6
+ * @website http://www.vnecoms.com
7
+ */
8
+ class VES_PdfPro_Model_Order_Creditmemo_Item extends Varien_Object
9
+ {
10
+ /**
11
+ * Get Options of items
12
+ * @param Mage_Sales_Model_Order_Invoice_Item $item
13
+ * @return array:
14
+ */
15
+ public function getItemOptions($item) {
16
+ $result = array();
17
+ if (!($item instanceof Mage_Sales_Model_Order_Item)) {
18
+ $item = $item->getOrderItem();
19
+ }
20
+
21
+ if ($options = $item->getProductOptions()) {
22
+ if (isset($options['options'])) {
23
+ $result = array_merge($result, $options['options']);
24
+ }
25
+ if (isset($options['additional_options'])) {
26
+ $result = array_merge($result, $options['additional_options']);
27
+ }
28
+ if (isset($options['attributes_info'])) {
29
+ $result = array_merge($result, $options['attributes_info']);
30
+ }
31
+ }
32
+ return $result;
33
+ }
34
+
35
+ /**
36
+ * Getting all available childs for Invoice, Shipmen or Creditmemo item
37
+ *
38
+ * @param Varien_Object $item
39
+ * @return array
40
+ */
41
+ public function getChilds($item)
42
+ {
43
+ $_itemsArray = array();
44
+
45
+ if ($item instanceof Mage_Sales_Model_Order_Invoice_Item) {
46
+ $_items = $item->getInvoice()->getAllItems();
47
+ } else if ($item instanceof Mage_Sales_Model_Order_Shipment_Item) {
48
+ $_items = $item->getShipment()->getAllItems();
49
+ } else if ($item instanceof Mage_Sales_Model_Order_Creditmemo_Item) {
50
+ $_items = $item->getCreditmemo()->getAllItems();
51
+ }
52
+
53
+ if ($_items) {
54
+ foreach ($_items as $_item) {
55
+ $parentItem = $_item->getOrderItem()->getParentItem();
56
+ if ($parentItem) {
57
+ $_itemsArray[$parentItem->getId()][$_item->getOrderItemId()] = $_item;
58
+ } else {
59
+ $_itemsArray[$_item->getOrderItem()->getId()][$_item->getOrderItemId()] = $_item;
60
+ }
61
+ }
62
+ }
63
+ if (isset($_itemsArray[$item->getOrderItem()->getId()])) {
64
+ return $_itemsArray[$item->getOrderItem()->getId()];
65
+ } else {
66
+ return null;
67
+ }
68
+ }
69
+
70
+ /**
71
+ * Retrieve is Shipment Separately flag for Item
72
+ *
73
+ * @param Varien_Object $item
74
+ * @return bool
75
+ */
76
+ public function isShipmentSeparately($item = null)
77
+ {
78
+ if ($item) {
79
+ if ($item->getOrderItem()) {
80
+ $item = $item->getOrderItem();
81
+ }
82
+
83
+ $parentItem = $item->getParentItem();
84
+ if ($parentItem) {
85
+ $options = $parentItem->getProductOptions();
86
+ if ($options) {
87
+ if (isset($options['shipment_type'])
88
+ && $options['shipment_type'] == Mage_Catalog_Model_Product_Type_Abstract::SHIPMENT_SEPARATELY) {
89
+ return true;
90
+ } else {
91
+ return false;
92
+ }
93
+ }
94
+ } else {
95
+ $options = $item->getProductOptions();
96
+ if ($options) {
97
+ if (isset($options['shipment_type'])
98
+ && $options['shipment_type'] == Mage_Catalog_Model_Product_Type_Abstract::SHIPMENT_SEPARATELY) {
99
+ return false;
100
+ } else {
101
+ return true;
102
+ }
103
+ }
104
+ }
105
+ }
106
+
107
+ $options = $this->getOrderItem()->getProductOptions();
108
+ if ($options) {
109
+ if (isset($options['shipment_type'])
110
+ && $options['shipment_type'] == Mage_Catalog_Model_Product_Type_Abstract::SHIPMENT_SEPARATELY) {
111
+ return true;
112
+ }
113
+ }
114
+ return false;
115
+ }
116
+
117
+ /**
118
+ * Retrieve is Child Calculated
119
+ *
120
+ * @param Varien_Object $item
121
+ * @return bool
122
+ */
123
+ public function isChildCalculated($item = null)
124
+ {
125
+ if ($item) {
126
+ if ($item->getOrderItem()) {
127
+ $item = $item->getOrderItem();
128
+ }
129
+
130
+ $parentItem = $item->getParentItem();
131
+ if ($parentItem) {
132
+ $options = $parentItem->getProductOptions();
133
+ if ($options) {
134
+ if (isset($options['product_calculations']) &&
135
+ $options['product_calculations'] == Mage_Catalog_Model_Product_Type_Abstract::CALCULATE_CHILD
136
+ ) {
137
+ return true;
138
+ } else {
139
+ return false;
140
+ }
141
+ }
142
+ } else {
143
+ $options = $item->getProductOptions();
144
+ if ($options) {
145
+ if (isset($options['product_calculations']) &&
146
+ $options['product_calculations'] == Mage_Catalog_Model_Product_Type_Abstract::CALCULATE_CHILD
147
+ ) {
148
+ return false;
149
+ } else {
150
+ return true;
151
+ }
152
+ }
153
+ }
154
+ }
155
+
156
+ $options = $this->getOrderItem()->getProductOptions();
157
+ if ($options) {
158
+ if (isset($options['product_calculations'])
159
+ && $options['product_calculations'] == Mage_Catalog_Model_Product_Type_Abstract::CALCULATE_CHILD) {
160
+ return true;
161
+ }
162
+ }
163
+ return false;
164
+ }
165
+
166
+ /**
167
+ * Retrieve Bundle Options
168
+ *
169
+ * @param Varien_Object $item
170
+ * @return array
171
+ */
172
+ public function getBundleOptions($item = null)
173
+ {
174
+ $options = $this->getOrderItem()->getProductOptions();
175
+ if ($options) {
176
+ if (isset($options['bundle_options'])) {
177
+ return $options['bundle_options'];
178
+ }
179
+ }
180
+ return array();
181
+ }
182
+
183
+ /**
184
+ * Retrieve Selection attributes
185
+ *
186
+ * @param Varien_Object $item
187
+ * @return mixed
188
+ */
189
+ public function getSelectionAttributes($item)
190
+ {
191
+ if ($item instanceof Mage_Sales_Model_Order_Item) {
192
+ $options = $item->getProductOptions();
193
+ } else {
194
+ $options = $item->getOrderItem()->getProductOptions();
195
+ }
196
+ if (isset($options['bundle_selection_attributes'])) {
197
+ return unserialize($options['bundle_selection_attributes']);
198
+ }
199
+ return null;
200
+ }
201
+
202
+ /**
203
+ * Retrieve Order options
204
+ *
205
+ * @param Varien_Object $item
206
+ * @return array
207
+ */
208
+ public function getOrderOptions($item = null)
209
+ {
210
+ $result = array();
211
+
212
+ $options = $this->getOrderItem()->getProductOptions();
213
+ if ($options) {
214
+ if (isset($options['options'])) {
215
+ $result = array_merge($result, $options['options']);
216
+ }
217
+ if (isset($options['additional_options'])) {
218
+ $result = array_merge($result, $options['additional_options']);
219
+ }
220
+ if (!empty($options['attributes_info'])) {
221
+ $result = array_merge($options['attributes_info'], $result);
222
+ }
223
+ }
224
+ return $result;
225
+ }
226
+
227
+ /**
228
+ * Retrieve Order Item
229
+ *
230
+ * @return Mage_Sales_Order_Item
231
+ */
232
+ public function getOrderItem()
233
+ {
234
+ if ($this->getItem() instanceof Mage_Sales_Model_Order_Item) {
235
+ return $this->getItem();
236
+ } else {
237
+ return $this->getItem()->getOrderItem();
238
+ }
239
+ }
240
+
241
+ /**
242
+ * Retrieve Value HTML
243
+ *
244
+ * @param Mage_Sales_Order_Item $item
245
+ * @return string
246
+ */
247
+ public function getValueHtml($item)
248
+ {
249
+ $result = strip_tags($item->getName());
250
+ if (!$this->isShipmentSeparately($item)) {
251
+ $attributes = $this->getSelectionAttributes($item);
252
+ if ($attributes) {
253
+ $result = sprintf('%d', $attributes['qty']) . ' x ' . $result;
254
+ }
255
+ }
256
+ if (!$this->isChildCalculated($item)) {
257
+ $attributes = $this->getSelectionAttributes($item);
258
+ if ($attributes) {
259
+ $result .= " " . strip_tags($this->getOrderItem()->getOrder()->formatPrice($attributes['price']));
260
+ }
261
+ }
262
+ return $result;
263
+ }
264
+
265
+ /**
266
+ * Can show price info for item
267
+ *
268
+ * @param Mage_Sales_Order_Item $item
269
+ * @return bool
270
+ */
271
+ public function canShowPriceInfo($item)
272
+ {
273
+ if (($item->getOrderItem()->getParentItem() && $this->isChildCalculated())
274
+ || (!$item->getOrderItem()->getParentItem() && !$this->isChildCalculated())) {
275
+ return true;
276
+ }
277
+ return false;
278
+ }
279
+ }
app/code/community/VES/PdfPro/Model/Order/Invoice.php ADDED
@@ -0,0 +1,239 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * VES_PdfPro_Model_Order_Invoice
4
+ *
5
+ * @author VnEcoms Team <support@vnecoms.com>
6
+ * @website http://www.vnecoms.com
7
+ */
8
+ class VES_PdfPro_Model_Order_Invoice extends VES_PdfPro_Model_Abstract
9
+ {
10
+ protected $_defaultTotalModel = 'pdfpro/sales_order_pdf_total_default';
11
+ protected $_item_model;
12
+
13
+ public function getItemModel($item){
14
+ return Mage::getModel('pdfpro/order_invoice_item')->setItem($item);
15
+ }
16
+
17
+ /**
18
+ * Sort totals list
19
+ *
20
+ * @param array $a
21
+ * @param array $b
22
+ * @return int
23
+ */
24
+ protected function _sortTotalsList($a, $b) {
25
+ if (!isset($a['sort_order']) || !isset($b['sort_order'])) {
26
+ return 0;
27
+ }
28
+
29
+ if ($a['sort_order'] == $b['sort_order']) {
30
+ return 0;
31
+ }
32
+
33
+ return ($a['sort_order'] > $b['sort_order']) ? 1 : -1;
34
+ }
35
+ /**
36
+ * Get Total List
37
+ * @param Mage_Sales_Model_Order_Invoice $source
38
+ * @return array
39
+ */
40
+
41
+ protected function _getTotalsList($source)
42
+ {
43
+ $totals = Mage::getConfig()->getNode('global/pdf/totals')->asArray();
44
+ usort($totals, array($this, '_sortTotalsList'));
45
+ $totalModels = array();
46
+ foreach ($totals as $index => $totalInfo) {
47
+ if (!empty($totalInfo['model'])) {
48
+ $totalModel = Mage::getModel($totalInfo['model']);
49
+ if ($totalModel instanceof Mage_Sales_Model_Order_Pdf_Total_Default) {
50
+ $totalInfo['model'] = $totalModel;
51
+ } else {
52
+ Mage::throwException(
53
+ Mage::helper('sales')->__('PDF total model should extend Mage_Sales_Model_Order_Pdf_Total_Default')
54
+ );
55
+ }
56
+ } else {
57
+ $totalModel = Mage::getModel($this->_defaultTotalModel);
58
+ }
59
+ $totalModel->setData($totalInfo);
60
+ $totalModels[] = $totalModel;
61
+ }
62
+ return $totalModels;
63
+ }
64
+
65
+ /**
66
+ * Init invoice data
67
+ * @param Mage_Sales_Model_Order_Invoice $invoice
68
+ * @return array
69
+ */
70
+
71
+ public function initInvoiceData($invoice){
72
+ $order = $invoice->getOrder();
73
+ $orderCurrencyCode = $order->getOrderCurrencyCode();
74
+ $baseCurrencyCode = $order->getBaseCurrencyCode();
75
+
76
+ $this->setTranslationByStoreId($invoice->getStoreId());
77
+ $invoiceData = $this->process($invoice->getData(),$orderCurrencyCode,$baseCurrencyCode);
78
+ $orderData = Mage::getModel('pdfpro/order')->initOrderData($order);
79
+
80
+ $invoiceData['order'] = unserialize($orderData);
81
+ $invoiceData['customer']= $this->getCustomerData(Mage::getModel('customer/customer')->load($order->getCustomerId()));
82
+ $invoiceData['created_at_formated'] = $this->getFormatedDate($invoice->getCreatedAt());
83
+ $invoiceData['updated_at_formated'] = $this->getFormatedDate($invoice->getUpdatedAt());
84
+ $invoiceData['billing'] = $this->getAddressData($invoice->getBillingAddress());
85
+
86
+ /*if order is not virtual */
87
+ if(!$order->getIsVirtual())
88
+ $invoiceData['shipping'] = $this->getAddressData($invoice->getShippingAddress());
89
+ /*Get Payment Info */
90
+ Mage::getDesign()->setPackageName('default'); /*Set package to default*/
91
+ $paymentInfo = Mage::helper('payment')->getInfoBlock($order->getPayment())
92
+ ->setIsSecureMode(true)
93
+ ->setArea('adminhtml')
94
+ ->toPdf();
95
+ $paymentInfo = str_replace('{{pdf_row_separator}}', "<br />", $paymentInfo);
96
+ $invoiceData['payment'] = array('code'=>$order->getPayment()->getMethodInstance()->getCode(),
97
+ 'name'=>$order->getPayment()->getMethodInstance()->getTitle(),
98
+ 'info'=>$paymentInfo,
99
+ );
100
+ $invoiceData['payment_info'] = $paymentInfo;
101
+
102
+ $invoiceData['shipping_description'] = $order->getShippingDescription();
103
+
104
+ $invoiceData['totals'] = array();
105
+ $invoiceData['items'] = array();
106
+ /*
107
+ * Get Items information
108
+ */
109
+ foreach($invoice->getAllItems() as $item){
110
+ if ($item->getOrderItem()->getParentItem()) {
111
+ continue;
112
+ }
113
+ $itemModel = $this->getItemModel($item);
114
+ if($item->getOrderItem()->getProductType()=='bundle'){
115
+ $itemData = array('is_bundle'=>1,'name'=>$item->getName(),'sku'=>$item->getSku());
116
+ if($itemModel->canShowPriceInfo($item)){
117
+ $itemData['price'] = Mage::helper('pdfpro')->currency($item->getPrice(),$orderCurrencyCode);
118
+ $itemData['qty'] = $item->getQty() * 1;
119
+ $itemData['tax'] = Mage::helper('pdfpro')->currency($item->getTaxAmount(),$orderCurrencyCode);
120
+ $itemData['subtotal'] = Mage::helper('pdfpro')->currency($item->getRowTotal(),$orderCurrencyCode);
121
+ $itemData['row_total'] = Mage::helper('pdfpro')->currency($item->getRowTotalInclTax(),$orderCurrencyCode);
122
+ }
123
+ $itemData['sub_items'] = array();
124
+ $items = $itemModel->getChilds($item);
125
+ foreach ($items as $_item) {
126
+ $bundleItem = array();
127
+ $attributes = $itemModel->getSelectionAttributes($_item);
128
+ // draw SKUs
129
+ if (!$_item->getOrderItem()->getParentItem()) {
130
+ continue;
131
+ }
132
+ $bundleItem['label'] = $attributes['option_label'];
133
+ /*Product name */
134
+ if ($_item->getOrderItem()->getParentItem()) {
135
+ $name = $itemModel->getValueHtml($_item);
136
+ } else {
137
+ $name = $_item->getName();
138
+ }
139
+ $bundleItem['value'] = $name;
140
+ /*$bundleItem['sku'] = $_item->getSku();*/
141
+ /* price */
142
+ if ($itemModel->canShowPriceInfo($_item)) {
143
+ $price = $order->formatPriceTxt($_item->getPrice());
144
+ $bundleItem['price'] = Mage::helper('pdfpro')->currency($_item->getPrice(),$orderCurrencyCode);
145
+ $bundleItem['qty'] = $_item->getQty() * 1;
146
+ $bundleItem['tax'] = Mage::helper('pdfpro')->currency($_item->getTaxAmount(),$orderCurrencyCode);
147
+ $bundleItem['subtotal'] = Mage::helper('pdfpro')->currency($_item->getRowTotal(),$orderCurrencyCode);
148
+ $bundleItem['row_total']= Mage::helper('pdfpro')->currency($_item->getRowTotalInclTax(),$orderCurrencyCode);
149
+ }
150
+ $bundleItem = new Varien_Object($bundleItem);
151
+ Mage::dispatchEvent('ves_pdfpro_data_prepare_after',array('source'=>$bundleItem,'model'=>$_item,'type'=>'item'));
152
+ $itemData['sub_items'][] = $bundleItem;
153
+ }
154
+ }else{
155
+ $itemData = array(
156
+ 'name' => $item->getName(),
157
+ 'sku' => $item->getSku(),
158
+ 'price' => Mage::helper('pdfpro')->currency($item->getPrice(),$orderCurrencyCode),
159
+ 'qty' => $item->getQty() * 1,
160
+ 'tax' => Mage::helper('pdfpro')->currency($item->getTaxAmount(),$orderCurrencyCode),
161
+ 'subtotal' => Mage::helper('pdfpro')->currency($item->getRowTotal(),$orderCurrencyCode),
162
+ 'row_total' => Mage::helper('pdfpro')->currency($item->getRowTotalInclTax(),$orderCurrencyCode)
163
+ );
164
+ $options = $itemModel->getItemOptions($item);
165
+ $itemData['options'] = array();
166
+ if ($options) {
167
+ foreach ($options as $option) {
168
+ $optionData = array();
169
+ $optionData['label'] = strip_tags($option['label']);
170
+
171
+ if ($option['value']) {
172
+ $printValue = isset($option['print_value']) ? $option['print_value'] : strip_tags($option['value']);
173
+ $optionData['value'] = $printValue;
174
+ }
175
+ $itemData['options'][] = new Varien_Object($optionData);
176
+ }
177
+ }
178
+ }
179
+ $itemData = new Varien_Object($itemData);
180
+ Mage::dispatchEvent('ves_pdfpro_data_prepare_after',array('source'=>$itemData,'model'=>$item,'type'=>'item'));
181
+ $invoiceData['items'][] = $itemData;
182
+ }
183
+
184
+ /*
185
+ * Get Totals information.
186
+ */
187
+ $totals = $this->_getTotalsList($invoice);
188
+ $totalArr = array();
189
+ foreach ($totals as $total) {
190
+ $total->setOrder($order)
191
+ ->setSource($invoice);
192
+ if ($total->canDisplay()) {
193
+ $area = $total->getSourceField()=='grand_total'?'footer':'body';
194
+ foreach ($total->getTotalsForDisplay() as $totalData) {
195
+ $totalArr[$area][] = new Varien_Object(array('label'=>$totalData['label'], 'value'=>$totalData['amount']));
196
+ }
197
+ }
198
+ }
199
+ $invoiceData['totals'] = new Varien_Object($totalArr);
200
+ $apiKey = Mage::helper('pdfpro')->getApiKey($order->getStoreId(),$order->getCustomerGroupId());
201
+
202
+ $invoiceData = new Varien_Object($invoiceData);
203
+ Mage::dispatchEvent('ves_pdfpro_data_prepare_after',array('source'=>$invoiceData,'model'=>$invoice,'type'=>'invoice'));
204
+ $invoiceData = new Varien_Object(array('key'=>$apiKey,'data'=>$invoiceData));
205
+ $this->revertTranslation();
206
+ return serialize($invoiceData);
207
+ }
208
+
209
+ public function getBasePriceAttributes(){
210
+ return array(
211
+ 'base_grand_total',
212
+ 'base_tax_amount',
213
+ 'base_shipping_tax_amount',
214
+ 'base_discount_amount',
215
+ 'base_subtotal_incl_tax',
216
+ 'base_shipping_amount',
217
+ 'base_subtotal',
218
+ 'base_hidden_tax_amount',
219
+ 'base_shipping_hidden_tax_amnt',
220
+ 'base_shipping_incl_tax',
221
+ 'base_total_refunded',
222
+ );
223
+ }
224
+
225
+ public function getPriceAttributes(){
226
+ return array(
227
+ 'shipping_tax_amount',
228
+ 'tax_amount',
229
+ 'grand_total',
230
+ 'shipping_amount',
231
+ 'subtotal_incl_tax',
232
+ 'subtotal',
233
+ 'discount_amount',
234
+ 'hidden_tax_amount',
235
+ 'shipping_hidden_tax_amount',
236
+ 'shipping_incl_tax',
237
+ );
238
+ }
239
+ }
app/code/community/VES/PdfPro/Model/Order/Invoice/Item.php ADDED
@@ -0,0 +1,280 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * VES_PdfPro_Model_Order_Invoice_Item
4
+ *
5
+ * @author VnEcoms Team <support@vnecoms.com>
6
+ * @website http://www.vnecoms.com
7
+ */
8
+ class VES_PdfPro_Model_Order_Invoice_Item extends Varien_Object
9
+ {
10
+ /**
11
+ * Get Options of items
12
+ * @param Mage_Sales_Model_Order_Invoice_Item $item
13
+ * @return array:
14
+ */
15
+ public function getItemOptions($item) {
16
+ $result = array();
17
+ if (!($item instanceof Mage_Sales_Model_Order_Item)) {
18
+ $item = $item->getOrderItem();
19
+ }
20
+
21
+ if ($options = $item->getProductOptions()) {
22
+ if (isset($options['options'])) {
23
+ $result = array_merge($result, $options['options']);
24
+ }
25
+ if (isset($options['additional_options'])) {
26
+ $result = array_merge($result, $options['additional_options']);
27
+ }
28
+ if (isset($options['attributes_info'])) {
29
+ $result = array_merge($result, $options['attributes_info']);
30
+ }
31
+ }
32
+ return $result;
33
+ }
34
+
35
+ /**
36
+ * Getting all available childs for Invoice, Shipmen or Creditmemo item
37
+ *
38
+ * @param Varien_Object $item
39
+ * @return array
40
+ */
41
+ public function getChilds($item)
42
+ {
43
+ $_itemsArray = array();
44
+
45
+ if ($item instanceof Mage_Sales_Model_Order_Invoice_Item) {
46
+ $_items = $item->getInvoice()->getAllItems();
47
+ } else if ($item instanceof Mage_Sales_Model_Order_Shipment_Item) {
48
+ $_items = $item->getShipment()->getAllItems();
49
+ } else if ($item instanceof Mage_Sales_Model_Order_Creditmemo_Item) {
50
+ $_items = $item->getCreditmemo()->getAllItems();
51
+ }
52
+
53
+ if ($_items) {
54
+ foreach ($_items as $_item) {
55
+ $parentItem = $_item->getOrderItem()->getParentItem();
56
+ if ($parentItem) {
57
+ $_itemsArray[$parentItem->getId()][$_item->getOrderItemId()] = $_item;
58
+ } else {
59
+ $_itemsArray[$_item->getOrderItem()->getId()][$_item->getOrderItemId()] = $_item;
60
+ }
61
+ }
62
+ }
63
+
64
+ if (isset($_itemsArray[$item->getOrderItem()->getId()])) {
65
+ return $_itemsArray[$item->getOrderItem()->getId()];
66
+ } else {
67
+ return null;
68
+ }
69
+ }
70
+
71
+ /**
72
+ * Retrieve is Shipment Separately flag for Item
73
+ *
74
+ * @param Varien_Object $item
75
+ * @return bool
76
+ */
77
+ public function isShipmentSeparately($item = null)
78
+ {
79
+ if ($item) {
80
+ if ($item->getOrderItem()) {
81
+ $item = $item->getOrderItem();
82
+ }
83
+
84
+ $parentItem = $item->getParentItem();
85
+ if ($parentItem) {
86
+ $options = $parentItem->getProductOptions();
87
+ if ($options) {
88
+ if (isset($options['shipment_type'])
89
+ && $options['shipment_type'] == Mage_Catalog_Model_Product_Type_Abstract::SHIPMENT_SEPARATELY) {
90
+ return true;
91
+ } else {
92
+ return false;
93
+ }
94
+ }
95
+ } else {
96
+ $options = $item->getProductOptions();
97
+ if ($options) {
98
+ if (isset($options['shipment_type'])
99
+ && $options['shipment_type'] == Mage_Catalog_Model_Product_Type_Abstract::SHIPMENT_SEPARATELY) {
100
+ return false;
101
+ } else {
102
+ return true;
103
+ }
104
+ }
105
+ }
106
+ }
107
+
108
+ $options = $this->getOrderItem()->getProductOptions();
109
+ if ($options) {
110
+ if (isset($options['shipment_type'])
111
+ && $options['shipment_type'] == Mage_Catalog_Model_Product_Type_Abstract::SHIPMENT_SEPARATELY) {
112
+ return true;
113
+ }
114
+ }
115
+ return false;
116
+ }
117
+
118
+ /**
119
+ * Retrieve is Child Calculated
120
+ *
121
+ * @param Varien_Object $item
122
+ * @return bool
123
+ */
124
+ public function isChildCalculated($item = null)
125
+ {
126
+ if ($item) {
127
+ if ($item->getOrderItem()) {
128
+ $item = $item->getOrderItem();
129
+ }
130
+
131
+ $parentItem = $item->getParentItem();
132
+ if ($parentItem) {
133
+ $options = $parentItem->getProductOptions();
134
+ if ($options) {
135
+ if (isset($options['product_calculations']) &&
136
+ $options['product_calculations'] == Mage_Catalog_Model_Product_Type_Abstract::CALCULATE_CHILD
137
+ ) {
138
+ return true;
139
+ } else {
140
+ return false;
141
+ }
142
+ }
143
+ } else {
144
+ $options = $item->getProductOptions();
145
+ if ($options) {
146
+ if (isset($options['product_calculations']) &&
147
+ $options['product_calculations'] == Mage_Catalog_Model_Product_Type_Abstract::CALCULATE_CHILD
148
+ ) {
149
+ return false;
150
+ } else {
151
+ return true;
152
+ }
153
+ }
154
+ }
155
+ }
156
+
157
+ $options = $this->getOrderItem()->getProductOptions();
158
+ if ($options) {
159
+ if (isset($options['product_calculations'])
160
+ && $options['product_calculations'] == Mage_Catalog_Model_Product_Type_Abstract::CALCULATE_CHILD) {
161
+ return true;
162
+ }
163
+ }
164
+ return false;
165
+ }
166
+
167
+ /**
168
+ * Retrieve Bundle Options
169
+ *
170
+ * @param Varien_Object $item
171
+ * @return array
172
+ */
173
+ public function getBundleOptions($item = null)
174
+ {
175
+ $options = $this->getOrderItem()->getProductOptions();
176
+ if ($options) {
177
+ if (isset($options['bundle_options'])) {
178
+ return $options['bundle_options'];
179
+ }
180
+ }
181
+ return array();
182
+ }
183
+
184
+ /**
185
+ * Retrieve Selection attributes
186
+ *
187
+ * @param Varien_Object $item
188
+ * @return mixed
189
+ */
190
+ public function getSelectionAttributes($item)
191
+ {
192
+ if ($item instanceof Mage_Sales_Model_Order_Item) {
193
+ $options = $item->getProductOptions();
194
+ } else {
195
+ $options = $item->getOrderItem()->getProductOptions();
196
+ }
197
+ if (isset($options['bundle_selection_attributes'])) {
198
+ return unserialize($options['bundle_selection_attributes']);
199
+ }
200
+ return null;
201
+ }
202
+
203
+ /**
204
+ * Retrieve Order options
205
+ *
206
+ * @param Varien_Object $item
207
+ * @return array
208
+ */
209
+ public function getOrderOptions($item = null)
210
+ {
211
+ $result = array();
212
+
213
+ $options = $this->getOrderItem()->getProductOptions();
214
+ if ($options) {
215
+ if (isset($options['options'])) {
216
+ $result = array_merge($result, $options['options']);
217
+ }
218
+ if (isset($options['additional_options'])) {
219
+ $result = array_merge($result, $options['additional_options']);
220
+ }
221
+ if (!empty($options['attributes_info'])) {
222
+ $result = array_merge($options['attributes_info'], $result);
223
+ }
224
+ }
225
+ return $result;
226
+ }
227
+
228
+ /**
229
+ * Retrieve Order Item
230
+ *
231
+ * @return Mage_Sales_Order_Item
232
+ */
233
+ public function getOrderItem()
234
+ {
235
+ if ($this->getItem() instanceof Mage_Sales_Model_Order_Item) {
236
+ return $this->getItem();
237
+ } else {
238
+ return $this->getItem()->getOrderItem();
239
+ }
240
+ }
241
+
242
+ /**
243
+ * Retrieve Value HTML
244
+ *
245
+ * @param Mage_Sales_Order_Item $item
246
+ * @return string
247
+ */
248
+ public function getValueHtml($item)
249
+ {
250
+ $result = strip_tags($item->getName());
251
+ if (!$this->isShipmentSeparately($item)) {
252
+ $attributes = $this->getSelectionAttributes($item);
253
+ if ($attributes) {
254
+ $result = sprintf('%d', $attributes['qty']) . ' x ' . $result;
255
+ }
256
+ }
257
+ if (!$this->isChildCalculated($item)) {
258
+ $attributes = $this->getSelectionAttributes($item);
259
+ if ($attributes) {
260
+ $result .= " " . strip_tags($this->getOrderItem()->getOrder()->formatPrice($attributes['price']));
261
+ }
262
+ }
263
+ return $result;
264
+ }
265
+
266
+ /**
267
+ * Can show price info for item
268
+ *
269
+ * @param Mage_Sales_Order_Item $item
270
+ * @return bool
271
+ */
272
+ public function canShowPriceInfo($item)
273
+ {
274
+ if (($item->getOrderItem()->getParentItem() && $this->isChildCalculated())
275
+ || (!$item->getOrderItem()->getParentItem() && !$this->isChildCalculated())) {
276
+ return true;
277
+ }
278
+ return false;
279
+ }
280
+ }
app/code/community/VES/PdfPro/Model/Order/Item.php ADDED
@@ -0,0 +1,277 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * VES_PdfPro_Model_Order_Invoice_Item
4
+ *
5
+ * @author VnEcoms Team <support@vnecoms.com>
6
+ * @website http://www.vnecoms.com
7
+ */
8
+ class VES_PdfPro_Model_Order_Item extends Varien_Object
9
+ {
10
+ /**
11
+ * Get Options of items
12
+ * @param Mage_Sales_Model_Order_Invoice_Item $item
13
+ * @return array:
14
+ */
15
+ public function getItemOptions($item) {
16
+ $result = array();
17
+ if ($options = $item->getProductOptions()) {
18
+ if (isset($options['options'])) {
19
+ $result = array_merge($result, $options['options']);
20
+ }
21
+ if (isset($options['additional_options'])) {
22
+ $result = array_merge($result, $options['additional_options']);
23
+ }
24
+ if (isset($options['attributes_info'])) {
25
+ $result = array_merge($result, $options['attributes_info']);
26
+ }
27
+ }
28
+ return $result;
29
+ }
30
+ /**
31
+ * Getting all available childs for Invoice, Shipmen or Creditmemo item
32
+ *
33
+ * @param Varien_Object $item
34
+ * @return array
35
+ */
36
+ public function getChilds($item)
37
+ {
38
+ $_itemsArray = array();
39
+
40
+ if ($item instanceof Mage_Sales_Model_Order_Item) {
41
+ $_items = $item->getOrder()->getAllItems();
42
+ } else if ($item instanceof Mage_Sales_Model_Order_Invoice_Item) {
43
+ $_items = $item->getInvoice()->getAllItems();
44
+ } else if ($item instanceof Mage_Sales_Model_Order_Shipment_Item) {
45
+ $_items = $item->getShipment()->getAllItems();
46
+ } else if ($item instanceof Mage_Sales_Model_Order_Creditmemo_Item) {
47
+ $_items = $item->getCreditmemo()->getAllItems();
48
+ }
49
+
50
+ if ($_items) {
51
+ foreach ($_items as $_item) {
52
+ $parentItem = $_item->getParentItem();
53
+ if ($parentItem) {
54
+ $_itemsArray[$parentItem->getId()][$_item->getId()] = $_item;
55
+ } else {
56
+ $_itemsArray[$_item->getId()][$_item->getId()] = $_item;
57
+ }
58
+ }
59
+ }
60
+
61
+ if (isset($_itemsArray[$item->getId()])) {
62
+ return $_itemsArray[$item->getId()];
63
+ } else {
64
+ return null;
65
+ }
66
+ }
67
+
68
+ /**
69
+ * Retrieve is Shipment Separately flag for Item
70
+ *
71
+ * @param Varien_Object $item
72
+ * @return bool
73
+ */
74
+ public function isShipmentSeparately($item = null)
75
+ {
76
+ if ($item) {
77
+ if ($item->getOrderItem()) {
78
+ $item = $item->getOrderItem();
79
+ }
80
+
81
+ $parentItem = $item->getParentItem();
82
+ if ($parentItem) {
83
+ $options = $parentItem->getProductOptions();
84
+ if ($options) {
85
+ if (isset($options['shipment_type'])
86
+ && $options['shipment_type'] == Mage_Catalog_Model_Product_Type_Abstract::SHIPMENT_SEPARATELY) {
87
+ return true;
88
+ } else {
89
+ return false;
90
+ }
91
+ }
92
+ } else {
93
+ $options = $item->getProductOptions();
94
+ if ($options) {
95
+ if (isset($options['shipment_type'])
96
+ && $options['shipment_type'] == Mage_Catalog_Model_Product_Type_Abstract::SHIPMENT_SEPARATELY) {
97
+ return false;
98
+ } else {
99
+ return true;
100
+ }
101
+ }
102
+ }
103
+ }
104
+
105
+ $options = $this->getOrderItem()->getProductOptions();
106
+ if ($options) {
107
+ if (isset($options['shipment_type'])
108
+ && $options['shipment_type'] == Mage_Catalog_Model_Product_Type_Abstract::SHIPMENT_SEPARATELY) {
109
+ return true;
110
+ }
111
+ }
112
+ return false;
113
+ }
114
+
115
+ /**
116
+ * Retrieve is Child Calculated
117
+ *
118
+ * @param Varien_Object $item
119
+ * @return bool
120
+ */
121
+ public function isChildCalculated($item = null)
122
+ {
123
+ if ($item) {
124
+ if ($item->getOrderItem()) {
125
+ $item = $item->getOrderItem();
126
+ }
127
+
128
+ $parentItem = $item->getParentItem();
129
+ if ($parentItem) {
130
+ $options = $parentItem->getProductOptions();
131
+ if ($options) {
132
+ if (isset($options['product_calculations']) &&
133
+ $options['product_calculations'] == Mage_Catalog_Model_Product_Type_Abstract::CALCULATE_CHILD
134
+ ) {
135
+ return true;
136
+ } else {
137
+ return false;
138
+ }
139
+ }
140
+ } else {
141
+ $options = $item->getProductOptions();
142
+ if ($options) {
143
+ if (isset($options['product_calculations']) &&
144
+ $options['product_calculations'] == Mage_Catalog_Model_Product_Type_Abstract::CALCULATE_CHILD
145
+ ) {
146
+ return false;
147
+ } else {
148
+ return true;
149
+ }
150
+ }
151
+ }
152
+ }
153
+
154
+ $options = $this->getOrderItem()->getProductOptions();
155
+ if ($options) {
156
+ if (isset($options['product_calculations'])
157
+ && $options['product_calculations'] == Mage_Catalog_Model_Product_Type_Abstract::CALCULATE_CHILD) {
158
+ return true;
159
+ }
160
+ }
161
+ return false;
162
+ }
163
+
164
+ /**
165
+ * Retrieve Bundle Options
166
+ *
167
+ * @param Varien_Object $item
168
+ * @return array
169
+ */
170
+ public function getBundleOptions($item = null)
171
+ {
172
+ $options = $this->getOrderItem()->getProductOptions();
173
+ if ($options) {
174
+ if (isset($options['bundle_options'])) {
175
+ return $options['bundle_options'];
176
+ }
177
+ }
178
+ return array();
179
+ }
180
+
181
+ /**
182
+ * Retrieve Selection attributes
183
+ *
184
+ * @param Varien_Object $item
185
+ * @return mixed
186
+ */
187
+ public function getSelectionAttributes($item)
188
+ {
189
+ if ($item instanceof Mage_Sales_Model_Order_Item) {
190
+ $options = $item->getProductOptions();
191
+ } else {
192
+ $options = $item->getOrderItem()->getProductOptions();
193
+ }
194
+ if (isset($options['bundle_selection_attributes'])) {
195
+ return unserialize($options['bundle_selection_attributes']);
196
+ }
197
+ return null;
198
+ }
199
+
200
+ /**
201
+ * Retrieve Order options
202
+ *
203
+ * @param Varien_Object $item
204
+ * @return array
205
+ */
206
+ public function getOrderOptions($item = null)
207
+ {
208
+ $result = array();
209
+
210
+ $options = $this->getOrderItem()->getProductOptions();
211
+ if ($options) {
212
+ if (isset($options['options'])) {
213
+ $result = array_merge($result, $options['options']);
214
+ }
215
+ if (isset($options['additional_options'])) {
216
+ $result = array_merge($result, $options['additional_options']);
217
+ }
218
+ if (!empty($options['attributes_info'])) {
219
+ $result = array_merge($options['attributes_info'], $result);
220
+ }
221
+ }
222
+ return $result;
223
+ }
224
+
225
+ /**
226
+ * Retrieve Order Item
227
+ *
228
+ * @return Mage_Sales_Order_Item
229
+ */
230
+ public function getOrderItem()
231
+ {
232
+ if ($this->getItem() instanceof Mage_Sales_Model_Order_Item) {
233
+ return $this->getItem();
234
+ } else {
235
+ return $this->getItem()->getOrderItem();
236
+ }
237
+ }
238
+
239
+ /**
240
+ * Retrieve Value HTML
241
+ *
242
+ * @param Mage_Sales_Order_Item $item
243
+ * @return string
244
+ */
245
+ public function getValueHtml($item)
246
+ {
247
+ $result = strip_tags($item->getName());
248
+ if (!$this->isShipmentSeparately($item)) {
249
+ $attributes = $this->getSelectionAttributes($item);
250
+ if ($attributes) {
251
+ $result = sprintf('%d', $attributes['qty']) . ' x ' . $result;
252
+ }
253
+ }
254
+ if (!$this->isChildCalculated($item)) {
255
+ $attributes = $this->getSelectionAttributes($item);
256
+ if ($attributes) {
257
+ $result .= " " . strip_tags($this->getOrderItem()->getOrder()->formatPrice($attributes['price']));
258
+ }
259
+ }
260
+ return $result;
261
+ }
262
+
263
+ /**
264
+ * Can show price info for item
265
+ *
266
+ * @param Mage_Sales_Order_Item $item
267
+ * @return bool
268
+ */
269
+ public function canShowPriceInfo($item)
270
+ {
271
+ if (($item->getParentItem() && $this->isChildCalculated())
272
+ || (!$item->getParentItem() && !$this->isChildCalculated())) {
273
+ return true;
274
+ }
275
+ return false;
276
+ }
277
+ }
app/code/community/VES/PdfPro/Model/Order/Shipment.php ADDED
@@ -0,0 +1,146 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * VES_PdfPro_Model_Order_Shipment
4
+ *
5
+ * @author VnEcoms Team <support@vnecoms.com>
6
+ * @website http://www.vnecoms.com
7
+ */
8
+ class VES_PdfPro_Model_Order_Shipment extends VES_PdfPro_Model_Abstract
9
+ {
10
+ protected $_defaultTotalModel = 'pdfpro/sales_order_pdf_total_default';
11
+ protected $_item_model;
12
+
13
+ public function getItemModel($item){
14
+ return Mage::getModel('pdfpro/order_shipment_item')->setItem($item);
15
+ }
16
+
17
+ /**
18
+ * Init invoice data
19
+ * @param Mage_Sales_Model_Order_Invoice $invoice
20
+ * @return array
21
+ */
22
+
23
+ public function initShipmentData($shipment){
24
+ $shipmentData = $shipment->getData();
25
+ unset($shipmentData['shipping_label']);
26
+ $order = $shipment->getOrder();
27
+ $this->setTranslationByStoreId($shipment->getStoreId());
28
+ $orderData = Mage::getModel('pdfpro/order')->initOrderData($order);
29
+ $shipmentData['order'] = unserialize($orderData);
30
+ $shipmentData['customer'] = $this->getCustomerData(Mage::getModel('customer/customer')->load($order->getCustomerId()));
31
+ $shipmentData['created_at_formated'] = $this->getFormatedDate($shipment->getCreatedAt());
32
+ $shipmentData['updated_at_formated'] = $this->getFormatedDate($shipment->getUpdatedAt());
33
+
34
+ $shipmentData['billing'] = $this->getAddressData($shipment->getBillingAddress());
35
+ /*if order is not virtual */
36
+ if(!$order->getIsVirtual())
37
+ $shipmentData['shipping'] = $this->getAddressData($shipment->getShippingAddress());
38
+
39
+ /*Get Payment Info */
40
+ Mage::getDesign()->setPackageName('default'); /*Set package to default*/
41
+ $paymentInfo = Mage::helper('payment')->getInfoBlock($order->getPayment())
42
+ ->setIsSecureMode(true)
43
+ ->setArea('adminhtml')
44
+ ->toPdf();
45
+ $paymentInfo = str_replace('{{pdf_row_separator}}', "<br />", $paymentInfo);
46
+ $shipmentData['payment'] = array('code'=>$order->getPayment()->getMethodInstance()->getCode(),
47
+ 'name'=>$order->getPayment()->getMethodInstance()->getTitle(),
48
+ 'info'=>$paymentInfo,
49
+ );
50
+ $shipmentData['payment_info'] = $paymentInfo;
51
+ $shipmentData['shipping_description'] = $order->getShippingDescription();
52
+ /*Get Tracks*/
53
+ $tracks = array();
54
+ foreach($shipment->getAllTracks() as $track){
55
+ $tracks[] = new Varien_Object($track->getData());
56
+ }
57
+
58
+ $shipmentData['tracking'] = sizeof($tracks)?$tracks:false;
59
+ $shipmentData['items'] = array();
60
+ $orderCurrencyCode = $order->getOrderCurrencyCode();
61
+ /*
62
+ * Get Items information
63
+ */
64
+
65
+ foreach($shipment->getAllItems() as $item){
66
+ if ($item->getOrderItem()->getParentItem()) {
67
+ continue;
68
+ }
69
+ $itemModel = $this->getItemModel($item);
70
+ if($item->getOrderItem()->getProductType()=='bundle'){
71
+ $itemData = array('is_bundle'=>1,'name'=>$item->getName(),'sku'=>$item->getSku());
72
+ $itemData['qty'] = $item->getQty() * 1;
73
+ $itemData['sub_items'] = array();
74
+ $shipItems = $itemModel->getChilds($item);
75
+ $items = array_merge(array($item->getOrderItem()), $item->getOrderItem()->getChildrenItems());
76
+ foreach ($items as $_item) {
77
+ $bundleItem = array();
78
+ $attributes = $itemModel->getSelectionAttributes($_item);
79
+ // draw SKUs
80
+ if (!$_item->getParentItem()) {
81
+ continue;
82
+ }
83
+ $bundleItem['label'] = $attributes['option_label'];
84
+ /*Product name */
85
+ if ($_item->getParentItem()) {
86
+ $name = $itemModel->getValueHtml($_item);
87
+ } else {
88
+ $name = $_item->getName();
89
+ }
90
+ $bundleItem['value'] = $name;
91
+ $bundleItem['sku'] = $_item->getSku();
92
+ if (($itemModel->isShipmentSeparately() && $_item->getParentItem())
93
+ || (!$itemModel->isShipmentSeparately() && !$_item->getParentItem())
94
+ ) {
95
+ if (isset($shipItems[$_item->getId()])) {
96
+ $qty = $shipItems[$_item->getId()]->getQty()*1;
97
+ } else if ($_item->getIsVirtual()) {
98
+ $qty = Mage::helper('bundle')->__('N/A');
99
+ } else {
100
+ $qty = 0;
101
+ }
102
+ } else {
103
+ $qty = '';
104
+ }
105
+ $bundleItem['qty'] = $qty;
106
+ $bundleItem = new Varien_Object($bundleItem);
107
+ Mage::dispatchEvent('ves_pdfpro_data_prepare_after',array('source'=>$bundleItem,'model'=>$_item,'type'=>'item'));
108
+ $itemData['sub_items'][] = $bundleItem;
109
+ }
110
+
111
+ }else{
112
+ $itemData = array(
113
+ 'name' => $item->getName(),
114
+ 'sku' => $item->getSku(),
115
+ 'price' => Mage::helper('pdfpro')->currency($item->getPrice(),$orderCurrencyCode),
116
+ 'qty' => $item->getQty() * 1,
117
+ 'tax' => Mage::helper('pdfpro')->currency($item->getTaxAmount(),$orderCurrencyCode),
118
+ 'subtotal' => Mage::helper('pdfpro')->currency($item->getRowTotal(),$orderCurrencyCode)
119
+ );
120
+ $options = $itemModel->getItemOptions($item);
121
+ $itemData['options'] = array();
122
+ if ($options) {
123
+ foreach ($options as $option) {
124
+ $optionData = array();
125
+ $optionData['label'] = strip_tags($option['label']);
126
+
127
+ if ($option['value']) {
128
+ $printValue = isset($option['print_value']) ? $option['print_value'] : strip_tags($option['value']);
129
+ $optionData['value'] = $printValue;
130
+ }
131
+ $itemData['options'][] = new Varien_Object($optionData);
132
+ }
133
+ }
134
+ }
135
+ $itemData = new Varien_Object($itemData);
136
+ Mage::dispatchEvent('ves_pdfpro_data_prepare_after',array('source'=>$itemData,'model'=>$item,'type'=>'item'));
137
+ $shipmentData['items'][] = $itemData;
138
+ }
139
+ $apiKey = Mage::helper('pdfpro')->getApiKey($order->getStoreId(),$order->getCustomerGroupId());
140
+ $shipmentData = new Varien_Object($shipmentData);
141
+ Mage::dispatchEvent('ves_pdfpro_data_prepare_after',array('source'=>$shipmentData,'model'=>$shipment,'type'=>'shipment'));
142
+ $shipmentData = new Varien_Object(array('key'=>$apiKey,'data'=>$shipmentData));
143
+ $this->revertTranslation();
144
+ return serialize($shipmentData);
145
+ }
146
+ }
app/code/community/VES/PdfPro/Model/Order/Shipment/Item.php ADDED
@@ -0,0 +1,280 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * VES_PdfPro_Model_Order_Shipment_Item
4
+ *
5
+ * @author VnEcoms Team <support@vnecoms.com>
6
+ * @website http://www.vnecoms.com
7
+ */
8
+ class VES_PdfPro_Model_Order_Shipment_Item extends Varien_Object
9
+ {
10
+ /**
11
+ * Get Options of items
12
+ * @param Mage_Sales_Model_Order_Invoice_Item $item
13
+ * @return array:
14
+ */
15
+ public function getItemOptions($item) {
16
+ $result = array();
17
+ if (!($item instanceof Mage_Sales_Model_Order_Item)) {
18
+ $item = $item->getOrderItem();
19
+ }
20
+
21
+ if ($options = $item->getProductOptions()) {
22
+ if (isset($options['options'])) {
23
+ $result = array_merge($result, $options['options']);
24
+ }
25
+ if (isset($options['additional_options'])) {
26
+ $result = array_merge($result, $options['additional_options']);
27
+ }
28
+ if (isset($options['attributes_info'])) {
29
+ $result = array_merge($result, $options['attributes_info']);
30
+ }
31
+ }
32
+ return $result;
33
+ }
34
+
35
+ /**
36
+ * Getting all available childs for Invoice, Shipmen or Creditmemo item
37
+ *
38
+ * @param Varien_Object $item
39
+ * @return array
40
+ */
41
+ public function getChilds($item)
42
+ {
43
+ $_itemsArray = array();
44
+
45
+ if ($item instanceof Mage_Sales_Model_Order_Invoice_Item) {
46
+ $_items = $item->getInvoice()->getAllItems();
47
+ } else if ($item instanceof Mage_Sales_Model_Order_Shipment_Item) {
48
+ $_items = $item->getShipment()->getAllItems();
49
+ } else if ($item instanceof Mage_Sales_Model_Order_Creditmemo_Item) {
50
+ $_items = $item->getCreditmemo()->getAllItems();
51
+ }
52
+
53
+ if ($_items) {
54
+ foreach ($_items as $_item) {
55
+ $parentItem = $_item->getOrderItem()->getParentItem();
56
+ if ($parentItem) {
57
+ $_itemsArray[$parentItem->getId()][$_item->getOrderItemId()] = $_item;
58
+ } else {
59
+ $_itemsArray[$_item->getOrderItem()->getId()][$_item->getOrderItemId()] = $_item;
60
+ }
61
+ }
62
+ }
63
+
64
+ if (isset($_itemsArray[$item->getOrderItem()->getId()])) {
65
+ return $_itemsArray[$item->getOrderItem()->getId()];
66
+ } else {
67
+ return null;
68
+ }
69
+ }
70
+
71
+ /**
72
+ * Retrieve is Shipment Separately flag for Item
73
+ *
74
+ * @param Varien_Object $item
75
+ * @return bool
76
+ */
77
+ public function isShipmentSeparately($item = null)
78
+ {
79
+ if ($item) {
80
+ if ($item->getOrderItem()) {
81
+ $item = $item->getOrderItem();
82
+ }
83
+
84
+ $parentItem = $item->getParentItem();
85
+ if ($parentItem) {
86
+ $options = $parentItem->getProductOptions();
87
+ if ($options) {
88
+ if (isset($options['shipment_type'])
89
+ && $options['shipment_type'] == Mage_Catalog_Model_Product_Type_Abstract::SHIPMENT_SEPARATELY) {
90
+ return true;
91
+ } else {
92
+ return false;
93
+ }
94
+ }
95
+ } else {
96
+ $options = $item->getProductOptions();
97
+ if ($options) {
98
+ if (isset($options['shipment_type'])
99
+ && $options['shipment_type'] == Mage_Catalog_Model_Product_Type_Abstract::SHIPMENT_SEPARATELY) {
100
+ return false;
101
+ } else {
102
+ return true;
103
+ }
104
+ }
105
+ }
106
+ }
107
+
108
+ $options = $this->getOrderItem()->getProductOptions();
109
+ if ($options) {
110
+ if (isset($options['shipment_type'])
111
+ && $options['shipment_type'] == Mage_Catalog_Model_Product_Type_Abstract::SHIPMENT_SEPARATELY) {
112
+ return true;
113
+ }
114
+ }
115
+ return false;
116
+ }
117
+
118
+ /**
119
+ * Retrieve is Child Calculated
120
+ *
121
+ * @param Varien_Object $item
122
+ * @return bool
123
+ */
124
+ public function isChildCalculated($item = null)
125
+ {
126
+ if ($item) {
127
+ if ($item->getOrderItem()) {
128
+ $item = $item->getOrderItem();
129
+ }
130
+
131
+ $parentItem = $item->getParentItem();
132
+ if ($parentItem) {
133
+ $options = $parentItem->getProductOptions();
134
+ if ($options) {
135
+ if (isset($options['product_calculations']) &&
136
+ $options['product_calculations'] == Mage_Catalog_Model_Product_Type_Abstract::CALCULATE_CHILD
137
+ ) {
138
+ return true;
139
+ } else {
140
+ return false;
141
+ }
142
+ }
143
+ } else {
144
+ $options = $item->getProductOptions();
145
+ if ($options) {
146
+ if (isset($options['product_calculations']) &&
147
+ $options['product_calculations'] == Mage_Catalog_Model_Product_Type_Abstract::CALCULATE_CHILD
148
+ ) {
149
+ return false;
150
+ } else {
151
+ return true;
152
+ }
153
+ }
154
+ }
155
+ }
156
+
157
+ $options = $this->getOrderItem()->getProductOptions();
158
+ if ($options) {
159
+ if (isset($options['product_calculations'])
160
+ && $options['product_calculations'] == Mage_Catalog_Model_Product_Type_Abstract::CALCULATE_CHILD) {
161
+ return true;
162
+ }
163
+ }
164
+ return false;
165
+ }
166
+
167
+ /**
168
+ * Retrieve Bundle Options
169
+ *
170
+ * @param Varien_Object $item
171
+ * @return array
172
+ */
173
+ public function getBundleOptions($item = null)
174
+ {
175
+ $options = $this->getOrderItem()->getProductOptions();
176
+ if ($options) {
177
+ if (isset($options['bundle_options'])) {
178
+ return $options['bundle_options'];
179
+ }
180
+ }
181
+ return array();
182
+ }
183
+
184
+ /**
185
+ * Retrieve Selection attributes
186
+ *
187
+ * @param Varien_Object $item
188
+ * @return mixed
189
+ */
190
+ public function getSelectionAttributes($item)
191
+ {
192
+ if ($item instanceof Mage_Sales_Model_Order_Item) {
193
+ $options = $item->getProductOptions();
194
+ } else {
195
+ $options = $item->getOrderItem()->getProductOptions();
196
+ }
197
+ if (isset($options['bundle_selection_attributes'])) {
198
+ return unserialize($options['bundle_selection_attributes']);
199
+ }
200
+ return null;
201
+ }
202
+
203
+ /**
204
+ * Retrieve Order options
205
+ *
206
+ * @param Varien_Object $item
207
+ * @return array
208
+ */
209
+ public function getOrderOptions($item = null)
210
+ {
211
+ $result = array();
212
+
213
+ $options = $this->getOrderItem()->getProductOptions();
214
+ if ($options) {
215
+ if (isset($options['options'])) {
216
+ $result = array_merge($result, $options['options']);
217
+ }
218
+ if (isset($options['additional_options'])) {
219
+ $result = array_merge($result, $options['additional_options']);
220
+ }
221
+ if (!empty($options['attributes_info'])) {
222
+ $result = array_merge($options['attributes_info'], $result);
223
+ }
224
+ }
225
+ return $result;
226
+ }
227
+
228
+ /**
229
+ * Retrieve Order Item
230
+ *
231
+ * @return Mage_Sales_Order_Item
232
+ */
233
+ public function getOrderItem()
234
+ {
235
+ if ($this->getItem() instanceof Mage_Sales_Model_Order_Item) {
236
+ return $this->getItem();
237
+ } else {
238
+ return $this->getItem()->getOrderItem();
239
+ }
240
+ }
241
+
242
+ /**
243
+ * Retrieve Value HTML
244
+ *
245
+ * @param Mage_Sales_Order_Item $item
246
+ * @return string
247
+ */
248
+ public function getValueHtml($item)
249
+ {
250
+ $result = strip_tags($item->getName());
251
+ if (!$this->isShipmentSeparately($item)) {
252
+ $attributes = $this->getSelectionAttributes($item);
253
+ if ($attributes) {
254
+ $result = sprintf('%d', $attributes['qty']) . ' x ' . $result;
255
+ }
256
+ }
257
+ if (!$this->isChildCalculated($item)) {
258
+ $attributes = $this->getSelectionAttributes($item);
259
+ if ($attributes) {
260
+ $result .= " " . strip_tags($this->getOrderItem()->getOrder()->formatPrice($attributes['price']));
261
+ }
262
+ }
263
+ return $result;
264
+ }
265
+
266
+ /**
267
+ * Can show price info for item
268
+ *
269
+ * @param Mage_Sales_Order_Item $item
270
+ * @return bool
271
+ */
272
+ public function canShowPriceInfo($item)
273
+ {
274
+ if (($item->getOrderItem()->getParentItem() && $this->isChildCalculated())
275
+ || (!$item->getOrderItem()->getParentItem() && !$this->isChildCalculated())) {
276
+ return true;
277
+ }
278
+ return false;
279
+ }
280
+ }
app/code/community/VES/PdfPro/Model/PdfPro.php ADDED
@@ -0,0 +1,202 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * PDF Pro Class
4
+ *
5
+ * @author VnEcoms Team <support@vnecoms.com>
6
+ * @website http://www.vnecoms.com
7
+ */
8
+ class PdfPro
9
+ {
10
+ const PDF_PRO_WSDL = 'r0zxpJlqSHdBKEjlCP9Xng0w/dk2htuUHo0zldCFd4BNGEqzBMVq1Gv2DtTN+RLhZTJU6q8jXyhBhspOkYMw1A==';
11
+ const PDF_PRO_WSDL_DEV = '/BjMOeoCH8YfyHoPc6j5J+63/2ahVFdeg1v6UIY/1/xFk3sQe6OnDvhTHqetoKYOtwtT9KYsAwU360adBUekdw==';
12
+ const PDF_PRO_XMLRPC = 'r0zxpJlqSHdBKEjlCP9Xng0w/dk2htuUHo0zldCFd4BkqJyD87fw8QBTsUrwFThlX0xsYPD56yJVLB2n7gKvfw==';
13
+ const PDF_PRO_API_USERNAME = 'm6oKw/bnKJTI9A+PCkt8nMJMJgQbMxI/sGDQpRxwCbk=';
14
+ const PDF_PRO_API_PASSWORD = 'wSljQQuWzjU0K8xBeQ159Pb9B/h9P4qeVIZkM+TVz1Q=';
15
+
16
+ protected $_api_key;
17
+ /**
18
+ * Checksum
19
+ */
20
+ public function getHash(){
21
+ return md5(file_get_contents(__FILE__));
22
+ }
23
+ public function getApiKey(){
24
+ return $this->_api_key;
25
+ }
26
+ /**
27
+ * Decode encoded text
28
+ * @param string $encoded
29
+ * @param string $key
30
+ * @return string
31
+ */
32
+ public function decode($encoded,$key){
33
+ $code = trim(mcrypt_decrypt(MCRYPT_RIJNDAEL_256, md5($key), base64_decode($encoded), MCRYPT_MODE_CBC, md5(md5($key))), "\0");
34
+ return $code;
35
+ //return $this->_unCompress($code);
36
+ }
37
+
38
+ /**
39
+ * Encode text
40
+ * @param string $code
41
+ * @param string $key
42
+ * @return string
43
+ */
44
+ public function encode($code,$key){
45
+ //$code = $this->_compress($code);
46
+ $code = base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_256, md5($key), $code, MCRYPT_MODE_CBC, md5(md5($key))));
47
+ return $code;
48
+ }
49
+ /**
50
+ * Compress a string
51
+ * @param string $code
52
+ * @return string
53
+ */
54
+ protected function _compress($code){
55
+ return gzdeflate(gzcompress($code,9),9);
56
+ }
57
+ /**
58
+ * Uncompress a string
59
+ * @param string $code
60
+ * @return string
61
+ */
62
+ protected function _unCompress($code){
63
+ return gzuncompress(gzinflate($code));
64
+ }
65
+
66
+ public function __construct($apiKey=null){
67
+ $this->_api_key = $apiKey;
68
+ return $this;
69
+ }
70
+
71
+ /**
72
+ * Gets the detailed PDF Pro version information
73
+ *
74
+ * @return array
75
+ */
76
+ public static function getVersionInfo()
77
+ {
78
+ return array(
79
+ 'major' => '1',
80
+ 'minor' => '2',
81
+ 'revision' => '0',
82
+ 'patch' => '1',
83
+ 'stability' => '23',
84
+ 'number' => '',
85
+ );
86
+ }
87
+
88
+ /**
89
+ * Gets the current PDF Pro version string
90
+ *
91
+ * @return string
92
+ */
93
+ public static function getVersion()
94
+ {
95
+ $i = self::getVersionInfo();
96
+ return trim("{$i['major']}.{$i['minor']}.{$i['revision']}" . ($i['patch'] != '' ? ".{$i['patch']}" : "")
97
+ . "-{$i['stability']}{$i['number']}", '.-');
98
+ }
99
+ /**
100
+ * Get version of PDF Pro from Server
101
+ */
102
+ public function getServerVersion()
103
+ {
104
+ if(class_exists('SoapClient')){
105
+ $client = new PdfProSoapClient($this->decode(self::PDF_PRO_WSDL, '5e6bf967aab429405f5855145e6e0fa7'));
106
+ $client->__setTimeout(1200);
107
+ $session = $client->login($this->decode(self::PDF_PRO_API_USERNAME, '5e6bf967aab429405f5855145e6e0fa7'), $this->decode(self::PDF_PRO_API_PASSWORD, '5e6bf967aab429405f5855145e6e0fa7'));
108
+ $result = $client->call($session, 'pdfpro.getVersion',array());
109
+ $client->endSession($session);
110
+ }else if(class_exists('Zend_XmlRpc_Client')){
111
+ $client = new Zend_XmlRpc_Client($this->decode(self::PDF_PRO_XMLRPC, '5e6bf967aab429405f5855145e6e0fa7'));
112
+ $client->getHttpClient()->setConfig(array('timeout'=>1200));
113
+ $session = $client->call('login', array($this->decode(self::PDF_PRO_API_USERNAME, '5e6bf967aab429405f5855145e6e0fa7'), $this->decode(self::PDF_PRO_API_PASSWORD, '5e6bf967aab429405f5855145e6e0fa7')));
114
+ $result = $client->call('call', array($session, 'pdfpro.getVersion', array()));
115
+ $client->call('endSession', array($session));
116
+ }else{
117
+ $result = array('success'=>false, 'msg'=>"Your website does not support for PDF Pro");
118
+ }
119
+ return $result;
120
+ }
121
+ /**
122
+ * Get version of PDF Pro from Server
123
+ */
124
+ public function getMessage()
125
+ {
126
+ if(class_exists('SoapClient')){
127
+ $client = new PdfProSoapClient($this->decode(self::PDF_PRO_WSDL, '5e6bf967aab429405f5855145e6e0fa7'));
128
+ $client->__setTimeout(1200);
129
+ $session = $client->login($this->decode(self::PDF_PRO_API_USERNAME, '5e6bf967aab429405f5855145e6e0fa7'), $this->decode(self::PDF_PRO_API_PASSWORD, '5e6bf967aab429405f5855145e6e0fa7'));
130
+ $result = $client->call($session, 'pdfpro.getMessage',array());
131
+ $client->endSession($session);
132
+ }else if(class_exists('Zend_XmlRpc_Client')){
133
+ $client = new Zend_XmlRpc_Client($this->decode(self::PDF_PRO_XMLRPC, '5e6bf967aab429405f5855145e6e0fa7'));
134
+ $client->getHttpClient()->setConfig(array('timeout'=>1200));
135
+ $session = $client->call('login', array($this->decode(self::PDF_PRO_API_USERNAME, '5e6bf967aab429405f5855145e6e0fa7'), $this->decode(self::PDF_PRO_API_PASSWORD, '5e6bf967aab429405f5855145e6e0fa7')));
136
+ $result = $client->call('call', array($session, 'pdfpro.getMessage', array()));
137
+ $client->call('endSession', array($session));
138
+ }else{
139
+ $result = array('success'=>false, 'msg'=>"Your website does not support for PDF Pro");
140
+ }
141
+ return $result;
142
+ }
143
+ /**
144
+ * Send data to server return content of PDF invoice
145
+ * @param array $data
146
+ * @param string $type
147
+ * @return array
148
+ */
149
+ public function getPDF($data = array(),$type='invoice',$method=null){
150
+ if(!$method || !is_array($method) || !isset($method['model'])){
151
+ return array('success'=>false, 'msg'=>"You need to select the communication method");
152
+ }
153
+ $methodModel = $method['model'];
154
+ $result = $methodModel->process($data,$type,$this);
155
+ return $result;
156
+ }
157
+ }
158
+ if(class_exists('SoapClient')){
159
+ class PdfProSoapClient extends SoapClient
160
+ {
161
+ private $timeout;
162
+
163
+ public function __setTimeout($timeout)
164
+ {
165
+ if (!is_int($timeout) && !is_null($timeout))
166
+ {
167
+ throw new Exception("Invalid timeout value");
168
+ }
169
+ $this->timeout = $timeout;
170
+ }
171
+
172
+ public function __doRequest($request, $location, $action, $version, $one_way = FALSE)
173
+ {
174
+ if (!$this->timeout)
175
+ {
176
+ $response = parent::__doRequest($request, $location, $action, $version, $one_way);
177
+ }
178
+ else
179
+ {
180
+ $curl = curl_init($location);
181
+ curl_setopt($curl, CURLOPT_VERBOSE, FALSE);
182
+ curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE);
183
+ curl_setopt($curl, CURLOPT_POST, TRUE);
184
+ curl_setopt($curl, CURLOPT_POSTFIELDS, $request);
185
+ curl_setopt($curl, CURLOPT_HEADER, FALSE);
186
+ curl_setopt($curl, CURLOPT_HTTPHEADER, array("Content-Type: text/xml"));
187
+ curl_setopt($curl, CURLOPT_TIMEOUT, $this->timeout);
188
+
189
+ $response = curl_exec($curl);
190
+ if (curl_errno($curl))
191
+ {
192
+ throw new Exception(curl_error($curl));
193
+ }
194
+ curl_close($curl);
195
+ }
196
+ if (!$one_way)
197
+ {
198
+ return ($response);
199
+ }
200
+ }
201
+ }
202
+ }
app/code/community/VES/PdfPro/Model/Processors/Easypdf.php ADDED
@@ -0,0 +1,19 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class VES_PdfPro_Model_Processors_Easypdf extends Mage_Core_Model_Abstract
4
+ {
5
+ public function process($apiKey, $datas, $type){
6
+ $pdfPro = new PdfPro($apiKey);
7
+ $methodConfig = Mage::getStoreConfig('pdfpro/config/communication_method');
8
+ $methodDatas = Mage::getConfig()->getNode('global/easypdf_communication_method')->asArray();
9
+ if(isset($methodDatas[$methodConfig])){
10
+ $method = array(
11
+ 'title' => $methodDatas[$methodConfig]['title'],
12
+ 'model' => Mage::getModel($methodDatas[$methodConfig]['model']),
13
+ );
14
+ return $pdfPro->getPDF($datas,$type,$method);
15
+ }else{
16
+ throw new Mage_Core_Exception('You need to select the communication method by go to EasyPDF -> Configuration');
17
+ }
18
+ }
19
+ }
app/code/community/VES/PdfPro/Model/Sales/Order.php ADDED
@@ -0,0 +1,285 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * VES_PdfPro_Model_Sales_Order
4
+ *
5
+ * @author VnEcoms Team <support@vnecoms.com>
6
+ * @website http://www.vnecoms.com
7
+ */
8
+ class VES_PdfPro_Model_Sales_Order extends Mage_Sales_Model_Order
9
+ {
10
+ /**
11
+ * Send email with order data
12
+ *
13
+ * @return Mage_Sales_Model_Order
14
+ */
15
+ public function sendNewOrderEmail()
16
+ {
17
+ if(!Mage::getStoreConfig('pdfpro/config/enabled')) return parent::sendNewOrderEmail();
18
+ switch(Mage::getStoreConfig('pdfpro/config/order_email_attach')){
19
+ case VES_PdfPro_Model_Source_Attach::ATTACH_TYPE_NO:
20
+ return parent::sendNewOrderEmail();
21
+ case VES_PdfPro_Model_Source_Attach::ATTACH_TYPE_ADMIN:
22
+ $this->sendNewOrderEmailForAdmin(true);
23
+ $this->sendNewOrderEmailForCustomer(false);
24
+ return $this;
25
+ case VES_PdfPro_Model_Source_Attach::ATTACH_TYPE_CUSTOMER:
26
+ $this->sendNewOrderEmailForAdmin(false);
27
+ $this->sendNewOrderEmailForCustomer(true);
28
+ return $this;
29
+ }
30
+ $storeId = $this->getStore()->getId();
31
+
32
+ if (!Mage::helper('sales')->canSendNewOrderEmail($storeId)) {
33
+ return $this;
34
+ }
35
+ // Get the destination email addresses to send copies to
36
+ $copyTo = $this->_getEmails(self::XML_PATH_EMAIL_COPY_TO);
37
+ $copyMethod = Mage::getStoreConfig(self::XML_PATH_EMAIL_COPY_METHOD, $storeId);
38
+
39
+ // Start store emulation process
40
+ $appEmulation = Mage::getSingleton('core/app_emulation');
41
+ if($appEmulation) $initialEnvironmentInfo = $appEmulation->startEnvironmentEmulation($storeId);
42
+
43
+ try {
44
+ // Retrieve specified view block from appropriate design package (depends on emulated store)
45
+ $paymentBlock = Mage::helper('payment')->getInfoBlock($this->getPayment())
46
+ ->setIsSecureMode(true);
47
+ $paymentBlock->getMethod()->setStore($storeId);
48
+ $paymentBlockHtml = $paymentBlock->toHtml();
49
+ } catch (Exception $exception) {
50
+ // Stop store emulation process
51
+ if($appEmulation) $appEmulation->stopEnvironmentEmulation($initialEnvironmentInfo);
52
+ throw $exception;
53
+ }
54
+
55
+ // Stop store emulation process
56
+ if($appEmulation) $appEmulation->stopEnvironmentEmulation($initialEnvironmentInfo);
57
+
58
+ // Retrieve corresponding email template id and customer name
59
+ if ($this->getCustomerIsGuest()) {
60
+ $templateId = Mage::getStoreConfig(self::XML_PATH_EMAIL_GUEST_TEMPLATE, $storeId);
61
+ $customerName = $this->getBillingAddress()->getName();
62
+ } else {
63
+ $templateId = Mage::getStoreConfig(self::XML_PATH_EMAIL_TEMPLATE, $storeId);
64
+ $customerName = $this->getCustomerName();
65
+ }
66
+
67
+ $mailer = Mage::getModel('pdfpro/email_template_mailer');
68
+ $emailInfo = Mage::getModel('core/email_info');
69
+ $emailInfo->addTo($this->getCustomerEmail(), $customerName);
70
+ if ($copyTo && $copyMethod == 'bcc') {
71
+ // Add bcc to customer email
72
+ foreach ($copyTo as $email) {
73
+ $emailInfo->addBcc($email);
74
+ }
75
+ }
76
+ $mailer->addEmailInfo($emailInfo);
77
+
78
+ // Email copies are sent as separated emails if their copy method is 'copy'
79
+ if ($copyTo && $copyMethod == 'copy') {
80
+ foreach ($copyTo as $email) {
81
+ $emailInfo = Mage::getModel('core/email_info');
82
+ $emailInfo->addTo($email);
83
+ $mailer->addEmailInfo($emailInfo);
84
+ }
85
+ }
86
+
87
+ // Set all required params and send emails
88
+ $mailer->setSender(Mage::getStoreConfig(self::XML_PATH_EMAIL_IDENTITY, $storeId));
89
+ $mailer->setStoreId($storeId);
90
+ $mailer->setTemplateId($templateId);
91
+ $mailer->setTemplateParams(array(
92
+ 'order' => $this,
93
+ 'billing' => $this->getBillingAddress(),
94
+ 'payment_html' => $paymentBlockHtml
95
+ )
96
+ );
97
+ /* Attach order PDF in email */
98
+ $orderData= Mage::getModel('pdfpro/order')->initOrderData($this);
99
+ try{
100
+ $result = Mage::helper('pdfpro')->initPdf(array($orderData),'order');
101
+ if($result['success']){
102
+ $mailer->setPdf(array('filename'=>Mage::helper('pdfpro')->getFileName('order',$this).'.pdf', 'content'=>$result['content']));
103
+ }else{
104
+ Mage::log($result['msg']);
105
+ }
106
+ }catch(Exception $e){
107
+ Mage::log($e->getMessage());
108
+ }
109
+
110
+ $mailer->send();
111
+
112
+ $this->setEmailSent(true);
113
+ $this->_getResource()->saveAttribute($this, 'email_sent');
114
+
115
+ return $this;
116
+ }
117
+
118
+ public function sendNewOrderEmailForCustomer($attachPdfFile = true){
119
+ $storeId = $this->getStore()->getId();
120
+
121
+ if (!Mage::helper('sales')->canSendNewOrderEmail($storeId)) {
122
+ return $this;
123
+ }
124
+
125
+ // Start store emulation process
126
+ $appEmulation = Mage::getSingleton('core/app_emulation');
127
+ if($appEmulation) $initialEnvironmentInfo = $appEmulation->startEnvironmentEmulation($storeId);
128
+
129
+ try {
130
+ // Retrieve specified view block from appropriate design package (depends on emulated store)
131
+ $paymentBlock = Mage::helper('payment')->getInfoBlock($this->getPayment())
132
+ ->setIsSecureMode(true);
133
+ $paymentBlock->getMethod()->setStore($storeId);
134
+ $paymentBlockHtml = $paymentBlock->toHtml();
135
+ } catch (Exception $exception) {
136
+ // Stop store emulation process
137
+ if($appEmulation) $appEmulation->stopEnvironmentEmulation($initialEnvironmentInfo);
138
+ throw $exception;
139
+ }
140
+
141
+ // Stop store emulation process
142
+ if($appEmulation) $appEmulation->stopEnvironmentEmulation($initialEnvironmentInfo);
143
+
144
+ // Retrieve corresponding email template id and customer name
145
+ if ($this->getCustomerIsGuest()) {
146
+ $templateId = Mage::getStoreConfig(self::XML_PATH_EMAIL_GUEST_TEMPLATE, $storeId);
147
+ $customerName = $this->getBillingAddress()->getName();
148
+ } else {
149
+ $templateId = Mage::getStoreConfig(self::XML_PATH_EMAIL_TEMPLATE, $storeId);
150
+ $customerName = $this->getCustomerName();
151
+ }
152
+
153
+ $mailer = Mage::getModel('pdfpro/email_template_mailer');
154
+ $emailInfo = Mage::getModel('core/email_info');
155
+ $emailInfo->addTo($this->getCustomerEmail(), $customerName);
156
+
157
+ $mailer->addEmailInfo($emailInfo);
158
+
159
+ // Set all required params and send emails
160
+ $mailer->setSender(Mage::getStoreConfig(self::XML_PATH_EMAIL_IDENTITY, $storeId));
161
+ $mailer->setStoreId($storeId);
162
+ $mailer->setTemplateId($templateId);
163
+ $mailer->setTemplateParams(array(
164
+ 'order' => $this,
165
+ 'billing' => $this->getBillingAddress(),
166
+ 'payment_html' => $paymentBlockHtml
167
+ )
168
+ );
169
+ if($attachPdfFile){
170
+ /* Attach order PDF in email */
171
+ $orderData= Mage::getModel('pdfpro/order')->initOrderData($this);
172
+ try{
173
+ $result = Mage::helper('pdfpro')->initPdf(array($orderData),'order');
174
+ if($result['success']){
175
+ $mailer->setPdf(array('filename'=>Mage::helper('pdfpro')->getFileName('order',$this).'.pdf', 'content'=>$result['content']));
176
+ }else{
177
+ Mage::log($result['msg']);
178
+ }
179
+ }catch(Exception $e){
180
+ Mage::log($e->getMessage());
181
+ }
182
+ }
183
+
184
+ $mailer->send();
185
+
186
+ $this->setEmailSent(true);
187
+ $this->_getResource()->saveAttribute($this, 'email_sent');
188
+
189
+ return $this;
190
+ }
191
+
192
+
193
+
194
+ public function sendNewOrderEmailForAdmin($attachPdfFile = true){
195
+ $storeId = $this->getStore()->getId();
196
+
197
+ if (!Mage::helper('sales')->canSendNewOrderEmail($storeId)) {
198
+ return $this;
199
+ }
200
+ // Get the destination email addresses to send copies to
201
+ $copyTo = $this->_getEmails(self::XML_PATH_EMAIL_COPY_TO);
202
+ $copyMethod = Mage::getStoreConfig(self::XML_PATH_EMAIL_COPY_METHOD, $storeId);
203
+
204
+ // Start store emulation process
205
+ $appEmulation = Mage::getSingleton('core/app_emulation');
206
+ if($appEmulation) $initialEnvironmentInfo = $appEmulation->startEnvironmentEmulation($storeId);
207
+
208
+ try {
209
+ // Retrieve specified view block from appropriate design package (depends on emulated store)
210
+ $paymentBlock = Mage::helper('payment')->getInfoBlock($this->getPayment())
211
+ ->setIsSecureMode(true);
212
+ $paymentBlock->getMethod()->setStore($storeId);
213
+ $paymentBlockHtml = $paymentBlock->toHtml();
214
+ } catch (Exception $exception) {
215
+ // Stop store emulation process
216
+ if($appEmulation) $appEmulation->stopEnvironmentEmulation($initialEnvironmentInfo);
217
+ throw $exception;
218
+ }
219
+
220
+ // Stop store emulation process
221
+ if($appEmulation) $appEmulation->stopEnvironmentEmulation($initialEnvironmentInfo);
222
+
223
+ // Retrieve corresponding email template id and customer name
224
+ if ($this->getCustomerIsGuest()) {
225
+ $templateId = Mage::getStoreConfig(self::XML_PATH_EMAIL_GUEST_TEMPLATE, $storeId);
226
+ $customerName = $this->getBillingAddress()->getName();
227
+ } else {
228
+ $templateId = Mage::getStoreConfig(self::XML_PATH_EMAIL_TEMPLATE, $storeId);
229
+ $customerName = $this->getCustomerName();
230
+ }
231
+
232
+ $mailer = Mage::getModel('pdfpro/email_template_mailer');
233
+
234
+ // Email copies are sent as separated emails if their copy method is 'copy'
235
+ foreach ($copyTo as $email) {
236
+ $emailInfo = Mage::getModel('core/email_info');
237
+ $emailInfo->addTo($email);
238
+ $mailer->addEmailInfo($emailInfo);
239
+ }
240
+
241
+ // Set all required params and send emails
242
+ $mailer->setSender(Mage::getStoreConfig(self::XML_PATH_EMAIL_IDENTITY, $storeId));
243
+ $mailer->setStoreId($storeId);
244
+ $mailer->setTemplateId($templateId);
245
+ $mailer->setTemplateParams(array(
246
+ 'order' => $this,
247
+ 'billing' => $this->getBillingAddress(),
248
+ 'payment_html' => $paymentBlockHtml
249
+ )
250
+ );
251
+
252
+ if($attachPdfFile){
253
+ /* Attach order PDF in email */
254
+ $orderData= Mage::getModel('pdfpro/order')->initOrderData($this);
255
+ try{
256
+ $result = Mage::helper('pdfpro')->initPdf(array($orderData),'order');
257
+ if($result['success']){
258
+ $mailer->setPdf(array('filename'=>Mage::helper('pdfpro')->getFileName('order',$this).'.pdf', 'content'=>$result['content']));
259
+ }else{
260
+ Mage::log($result['msg']);
261
+ }
262
+ }catch(Exception $e){
263
+ Mage::log($e->getMessage());
264
+ }
265
+ }
266
+
267
+ $mailer->send();
268
+
269
+ $this->setEmailSent(true);
270
+ $this->_getResource()->saveAttribute($this, 'email_sent');
271
+
272
+ return $this;
273
+ }
274
+ /**
275
+ * Retrieve text formated price value includeing order rate
276
+ *
277
+ * @param float $price
278
+ * @return string
279
+ */
280
+ public function formatPriceTxt($price)
281
+ {
282
+ $orderCurrencyCode = $this->getOrderCurrencyCode();
283
+ return Mage::helper('pdfpro')->currency($price,$orderCurrencyCode);
284
+ }
285
+ }
app/code/community/VES/PdfPro/Model/Sales/Order/Invoice.php ADDED
@@ -0,0 +1,294 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * VES_PdfPro_Model_Sales_Order_Invoice
4
+ *
5
+ * @author VnEcoms Team <support@vnecoms.com>
6
+ * @website http://www.vnecoms.com
7
+ */
8
+ class VES_PdfPro_Model_Sales_Order_Invoice extends Mage_Sales_Model_Order_Invoice
9
+ {
10
+ /**
11
+ * Send email with invoice data
12
+ *
13
+ * @param boolean $notifyCustomer
14
+ * @param string $comment
15
+ * @return Mage_Sales_Model_Order_Invoice
16
+ */
17
+ public function sendEmail($notifyCustomer = true, $comment = '')
18
+ {
19
+ if(!Mage::getStoreConfig('pdfpro/config/enabled')) return parent::sendEmail($notifyCustomer, $comment);
20
+ switch(Mage::getStoreConfig('pdfpro/config/invoice_email_attach')){
21
+ case VES_PdfPro_Model_Source_Attach::ATTACH_TYPE_NO:
22
+ return parent::sendEmail();
23
+ case VES_PdfPro_Model_Source_Attach::ATTACH_TYPE_ADMIN:
24
+ $this->sendEmailForAdmin($notifyCustomer,$comment, true);
25
+ $this->sendEmailForCustomer($notifyCustomer,$comment,false);
26
+ return $this;
27
+ case VES_PdfPro_Model_Source_Attach::ATTACH_TYPE_CUSTOMER:
28
+ $this->sendEmailForAdmin($notifyCustomer,$comment,false);
29
+ $this->sendEmailForCustomer($notifyCustomer,$comment,true);
30
+ return $this;
31
+ }
32
+ $order = $this->getOrder();
33
+ $storeId = $order->getStore()->getId();
34
+
35
+ if (!Mage::helper('sales')->canSendNewInvoiceEmail($storeId)) {
36
+ return $this;
37
+ }
38
+ // Get the destination email addresses to send copies to
39
+ $copyTo = $this->_getEmails(self::XML_PATH_EMAIL_COPY_TO);
40
+ $copyMethod = Mage::getStoreConfig(self::XML_PATH_EMAIL_COPY_METHOD, $storeId);
41
+ // Check if at least one recepient is found
42
+ if (!$notifyCustomer && !$copyTo) {
43
+ return $this;
44
+ }
45
+
46
+ // Start store emulation process
47
+ $appEmulation = Mage::getSingleton('core/app_emulation');
48
+ if($appEmulation) $initialEnvironmentInfo = $appEmulation->startEnvironmentEmulation($storeId);
49
+
50
+ try {
51
+ // Retrieve specified view block from appropriate design package (depends on emulated store)
52
+ $paymentBlock = Mage::helper('payment')->getInfoBlock($order->getPayment())
53
+ ->setIsSecureMode(true);
54
+ $paymentBlock->getMethod()->setStore($storeId);
55
+ $paymentBlockHtml = $paymentBlock->toHtml();
56
+ } catch (Exception $exception) {
57
+ // Stop store emulation process
58
+ if($appEmulation) $appEmulation->stopEnvironmentEmulation($initialEnvironmentInfo);
59
+ throw $exception;
60
+ }
61
+
62
+ // Stop store emulation process
63
+ if($appEmulation) $appEmulation->stopEnvironmentEmulation($initialEnvironmentInfo);
64
+
65
+ // Retrieve corresponding email template id and customer name
66
+ if ($order->getCustomerIsGuest()) {
67
+ $templateId = Mage::getStoreConfig(self::XML_PATH_EMAIL_GUEST_TEMPLATE, $storeId);
68
+ $customerName = $order->getBillingAddress()->getName();
69
+ } else {
70
+ $templateId = Mage::getStoreConfig(self::XML_PATH_EMAIL_TEMPLATE, $storeId);
71
+ $customerName = $order->getCustomerName();
72
+ }
73
+
74
+ $mailer = Mage::getModel('pdfpro/email_template_mailer');
75
+ if ($notifyCustomer) {
76
+ $emailInfo = Mage::getModel('core/email_info');
77
+ $emailInfo->addTo($order->getCustomerEmail(), $customerName);
78
+ if ($copyTo && $copyMethod == 'bcc') {
79
+ // Add bcc to customer email
80
+ foreach ($copyTo as $email) {
81
+ $emailInfo->addBcc($email);
82
+ }
83
+ }
84
+ $mailer->addEmailInfo($emailInfo);
85
+ }
86
+
87
+ // Email copies are sent as separated emails if their copy method is 'copy' or a customer should not be notified
88
+ if ($copyTo && ($copyMethod == 'copy' || !$notifyCustomer)) {
89
+ foreach ($copyTo as $email) {
90
+ $emailInfo = Mage::getModel('core/email_info');
91
+ $emailInfo->addTo($email);
92
+ $mailer->addEmailInfo($emailInfo);
93
+ }
94
+ }
95
+
96
+ // Set all required params and send emails
97
+ $mailer->setSender(Mage::getStoreConfig(self::XML_PATH_EMAIL_IDENTITY, $storeId));
98
+ $mailer->setStoreId($storeId);
99
+ $mailer->setTemplateId($templateId);
100
+ $mailer->setTemplateParams(array(
101
+ 'order' => $order,
102
+ 'invoice' => $this,
103
+ 'comment' => $comment,
104
+ 'billing' => $order->getBillingAddress(),
105
+ 'payment_html' => $paymentBlockHtml
106
+ )
107
+ );
108
+ /* Attach Invoice PDF in email */
109
+ $invoiceData = Mage::getModel('pdfpro/order_invoice')->initInvoiceData($this);
110
+ try{
111
+ $result = Mage::helper('pdfpro')->initPdf(array($invoiceData));
112
+ if($result['success']){
113
+ $mailer->setPdf(array('filename'=>Mage::helper('pdfpro')->getFileName('invoice',$this).'.pdf', 'content'=>$result['content']));
114
+ }else{
115
+ Mage::log($result['msg']);
116
+ }
117
+ }catch(Exception $e){
118
+ Mage::log($e->getMessage());
119
+ }
120
+
121
+ $mailer->send();
122
+ $this->setEmailSent(true);
123
+ $this->_getResource()->saveAttribute($this, 'email_sent');
124
+
125
+ return $this;
126
+ }
127
+
128
+ public function sendEmailForAdmin($notifyCustomer=true,$comment='', $attachPdf = true){
129
+ $order = $this->getOrder();
130
+ $storeId = $order->getStore()->getId();
131
+
132
+ if (!Mage::helper('sales')->canSendNewInvoiceEmail($storeId)) {
133
+ return $this;
134
+ }
135
+ // Get the destination email addresses to send copies to
136
+ $copyTo = $this->_getEmails(self::XML_PATH_EMAIL_COPY_TO);
137
+ $copyMethod = Mage::getStoreConfig(self::XML_PATH_EMAIL_COPY_METHOD, $storeId);
138
+ // Check if at least one recepient is found
139
+ if (!$notifyCustomer && !$copyTo) {
140
+ return $this;
141
+ }
142
+
143
+ // Start store emulation process
144
+ $appEmulation = Mage::getSingleton('core/app_emulation');
145
+ if($appEmulation) $initialEnvironmentInfo = $appEmulation->startEnvironmentEmulation($storeId);
146
+
147
+ try {
148
+ // Retrieve specified view block from appropriate design package (depends on emulated store)
149
+ $paymentBlock = Mage::helper('payment')->getInfoBlock($order->getPayment())
150
+ ->setIsSecureMode(true);
151
+ $paymentBlock->getMethod()->setStore($storeId);
152
+ $paymentBlockHtml = $paymentBlock->toHtml();
153
+ } catch (Exception $exception) {
154
+ // Stop store emulation process
155
+ if($appEmulation) $appEmulation->stopEnvironmentEmulation($initialEnvironmentInfo);
156
+ throw $exception;
157
+ }
158
+
159
+ // Stop store emulation process
160
+ if($appEmulation) $appEmulation->stopEnvironmentEmulation($initialEnvironmentInfo);
161
+
162
+ // Retrieve corresponding email template id and customer name
163
+ if ($order->getCustomerIsGuest()) {
164
+ $templateId = Mage::getStoreConfig(self::XML_PATH_EMAIL_GUEST_TEMPLATE, $storeId);
165
+ $customerName = $order->getBillingAddress()->getName();
166
+ } else {
167
+ $templateId = Mage::getStoreConfig(self::XML_PATH_EMAIL_TEMPLATE, $storeId);
168
+ $customerName = $order->getCustomerName();
169
+ }
170
+
171
+ $mailer = Mage::getModel('pdfpro/email_template_mailer');
172
+
173
+ // Email copies are sent as separated emails if their copy method is 'copy' or a customer should not be notified
174
+ foreach ($copyTo as $email) {
175
+ $emailInfo = Mage::getModel('core/email_info');
176
+ $emailInfo->addTo($email);
177
+ $mailer->addEmailInfo($emailInfo);
178
+ }
179
+
180
+ // Set all required params and send emails
181
+ $mailer->setSender(Mage::getStoreConfig(self::XML_PATH_EMAIL_IDENTITY, $storeId));
182
+ $mailer->setStoreId($storeId);
183
+ $mailer->setTemplateId($templateId);
184
+ $mailer->setTemplateParams(array(
185
+ 'order' => $order,
186
+ 'invoice' => $this,
187
+ 'comment' => $comment,
188
+ 'billing' => $order->getBillingAddress(),
189
+ 'payment_html' => $paymentBlockHtml
190
+ )
191
+ );
192
+
193
+ if($attachPdf){
194
+ /* Attach Invoice PDF in email */
195
+ $invoiceData = Mage::getModel('pdfpro/order_invoice')->initInvoiceData($this);
196
+ try{
197
+ $result = Mage::helper('pdfpro')->initPdf(array($invoiceData));
198
+ if($result['success']){
199
+ $mailer->setPdf(array('filename'=>Mage::helper('pdfpro')->getFileName('invoice',$this).'.pdf', 'content'=>$result['content']));
200
+ }else{
201
+ Mage::log($result['msg']);
202
+ }
203
+ }catch(Exception $e){
204
+ Mage::log($e->getMessage());
205
+ }
206
+ }
207
+ $mailer->send();
208
+ $this->setEmailSent(true);
209
+ $this->_getResource()->saveAttribute($this, 'email_sent');
210
+
211
+ return $this;
212
+ }
213
+
214
+ public function sendEmailForCustomer($notifyCustomer=true,$comment='', $attachPdf = true){
215
+ $order = $this->getOrder();
216
+ $storeId = $order->getStore()->getId();
217
+
218
+ if (!Mage::helper('sales')->canSendNewInvoiceEmail($storeId)) {
219
+ return $this;
220
+ }
221
+
222
+ // Check if at least one recepient is found
223
+ if (!$notifyCustomer ) {
224
+ return $this;
225
+ }
226
+
227
+ // Start store emulation process
228
+ $appEmulation = Mage::getSingleton('core/app_emulation');
229
+ if($appEmulation) $initialEnvironmentInfo = $appEmulation->startEnvironmentEmulation($storeId);
230
+
231
+ try {
232
+ // Retrieve specified view block from appropriate design package (depends on emulated store)
233
+ $paymentBlock = Mage::helper('payment')->getInfoBlock($order->getPayment())
234
+ ->setIsSecureMode(true);
235
+ $paymentBlock->getMethod()->setStore($storeId);
236
+ $paymentBlockHtml = $paymentBlock->toHtml();
237
+ } catch (Exception $exception) {
238
+ // Stop store emulation process
239
+ if($appEmulation) $appEmulation->stopEnvironmentEmulation($initialEnvironmentInfo);
240
+ throw $exception;
241
+ }
242
+
243
+ // Stop store emulation process
244
+ if($appEmulation) $appEmulation->stopEnvironmentEmulation($initialEnvironmentInfo);
245
+
246
+ // Retrieve corresponding email template id and customer name
247
+ if ($order->getCustomerIsGuest()) {
248
+ $templateId = Mage::getStoreConfig(self::XML_PATH_EMAIL_GUEST_TEMPLATE, $storeId);
249
+ $customerName = $order->getBillingAddress()->getName();
250
+ } else {
251
+ $templateId = Mage::getStoreConfig(self::XML_PATH_EMAIL_TEMPLATE, $storeId);
252
+ $customerName = $order->getCustomerName();
253
+ }
254
+
255
+ $mailer = Mage::getModel('pdfpro/email_template_mailer');
256
+ if ($notifyCustomer) {
257
+ $emailInfo = Mage::getModel('core/email_info');
258
+ $emailInfo->addTo($order->getCustomerEmail(), $customerName);
259
+ $mailer->addEmailInfo($emailInfo);
260
+ }
261
+
262
+ // Set all required params and send emails
263
+ $mailer->setSender(Mage::getStoreConfig(self::XML_PATH_EMAIL_IDENTITY, $storeId));
264
+ $mailer->setStoreId($storeId);
265
+ $mailer->setTemplateId($templateId);
266
+ $mailer->setTemplateParams(array(
267
+ 'order' => $order,
268
+ 'invoice' => $this,
269
+ 'comment' => $comment,
270
+ 'billing' => $order->getBillingAddress(),
271
+ 'payment_html' => $paymentBlockHtml
272
+ )
273
+ );
274
+ if($attachPdf){
275
+ /* Attach Invoice PDF in email */
276
+ $invoiceData = Mage::getModel('pdfpro/order_invoice')->initInvoiceData($this);
277
+ try{
278
+ $result = Mage::helper('pdfpro')->initPdf(array($invoiceData));
279
+ if($result['success']){
280
+ $mailer->setPdf(array('filename'=>Mage::helper('pdfpro')->getFileName('invoice',$this).'.pdf', 'content'=>$result['content']));
281
+ }else{
282
+ Mage::log($result['msg']);
283
+ }
284
+ }catch(Exception $e){
285
+ Mage::log($e->getMessage());
286
+ }
287
+ }
288
+ $mailer->send();
289
+ $this->setEmailSent(true);
290
+ $this->_getResource()->saveAttribute($this, 'email_sent');
291
+
292
+ return $this;
293
+ }
294
+ }
app/code/community/VES/PdfPro/Model/Sales/Order/Pdf/Total/Default.php ADDED
@@ -0,0 +1,19 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * VES_PdfPro_Model_Sales_Order_Pdf_Total_Default
4
+ *
5
+ * @author VnEcoms Team <support@vnecoms.com>
6
+ * @website http://www.vnecoms.com
7
+ */
8
+ class VES_PdfPro_Model_Sales_Order_Pdf_Total_Default extends Mage_Sales_Model_Order_Pdf_Total_Default
9
+ {
10
+ /**
11
+ * Get Total amount from source
12
+ *
13
+ * @return float
14
+ */
15
+ public function getAmount()
16
+ {
17
+ return abs($this->getSource()->getDataUsingMethod($this->getSourceField()));
18
+ }
19
+ }
app/code/community/VES/PdfPro/Model/Sales/Order/Shipment.php ADDED
@@ -0,0 +1,286 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * VES_PdfPro_Model_Sales_Order_Shipment
4
+ *
5
+ * @author VnEcoms Team <support@vnecoms.com>
6
+ * @website http://www.vnecoms.com
7
+ */
8
+ class VES_PdfPro_Model_Sales_Order_Shipment extends Mage_Sales_Model_Order_Shipment
9
+ {
10
+ /**
11
+ * Send email with shipment data
12
+ *
13
+ * @param boolean $notifyCustomer
14
+ * @param string $comment
15
+ * @return Mage_Sales_Model_Order_Shipment
16
+ */
17
+ public function sendEmail($notifyCustomer = true, $comment = '')
18
+ {
19
+ if(!Mage::getStoreConfig('pdfpro/config/enabled')) return parent::sendEmail($notifyCustomer, $comment);
20
+ switch(Mage::getStoreConfig('pdfpro/config/shipment_email_attach')){
21
+ case VES_PdfPro_Model_Source_Attach::ATTACH_TYPE_NO:
22
+ return parent::sendEmail();
23
+ case VES_PdfPro_Model_Source_Attach::ATTACH_TYPE_ADMIN:
24
+ $this->sendEmailForAdmin($notifyCustomer,$comment, true);
25
+ $this->sendEmailForCustomer($notifyCustomer,$comment,false);
26
+ return $this;
27
+ case VES_PdfPro_Model_Source_Attach::ATTACH_TYPE_CUSTOMER:
28
+ $this->sendEmailForAdmin($notifyCustomer,$comment,false);
29
+ $this->sendEmailForCustomer($notifyCustomer,$comment,true);
30
+ return $this;
31
+ }
32
+ $order = $this->getOrder();
33
+ $storeId = $order->getStore()->getId();
34
+
35
+ if (!Mage::helper('sales')->canSendNewShipmentEmail($storeId)) {
36
+ return $this;
37
+ }
38
+ // Get the destination email addresses to send copies to
39
+ $copyTo = $this->_getEmails(self::XML_PATH_EMAIL_COPY_TO);
40
+ $copyMethod = Mage::getStoreConfig(self::XML_PATH_EMAIL_COPY_METHOD, $storeId);
41
+ // Check if at least one recepient is found
42
+ if (!$notifyCustomer && !$copyTo) {
43
+ return $this;
44
+ }
45
+
46
+ // Start store emulation process
47
+ $appEmulation = Mage::getSingleton('core/app_emulation');
48
+ $initialEnvironmentInfo = $appEmulation->startEnvironmentEmulation($storeId);
49
+
50
+ try {
51
+ // Retrieve specified view block from appropriate design package (depends on emulated store)
52
+ $paymentBlock = Mage::helper('payment')->getInfoBlock($order->getPayment())
53
+ ->setIsSecureMode(true);
54
+ $paymentBlock->getMethod()->setStore($storeId);
55
+ $paymentBlockHtml = $paymentBlock->toHtml();
56
+ } catch (Exception $exception) {
57
+ // Stop store emulation process
58
+ $appEmulation->stopEnvironmentEmulation($initialEnvironmentInfo);
59
+ throw $exception;
60
+ }
61
+
62
+ // Stop store emulation process
63
+ $appEmulation->stopEnvironmentEmulation($initialEnvironmentInfo);
64
+
65
+ // Retrieve corresponding email template id and customer name
66
+ if ($order->getCustomerIsGuest()) {
67
+ $templateId = Mage::getStoreConfig(self::XML_PATH_EMAIL_GUEST_TEMPLATE, $storeId);
68
+ $customerName = $order->getBillingAddress()->getName();
69
+ } else {
70
+ $templateId = Mage::getStoreConfig(self::XML_PATH_EMAIL_TEMPLATE, $storeId);
71
+ $customerName = $order->getCustomerName();
72
+ }
73
+
74
+ $mailer = Mage::getModel('pdfpro/email_template_mailer');
75
+ if ($notifyCustomer) {
76
+ $emailInfo = Mage::getModel('core/email_info');
77
+ $emailInfo->addTo($order->getCustomerEmail(), $customerName);
78
+ if ($copyTo && $copyMethod == 'bcc') {
79
+ // Add bcc to customer email
80
+ foreach ($copyTo as $email) {
81
+ $emailInfo->addBcc($email);
82
+ }
83
+ }
84
+ $mailer->addEmailInfo($emailInfo);
85
+ }
86
+
87
+ // Email copies are sent as separated emails if their copy method is 'copy' or a customer should not be notified
88
+ if ($copyTo && ($copyMethod == 'copy' || !$notifyCustomer)) {
89
+ foreach ($copyTo as $email) {
90
+ $emailInfo = Mage::getModel('core/email_info');
91
+ $emailInfo->addTo($email);
92
+ $mailer->addEmailInfo($emailInfo);
93
+ }
94
+ }
95
+
96
+ // Set all required params and send emails
97
+ $mailer->setSender(Mage::getStoreConfig(self::XML_PATH_EMAIL_IDENTITY, $storeId));
98
+ $mailer->setStoreId($storeId);
99
+ $mailer->setTemplateId($templateId);
100
+ $mailer->setTemplateParams(array(
101
+ 'order' => $order,
102
+ 'shipment' => $this,
103
+ 'comment' => $comment,
104
+ 'billing' => $order->getBillingAddress(),
105
+ 'payment_html' => $paymentBlockHtml
106
+ )
107
+ );
108
+ /* Attach Invoice PDF in email */
109
+ $shipmentData = Mage::getModel('pdfpro/order_shipment')->initShipmentData($this);
110
+ try{
111
+ $result = Mage::helper('pdfpro')->initPdf(array($shipmentData),'shipment');
112
+ if($result['success']){
113
+ $mailer->setPdf(array('filename'=>Mage::helper('pdfpro')->getFileName('shipment',$this).'.pdf', 'content'=>$result['content']));
114
+ }else{
115
+ Mage::log($result['msg']);
116
+ }
117
+ }catch(Exception $e){
118
+ Mage::log($e->getMessage());
119
+ }
120
+ $mailer->send();
121
+
122
+ return $this;
123
+ }
124
+
125
+ public function sendEmailForAdmin($notifyCustomer=true,$comment='', $attachPdf = true){
126
+ $order = $this->getOrder();
127
+ $storeId = $order->getStore()->getId();
128
+
129
+ if (!Mage::helper('sales')->canSendNewShipmentEmail($storeId)) {
130
+ return $this;
131
+ }
132
+ // Get the destination email addresses to send copies to
133
+ $copyTo = $this->_getEmails(self::XML_PATH_EMAIL_COPY_TO);
134
+ $copyMethod = Mage::getStoreConfig(self::XML_PATH_EMAIL_COPY_METHOD, $storeId);
135
+ // Check if at least one recepient is found
136
+ if (!$copyTo) {
137
+ return $this;
138
+ }
139
+
140
+ // Start store emulation process
141
+ $appEmulation = Mage::getSingleton('core/app_emulation');
142
+ $initialEnvironmentInfo = $appEmulation->startEnvironmentEmulation($storeId);
143
+
144
+ try {
145
+ // Retrieve specified view block from appropriate design package (depends on emulated store)
146
+ $paymentBlock = Mage::helper('payment')->getInfoBlock($order->getPayment())
147
+ ->setIsSecureMode(true);
148
+ $paymentBlock->getMethod()->setStore($storeId);
149
+ $paymentBlockHtml = $paymentBlock->toHtml();
150
+ } catch (Exception $exception) {
151
+ // Stop store emulation process
152
+ $appEmulation->stopEnvironmentEmulation($initialEnvironmentInfo);
153
+ throw $exception;
154
+ }
155
+
156
+ // Stop store emulation process
157
+ $appEmulation->stopEnvironmentEmulation($initialEnvironmentInfo);
158
+
159
+ // Retrieve corresponding email template id and customer name
160
+ if ($order->getCustomerIsGuest()) {
161
+ $templateId = Mage::getStoreConfig(self::XML_PATH_EMAIL_GUEST_TEMPLATE, $storeId);
162
+ } else {
163
+ $templateId = Mage::getStoreConfig(self::XML_PATH_EMAIL_TEMPLATE, $storeId);
164
+ }
165
+
166
+ $mailer = Mage::getModel('pdfpro/email_template_mailer');
167
+
168
+ // Email copies are sent as separated emails if their copy method is 'copy' or a customer should not be notified
169
+ foreach ($copyTo as $email) {
170
+ $emailInfo = Mage::getModel('core/email_info');
171
+ $emailInfo->addTo($email);
172
+ $mailer->addEmailInfo($emailInfo);
173
+ }
174
+
175
+ // Set all required params and send emails
176
+ $mailer->setSender(Mage::getStoreConfig(self::XML_PATH_EMAIL_IDENTITY, $storeId));
177
+ $mailer->setStoreId($storeId);
178
+ $mailer->setTemplateId($templateId);
179
+ $mailer->setTemplateParams(array(
180
+ 'order' => $order,
181
+ 'shipment' => $this,
182
+ 'comment' => $comment,
183
+ 'billing' => $order->getBillingAddress(),
184
+ 'payment_html' => $paymentBlockHtml
185
+ )
186
+ );
187
+ if($attachPdf){
188
+ /* Attach Invoice PDF in email */
189
+ $shipmentData = Mage::getModel('pdfpro/order_shipment')->initShipmentData($this);
190
+ try{
191
+ $result = Mage::helper('pdfpro')->initPdf(array($shipmentData),'shipment');
192
+ if($result['success']){
193
+ $mailer->setPdf(array('filename'=>Mage::helper('pdfpro')->getFileName('shipment',$this).'.pdf', 'content'=>$result['content']));
194
+ }else{
195
+ Mage::log($result['msg']);
196
+ }
197
+ }catch(Exception $e){
198
+ Mage::log($e->getMessage());
199
+ }
200
+ }
201
+ $mailer->send();
202
+
203
+ return $this;
204
+ }
205
+
206
+ public function sendEmailForCustomer($notifyCustomer=true,$comment='', $attachPdf = true){
207
+ $order = $this->getOrder();
208
+ $storeId = $order->getStore()->getId();
209
+
210
+ if (!Mage::helper('sales')->canSendNewShipmentEmail($storeId)) {
211
+ return $this;
212
+ }
213
+ // Get the destination email addresses to send copies to
214
+ $copyTo = $this->_getEmails(self::XML_PATH_EMAIL_COPY_TO);
215
+ $copyMethod = Mage::getStoreConfig(self::XML_PATH_EMAIL_COPY_METHOD, $storeId);
216
+ // Check if at least one recepient is found
217
+ if (!$notifyCustomer) {
218
+ return $this;
219
+ }
220
+
221
+ // Start store emulation process
222
+ $appEmulation = Mage::getSingleton('core/app_emulation');
223
+ $initialEnvironmentInfo = $appEmulation->startEnvironmentEmulation($storeId);
224
+
225
+ try {
226
+ // Retrieve specified view block from appropriate design package (depends on emulated store)
227
+ $paymentBlock = Mage::helper('payment')->getInfoBlock($order->getPayment())
228
+ ->setIsSecureMode(true);
229
+ $paymentBlock->getMethod()->setStore($storeId);
230
+ $paymentBlockHtml = $paymentBlock->toHtml();
231
+ } catch (Exception $exception) {
232
+ // Stop store emulation process
233
+ $appEmulation->stopEnvironmentEmulation($initialEnvironmentInfo);
234
+ throw $exception;
235
+ }
236
+
237
+ // Stop store emulation process
238
+ $appEmulation->stopEnvironmentEmulation($initialEnvironmentInfo);
239
+
240
+ // Retrieve corresponding email template id and customer name
241
+ if ($order->getCustomerIsGuest()) {
242
+ $templateId = Mage::getStoreConfig(self::XML_PATH_EMAIL_GUEST_TEMPLATE, $storeId);
243
+ $customerName = $order->getBillingAddress()->getName();
244
+ } else {
245
+ $templateId = Mage::getStoreConfig(self::XML_PATH_EMAIL_TEMPLATE, $storeId);
246
+ $customerName = $order->getCustomerName();
247
+ }
248
+
249
+ $mailer = Mage::getModel('pdfpro/email_template_mailer');
250
+ if ($notifyCustomer) {
251
+ $emailInfo = Mage::getModel('core/email_info');
252
+ $emailInfo->addTo($order->getCustomerEmail(), $customerName);
253
+ $mailer->addEmailInfo($emailInfo);
254
+ }
255
+
256
+ // Set all required params and send emails
257
+ $mailer->setSender(Mage::getStoreConfig(self::XML_PATH_EMAIL_IDENTITY, $storeId));
258
+ $mailer->setStoreId($storeId);
259
+ $mailer->setTemplateId($templateId);
260
+ $mailer->setTemplateParams(array(
261
+ 'order' => $order,
262
+ 'shipment' => $this,
263
+ 'comment' => $comment,
264
+ 'billing' => $order->getBillingAddress(),
265
+ 'payment_html' => $paymentBlockHtml
266
+ )
267
+ );
268
+ if($attachPdf){
269
+ /* Attach Invoice PDF in email */
270
+ $shipmentData = Mage::getModel('pdfpro/order_shipment')->initShipmentData($this);
271
+ try{
272
+ $result = Mage::helper('pdfpro')->initPdf(array($shipmentData),'shipment');
273
+ if($result['success']){
274
+ $mailer->setPdf(array('filename'=>Mage::helper('pdfpro')->getFileName('shipment',$this).'.pdf', 'content'=>$result['content']));
275
+ }else{
276
+ Mage::log($result['msg']);
277
+ }
278
+ }catch(Exception $e){
279
+ Mage::log($e->getMessage());
280
+ }
281
+ }
282
+ $mailer->send();
283
+
284
+ return $this;
285
+ }
286
+ }
app/code/community/VES/PdfPro/Model/Source/Attach.php ADDED
@@ -0,0 +1,19 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class VES_PdfPro_Model_Source_Attach
4
+ {
5
+ const ATTACH_TYPE_NO = 0;
6
+ const ATTACH_TYPE_BOTH = 1;
7
+ const ATTACH_TYPE_CUSTOMER = 2;
8
+ const ATTACH_TYPE_ADMIN = 3;
9
+
10
+ public function toOptionArray()
11
+ {
12
+ return array(
13
+ self::ATTACH_TYPE_NO =>Mage::helper('pdfpro')->__('No'),
14
+ self::ATTACH_TYPE_CUSTOMER =>Mage::helper('pdfpro')->__('Customer'),
15
+ self::ATTACH_TYPE_ADMIN =>Mage::helper('pdfpro')->__('Admin'),
16
+ self::ATTACH_TYPE_BOTH =>Mage::helper('pdfpro')->__('Customer and Admin'),
17
+ );
18
+ }
19
+ }
app/code/community/VES/PdfPro/Model/Source/Communication/Method.php ADDED
@@ -0,0 +1,16 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class VES_PdfPro_Model_Source_Communication_Method
4
+ {
5
+ public function toOptionArray()
6
+ {
7
+ $methods = Mage::getConfig()->getNode('global/easypdf_communication_method')->asArray();
8
+
9
+ $options = array();
10
+ $options[] = array('value'=>'', 'label'=>'');
11
+ foreach($methods as $key => $method){
12
+ $options[] = array('value'=>$key, 'label'=>$method['title']);
13
+ }
14
+ return $options;
15
+ }
16
+ }
app/code/community/VES/PdfPro/Model/Source/Key.php ADDED
@@ -0,0 +1,15 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class VES_PdfPro_Model_Source_Key
4
+ {
5
+ public function toOptionArray()
6
+ {
7
+ $collection = Mage::getModel('pdfpro/key')->getCollection();
8
+ $options = array();
9
+ $options[] = array('value'=>'','label'=>'');
10
+ foreach($collection as $option){
11
+ $options[] = array('value'=>$option->getId(), 'label'=>$option->getApiKey());
12
+ }
13
+ return $options;
14
+ }
15
+ }
app/code/community/VES/PdfPro/Model/Source/Processor.php ADDED
@@ -0,0 +1,15 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class VES_PdfPro_Model_Source_Processor
4
+ {
5
+ public function toOptionArray()
6
+ {
7
+ $processors = Mage::getConfig()->getNode('global/easypdf_processors')->asArray();
8
+
9
+ $options = array();
10
+ foreach($processors as $key => $processor){
11
+ $options[] = array('value'=>$processor['model'], 'label'=>$processor['title']);
12
+ }
13
+ return $options;
14
+ }
15
+ }
app/code/community/VES/PdfPro/Model/System/Config/Backend/Easypdf.php ADDED
@@ -0,0 +1,6 @@
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class VES_PdfPro_Model_System_Config_Backend_Easypdf extends Mage_Core_Model_Abstract
4
+ {
5
+
6
+ }
app/code/community/VES/PdfPro/controllers/Adminhtml/KeyController.php ADDED
@@ -0,0 +1,101 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * VES_PdfPro_Adminhtml_KeyController
4
+ *
5
+ * @author VnEcoms Team <support@vnecoms.com>
6
+ * @website http://www.vnecoms.com
7
+ */
8
+
9
+ class VES_PdfPro_Adminhtml_KeyController extends Mage_Adminhtml_Controller_Action
10
+ {
11
+ protected function _initAction() {
12
+ $this->loadLayout()
13
+ ->_setActiveMenu('pdfpro/api_key')
14
+ ->_addBreadcrumb(Mage::helper('adminhtml')->__('Easy PDF'), Mage::helper('adminhtml')->__('Manage Keys'));
15
+
16
+ return $this;
17
+ }
18
+
19
+ public function indexAction(){
20
+ $this->_getSession()->addNotice('Please register an account at <a href="http://www.easypdfinvoice.com">www.easypdfinvoice.com</a> to get a Free API Key. You can get more information from our <a href="http://www.easypdfinvoice.com/User_Manual.pdf">User Manual</a>.');
21
+ $this->_initAction();
22
+ $this->renderLayout();
23
+ }
24
+
25
+ public function editAction() {
26
+ $id = $this->getRequest()->getParam('id');
27
+ $model = Mage::getModel('pdfpro/key')->load($id);
28
+ if ($model->getId() || $id == 0) {
29
+ $data = Mage::getSingleton('adminhtml/session')->getFormData(true);
30
+ if (!empty($data)) {
31
+ $model->setData($data);
32
+ }
33
+
34
+ Mage::register('key_data', $model);
35
+ $this->loadLayout();
36
+ $this->_setActiveMenu('pdfpro/api_key');
37
+
38
+ $this->_addBreadcrumb(Mage::helper('adminhtml')->__('Easy PDF'), Mage::helper('adminhtml')->__('Easy PDF'));
39
+ $this->_addBreadcrumb(Mage::helper('adminhtml')->__('Add new API Key'), Mage::helper('adminhtml')->__('Add new API Key'));
40
+
41
+ $this->getLayout()->getBlock('head')->setCanLoadExtJs(true);
42
+
43
+ $this->renderLayout();
44
+ } else {
45
+ Mage::getSingleton('adminhtml/session')->addError(Mage::helper('pdfpro')->__('Group does not exist'));
46
+ $this->_redirect('*/*/');
47
+ }
48
+ }
49
+
50
+ public function newAction() {
51
+ $this->_forward('edit');
52
+ }
53
+
54
+ public function saveAction() {
55
+ $data = $this->getRequest()->getParams();
56
+ $data['api_key'] = trim($data['api_key']);
57
+ $model = Mage::getModel('pdfpro/key');
58
+ $data['store_ids'] = implode(',', $data['store_ids']);
59
+ $data['customer_group_ids'] = implode(',', $data['customer_group_ids']);
60
+ $model->setData($data)
61
+ ->setId($this->getRequest()->getParam('id'));
62
+ Mage::dispatchEvent('ves_pdfpro_apikey_form_save_before',array('model'=>$model));
63
+ try {
64
+ $model->save();
65
+ Mage::dispatchEvent('ves_pdfpro_apikey_form_save_after',array('model'=>$model));
66
+
67
+ Mage::getSingleton('adminhtml/session')->addSuccess(Mage::helper('pdfpro')->__('The API Key has been saved.'));
68
+ Mage::getSingleton('adminhtml/session')->setGroupData(false);
69
+ if ($this->getRequest()->getParam('back')) {
70
+ $this->_redirect('*/*/edit', array('id' => $model->getId()));
71
+ return;
72
+ }
73
+ $this->_redirect('*/*/');
74
+ return;
75
+ } catch (Exception $e) {
76
+ Mage::getSingleton('adminhtml/session')->addError($e->getMessage());
77
+ Mage::getSingleton('adminhtml/session')->setGroupData($data);
78
+ $this->_redirect('*/*/edit', array('id' => $this->getRequest()->getParam('id')));
79
+ return;
80
+ }
81
+
82
+ }
83
+
84
+ public function deleteAction() {
85
+ if( $this->getRequest()->getParam('id') > 0 ) {
86
+ try {
87
+ $model = Mage::getModel('pdfpro/key');
88
+
89
+ $model->setId($this->getRequest()->getParam('id'))
90
+ ->delete();
91
+
92
+ Mage::getSingleton('adminhtml/session')->addSuccess(Mage::helper('adminhtml')->__('Item was successfully deleted'));
93
+ $this->_redirect('*/*/');
94
+ } catch (Exception $e) {
95
+ Mage::getSingleton('adminhtml/session')->addError($e->getMessage());
96
+ $this->_redirect('*/*/edit', array('id' => $this->getRequest()->getParam('id')));
97
+ }
98
+ }
99
+ $this->_redirect('*/*/');
100
+ }
101
+ }
app/code/community/VES/PdfPro/controllers/Adminhtml/PrintController.php ADDED
@@ -0,0 +1,328 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * VES_PdfPro_Adminhtml_PrintController
4
+ *
5
+ * @author VnEcoms Team <support@vnecoms.com>
6
+ * @website http://www.vnecoms.com
7
+ */
8
+
9
+ class VES_PdfPro_Adminhtml_PrintController extends Mage_Adminhtml_Controller_Action
10
+ {
11
+ /**
12
+ * Print an Order
13
+ */
14
+ public function orderAction(){
15
+ $orderId = $this->getRequest()->getParam('order_id');
16
+ if (empty($orderId)) {
17
+ Mage::getSingleton('adminhtml/session')->addError('There is no order to process');
18
+ $this->_redirect('adminhtml/sales_order');
19
+ return;
20
+ }
21
+
22
+ $order = Mage::getModel('sales/order')->load($orderId);
23
+ if(!$order->getId()){$this->_forward('no-route');return;}
24
+ $orderData= Mage::getModel('pdfpro/order')->initOrderData($order);
25
+ try{
26
+ $result = Mage::helper('pdfpro')->initPdf(array($orderData),'order');
27
+ if($result['success']){
28
+ $this->_prepareDownloadResponse(Mage::helper('pdfpro')->getFileName('order',$order).'.pdf', $result['content']);
29
+ }else{
30
+ throw new Mage_Core_Exception($result['msg']);
31
+ }
32
+ }catch(Exception $e){
33
+ Mage::getSingleton('core/session')->addError($e->getMessage());
34
+ $this->_redirect('adminhtml/sales_order/view',array('order_id'=>$orderId));
35
+ }
36
+ }
37
+
38
+ /**
39
+ * Print Orders
40
+ */
41
+ public function ordersAction(){
42
+ $orderIds = $this->getRequest()->getParam('order_ids');
43
+ if (empty($orderIds)) {
44
+ Mage::getSingleton('adminhtml/session')->addError('There is no order to process');
45
+ $this->_redirect('adminhtml/sales_order');
46
+ return;
47
+ }
48
+ $orderDatas = array();
49
+ foreach($orderIds as $orderId){
50
+ $order = Mage::getModel('sales/order')->load($orderId);
51
+ if(!$order->getId()){continue;}
52
+ $orderDatas[] = Mage::getModel('pdfpro/order')->initOrderData($order);
53
+ }
54
+ try{
55
+ $result = Mage::helper('pdfpro')->initPdf($orderDatas,'order');
56
+ if($result['success']){
57
+ $this->_prepareDownloadResponse(Mage::helper('pdfpro')->getFileName('orders').'.pdf', $result['content']);
58
+ }else{
59
+ throw new Mage_Core_Exception($result['msg']);
60
+ }
61
+ }catch(Exception $e){
62
+ Mage::getSingleton('core/session')->addError($e->getMessage());
63
+ $this->_redirect('adminhtml/sales_order/index');
64
+ }
65
+ }
66
+
67
+
68
+ /**
69
+ * Print An Invoice
70
+ */
71
+ public function invoiceAction(){
72
+ $invoiceId = $this->getRequest()->getParam('invoice_id');
73
+ $invoice = Mage::getModel('sales/order_invoice')->load($invoiceId);
74
+ if (!$invoice->getId()) {
75
+ $this->_getSession()->addError($this->__('The invoice no longer exists.'));
76
+ $this->_forward('no-route');
77
+ return;
78
+ }
79
+ $invoiceData = Mage::getModel('pdfpro/order_invoice')->initInvoiceData($invoice);
80
+ try{
81
+ $result = Mage::helper('pdfpro')->initPdf(array($invoiceData));
82
+ if($result['success']){
83
+ $this->_prepareDownloadResponse(Mage::helper('pdfpro')->getFileName('invoice',$invoice).'.pdf', $result['content']);
84
+ }else{
85
+ throw new Mage_Core_Exception($result['msg']);
86
+ }
87
+ }catch(Exception $e){
88
+ Mage::getSingleton('adminhtml/session')->addError($e->getMessage());
89
+ $this->_redirect('adminhtml/sales_order_invoice/view',array('invoice_id'=>$invoiceId));
90
+ }
91
+ }
92
+
93
+
94
+ /**
95
+ * Print invoices
96
+ */
97
+ public function invoicesAction(){
98
+ $orderIds = $this->getRequest()->getParam('order_ids');
99
+ $invoiceIds = $this->getRequest()->getParam('invoice_ids');
100
+ $flag = false;
101
+ if (!empty($orderIds) || !empty($invoiceIds)) {
102
+ $invoiceDatas = array();
103
+ $invoices = Mage::getResourceModel('sales/order_invoice_collection')->addAttributeToSelect('*');
104
+ if(!empty($orderIds)){
105
+ $invoices->addFieldToFilter('order_id',array('in',$orderIds));
106
+ }else if(!empty($invoiceIds)){
107
+ $invoices->addFieldToFilter('entity_id',array('in',$invoiceIds));
108
+ }
109
+ $invoices->load();
110
+ if($invoices->count() > 0) $flag = true;
111
+ foreach($invoices as $invoice){
112
+ $invoiceDatas[] = Mage::getModel('pdfpro/order_invoice')->initInvoiceData($invoice);
113
+ }
114
+ if ($flag) {
115
+ try{
116
+ $result = Mage::helper('pdfpro')->initPdf($invoiceDatas);
117
+ if($result['success']){
118
+ $this->_prepareDownloadResponse(Mage::helper('pdfpro')->getFileName('invoices').'.pdf', $result['content']);
119
+ }else{
120
+ throw new Mage_Core_Exception($result['msg']);
121
+ }
122
+ }catch(Exception $e){
123
+ Mage::getSingleton('adminhtml/session')->addError($e->getMessage());
124
+ if(!empty($orderIds)) $this->_redirect('adminhtml/sales_order/index');
125
+ else $this->_redirect('adminhtml/sales_invoice/index');
126
+ }
127
+ } else {
128
+ if(!empty($orderIds)){
129
+ $this->_getSession()->addError($this->__('There are no printable documents related to selected orders.'));
130
+ }else{
131
+ $this->_getSession()->addError($this->__('There are no printable documents related to selected invoices.'));
132
+ }
133
+ if(!empty($orderIds)) $this->_redirect('adminhtml/sales_order/index');
134
+ else $this->_redirect('adminhtml/sales_invoice/index');
135
+ }
136
+ }
137
+ }
138
+
139
+ /**
140
+ * Print A Packingslip
141
+ */
142
+ public function shipmentAction(){
143
+ $shipmentId = $this->getRequest()->getParam('shipment_id');
144
+ $shipment = Mage::getModel('sales/order_shipment')->load($shipmentId);
145
+ if (!$shipment->getId()) {
146
+ $this->_getSession()->addError($this->__('The shipment no longer exists.'));
147
+ $this->_forward('no-route');
148
+ return;
149
+ }
150
+ $shipmentData = Mage::getModel('pdfpro/order_shipment')->initShipmentData($shipment);
151
+ try{
152
+ $result = Mage::helper('pdfpro')->initPdf(array($shipmentData),'shipment');
153
+ if($result['success']){
154
+ $this->_prepareDownloadResponse(Mage::helper('pdfpro')->getFileName('shipment',$shipment).'.pdf', $result['content']);
155
+ }else{
156
+ throw new Mage_Core_Exception($result['msg']);
157
+ }
158
+ }catch(Exception $e){
159
+ Mage::getSingleton('adminhtml/session')->addError($e->getMessage());
160
+ $this->_redirect('adminhtml/sales_order_shipment/view',array('shipment_id'=>$shipmentId));
161
+ }
162
+ }
163
+
164
+ /**
165
+ * Print Packingslips
166
+ */
167
+ public function shipmentsAction(){
168
+ $orderIds = $this->getRequest()->getPost('order_ids');
169
+ $shipmentIds = $this->getRequest()->getParam('shipment_ids');
170
+ if (!empty($orderIds) || !empty($shipmentIds)) {
171
+ $shipments = Mage::getResourceModel('sales/order_shipment_collection')->addAttributeToSelect('*');
172
+ if(!empty($orderIds)){
173
+ $shipments->addFieldToFilter('order_id',array('in',$orderIds));
174
+ }else if(!empty($shipmentIds)){
175
+ $shipments->addFieldToFilter('entity_id',array('in',$shipmentIds));
176
+ }
177
+ $shipments->load();
178
+ if ($shipments->getSize()) {
179
+ $shipmentDatas = array();
180
+ foreach($shipments as $shipment){
181
+ $shipmentDatas[] = Mage::getModel('pdfpro/order_shipment')->initShipmentData($shipment);
182
+ }
183
+ try{
184
+ $result = Mage::helper('pdfpro')->initPdf($shipmentDatas,'shipment');
185
+ if($result['success']){
186
+ $this->_prepareDownloadResponse(Mage::helper('pdfpro')->getFileName('shipments').'.pdf', $result['content']);
187
+ }else{
188
+ throw new Mage_Core_Exception($result['msg']);
189
+ }
190
+ }catch(Exception $e){
191
+ Mage::getSingleton('adminhtml/session')->addError($e->getMessage());
192
+ if(!empty($orderIds)) $this->_redirect('adminhtml/sales_order/index');
193
+ else $this->_redirect('adminhtml/sales_shipment/index');
194
+ }
195
+ } else {
196
+ $this->_getSession()->addError($this->__('There are no printable documents related to selected orders.'));
197
+ if(!empty($orderIds)) $this->_redirect('adminhtml/sales_order/index');
198
+ else $this->_redirect('adminhtml/sales_shipment/index');
199
+ }
200
+ }
201
+ }
202
+
203
+ /**
204
+ * Print A Packingslip
205
+ */
206
+ public function creditmemoAction(){
207
+ $creditmemoId = $this->getRequest()->getParam('creditmemo_id');
208
+ $creditmemo = Mage::getModel('sales/order_creditmemo')->load($creditmemoId);
209
+ if (!$creditmemo->getId()) {
210
+ $this->_getSession()->addError($this->__('The shipment no longer exists.'));
211
+ $this->_forward('no-route');
212
+ return;
213
+ }
214
+ $creditmemoData = Mage::getModel('pdfpro/order_creditmemo')->initCreditmemoData($creditmemo);
215
+ try{
216
+ $result = Mage::helper('pdfpro')->initPdf(array($creditmemoData),'creditmemo');
217
+ if($result['success']){
218
+ $this->_prepareDownloadResponse(Mage::helper('pdfpro')->getFileName('creditmemo',$creditmemo).'.pdf', $result['content']);
219
+ }else{
220
+ throw new Mage_Core_Exception($result['msg']);
221
+ }
222
+ }catch(Exception $e){
223
+ Mage::getSingleton('adminhtml/session')->addError($e->getMessage());
224
+ $this->_redirect('adminhtml/sales_order_creditmemo/view',array('creditmemo_id'=>$creditmemoId));
225
+ }
226
+ }
227
+
228
+ /**
229
+ * Print Packingslips
230
+ */
231
+ public function creditmemosAction(){
232
+ $orderIds = $this->getRequest()->getPost('order_ids');
233
+ $creditmemoIds = $this->getRequest()->getParam('creditmemo_ids');
234
+ if (!empty($orderIds) || !empty($creditmemoIds)) {
235
+ $creditmemos = Mage::getResourceModel('sales/order_creditmemo_collection')->addAttributeToSelect('*');
236
+ if(!empty($orderIds)){
237
+ $creditmemos->addFieldToFilter('order_id',array('in',$orderIds));
238
+ }else if(!empty($creditmemoIds)){
239
+ $creditmemos->addFieldToFilter('entity_id',array('in',$creditmemoIds));
240
+ }
241
+ $creditmemos->load();
242
+ if ($creditmemos->getSize()) {
243
+ $creditmemoDatas = array();
244
+ foreach($creditmemos as $creditmemo){
245
+ $creditmemoDatas[] = Mage::getModel('pdfpro/order_creditmemo')->initCreditmemoData($creditmemo);
246
+ }
247
+ try{
248
+ $result = Mage::helper('pdfpro')->initPdf($creditmemoDatas,'creditmemo');
249
+ if($result['success']){
250
+ $this->_prepareDownloadResponse(Mage::helper('pdfpro')->getFileName('creditmemos').'.pdf', $result['content']);
251
+ }else{
252
+ throw new Mage_Core_Exception($result['msg']);
253
+ }
254
+ }catch(Exception $e){
255
+ Mage::getSingleton('adminhtml/session')->addError($e->getMessage());
256
+ if(!empty($orderIds)) $this->_redirect('adminhtml/sales_order/index');
257
+ else $this->_redirect('adminhtml/sales_creditmemo/index');
258
+ }
259
+ } else {
260
+ $this->_getSession()->addError($this->__('There are no printable documents related to selected orders.'));
261
+ if(!empty($orderIds)) $this->_redirect('adminhtml/sales_order/index');
262
+ else $this->_redirect('adminhtml/sales_creditmemo/index');
263
+ }
264
+ }
265
+ }
266
+ /**
267
+ * Print All
268
+ */
269
+ public function allAction(){
270
+ $orderIds = $this->getRequest()->getPost('order_ids');
271
+ $data = array();
272
+ $canPrint = false;
273
+ foreach($orderIds as $orderId){
274
+ $item = array();
275
+ $order = Mage::getModel('sales/order')->load($orderId);
276
+ /*Init order data*/
277
+ if(Mage::getStoreConfig('pdfpro/config/admin_print_order')){
278
+ $item['order'][] = Mage::getModel('pdfpro/order')->initOrderData($order);
279
+ $canPrint = true;
280
+ }
281
+ /*Init invoice data*/
282
+ $invoices = Mage::getResourceModel('sales/order_invoice_collection')->addAttributeToSelect('*')->addFieldToFilter('order_id',$orderId);
283
+ if($invoices->count() > 0){
284
+ $invoiceDatas = array();
285
+ foreach($invoices as $invoice){
286
+ $invoiceDatas[] = Mage::getModel('pdfpro/order_invoice')->initInvoiceData($invoice);
287
+ }
288
+ $item['invoice'] = $invoiceDatas;
289
+ $canPrint = true;
290
+ }
291
+
292
+ /*Init shipment data*/
293
+ $shipments = Mage::getResourceModel('sales/order_shipment_collection')->addAttributeToSelect('*')->addFieldToFilter('order_id',$orderId);
294
+ if($shipments->count() > 0){
295
+ $shipmentDatas = array();
296
+ foreach($shipments as $shipment){
297
+ $shipmentDatas[] = Mage::getModel('pdfpro/order_shipment')->initShipmentData($shipment);
298
+ }
299
+ $item['shipment'] = $shipmentDatas;
300
+ $canPrint = true;
301
+ }
302
+
303
+ /*Init credit memo data*/
304
+ $creditmemos = Mage::getResourceModel('sales/order_creditmemo_collection')->addAttributeToSelect('*')->addFieldToFilter('order_id',$orderId);
305
+ if($creditmemos->count() > 0){
306
+ $creditmemoDatas = array();
307
+ foreach($creditmemos as $creditmemo){
308
+ $creditmemoDatas[] = Mage::getModel('pdfpro/order_creditmemo')->initCreditmemoData($creditmemo);
309
+ }
310
+ $item['creditmemo'] = $creditmemoDatas;
311
+ $canPrint = true;
312
+ }
313
+ $data[] = $item;
314
+ }
315
+ try{
316
+ if(!$canPrint){throw new Mage_Core_Exception($this->__('There are no printable documents related to selected orders.'));}
317
+ $result = Mage::helper('pdfpro')->initPdf($data,'all');
318
+ if($result['success']){
319
+ $this->_prepareDownloadResponse(Mage::helper('pdfpro')->getFileName('all').'.pdf', $result['content']);
320
+ }else{
321
+ throw new Mage_Core_Exception($result['msg']);
322
+ }
323
+ }catch(Exception $e){
324
+ Mage::getSingleton('adminhtml/session')->addError($e->getMessage());
325
+ $this->_redirect('adminhtml/sales_order/index');
326
+ }
327
+ }
328
+ }
app/code/community/VES/PdfPro/controllers/GuestController.php ADDED
@@ -0,0 +1,285 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * VES_PdfPro_OrderController
4
+ * @extends Mage_Sales_Controller_Abstract
5
+ * @extends Mage_Core_Controller_Front_Action parent
6
+ *
7
+ * @author VnEcoms Team <support@vnecoms.com>
8
+ * @website http://www.vnecoms.com
9
+ */
10
+ class VES_PdfPro_GuestController extends VES_PdfPro_Controller_Abstract
11
+ {
12
+ /**
13
+ * Check order view availability
14
+ *
15
+ * @param Mage_Sales_Model_Order $order
16
+ * @return bool
17
+ */
18
+ protected function _canViewOrder($order)
19
+ {
20
+ $currentOrder = Mage::registry('current_order');
21
+ if ($order->getId() && ($order->getId() === $currentOrder->getId())) {
22
+ return true;
23
+ }
24
+ return false;
25
+ }
26
+ /**
27
+ * Try to load valid order and register it
28
+ *
29
+ * @param int $orderId
30
+ * @return bool
31
+ */
32
+ protected function _loadValidOrder($orderId = null)
33
+ {
34
+ return Mage::helper('sales/guest')->loadValidOrder();
35
+ }
36
+
37
+ public function printOrderAction(){
38
+ if (!$this->_loadValidOrder()) {
39
+ return;
40
+ }
41
+ if(!Mage::getStoreConfig('pdfpro/config/enabled') || !Mage::getStoreConfig('pdfpro/config/allow_customer_print')){$this->_forward('no-route');return; }
42
+ $orderId = $this->getRequest()->getParam('order_id');
43
+ $order = Mage::getModel('sales/order')->load($orderId);
44
+
45
+ $orderData = Mage::getModel('pdfpro/order')->initOrderData($order);
46
+ try{
47
+ $result = Mage::helper('pdfpro')->initPdf(array($orderData),'order');
48
+ if($result['success']){
49
+ $this->_prepareDownloadResponse('order'.Mage::getSingleton('core/date')->date('Y-m-d_H-i-s').'.pdf', $result['content']);
50
+ }else{
51
+ throw new Mage_Core_Exception($result['msg']);
52
+ }
53
+ }catch(Exception $e){
54
+ Mage::getSingleton('core/session')->addError($e->getMessage());
55
+ $this->_redirect('sales/guest/view' , array('order_id'=>$orderId));
56
+ }
57
+ }
58
+
59
+ /**
60
+ * Print An Invoice
61
+ */
62
+ public function printInvoiceAction(){
63
+ if(!Mage::getStoreConfig('pdfpro/config/allow_customer_print')){$this->_forward('no-route');return; }
64
+ if (!$this->_loadValidOrder()) {
65
+ return;
66
+ }
67
+ $invoiceId = $this->getRequest()->getParam('invoice_id'); //invoice id
68
+ $invoice = Mage::getModel('sales/order_invoice')->load($invoiceId); //invoice model with id
69
+
70
+ if(!$invoice->getId()) {
71
+ Mage::getSingleton('core/session')->addError($this->__('The invoice is no longer exists.'));
72
+ $this->_redirect('sales/guest/form');
73
+ return;
74
+ }
75
+
76
+ //if can view order
77
+ if($this->_canViewOrder($invoice->getOrder())) {
78
+ $invoiceData = Mage::getModel('pdfpro/order_invoice')->initInvoiceData($invoice);
79
+ try{
80
+ $result = Mage::helper('pdfpro')->initPdf(array($invoiceData));
81
+ if($result['success']){
82
+ $this->_prepareDownloadResponse('invoice'.Mage::getSingleton('core/date')->date('Y-m-d_H-i-s').'.pdf', $result['content']);
83
+ }else{
84
+ throw new Mage_Core_Exception($result['msg']);
85
+ }
86
+ }catch(Exception $e){
87
+ Mage::getSingleton('core/session')->addError($e->getMessage());
88
+ $this->_redirect('sales/guest/invoice' , array('order_id'=>$invoice->getOrder()->getId()));
89
+ }
90
+ }else {
91
+ $this->_redirect('sales/guest/form');
92
+ }
93
+ }
94
+
95
+
96
+ /**
97
+ * Print invoices
98
+ */
99
+ public function printInvoicesAction(){
100
+ if(!Mage::getStoreConfig('pdfpro/config/allow_customer_print')){$this->_forward('no-route');return; }
101
+ if (!$this->_loadValidOrder()) {
102
+ return;
103
+ }
104
+ $orderId = $this->getRequest()->getParam('order_id');
105
+ $order = Mage::getModel('sales/order')->load($orderId);
106
+
107
+ //if can view order
108
+ if($this->_canViewOrder($order)) {
109
+ $invoices = Mage::getResourceModel('sales/order_invoice_collection')->addAttributeToSelect('*')
110
+ ->setOrderFilter($orderId)
111
+ ->load(); //invoices data from order
112
+
113
+ if($invoices->count() > 0) {
114
+ $invoiceDatas = array();
115
+ foreach($invoices as $invoice) {
116
+ $invoiceDatas[] = Mage::getModel('pdfpro/order_invoice')->initInvoiceData($invoice);
117
+ }
118
+ try{
119
+ $result = Mage::helper('pdfpro')->initPdf($invoiceDatas);
120
+ if($result['success']){
121
+ $this->_prepareDownloadResponse('invoice'.Mage::getSingleton('core/date')->date('Y-m-d_H-i-s').'.pdf', $result['content']);
122
+ }else{
123
+ throw new Mage_Core_Exception($result['msg']);
124
+ }
125
+ }catch(Exception $e) {
126
+ Mage::getSingleton('core/session')->addError($e->getMessage());
127
+ $this->_redirect('sales/guest/invoice' , array('order_id'=>$orderId));
128
+ }
129
+ }
130
+ }else {
131
+ $this->_redirect('sales/guest/form');
132
+ }
133
+ }
134
+
135
+ /**
136
+ * Print a shipment
137
+ */
138
+ public function printShipmentAction(){
139
+ if(!Mage::getStoreConfig('pdfpro/config/allow_customer_print')){$this->_forward('no-route');return; }
140
+ if (!$this->_loadValidOrder()) {
141
+ return;
142
+ }
143
+ $shipmentId = $this->getRequest()->getParam('shipment_id');
144
+ $shipment = Mage::getModel('sales/order_shipment')->load($shipmentId);
145
+
146
+ if(!$shipment->getId()) {
147
+ Mage::getSingleton('core/session')->addError($this->__('The shipment is no longer exists.'));
148
+ $this->_redirect('sales/guest/form');
149
+ return;
150
+ }
151
+
152
+ //if can view order
153
+ if($this->_canViewOrder($shipment->getOrder())) {
154
+ $shipmentData = Mage::getModel('pdfpro/order_shipment')->initShipmentData($shipment);
155
+ try{
156
+ $result = Mage::helper('pdfpro')->initPdf(array($shipmentData),'shipment');
157
+ if($result['success']){
158
+ $this->_prepareDownloadResponse('packingslip'.Mage::getSingleton('core/date')->date('Y-m-d_H-i-s').'.pdf', $result['content']);
159
+ }else{
160
+ throw new Mage_Core_Exception($result['msg']);
161
+ }
162
+ }catch(Exception $e){
163
+ Mage::getSingleton('core/session')->addError($e->getMessage());
164
+ $this->_redirect('sales/guest/shipment',array('order_id'=>$shipment->getOrder()->getId()));
165
+ }
166
+ }else {
167
+ $this->_redirect('sales/guest/form');
168
+ }
169
+ }
170
+
171
+
172
+ /**
173
+ * Print shipments
174
+ */
175
+ public function printShipmentsAction(){
176
+ if(!Mage::getStoreConfig('pdfpro/config/allow_customer_print')){$this->_forward('no-route');return; }
177
+ if (!$this->_loadValidOrder()) {
178
+ return;
179
+ }
180
+ $orderId = $this->getRequest()->getParam('order_id');
181
+ $order = Mage::getModel('sales/order')->load($orderId);
182
+
183
+ //if can view order
184
+ if($this->_canViewOrder($order)) {
185
+ $shipments = Mage::getResourceModel('sales/order_shipment_collection')->addAttributeToSelect('*')
186
+ ->setOrderFilter($orderId)
187
+ ->load(); //invoices data from order
188
+
189
+ if($shipments->count() > 0) {
190
+ $shipmentDatas = array();
191
+ foreach($shipments as $shipment) {
192
+ $shipmentDatas[] = Mage::getModel('pdfpro/order_shipment')->initShipmentData($shipment);
193
+ }
194
+ try{
195
+ $result = Mage::helper('pdfpro')->initPdf($shipmentDatas,'shipment');
196
+ if($result['success']){
197
+ $this->_prepareDownloadResponse('packingslip'.Mage::getSingleton('core/date')->date('Y-m-d_H-i-s').'.pdf', $result['content']);
198
+ }else{
199
+ throw new Mage_Core_Exception($result['msg']);
200
+ }
201
+ }catch(Exception $e) {
202
+ Mage::getSingleton('core/session')->addError($e->getMessage());
203
+ $this->_redirect('sales/guest/shipment',array('order_id'=>$orderId));
204
+ }
205
+ }
206
+ }else {
207
+ $this->_redirect('sales/guest/form');
208
+ }
209
+ }
210
+ /**
211
+ * Print a shipment
212
+ */
213
+ public function printCreditmemoAction(){
214
+ if(!Mage::getStoreConfig('pdfpro/config/allow_customer_print')){$this->_forward('no-route');return; }
215
+ if (!$this->_loadValidOrder()) {
216
+ return;
217
+ }
218
+ $creditmemoId = $this->getRequest()->getParam('creditmemo_id');
219
+ $creditmemo = Mage::getModel('sales/order_creditmemo')->load($creditmemoId);
220
+
221
+ if(!$creditmemo->getId()) {
222
+ Mage::getSingleton('core/session')->addError($this->__('The invoice no longer exists.'));
223
+ $this->_redirect('sales/guest/form');
224
+ return;
225
+ }
226
+
227
+ //if can view order
228
+ if($this->_canViewOrder($creditmemo->getOrder())) {
229
+ $creditmemoData = Mage::getModel('pdfpro/order_creditmemo')->initCreditmemoData($creditmemo);
230
+ try{
231
+ $result = Mage::helper('pdfpro')->initPdf(array($creditmemoData),'creditmemo');
232
+ if($result['success']){
233
+ $this->_prepareDownloadResponse('creditmemo'.Mage::getSingleton('core/date')->date('Y-m-d_H-i-s').'.pdf', $result['content']);
234
+ }else{
235
+ throw new Mage_Core_Exception($result['msg']);
236
+ }
237
+ }catch(Exception $e){
238
+ Mage::getSingleton('core/session')->addError($e->getMessage());
239
+ $this->_redirect('sales/guest/creditmemo',array('order_id'=>$creditmemo->getOrder()->getId()));
240
+ }
241
+ }else {
242
+ $this->_redirect('sales/guest/form');
243
+ }
244
+ }
245
+
246
+
247
+ /**
248
+ * Print shipments
249
+ */
250
+ public function printCreditmemosAction(){
251
+ if(!Mage::getStoreConfig('pdfpro/config/allow_customer_print')){$this->_forward('no-route');return; }
252
+ if (!$this->_loadValidOrder()) {
253
+ return;
254
+ }
255
+ $orderId = $this->getRequest()->getParam('order_id');
256
+ $order = Mage::getModel('sales/order')->load($orderId);
257
+
258
+ //if can view order
259
+ if($this->_canViewOrder($order)) {
260
+ $creditmemos = Mage::getResourceModel('sales/order_creditmemo_collection')->addAttributeToSelect('*')
261
+ ->setOrderFilter($orderId)
262
+ ->load(); //invoices data from order
263
+
264
+ if($creditmemos->count() > 0) {
265
+ $creditmemoDatas = array();
266
+ foreach($creditmemos as $creditmemo) {
267
+ $creditmemoDatas[] = Mage::getModel('pdfpro/order_creditmemo')->initCreditmemoData($creditmemo);
268
+ }
269
+ try{
270
+ $result = Mage::helper('pdfpro')->initPdf($creditmemoDatas,'creditmemo');
271
+ if($result['success']){
272
+ $this->_prepareDownloadResponse('creditmemo'.Mage::getSingleton('core/date')->date('Y-m-d_H-i-s').'.pdf', $result['content']);
273
+ }else{
274
+ throw new Mage_Core_Exception($result['msg']);
275
+ }
276
+ }catch(Exception $e) {
277
+ Mage::getSingleton('core/session')->addError($e->getMessage());
278
+ $this->_redirect('sales/guest/creditmemo',array('order_id'=>$orderId));
279
+ }
280
+ }
281
+ }else {
282
+ $this->_redirect('sales/guest/form');
283
+ }
284
+ }
285
+ }
app/code/community/VES/PdfPro/controllers/PrintController.php ADDED
@@ -0,0 +1,344 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * VES_PdfPro_OrderController
4
+ * @extends Mage_Sales_Controller_Abstract
5
+ * @extends Mage_Core_Controller_Front_Action parent
6
+ *
7
+ * @author VnEcoms Team <support@vnecoms.com>
8
+ * @website http://www.vnecoms.com
9
+ */
10
+
11
+ class VES_PdfPro_PrintController extends VES_PdfPro_Controller_Abstract
12
+ {
13
+
14
+ public function orderAction(){
15
+ if (!$this->_loadValidOrder()) {
16
+ return;
17
+ }
18
+ if(!Mage::getStoreConfig('pdfpro/config/enabled') || !Mage::getStoreConfig('pdfpro/config/allow_customer_print')){$this->_forward('no-route');return; }
19
+ $orderId = $this->getRequest()->getParam('order_id');
20
+ $order = Mage::getModel('sales/order')->load($orderId);
21
+ if(!$order->getId()){$this->_forward('no-route');return;}
22
+
23
+ $orderData = Mage::getModel('pdfpro/order')->initOrderData($order);
24
+ try{
25
+ $result = Mage::helper('pdfpro')->initPdf(array($orderData),'order');
26
+ if($result['success']){
27
+ $this->_prepareDownloadResponse(Mage::helper('pdfpro')->getFileName('order',$order).'.pdf', $result['content']);
28
+ }else{
29
+ throw new Mage_Core_Exception($result['msg']);
30
+ }
31
+ }catch(Exception $e){
32
+ Mage::getSingleton('core/session')->addError($e->getMessage());
33
+ $this->_redirect('sales/order/view' , array('order_id'=>$orderId));
34
+ }
35
+ }
36
+
37
+ /**
38
+ * Print An Invoice
39
+ */
40
+ public function invoiceAction(){
41
+ if(!Mage::getStoreConfig('pdfpro/config/allow_customer_print')){$this->_forward('no-route');return; }
42
+
43
+ $invoiceId = $this->getRequest()->getParam('invoice_id'); //invoice id
44
+ $invoice = Mage::getModel('sales/order_invoice')->load($invoiceId); //invoice model with id
45
+
46
+ if(!$invoice->getId()) {
47
+ Mage::getSingleton('core/session')->addError($this->__('The invoice no longer exists.'));
48
+ if(Mage::getSingleton('customer/session')->isLoggedIn()) {
49
+ $this->_redirect('sales/order/history');
50
+ }else {
51
+ $this->_redirect('sales/guest/form');
52
+ }
53
+ return;
54
+ }
55
+
56
+ //if can view order
57
+ if($this->_canViewOrder($invoice->getOrder())) {
58
+ $invoiceData = Mage::getModel('pdfpro/order_invoice')->initInvoiceData($invoice);
59
+ try{
60
+ $result = Mage::helper('pdfpro')->initPdf(array($invoiceData));
61
+ if($result['success']){
62
+ $this->_prepareDownloadResponse(Mage::helper('pdfpro')->getFileName('invoice',$invoice).'.pdf', $result['content']);
63
+ }else{
64
+ throw new Mage_Core_Exception($result['msg']);
65
+ }
66
+ }catch(Exception $e){
67
+ Mage::getSingleton('core/session')->addError($e->getMessage());
68
+ $this->_redirect('sales/order/invoice' , array('order_id'=>$invoice->getOrder()->getId()));
69
+ }
70
+ }else {
71
+ if (Mage::getSingleton('customer/session')->isLoggedIn()) {
72
+ Mage::getSingleton('core/session')->addError($this->__('You don\'t have that invoice.'));
73
+ $this->_redirect('sales/order/history');
74
+ } else {
75
+ Mage::getSingleton('core/session')->addError($this->__('You are not login. Please login to try.'));
76
+ $this->_redirect('sales/guest/form');
77
+ }
78
+ }
79
+ }
80
+
81
+
82
+ /**
83
+ * Print invoices
84
+ */
85
+ public function invoicesAction(){
86
+ if(!Mage::getStoreConfig('pdfpro/config/allow_customer_print')){$this->_forward('no-route');return; }
87
+ //$flag = false;
88
+ $orderId = $this->getRequest()->getParam('order_id');
89
+ $order = Mage::getModel('sales/order')->load($orderId);
90
+
91
+ //order not exist
92
+ if(!$order->getId()) {
93
+ Mage::getSingleton('core/session')->addError($this->__('The order no longer exists.'));
94
+ if(Mage::getSingleton('customer/session')->isLoggedIn()) {
95
+ //login
96
+ $this->_redirect('sales/order/history');
97
+ }else {
98
+ //not login
99
+ $this->_redirect('sales/guest/form');
100
+ }
101
+ return;
102
+ }
103
+
104
+ //if can view order
105
+ if($this->_canViewOrder($order)) {
106
+ $invoices = Mage::getResourceModel('sales/order_invoice_collection')->addAttributeToSelect('*')
107
+ ->setOrderFilter($orderId)
108
+ ->load(); //invoices data from order
109
+
110
+ if($invoices->count() > 0) {
111
+ $invoiceDatas = array();
112
+ foreach($invoices as $invoice) {
113
+ $invoiceDatas[] = Mage::getModel('pdfpro/order_invoice')->initInvoiceData($invoice);
114
+ }
115
+ try{
116
+ $result = Mage::helper('pdfpro')->initPdf($invoiceDatas);
117
+ if($result['success']){
118
+ $this->_prepareDownloadResponse(Mage::helper('pdfpro')->getFileName('invoices').'.pdf', $result['content']);
119
+ }else{
120
+ throw new Mage_Core_Exception($result['msg']);
121
+ }
122
+ }catch(Exception $e) {
123
+ Mage::getSingleton('core/session')->addError($e->getMessage());
124
+ $this->_redirect('sales/order/invoice' , array('order_id'=>$orderId));
125
+ }
126
+ }
127
+ }else {
128
+ //login-not have order
129
+ if (Mage::getSingleton('customer/session')->isLoggedIn()) {
130
+ Mage::getSingleton('core/session')->addError($this->__('You don\'t have that order.'));
131
+ $this->_redirect('sales/order/history');
132
+ } else {
133
+ //not login-not have order
134
+ Mage::getSingleton('core/session')->addError($this->__('You are not login. Please login to try.'));
135
+ $this->_redirect('sales/guest/form');
136
+ }
137
+ }
138
+ }
139
+
140
+ /**
141
+ * Print a shipment
142
+ */
143
+ public function shipmentAction(){
144
+ if(!Mage::getStoreConfig('pdfpro/config/allow_customer_print')){$this->_forward('no-route');return; }
145
+
146
+ $shipmentId = $this->getRequest()->getParam('shipment_id');
147
+ $shipment = Mage::getModel('sales/order_shipment')->load($shipmentId);
148
+
149
+ if(!$shipment->getId()) {
150
+ Mage::getSingleton('core/session')->addError($this->__('The invoice no longer exists.'));
151
+ if(Mage::getSingleton('customer/session')->isLoggedIn()) {
152
+ $this->_redirect('sales/order/history');
153
+ }else {
154
+ $this->_redirect('sales/guest/form');
155
+ }
156
+ return;
157
+ }
158
+
159
+ //if can view order
160
+ if($this->_canViewOrder($shipment->getOrder())) {
161
+ $shipmentData = Mage::getModel('pdfpro/order_shipment')->initShipmentData($shipment);
162
+ try{
163
+ $result = Mage::helper('pdfpro')->initPdf(array($shipmentData),'shipment');
164
+ if($result['success']){
165
+ $this->_prepareDownloadResponse(Mage::helper('pdfpro')->getFileName('shipment',$shipment).'.pdf', $result['content']);
166
+ }else{
167
+ throw new Mage_Core_Exception($result['msg']);
168
+ }
169
+ }catch(Exception $e){
170
+ Mage::getSingleton('core/session')->addError($e->getMessage());
171
+ $this->_redirect('sales/order/shipment',array('order_id'=>$shipment->getOrder()->getId()));
172
+ }
173
+ }else {
174
+ if (Mage::getSingleton('customer/session')->isLoggedIn()) {
175
+ Mage::getSingleton('core/session')->addError($this->__('You don\'t have that shipment.'));
176
+ $this->_redirect('sales/order/history');
177
+ } else {
178
+ Mage::getSingleton('core/session')->addError($this->__('You are not login. Please login to try.'));
179
+ $this->_redirect('sales/guest/form');
180
+ }
181
+ }
182
+ }
183
+
184
+
185
+ /**
186
+ * Print shipments
187
+ */
188
+ public function shipmentsAction(){
189
+ if(!Mage::getStoreConfig('pdfpro/config/allow_customer_print')){$this->_forward('no-route');return; }
190
+ //$flag = false;
191
+ $orderId = $this->getRequest()->getParam('order_id');
192
+ $order = Mage::getModel('sales/order')->load($orderId);
193
+
194
+ //order not exist
195
+ if(!$order->getId()) {
196
+ Mage::getSingleton('core/session')->addError($this->__('The order no longer exists.'));
197
+ if(Mage::getSingleton('customer/session')->isLoggedIn()) {
198
+ //login
199
+ $this->_redirect('sales/order/history');
200
+ }else {
201
+ //not login
202
+ $this->_redirect('sales/guest/form');
203
+ }
204
+ return;
205
+ }
206
+
207
+ //if can view order
208
+ if($this->_canViewOrder($order)) {
209
+ $shipments = Mage::getResourceModel('sales/order_shipment_collection')->addAttributeToSelect('*')
210
+ ->setOrderFilter($orderId)
211
+ ->load(); //invoices data from order
212
+
213
+ if($shipments->count() > 0) {
214
+ $shipmentDatas = array();
215
+ foreach($shipments as $shipment) {
216
+ $shipmentDatas[] = Mage::getModel('pdfpro/order_shipment')->initShipmentData($shipment);
217
+ }
218
+ try{
219
+ $result = Mage::helper('pdfpro')->initPdf($shipmentDatas,'shipment');
220
+ if($result['success']){
221
+ $this->_prepareDownloadResponse(Mage::helper('pdfpro')->getFileName('shipments').'.pdf', $result['content']);
222
+ }else{
223
+ throw new Mage_Core_Exception($result['msg']);
224
+ }
225
+ }catch(Exception $e) {
226
+ Mage::getSingleton('core/session')->addError($e->getMessage());
227
+ $this->_redirect('sales/order/shipment',array('order_id'=>$orderId));
228
+ }
229
+ }
230
+ }else {
231
+ //login-not have order
232
+ if (Mage::getSingleton('customer/session')->isLoggedIn()) {
233
+ Mage::getSingleton('core/session')->addError($this->__('You don\'t have that order.'));
234
+ $this->_redirect('sales/order/history');
235
+ } else {
236
+ //not login-not have order
237
+ Mage::getSingleton('core/session')->addError($this->__('You are not login. Please login to try.'));
238
+ $this->_redirect('sales/guest/form');
239
+ }
240
+ }
241
+ }
242
+ /**
243
+ * Print a shipment
244
+ */
245
+ public function creditmemoAction(){
246
+ if(!Mage::getStoreConfig('pdfpro/config/allow_customer_print')){$this->_forward('no-route');return; }
247
+
248
+ $creditmemoId = $this->getRequest()->getParam('creditmemo_id');
249
+ $creditmemo = Mage::getModel('sales/order_creditmemo')->load($creditmemoId);
250
+
251
+ if(!$creditmemo->getId()) {
252
+ Mage::getSingleton('core/session')->addError($this->__('The invoice no longer exists.'));
253
+ if(Mage::getSingleton('customer/session')->isLoggedIn()) {
254
+ $this->_redirect('sales/order/history');
255
+ }else {
256
+ $this->_redirect('sales/guest/form');
257
+ }
258
+ return;
259
+ }
260
+
261
+ //if can view order
262
+ if($this->_canViewOrder($creditmemo->getOrder())) {
263
+ $creditmemoData = Mage::getModel('pdfpro/order_creditmemo')->initCreditmemoData($creditmemo);
264
+ try{
265
+ $result = Mage::helper('pdfpro')->initPdf(array($creditmemoData),'creditmemo');
266
+ if($result['success']){
267
+ $this->_prepareDownloadResponse(Mage::helper('pdfpro')->getFileName('creditmemo',$creditmemo).'.pdf', $result['content']);
268
+ }else{
269
+ throw new Mage_Core_Exception($result['msg']);
270
+ }
271
+ }catch(Exception $e){
272
+ Mage::getSingleton('core/session')->addError($e->getMessage());
273
+ $this->_redirect('sales/order/creditmemo',array('order_id'=>$creditmemo->getOrder()->getId()));
274
+ }
275
+ }else {
276
+ if (Mage::getSingleton('customer/session')->isLoggedIn()) {
277
+ Mage::getSingleton('core/session')->addError($this->__('You don\'t have that shipment.'));
278
+ $this->_redirect('sales/order/history');
279
+ } else {
280
+ Mage::getSingleton('core/session')->addError($this->__('You are not login. Please login to try.'));
281
+ $this->_redirect('sales/guest/form');
282
+ }
283
+ }
284
+ }
285
+
286
+
287
+ /**
288
+ * Print shipments
289
+ */
290
+ public function creditmemosAction(){
291
+ if(!Mage::getStoreConfig('pdfpro/config/allow_customer_print')){$this->_forward('no-route');return; }
292
+ //$flag = false;
293
+ $orderId = $this->getRequest()->getParam('order_id');
294
+ $order = Mage::getModel('sales/order')->load($orderId);
295
+
296
+ //order not exist
297
+ if(!$order->getId()) {
298
+ Mage::getSingleton('core/session')->addError($this->__('The order no longer exists.'));
299
+ if(Mage::getSingleton('customer/session')->isLoggedIn()) {
300
+ //login
301
+ $this->_redirect('sales/order/history');
302
+ }else {
303
+ //not login
304
+ $this->_redirect('sales/guest/form');
305
+ }
306
+ return;
307
+ }
308
+
309
+ //if can view order
310
+ if($this->_canViewOrder($order)) {
311
+ $creditmemos = Mage::getResourceModel('sales/order_creditmemo_collection')->addAttributeToSelect('*')
312
+ ->setOrderFilter($orderId)
313
+ ->load(); //invoices data from order
314
+
315
+ if($creditmemos->count() > 0) {
316
+ $creditmemoDatas = array();
317
+ foreach($creditmemos as $creditmemo) {
318
+ $creditmemoDatas[] = Mage::getModel('pdfpro/order_creditmemo')->initCreditmemoData($creditmemo);
319
+ }
320
+ try{
321
+ $result = Mage::helper('pdfpro')->initPdf($creditmemoDatas,'creditmemo');
322
+ if($result['success']){
323
+ $this->_prepareDownloadResponse(Mage::helper('pdfpro')->getFileName('creditmemos').'.pdf', $result['content']);
324
+ }else{
325
+ throw new Mage_Core_Exception($result['msg']);
326
+ }
327
+ }catch(Exception $e) {
328
+ Mage::getSingleton('core/session')->addError($e->getMessage());
329
+ $this->_redirect('sales/order/creditmemo',array('order_id'=>$orderId));
330
+ }
331
+ }
332
+ }else {
333
+ //login-not have order
334
+ if (Mage::getSingleton('customer/session')->isLoggedIn()) {
335
+ Mage::getSingleton('core/session')->addError($this->__('You don\'t have that order.'));
336
+ $this->_redirect('sales/order/history');
337
+ } else {
338
+ //not login-not have order
339
+ Mage::getSingleton('core/session')->addError($this->__('You are not login. Please login to try.'));
340
+ $this->_redirect('sales/guest/form');
341
+ }
342
+ }
343
+ }
344
+ }
app/code/community/VES/PdfPro/etc/config.xml ADDED
@@ -0,0 +1,258 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0"?>
2
+ <config>
3
+ <modules>
4
+ <VES_PdfPro>
5
+ <version>0.1.0</version>
6
+ </VES_PdfPro>
7
+ </modules>
8
+ <frontend>
9
+ <routers>
10
+ <pdfpro>
11
+ <use>standard</use>
12
+ <args>
13
+ <module>VES_PdfPro</module>
14
+ <frontName>pdfpro</frontName>
15
+ </args>
16
+ </pdfpro>
17
+ </routers>
18
+ </frontend>
19
+ <admin>
20
+ <routers>
21
+ <pdfpro_cp>
22
+ <use>admin</use>
23
+ <args>
24
+ <module>VES_PdfPro</module>
25
+ <frontName>pdfpro_cp</frontName>
26
+ </args>
27
+ </pdfpro_cp>
28
+ </routers>
29
+ </admin>
30
+ <adminhtml>
31
+ <menu>
32
+ <pdfpro module="pdfpro" translate="title">
33
+ <title>Easy PDF</title>
34
+ <sort_order>80</sort_order>
35
+ <children>
36
+ <api_key>
37
+ <title>Manage Api Keys</title>
38
+ <sort_order>20</sort_order>
39
+ <action>pdfpro_cp/adminhtml_key/index</action>
40
+ </api_key>
41
+ <website module="pdfpro">
42
+ <title>Visit Website</title>
43
+ <sort_order>25</sort_order>
44
+ <action>www.easypdfinvoice.com</action>
45
+ </website>
46
+ <config module="pdfpro">
47
+ <title>Configuration</title>
48
+ <sort_order>30</sort_order>
49
+ <action>adminhtml/system_config/edit/section/pdfpro</action>
50
+ </config>
51
+ </children>
52
+ </pdfpro>
53
+ </menu>
54
+ <translate>
55
+ <modules>
56
+ <VES_PdfPro>
57
+ <files>
58
+ <default>VES_PdfPro.csv</default>
59
+ </files>
60
+ </VES_PdfPro>
61
+ </modules>
62
+ </translate>
63
+ <acl>
64
+ <resources>
65
+ <all>
66
+ <title>Allow Everything</title>
67
+ </all>
68
+ <admin>
69
+ <children>
70
+ <pdfpro>
71
+ <title>Easy PDF</title>
72
+ <children>
73
+ <api_key>
74
+ <title>Manage Api Keys</title>
75
+ </api_key>
76
+ <website module="pdfpro">
77
+ <title>Visit Website</title>
78
+ </website>
79
+ <config module="pdfpro">
80
+ <title>Configuration</title>
81
+ </config>
82
+ </children>
83
+ </pdfpro>
84
+ <system>
85
+ <children>
86
+ <config>
87
+ <children>
88
+ <pdfpro translate="title" module="pdfpro">
89
+ <title>Easy PDF Invoice</title>
90
+ </pdfpro>
91
+ </children>
92
+ </config>
93
+ </children>
94
+ </system>
95
+ </children>
96
+ </admin>
97
+ </resources>
98
+ </acl>
99
+ <layout>
100
+ <updates>
101
+ <pdfpro>
102
+ <file>ves_pdfpro.xml</file>
103
+ </pdfpro>
104
+ </updates>
105
+ </layout>
106
+ </adminhtml>
107
+ <global>
108
+ <easypdf_processors>
109
+ <easypdf>
110
+ <title>easypdfinvoice.com (remote server)</title>
111
+ <model>pdfpro/processors_easypdf</model>
112
+ </easypdf>
113
+ </easypdf_processors>
114
+ <easypdf_communication_method>
115
+ <soap>
116
+ <title>SOAP</title>
117
+ <model>pdfpro/communication_method_soap</model>
118
+ </soap>
119
+ <xml_rpc>
120
+ <title>XmlRpc</title>
121
+ <model>pdfpro/communication_method_xmlrpc</model>
122
+ </xml_rpc>
123
+ </easypdf_communication_method>
124
+ <events>
125
+ <ves_pdfpro_data_prepare_after>
126
+ <observers>
127
+ <pdfpro>
128
+ <class>pdfpro/observer</class>
129
+ <method>ves_pdfpro_data_prepare_after</method>
130
+ </pdfpro>
131
+ </observers>
132
+ </ves_pdfpro_data_prepare_after>
133
+ <core_block_abstract_prepare_layout_before>
134
+ <observers>
135
+ <pdfpro>
136
+ <class>pdfpro/observer</class>
137
+ <method>core_block_abstract_prepare_layout_before</method>
138
+ </pdfpro>
139
+ </observers>
140
+ </core_block_abstract_prepare_layout_before>
141
+ <core_block_abstract_to_html_before>
142
+ <observers>
143
+ <pdfpro>
144
+ <class>pdfpro/observer</class>
145
+ <method>core_block_abstract_to_html_before</method>
146
+ </pdfpro>
147
+ </observers>
148
+ </core_block_abstract_to_html_before>
149
+ </events>
150
+ <models>
151
+ <pdfpro>
152
+ <class>VES_PdfPro_Model</class>
153
+ <resourceModel>pdfpro_mysql4</resourceModel>
154
+ </pdfpro>
155
+ <pdfpro_mysql4>
156
+ <class>VES_PdfPro_Model_Mysql4</class>
157
+ <entities>
158
+ <key>
159
+ <table>ves_pdfpro_apikey</table>
160
+ </key>
161
+ </entities>
162
+ </pdfpro_mysql4>
163
+ <sales>
164
+ <rewrite>
165
+ <order>VES_PdfPro_Model_Sales_Order</order>
166
+ <order_invoice>VES_PdfPro_Model_Sales_Order_Invoice</order_invoice>
167
+ <order_shipment>VES_PdfPro_Model_Sales_Order_Shipment</order_shipment>
168
+ </rewrite>
169
+ </sales>
170
+ </models>
171
+ <resources>
172
+ <pdfpro_setup>
173
+ <setup>
174
+ <module>VES_PdfPro</module>
175
+ </setup>
176
+ <connection>
177
+ <use>core_setup</use>
178
+ </connection>
179
+ </pdfpro_setup>
180
+ <pdfpro_write>
181
+ <connection>
182
+ <use>core_write</use>
183
+ </connection>
184
+ </pdfpro_write>
185
+ <pdfpro_read>
186
+ <connection>
187
+ <use>core_read</use>
188
+ </connection>
189
+ </pdfpro_read>
190
+ </resources>
191
+ <blocks>
192
+ <pdfpro>
193
+ <class>VES_PdfPro_Block</class>
194
+ </pdfpro>
195
+ <checkout>
196
+ <rewrite>
197
+ <onepage_success>VES_PdfPro_Block_Checkout_Onepage_Success</onepage_success>
198
+ </rewrite>
199
+ </checkout>
200
+ <sales>
201
+ <rewrite>
202
+ <order_info>VES_PdfPro_Block_Sales_Order_Info</order_info>
203
+ <order_info_buttons>VES_PdfPro_Block_Sales_Order_Info_Buttons</order_info_buttons>
204
+ <order_invoice_items>VES_PdfPro_Block_Sales_Order_Invoice_Items</order_invoice_items>
205
+ <order_shipment_items>VES_PdfPro_Block_Sales_Order_Shipment_Items</order_shipment_items>
206
+ <order_creditmemo_items>VES_PdfPro_Block_Sales_Order_Creditmemo_Items</order_creditmemo_items>
207
+ </rewrite>
208
+ </sales>
209
+ </blocks>
210
+ <helpers>
211
+ <pdfpro>
212
+ <class>VES_PdfPro_Helper</class>
213
+ </pdfpro>
214
+ </helpers>
215
+ </global>
216
+ <crontab>
217
+ <jobs>
218
+ <ves_pdfpro_notification>
219
+ <schedule><cron_expr>0 0 * * *</cron_expr></schedule>
220
+ <run><model>pdfpro/observer::dailyCheckNotification</model></run>
221
+ </ves_pdfpro_notification>
222
+ </jobs>
223
+ </crontab>
224
+ <default>
225
+ <pdfpro>
226
+ <config>
227
+ <enabled>1</enabled>
228
+ <processor>pdfpro/processors_easypdf</processor>
229
+ <key>TRIAL_LICENSE_2012</key>
230
+ <default_key>1</default_key>
231
+ <admin_print_order>1</admin_print_order>
232
+ <remove_default_print>1</remove_default_print>
233
+ <allow_customer_print>1</allow_customer_print>
234
+ <order_email_attach>1</order_email_attach>
235
+ <invoice_email_attach>1</invoice_email_attach>
236
+ <shipment_email_attach>1</shipment_email_attach>
237
+ <detect_language>1</detect_language>
238
+ <number_format>2</number_format>
239
+ <communication_method>soap</communication_method>
240
+ </config>
241
+ <filename_format>
242
+ <order>order_$ID_$y-$MM-$dd_$HH-$mm-$ss</order>
243
+ <orders>orders_$y-$MM-$dd_$HH-$mm-$ss</orders>
244
+ <invoice>invoice_$ID_$y-$MM-$dd_$HH-$mm-$ss</invoice>
245
+ <invoices>invoices_$y-$MM-$dd_$HH-$mm-$ss</invoices>
246
+ <shipment>packingslip_$ID_$y-$MM-$dd_$HH-$mm-$ss</shipment>
247
+ <shipments>packingslips_$y-$MM-$dd_$HH-$mm-$ss</shipments>
248
+ <creditmemo>creditmemo_$ID_$y-$MM-$dd_$HH-$mm-$ss</creditmemo>
249
+ <creditmemos>creditmemos_$y-$MM-$dd_$HH-$mm-$ss</creditmemos>
250
+ <all>docs_$y-$MM-$dd_$HH-$mm-$ss</all>
251
+ </filename_format>
252
+ <notification>
253
+ <notice>1</notice>
254
+ <news>1</news>
255
+ </notification>
256
+ </pdfpro>
257
+ </default>
258
+ </config>
app/code/community/VES/PdfPro/etc/system.xml ADDED
@@ -0,0 +1,878 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0"?>
2
+ <config>
3
+ <tabs>
4
+ <ves translate="label">
5
+ <label>VnEcoms</label>
6
+ <sort_order>400</sort_order>
7
+ </ves>
8
+ </tabs>
9
+
10
+ <sections>
11
+ <pdfpro translate="label" module="pdfpro">
12
+ <label>Easy PDF</label>
13
+ <tab>ves</tab>
14
+ <frontend_type>text</frontend_type>
15
+ <sort_order>101</sort_order>
16
+ <show_in_default>1</show_in_default>
17
+ <show_in_website>1</show_in_website>
18
+ <show_in_store>1</show_in_store>
19
+ <groups>
20
+ <config>
21
+ <label>General</label>
22
+ <frontend_type>text</frontend_type>
23
+ <sort_order>10</sort_order>
24
+ <show_in_default>1</show_in_default>
25
+ <show_in_website>1</show_in_website>
26
+ <show_in_store>1</show_in_store>
27
+ <frontend_model>pdfpro/adminhtml_system_config_form_fieldset</frontend_model>
28
+ <comment><![CDATA[]]></comment>
29
+ <fields>
30
+ <enabled>
31
+ <label>Enable Easy PDF Module</label>
32
+ <frontend_type>select</frontend_type>
33
+ <source_model>adminhtml/system_config_source_yesno</source_model>
34
+ <sort_order>10</sort_order>
35
+ <show_in_default>1</show_in_default>
36
+ <show_in_website>1</show_in_website>
37
+ <show_in_store>1</show_in_store>
38
+ </enabled>
39
+ <processor>
40
+ <label>PDF Processor</label>
41
+ <frontend_type>select</frontend_type>
42
+ <source_model>pdfpro/source_processor</source_model>
43
+ <sort_order>12</sort_order>
44
+ <show_in_default>1</show_in_default>
45
+ <show_in_website>1</show_in_website>
46
+ <show_in_store>1</show_in_store>
47
+ </processor>
48
+ <default_key>
49
+ <label>Default API Key</label>
50
+ <frontend_type>select</frontend_type>
51
+ <source_model>pdfpro/source_key</source_model>
52
+ <sort_order>15</sort_order>
53
+ <show_in_default>1</show_in_default>
54
+ <show_in_website>1</show_in_website>
55
+ <show_in_store>1</show_in_store>
56
+ <frontend_class>required-entry</frontend_class>
57
+ <comment><![CDATA[This API Key will be used for default. <br />There is no API Key here? Go to <strong>Easy PDF</strong> -> <strong>Manage Api Keys</strong>]]></comment>
58
+ </default_key>
59
+ <remove_default_print>
60
+ <label>Remove the default print functions</label>
61
+ <frontend_type>select</frontend_type>
62
+ <source_model>adminhtml/system_config_source_yesno</source_model>
63
+ <sort_order>16</sort_order>
64
+ <show_in_default>1</show_in_default>
65
+ <show_in_website>1</show_in_website>
66
+ <show_in_store>1</show_in_store>
67
+ <comment>Replace the default print functions of magento by Easy PDF</comment>
68
+ </remove_default_print>
69
+ <admin_print_order>
70
+ <label>Print orders from backend</label>
71
+ <frontend_type>select</frontend_type>
72
+ <source_model>adminhtml/system_config_source_yesno</source_model>
73
+ <sort_order>18</sort_order>
74
+ <show_in_default>1</show_in_default>
75
+ <show_in_website>1</show_in_website>
76
+ <show_in_store>1</show_in_store>
77
+ </admin_print_order>
78
+ <allow_customer_print>
79
+ <label>Customer can print PDFs</label>
80
+ <frontend_type>select</frontend_type>
81
+ <source_model>adminhtml/system_config_source_yesno</source_model>
82
+ <sort_order>20</sort_order>
83
+ <show_in_default>1</show_in_default>
84
+ <show_in_website>1</show_in_website>
85
+ <show_in_store>1</show_in_store>
86
+ <comment>If yes, customer will be able to use Easy PDF</comment>
87
+ </allow_customer_print>
88
+ <order_email_attach>
89
+ <label>Attach the PDF Order to New Order Email</label>
90
+ <frontend_type>select</frontend_type>
91
+ <source_model>pdfpro/source_attach</source_model>
92
+ <sort_order>30</sort_order>
93
+ <show_in_default>1</show_in_default>
94
+ <show_in_website>1</show_in_website>
95
+ <show_in_store>1</show_in_store>
96
+ <comment>This option will make your checkout a bit of slower for generating the PDF file</comment>
97
+ </order_email_attach>
98
+ <invoice_email_attach>
99
+ <label>Attach the PDF Invoice to Invoice Email</label>
100
+ <frontend_type>select</frontend_type>
101
+ <source_model>pdfpro/source_attach</source_model>
102
+ <sort_order>40</sort_order>
103
+ <show_in_default>1</show_in_default>
104
+ <show_in_website>1</show_in_website>
105
+ <show_in_store>1</show_in_store>
106
+ <comment>This option will make your checkout a bit of slower for generating the PDF file</comment>
107
+ </invoice_email_attach>
108
+ <shipment_email_attach>
109
+ <label>Attach the PDF Shipment to Shipment Email</label>
110
+ <frontend_type>select</frontend_type>
111
+ <source_model>pdfpro/source_attach</source_model>
112
+ <sort_order>45</sort_order>
113
+ <show_in_default>1</show_in_default>
114
+ <show_in_website>1</show_in_website>
115
+ <show_in_store>1</show_in_store>
116
+ </shipment_email_attach>
117
+ <detect_language>
118
+ <label>Detect language automatically by store</label>
119
+ <frontend_type>select</frontend_type>
120
+ <source_model>adminhtml/system_config_source_yesno</source_model>
121
+ <sort_order>50</sort_order>
122
+ <show_in_default>1</show_in_default>
123
+ <show_in_website>1</show_in_website>
124
+ <show_in_store>1</show_in_store>
125
+ <comment>This option is used for multiple language website.</comment>
126
+ </detect_language>
127
+ <number_format>
128
+ <label>Number Format</label>
129
+ <frontend_type>text</frontend_type>
130
+ <sort_order>60</sort_order>
131
+ <show_in_default>1</show_in_default>
132
+ <show_in_website>1</show_in_website>
133
+ <show_in_store>1</show_in_store>
134
+ <comment>This option is used to change number of decimal places.</comment>
135
+ </number_format>
136
+ <communication_method>
137
+ <label>Communication Method</label>
138
+ <frontend_type>select</frontend_type>
139
+ <sort_order>70</sort_order>
140
+ <show_in_default>1</show_in_default>
141
+ <show_in_website>1</show_in_website>
142
+ <show_in_store>1</show_in_store>
143
+ <source_model>pdfpro/source_communication_method</source_model>
144
+ <comment>This option is used when you choose the PDF Processor "www.easypdfinvoice.com remote server"</comment>
145
+ </communication_method>
146
+ </fields>
147
+ </config>
148
+ <filename_format>
149
+ <label>PDF file name format</label>
150
+ <frontend_type>text</frontend_type>
151
+ <sort_order>15</sort_order>
152
+ <show_in_default>1</show_in_default>
153
+ <show_in_website>1</show_in_website>
154
+ <show_in_store>1</show_in_store>
155
+ <fields>
156
+ <order>
157
+ <label>Order PDF File Name Format</label>
158
+ <frontend_type>text</frontend_type>
159
+ <tooltip><![CDATA[
160
+ <table width="100%" style="background: #FAFAFA;">
161
+ <thead>
162
+ <tr>
163
+ <th width="35">Var</th>
164
+ <th>Description</th>
165
+ <th>values</th>
166
+ </tr>
167
+ </thead>
168
+ <tbody>
169
+ <tr>
170
+ <td><strong>$dd</strong></td>
171
+ <td>Day of the month</td>
172
+ <td><em>01</em> to <em>31</em></td>
173
+ </tr>
174
+
175
+ <tr>
176
+ <td><strong>$EEE</strong></td>
177
+ <td>Day of the week</td>
178
+ <td><em>Mon</em> to <em>Sun</em></td>
179
+ </tr>
180
+
181
+ <tr>
182
+ <td><strong>$MM</strong></td>
183
+ <td>Numeric representation of a month</td>
184
+ <td><em>01</em> to <em>12</em></td>
185
+ </tr>
186
+
187
+ <tr>
188
+ <td><strong>$MMM</strong></td>
189
+ <td>Textual representation of a month</td>
190
+ <td><em>Jan</em> to <em>Dec</em></td>
191
+ </tr>
192
+
193
+ <tr>
194
+ <td><strong>$y</strong></td>
195
+ <td>Numeric representation of a year</td>
196
+ <td>Ex: <em>1999</em></td>
197
+ </tr>
198
+
199
+ <tr>
200
+ <td><strong>$yy</strong></td>
201
+ <td>A two digit representation of a year</td>
202
+ <td>Ex: <em>99</em></td>
203
+ </tr>
204
+
205
+ <tr>
206
+ <td><strong>$HH</strong></td>
207
+ <td>24-hour format of an hour</td>
208
+ <td><em>00</em> to <em>23</em></td>
209
+ </tr>
210
+
211
+ <tr>
212
+ <td><strong>$mm</strong></td>
213
+ <td>Minutes with leading zeros</td>
214
+ <td><em>00</em> to <em>59</em></td>
215
+ </tr>
216
+
217
+ <tr>
218
+ <td><strong>$ss</strong></td>
219
+ <td>Seconds, with leading zeros</td>
220
+ <td><em>00</em> to <em>59</em></td>
221
+ </tr>
222
+ </tbody>
223
+ </table>
224
+ ]]></tooltip>
225
+ <sort_order>10</sort_order>
226
+ <show_in_default>1</show_in_default>
227
+ <show_in_website>1</show_in_website>
228
+ <show_in_store>1</show_in_store>
229
+ <comment>When you print an individual order. Use $ID for order ID</comment>
230
+ </order>
231
+ <orders>
232
+ <label>Order PDF File Name Format</label>
233
+ <frontend_type>text</frontend_type>
234
+ <tooltip><![CDATA[
235
+ <table width="100%" style="background: #FAFAFA;">
236
+ <thead>
237
+ <tr>
238
+ <th width="35">Var</th>
239
+ <th>Description</th>
240
+ <th>values</th>
241
+ </tr>
242
+ </thead>
243
+ <tbody>
244
+ <tr>
245
+ <td><strong>$dd</strong></td>
246
+ <td>Day of the month</td>
247
+ <td><em>01</em> to <em>31</em></td>
248
+ </tr>
249
+
250
+ <tr>
251
+ <td><strong>$EEE</strong></td>
252
+ <td>Day of the week</td>
253
+ <td><em>Mon</em> to <em>Sun</em></td>
254
+ </tr>
255
+
256
+ <tr>
257
+ <td><strong>$MM</strong></td>
258
+ <td>Numeric representation of a month</td>
259
+ <td><em>01</em> to <em>12</em></td>
260
+ </tr>
261
+
262
+ <tr>
263
+ <td><strong>$MMM</strong></td>
264
+ <td>Textual representation of a month</td>
265
+ <td><em>Jan</em> to <em>Dec</em></td>
266
+ </tr>
267
+
268
+ <tr>
269
+ <td><strong>$y</strong></td>
270
+ <td>Numeric representation of a year</td>
271
+ <td>Ex: <em>1999</em></td>
272
+ </tr>
273
+
274
+ <tr>
275
+ <td><strong>$yy</strong></td>
276
+ <td>A two digit representation of a year</td>
277
+ <td>Ex: <em>99</em></td>
278
+ </tr>
279
+
280
+ <tr>
281
+ <td><strong>$HH</strong></td>
282
+ <td>24-hour format of an hour</td>
283
+ <td><em>00</em> to <em>23</em></td>
284
+ </tr>
285
+
286
+ <tr>
287
+ <td><strong>$mm</strong></td>
288
+ <td>Minutes with leading zeros</td>
289
+ <td><em>00</em> to <em>59</em></td>
290
+ </tr>
291
+
292
+ <tr>
293
+ <td><strong>$ss</strong></td>
294
+ <td>Seconds, with leading zeros</td>
295
+ <td><em>00</em> to <em>59</em></td>
296
+ </tr>
297
+ </tbody>
298
+ </table>
299
+ ]]></tooltip>
300
+ <sort_order>11</sort_order>
301
+ <show_in_default>1</show_in_default>
302
+ <show_in_website>1</show_in_website>
303
+ <show_in_store>1</show_in_store>
304
+ <comment>When you print multiple orders.</comment>
305
+ </orders>
306
+ <invoice>
307
+ <label>Invoice PDF File Name Format</label>
308
+ <frontend_type>text</frontend_type>
309
+ <tooltip><![CDATA[
310
+ <table width="100%" style="background: #FAFAFA;">
311
+ <thead>
312
+ <tr>
313
+ <th width="35">Var</th>
314
+ <th>Description</th>
315
+ <th>values</th>
316
+ </tr>
317
+ </thead>
318
+ <tbody>
319
+ <tr>
320
+ <td><strong>$dd</strong></td>
321
+ <td>Day of the month</td>
322
+ <td><em>01</em> to <em>31</em></td>
323
+ </tr>
324
+
325
+ <tr>
326
+ <td><strong>$EEE</strong></td>
327
+ <td>Day of the week</td>
328
+ <td><em>Mon</em> to <em>Sun</em></td>
329
+ </tr>
330
+
331
+ <tr>
332
+ <td><strong>$MM</strong></td>
333
+ <td>Numeric representation of a month</td>
334
+ <td><em>01</em> to <em>12</em></td>
335
+ </tr>
336
+
337
+ <tr>
338
+ <td><strong>$MMM</strong></td>
339
+ <td>Textual representation of a month</td>
340
+ <td><em>Jan</em> to <em>Dec</em></td>
341
+ </tr>
342
+
343
+ <tr>
344
+ <td><strong>$y</strong></td>
345
+ <td>Numeric representation of a year</td>
346
+ <td>Ex: <em>1999</em></td>
347
+ </tr>
348
+
349
+ <tr>
350
+ <td><strong>$yy</strong></td>
351
+ <td>A two digit representation of a year</td>
352
+ <td>Ex: <em>99</em></td>
353
+ </tr>
354
+
355
+ <tr>
356
+ <td><strong>$HH</strong></td>
357
+ <td>24-hour format of an hour</td>
358
+ <td><em>00</em> to <em>23</em></td>
359
+ </tr>
360
+
361
+ <tr>
362
+ <td><strong>$mm</strong></td>
363
+ <td>Minutes with leading zeros</td>
364
+ <td><em>00</em> to <em>59</em></td>
365
+ </tr>
366
+
367
+ <tr>
368
+ <td><strong>$ss</strong></td>
369
+ <td>Seconds, with leading zeros</td>
370
+ <td><em>00</em> to <em>59</em></td>
371
+ </tr>
372
+ </tbody>
373
+ </table>
374
+ ]]></tooltip>
375
+ <sort_order>20</sort_order>
376
+ <show_in_default>1</show_in_default>
377
+ <show_in_website>1</show_in_website>
378
+ <show_in_store>1</show_in_store>
379
+ <comment>When you print an individual invoice. Use $ID for invoice ID</comment>
380
+ </invoice>
381
+ <invoices>
382
+ <label>Invoice PDF File Name Format</label>
383
+ <frontend_type>text</frontend_type>
384
+ <tooltip><![CDATA[
385
+ <table width="100%" style="background: #FAFAFA;">
386
+ <thead>
387
+ <tr>
388
+ <th width="35">Var</th>
389
+ <th>Description</th>
390
+ <th>values</th>
391
+ </tr>
392
+ </thead>
393
+ <tbody>
394
+ <tr>
395
+ <td><strong>$dd</strong></td>
396
+ <td>Day of the month</td>
397
+ <td><em>01</em> to <em>31</em></td>
398
+ </tr>
399
+
400
+ <tr>
401
+ <td><strong>$EEE</strong></td>
402
+ <td>Day of the week</td>
403
+ <td><em>Mon</em> to <em>Sun</em></td>
404
+ </tr>
405
+
406
+ <tr>
407
+ <td><strong>$MM</strong></td>
408
+ <td>Numeric representation of a month</td>
409
+ <td><em>01</em> to <em>12</em></td>
410
+ </tr>
411
+
412
+ <tr>
413
+ <td><strong>$MMM</strong></td>
414
+ <td>Textual representation of a month</td>
415
+ <td><em>Jan</em> to <em>Dec</em></td>
416
+ </tr>
417
+
418
+ <tr>
419
+ <td><strong>$y</strong></td>
420
+ <td>Numeric representation of a year</td>
421
+ <td>Ex: <em>1999</em></td>
422
+ </tr>
423
+
424
+ <tr>
425
+ <td><strong>$yy</strong></td>
426
+ <td>A two digit representation of a year</td>
427
+ <td>Ex: <em>99</em></td>
428
+ </tr>
429
+
430
+ <tr>
431
+ <td><strong>$HH</strong></td>
432
+ <td>24-hour format of an hour</td>
433
+ <td><em>00</em> to <em>23</em></td>
434
+ </tr>
435
+
436
+ <tr>
437
+ <td><strong>$mm</strong></td>
438
+ <td>Minutes with leading zeros</td>
439
+ <td><em>00</em> to <em>59</em></td>
440
+ </tr>
441
+
442
+ <tr>
443
+ <td><strong>$ss</strong></td>
444
+ <td>Seconds, with leading zeros</td>
445
+ <td><em>00</em> to <em>59</em></td>
446
+ </tr>
447
+ </tbody>
448
+ </table>
449
+ ]]></tooltip>
450
+ <sort_order>21</sort_order>
451
+ <show_in_default>1</show_in_default>
452
+ <show_in_website>1</show_in_website>
453
+ <show_in_store>1</show_in_store>
454
+ <comment>When you print multiple invoices.</comment>
455
+ </invoices>
456
+ <shipment>
457
+ <label>Shipment PDF File Name Format</label>
458
+ <frontend_type>text</frontend_type>
459
+ <tooltip><![CDATA[
460
+ <table width="100%" style="background: #FAFAFA;">
461
+ <thead>
462
+ <tr>
463
+ <th width="35">Var</th>
464
+ <th>Description</th>
465
+ <th>values</th>
466
+ </tr>
467
+ </thead>
468
+ <tbody>
469
+ <tr>
470
+ <td><strong>$dd</strong></td>
471
+ <td>Day of the month</td>
472
+ <td><em>01</em> to <em>31</em></td>
473
+ </tr>
474
+
475
+ <tr>
476
+ <td><strong>$EEE</strong></td>
477
+ <td>Day of the week</td>
478
+ <td><em>Mon</em> to <em>Sun</em></td>
479
+ </tr>
480
+
481
+ <tr>
482
+ <td><strong>$MM</strong></td>
483
+ <td>Numeric representation of a month</td>
484
+ <td><em>01</em> to <em>12</em></td>
485
+ </tr>
486
+
487
+ <tr>
488
+ <td><strong>$MMM</strong></td>
489
+ <td>Textual representation of a month</td>
490
+ <td><em>Jan</em> to <em>Dec</em></td>
491
+ </tr>
492
+
493
+ <tr>
494
+ <td><strong>$y</strong></td>
495
+ <td>Numeric representation of a year</td>
496
+ <td>Ex: <em>1999</em></td>
497
+ </tr>
498
+
499
+ <tr>
500
+ <td><strong>$yy</strong></td>
501
+ <td>A two digit representation of a year</td>
502
+ <td>Ex: <em>99</em></td>
503
+ </tr>
504
+
505
+ <tr>
506
+ <td><strong>$HH</strong></td>
507
+ <td>24-hour format of an hour</td>
508
+ <td><em>00</em> to <em>23</em></td>
509
+ </tr>
510
+
511
+ <tr>
512
+ <td><strong>$mm</strong></td>
513
+ <td>Minutes with leading zeros</td>
514
+ <td><em>00</em> to <em>59</em></td>
515
+ </tr>
516
+
517
+ <tr>
518
+ <td><strong>$ss</strong></td>
519
+ <td>Seconds, with leading zeros</td>
520
+ <td><em>00</em> to <em>59</em></td>
521
+ </tr>
522
+ </tbody>
523
+ </table>
524
+ ]]></tooltip>
525
+ <sort_order>30</sort_order>
526
+ <show_in_default>1</show_in_default>
527
+ <show_in_website>1</show_in_website>
528
+ <show_in_store>1</show_in_store>
529
+ <comment>When you print an individual shipment. Use $ID for shipment ID</comment>
530
+ </shipment>
531
+ <shipments>
532
+ <label>Shipment PDF File Name Format</label>
533
+ <frontend_type>text</frontend_type>
534
+ <tooltip><![CDATA[
535
+ <table width="100%" style="background: #FAFAFA;">
536
+ <thead>
537
+ <tr>
538
+ <th width="35">Var</th>
539
+ <th>Description</th>
540
+ <th>values</th>
541
+ </tr>
542
+ </thead>
543
+ <tbody>
544
+ <tr>
545
+ <td><strong>$dd</strong></td>
546
+ <td>Day of the month</td>
547
+ <td><em>01</em> to <em>31</em></td>
548
+ </tr>
549
+
550
+ <tr>
551
+ <td><strong>$EEE</strong></td>
552
+ <td>Day of the week</td>
553
+ <td><em>Mon</em> to <em>Sun</em></td>
554
+ </tr>
555
+
556
+ <tr>
557
+ <td><strong>$MM</strong></td>
558
+ <td>Numeric representation of a month</td>
559
+ <td><em>01</em> to <em>12</em></td>
560
+ </tr>
561
+
562
+ <tr>
563
+ <td><strong>$MMM</strong></td>
564
+ <td>Textual representation of a month</td>
565
+ <td><em>Jan</em> to <em>Dec</em></td>
566
+ </tr>
567
+
568
+ <tr>
569
+ <td><strong>$y</strong></td>
570
+ <td>Numeric representation of a year</td>
571
+ <td>Ex: <em>1999</em></td>
572
+ </tr>
573
+
574
+ <tr>
575
+ <td><strong>$yy</strong></td>
576
+ <td>A two digit representation of a year</td>
577
+ <td>Ex: <em>99</em></td>
578
+ </tr>
579
+
580
+ <tr>
581
+ <td><strong>$HH</strong></td>
582
+ <td>24-hour format of an hour</td>
583
+ <td><em>00</em> to <em>23</em></td>
584
+ </tr>
585
+
586
+ <tr>
587
+ <td><strong>$mm</strong></td>
588
+ <td>Minutes with leading zeros</td>
589
+ <td><em>00</em> to <em>59</em></td>
590
+ </tr>
591
+
592
+ <tr>
593
+ <td><strong>$ss</strong></td>
594
+ <td>Seconds, with leading zeros</td>
595
+ <td><em>00</em> to <em>59</em></td>
596
+ </tr>
597
+ </tbody>
598
+ </table>
599
+ ]]></tooltip>
600
+ <sort_order>31</sort_order>
601
+ <show_in_default>1</show_in_default>
602
+ <show_in_website>1</show_in_website>
603
+ <show_in_store>1</show_in_store>
604
+ <comment>When you print multiple shipments.</comment>
605
+ </shipments>
606
+ <creditmemo>
607
+ <label>Credit Memo PDF File Name Format</label>
608
+ <frontend_type>text</frontend_type>
609
+ <tooltip><![CDATA[
610
+ <table width="100%" style="background: #FAFAFA;">
611
+ <thead>
612
+ <tr>
613
+ <th width="35">Var</th>
614
+ <th>Description</th>
615
+ <th>values</th>
616
+ </tr>
617
+ </thead>
618
+ <tbody>
619
+ <tr>
620
+ <td><strong>$dd</strong></td>
621
+ <td>Day of the month</td>
622
+ <td><em>01</em> to <em>31</em></td>
623
+ </tr>
624
+
625
+ <tr>
626
+ <td><strong>$EEE</strong></td>
627
+ <td>Day of the week</td>
628
+ <td><em>Mon</em> to <em>Sun</em></td>
629
+ </tr>
630
+
631
+ <tr>
632
+ <td><strong>$MM</strong></td>
633
+ <td>Numeric representation of a month</td>
634
+ <td><em>01</em> to <em>12</em></td>
635
+ </tr>
636
+
637
+ <tr>
638
+ <td><strong>$MMM</strong></td>
639
+ <td>Textual representation of a month</td>
640
+ <td><em>Jan</em> to <em>Dec</em></td>
641
+ </tr>
642
+
643
+ <tr>
644
+ <td><strong>$y</strong></td>
645
+ <td>Numeric representation of a year</td>
646
+ <td>Ex: <em>1999</em></td>
647
+ </tr>
648
+
649
+ <tr>
650
+ <td><strong>$yy</strong></td>
651
+ <td>A two digit representation of a year</td>
652
+ <td>Ex: <em>99</em></td>
653
+ </tr>
654
+
655
+ <tr>
656
+ <td><strong>$HH</strong></td>
657
+ <td>24-hour format of an hour</td>
658
+ <td><em>00</em> to <em>23</em></td>
659
+ </tr>
660
+
661
+ <tr>
662
+ <td><strong>$mm</strong></td>
663
+ <td>Minutes with leading zeros</td>
664
+ <td><em>00</em> to <em>59</em></td>
665
+ </tr>
666
+
667
+ <tr>
668
+ <td><strong>$ss</strong></td>
669
+ <td>Seconds, with leading zeros</td>
670
+ <td><em>00</em> to <em>59</em></td>
671
+ </tr>
672
+ </tbody>
673
+ </table>
674
+ ]]></tooltip>
675
+ <sort_order>40</sort_order>
676
+ <show_in_default>1</show_in_default>
677
+ <show_in_website>1</show_in_website>
678
+ <show_in_store>1</show_in_store>
679
+ <comment>When you print an individual credit memo. Use $ID for creditmemo ID</comment>
680
+ </creditmemo>
681
+ <creditmemos>
682
+ <label>Credit Memo PDF File Name Format</label>
683
+ <frontend_type>text</frontend_type>
684
+ <tooltip><![CDATA[
685
+ <table width="100%" style="background: #FAFAFA;">
686
+ <thead>
687
+ <tr>
688
+ <th width="35">Var</th>
689
+ <th>Description</th>
690
+ <th>values</th>
691
+ </tr>
692
+ </thead>
693
+ <tbody>
694
+ <tr>
695
+ <td><strong>$dd</strong></td>
696
+ <td>Day of the month</td>
697
+ <td><em>01</em> to <em>31</em></td>
698
+ </tr>
699
+
700
+ <tr>
701
+ <td><strong>$EEE</strong></td>
702
+ <td>Day of the week</td>
703
+ <td><em>Mon</em> to <em>Sun</em></td>
704
+ </tr>
705
+
706
+ <tr>
707
+ <td><strong>$MM</strong></td>
708
+ <td>Numeric representation of a month</td>
709
+ <td><em>01</em> to <em>12</em></td>
710
+ </tr>
711
+
712
+ <tr>
713
+ <td><strong>$MMM</strong></td>
714
+ <td>Textual representation of a month</td>
715
+ <td><em>Jan</em> to <em>Dec</em></td>
716
+ </tr>
717
+
718
+ <tr>
719
+ <td><strong>$y</strong></td>
720
+ <td>Numeric representation of a year</td>
721
+ <td>Ex: <em>1999</em></td>
722
+ </tr>
723
+
724
+ <tr>
725
+ <td><strong>$yy</strong></td>
726
+ <td>A two digit representation of a year</td>
727
+ <td>Ex: <em>99</em></td>
728
+ </tr>
729
+
730
+ <tr>
731
+ <td><strong>$HH</strong></td>
732
+ <td>24-hour format of an hour</td>
733
+ <td><em>00</em> to <em>23</em></td>
734
+ </tr>
735
+
736
+ <tr>
737
+ <td><strong>$mm</strong></td>
738
+ <td>Minutes with leading zeros</td>
739
+ <td><em>00</em> to <em>59</em></td>
740
+ </tr>
741
+
742
+ <tr>
743
+ <td><strong>$ss</strong></td>
744
+ <td>Seconds, with leading zeros</td>
745
+ <td><em>00</em> to <em>59</em></td>
746
+ </tr>
747
+ </tbody>
748
+ </table>
749
+ ]]></tooltip>
750
+ <sort_order>41</sort_order>
751
+ <show_in_default>1</show_in_default>
752
+ <show_in_website>1</show_in_website>
753
+ <show_in_store>1</show_in_store>
754
+ <comment>When you print multiple credit memos.</comment>
755
+ </creditmemos>
756
+ <all>
757
+ <label>Document PDF File Name Format</label>
758
+ <frontend_type>text</frontend_type>
759
+ <tooltip><![CDATA[
760
+ <table width="100%" style="background: #FAFAFA;">
761
+ <thead>
762
+ <tr>
763
+ <th width="35">Var</th>
764
+ <th>Description</th>
765
+ <th>values</th>
766
+ </tr>
767
+ </thead>
768
+ <tbody>
769
+ <tr>
770
+ <td><strong>$dd</strong></td>
771
+ <td>Day of the month</td>
772
+ <td><em>01</em> to <em>31</em></td>
773
+ </tr>
774
+
775
+ <tr>
776
+ <td><strong>$EEE</strong></td>
777
+ <td>Day of the week</td>
778
+ <td><em>Mon</em> to <em>Sun</em></td>
779
+ </tr>
780
+
781
+ <tr>
782
+ <td><strong>$MM</strong></td>
783
+ <td>Numeric representation of a month</td>
784
+ <td><em>01</em> to <em>12</em></td>
785
+ </tr>
786
+
787
+ <tr>
788
+ <td><strong>$MMM</strong></td>
789
+ <td>Textual representation of a month</td>
790
+ <td><em>Jan</em> to <em>Dec</em></td>
791
+ </tr>
792
+
793
+ <tr>
794
+ <td><strong>$y</strong></td>
795
+ <td>Numeric representation of a year</td>
796
+ <td>Ex: <em>1999</em></td>
797
+ </tr>
798
+
799
+ <tr>
800
+ <td><strong>$yy</strong></td>
801
+ <td>A two digit representation of a year</td>
802
+ <td>Ex: <em>99</em></td>
803
+ </tr>
804
+
805
+ <tr>
806
+ <td><strong>$HH</strong></td>
807
+ <td>24-hour format of an hour</td>
808
+ <td><em>00</em> to <em>23</em></td>
809
+ </tr>
810
+
811
+ <tr>
812
+ <td><strong>$mm</strong></td>
813
+ <td>Minutes with leading zeros</td>
814
+ <td><em>00</em> to <em>59</em></td>
815
+ </tr>
816
+
817
+ <tr>
818
+ <td><strong>$ss</strong></td>
819
+ <td>Seconds, with leading zeros</td>
820
+ <td><em>00</em> to <em>59</em></td>
821
+ </tr>
822
+ </tbody>
823
+ </table>
824
+ ]]></tooltip>
825
+ <sort_order>50</sort_order>
826
+ <show_in_default>1</show_in_default>
827
+ <show_in_website>1</show_in_website>
828
+ <show_in_store>1</show_in_store>
829
+ <comment>When you you select "Print All"</comment>
830
+ </all>
831
+ </fields>
832
+ </filename_format>
833
+ <notification>
834
+ <label>Notification</label>
835
+ <frontend_type>text</frontend_type>
836
+ <sort_order>20</sort_order>
837
+ <show_in_default>1</show_in_default>
838
+ <show_in_website>1</show_in_website>
839
+ <show_in_store>1</show_in_store>
840
+ <fields>
841
+ <notice>
842
+ <label>Enable upgrade notice</label>
843
+ <frontend_type>select</frontend_type>
844
+ <source_model>adminhtml/system_config_source_yesno</source_model>
845
+ <sort_order>10</sort_order>
846
+ <show_in_default>1</show_in_default>
847
+ <show_in_website>1</show_in_website>
848
+ <show_in_store>1</show_in_store>
849
+ </notice>
850
+ <news>
851
+ <label>Get news and promotion from EasyPdfInvoice.com</label>
852
+ <frontend_type>select</frontend_type>
853
+ <source_model>adminhtml/system_config_source_yesno</source_model>
854
+ <sort_order>20</sort_order>
855
+ <show_in_default>1</show_in_default>
856
+ <show_in_website>1</show_in_website>
857
+ <show_in_store>1</show_in_store>
858
+ </news>
859
+ </fields>
860
+ </notification>
861
+ <author>
862
+ <label>Author</label>
863
+ <frontend_type>text</frontend_type>
864
+ <sort_order>30</sort_order>
865
+ <show_in_default>1</show_in_default>
866
+ <show_in_website>1</show_in_website>
867
+ <show_in_store>1</show_in_store>
868
+ <comment><![CDATA[
869
+ The Easy PDF is developed and supported by <a href="http://www.easypdfinvoice.com/" target="_blank">www.EasyPdfInvoice.com</a>.<br />
870
+ If you need any support or have any question please contact us at <a href="mailto:support@easypdfinvoice.com">support@easypdfinvoice.com</a> or submit a ticket at <a href="http://ticket.easypdfinvoice.com/" target="_blank">http://ticket.easypdfinvoice.com/</a><br /><br />
871
+ Best Regards,<br />
872
+ <strong>Easy PDF Invoice Team</strong>
873
+ ]]></comment>
874
+ </author>
875
+ </groups>
876
+ </pdfpro>
877
+ </sections>
878
+ </config>
app/code/community/VES/PdfPro/sql/pdfpro_setup/mysql4-install-0.1.0.php ADDED
@@ -0,0 +1,23 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ $installer = $this;
4
+
5
+ $installer->startSetup();
6
+ $storeIds = Mage::getModel('core/store')->getCollection()->getAllIds();
7
+ $groupIds = Mage::getModel('customer/group')->getCollection()->getAllIds();
8
+ $installer->run("
9
+
10
+ DROP TABLE IF EXISTS {$this->getTable('pdfpro/key')};
11
+ CREATE TABLE {$this->getTable('pdfpro/key')} (
12
+ `entity_id` int(11) unsigned NOT NULL auto_increment,
13
+ `api_key` varchar(255) NOT NULL default '',
14
+ `store_ids` varchar(255) NOT NULL default '',
15
+ `customer_group_ids` varchar(255) NOT NULL default '',
16
+ `priority` int(11) unsigned NOT NULL default 0,
17
+ `comment` text NOT NULL default '',
18
+ `is_default` smallint(6) NOT NULL default '0',
19
+ PRIMARY KEY (`entity_id`)
20
+ ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
21
+ ");
22
+
23
+ $installer->endSetup();
app/design/adminhtml/default/default/layout/ves_pdfpro.xml ADDED
@@ -0,0 +1,39 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0"?>
2
+ <layout version="0.1.0">
3
+ <default>
4
+ <reference name="head">
5
+ <action method="addCss"><name>ves_pdfpro/styles.css</name></action>
6
+ </reference>
7
+ <reference name="notifications">
8
+ <block type="pdfpro/adminhtml_version" name="pdfpro.notifications" template="ves_pdfpro/notifications.phtml"></block>
9
+ </reference>
10
+ </default>
11
+ <adminhtml_sales_order_invoice_view>
12
+ <block type="pdfpro/adminhtml_sales_order_invoice_view" name="ves_pdfpro" />
13
+ </adminhtml_sales_order_invoice_view>
14
+ <adminhtml_sales_order_view>
15
+ <block type="pdfpro/adminhtml_sales_order_view" name="ves_pdfpro" />
16
+ </adminhtml_sales_order_view>
17
+ <adminhtml_sales_order_shipment_view>
18
+ <block type="pdfpro/adminhtml_sales_order_shipment_view" name="ves_pdfpro" />
19
+ </adminhtml_sales_order_shipment_view>
20
+ <adminhtml_sales_order_creditmemo_view>
21
+ <block type="pdfpro/adminhtml_sales_order_creditmemo_view" name="ves_pdfpro" />
22
+ </adminhtml_sales_order_creditmemo_view>
23
+ <pdfpro_cp_adminhtml_key_index>
24
+ <reference name="content">
25
+ <block type="pdfpro/adminhtml_key" name="ves_pdfpro_api_key" />
26
+ </reference>
27
+ </pdfpro_cp_adminhtml_key_index>
28
+ <pdfpro_cp_adminhtml_key_edit>
29
+ <reference name="content">
30
+ <block type="pdfpro/adminhtml_key_edit" name="apikey_edit"></block>
31
+ </reference>
32
+
33
+ <reference name="left">
34
+ <block type="pdfpro/adminhtml_key_edit_tabs" name="apikey_edit_tabs">
35
+
36
+ </block>
37
+ </reference>
38
+ </pdfpro_cp_adminhtml_key_edit>
39
+ </layout>
app/design/adminhtml/default/default/template/ves_pdfpro/notifications.phtml ADDED
@@ -0,0 +1,44 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * See more VES_PdfPro_Block_Adminhtml_Version
4
+ */
5
+ ?>
6
+ <script type="text/javascript">
7
+ $$('#nav li span').each(function(s){
8
+ if(s.innerHTML == 'Easy PDF'){s.addClassName('easypdf-admin-menu');}
9
+ if(s.innerHTML == 'Visit Website'){s.parentNode.href='http://www.easypdfinvoice.com';s.parentNode.target="_blank";}
10
+ });
11
+ Event.observe(window,'load',function(){
12
+ $$('#system_config_tabs dd a span').each(function(s){
13
+ if(s.innerHTML.trim()=='Easy PDF'){s.addClassName('easypdf-system-tab');}
14
+ });
15
+ });
16
+ </script>
17
+ <?php if($this->canDisplayNotice() || $this->canDisplayNews() || $this->canDisplayDefaultApiKeyMsg()):?>
18
+ <div id="pdfpro-notifications">
19
+ <?php if($this->canDisplayDefaultApiKeyMsg()):?>
20
+ <div class="notification-global">
21
+ <strong>Easy PDF Invoice:</strong>
22
+ You need to set the default API Key for your website in <a href="<?php echo $this->getUrl('adminhtml/system_config/edit',array('section'=>'pdfpro'));?>">Configuration</a>
23
+ </div>
24
+ <?php endif;?>
25
+ <?php if($this->canDisplayNotice()):?>
26
+ <?php $serverVersion = $this->getServerVersion();?>
27
+ <?php if($serverVersion && version_compare(Mage::helper('pdfpro')->getVersion(), $serverVersion,'<')):?>
28
+ <div class="notification-global">
29
+ <strong>Easy PDF Invoice:</strong>
30
+ You are using the old version of Easy PDF (<?php echo Mage::helper('pdfpro')->getVersion();?>).The current version is <?php echo $serverVersion?>. Upgrade to latest version now! <a href="http://www.easypdfinvoice.com/blog/upgrade-easy-pdf-magento-extension/" target="_blank">How to upgrade?</a>
31
+ </div>
32
+ <?php endif;?>
33
+ <?php endif;?>
34
+ <?php if($this->canDisplayNews()):?>
35
+ <?php $message = $this->getServerMessage();?>
36
+ <?php if($message):?>
37
+ <div class="notification-global notification-global-notice">
38
+ <strong>Easy PDF Invoice:</strong>
39
+ <?php echo $message;?>
40
+ </div>
41
+ <?php endif;?>
42
+ <?php endif;?>
43
+ </div>
44
+ <?php endif;?>
app/etc/modules/VES_PdfPro.xml ADDED
@@ -0,0 +1,9 @@
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0"?>
2
+ <config>
3
+ <modules>
4
+ <VES_PdfPro>
5
+ <active>true</active>
6
+ <codePool>community</codePool>
7
+ </VES_PdfPro>
8
+ </modules>
9
+ </config>
app/locale/en_US/VES_PdfPro.csv ADDED
@@ -0,0 +1,23 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ "Print Orders","Print Orders"
2
+ "Print Invoices","Print Invoices"
3
+ "Print Packingslips","Print Packingslips"
4
+ "Print Credit Memos","Print Credit Memos"
5
+ "Print All","Print All"
6
+ "Print Order","Print Order"
7
+ "Print Invoice","Print Invoice"
8
+ "Print Packingslip","Print Packingslip"
9
+ "Print Credit Memo","Print Credit Memo"
10
+ "General","General"
11
+ "Enable Easy PDF Module","Enable Easy PDF Module"
12
+ "API Key","API Key"
13
+ "Remove the default print functions","Remove the default print functions"
14
+ "Replace the default print functions of magento by Easy PDF","Replace the default print functions of magento by Easy PDF"
15
+ "Print orders from backend","Print orders from backend"
16
+ "Customer can print PDFs","Customer can print PDF"
17
+ "If yes, customer will be able to use Easy PDF","If yes, customer will be able to use Easy PDF"
18
+ "Attach the PDF Order to New Order Email","Attach the PDF Order to New Order Email"
19
+ "This option will make your checkout a bit of slower for generating the PDF file","This option will make your checkout a bit of slower for generating the PDF file"
20
+ "Attach the PDF Invoice to Invoice Email","Attach the PDF Invoice to Invoice Email"
21
+
22
+
23
+
app/locale/he_IL/VES_PdfPro.csv ADDED
@@ -0,0 +1,20 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ Print Orders,הדפס הזמנות
2
+ Print Invoices,הדפס חשבוניות
3
+ Print Packingslips,הדפס תעודות משלוח
4
+ Print Credit Memos,הדפס תזכירי אשראי (Credit Memo)
5
+ Print All,הדפס הכל
6
+ Print Order,הדפס הזמנה
7
+ Print Invoice,הדפס חשבונית
8
+ Print Packingslip,הדפס תעודת משלוח
9
+ Print Credit Memo,הדפס תזכיר אשראי (Credit Memo)
10
+ General,כללי
11
+ Enable Easy PDF Module,הפעל Easy PDF Module
12
+ API Key,API Key
13
+ Remove the default print functions,הסר את אפשרויות ההדפסה המקוריות של מג'נטו
14
+ Replace the default print functions of magento by Easy PDF,החלף את אפשרויות ההדפסה המקוריות של מג'נטו באלה של Easy PDF
15
+ Print orders from backend,הדפס הזמנות ממשק הניהול
16
+ Customer can print PDFs,לקוח יכול להדפיס הזמנות
17
+ "If yes, customer will be able to use Easy PDF","אם כן, לקוח יוכל להשתמש ב Easy PDF"
18
+ Attach the PDF Order to New Order Email,"צרף PDF שנוצר עם ההזמנה לדוא""ל הזמנה חדשה"
19
+ This option will make your checkout a bit of slower for generating the PDF file,סימון אפשרות זו יאט במקצת את תהליך היציאה מהחנות בשל יצירת הPDF
20
+ Attach the PDF Invoice to Invoice Email,"צרף PDF שנוצר עם חשבונית לדוא""ל חשבונית"
app/locale/vi_VN/VES_PdfPro.csv ADDED
@@ -0,0 +1,20 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ "Print Orders","In Các Đơn Đặt Hàng"
2
+ "Print Invoices","In Các Hóa Đơn"
3
+ "Print Packingslips","Print Packingslips"
4
+ "Print Credit Memos","Print Credit Memos"
5
+ "Print All","In Tất Cả"
6
+ "Print Order","In Đơn Đặt Hàng"
7
+ "Print Invoice","In Hóa Đơn"
8
+ "Print Packingslip","Print Packingslip"
9
+ "Print Credit Memo","Print Credit Memo"
10
+ "General","General"
11
+ "Enable Module","Kích Hoạt Module Easy PDF"
12
+ "API Key","API Key"
13
+ "Remove the default print functions","Loại bỏ các chức năng in ấn mặc định"
14
+ "Replace the default print functions of magento by Easy PDF","Thay thế chức năng in ấn mặc định của magento bởi Easy PDF"
15
+ "Print orders from backend","In hóa đơn từ trang quản trị"
16
+ "Customer can print PDFs","Khách hàng có thể in các bản PDF"
17
+ "If yes, customer will be able to use Easy PDF","Nếu có, khách hàng có thể in đơn hàng, hóa đơn, ... sử dụng Easy PDF"
18
+ "Attach the PDF Order to New Order Email","Đính kèm đơn hàng (bản PDF) vào email gửi cho khách hàng"
19
+ "This option will make your checkout a bit of slower for generating the PDF file","Lựa chọn này sẽ làm cho quá trình thanh toán của bạn bị chậm một chút do việc xử lý file PDF"
20
+ "Attach the PDF Invoice to Invoice Email","Đính kèm hóa đơn (bản PDF) vào email gửi cho khách hàng"
media/ves_pdfpro/logos/logo-200x50.jpg ADDED
Binary file
media/ves_pdfpro/logos/logo.png ADDED
Binary file
media/ves_pdfpro/logos/logo_1.png ADDED
Binary file
media/ves_pdfpro/logos/logo_green.png ADDED
Binary file
media/ves_pdfpro/logos/logo_red.png ADDED
Binary file
media/ves_pdfpro/pdf.data ADDED
@@ -0,0 +1 @@
 
1
+ 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
package.xml ADDED
@@ -0,0 +1,24 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0"?>
2
+ <package>
3
+ <name>Easy_PDF_Invoice</name>
4
+ <version>1.2.0.1.24</version>
5
+ <stability>stable</stability>
6
+ <license uri="http://opensource.org/licenses/osl-3.0.php">OSL V3.0</license>
7
+ <channel>community</channel>
8
+ <extends/>
9
+ <summary>PDF generator for magento</summary>
10
+ <description>Make your store to new higher level by using our Easy PDF extension</description>
11
+ <notes>- Allow to print orders&#xD;
12
+ - Allow to print invoices&#xD;
13
+ - Allow to print packingslips&#xD;
14
+ - Allow to print credit memos&#xD;
15
+ - Allow to attach order pdf in email&#xD;
16
+ - Allow to attach invoice pdf in email&#xD;
17
+ - Compatible with Aschroder_SMTPPro</notes>
18
+ <authors><author><name>Easy PDF Invoice</name><user>easypdfinvoice</user><email>easypdfinvoice@gmail.com</email></author></authors>
19
+ <date>2013-06-28</date>
20
+ <time>16:31:50</time>
21
+ <contents><target name="mageetc"><dir name="modules"><file name="VES_PdfPro.xml" hash="4b43f61fe34d6f90260b6008e52e48bd"/></dir></target><target name="magecommunity"><dir name="VES"><dir name="PdfPro"><dir name="Block"><dir name="Adminhtml"><dir name="Key"><dir name="Edit"><file name="Form.php" hash="46346f33119419be5ba874fa7ffd85b6"/><dir name="Tab"><file name="Form.php" hash="6ed2ab13f4e2c5c25671aacf00fe9694"/></dir><file name="Tabs.php" hash="cd9cf71b68f19d9af9a80e8c7898e32f"/></dir><file name="Edit.php" hash="a8798ad23b9da53d836c6947dff2e49a"/><dir name="Grid"><dir name="Renderer"><file name="Group.php" hash="892d50662567d468eb9128034de54f19"/><file name="Store.php" hash="e1f763568b9f84a58798308f83536d7b"/></dir></dir><file name="Grid.php" hash="e7987b06687d69f18000714fc38cbde4"/></dir><file name="Key.php" hash="26f0bacc52c667f6efe91d96e2037865"/><dir name="Sales"><dir name="Order"><dir name="Creditmemo"><file name="View.php" hash="fb2c17f888c8acb5dbe2574e635c77bf"/></dir><dir name="Invoice"><file name="View.php" hash="69fb3ac882ffc657d0879dac143d647e"/></dir><dir name="Shipment"><file name="View.php" hash="633822374d7cc1f9c167af3628069cb5"/></dir><file name="View.php" hash="3a94ef916cf0cc2cb15c02f2e9a3c885"/></dir></dir><dir name="System"><dir name="Config"><dir name="Form"><file name="Fieldset.php" hash="d5504c92beb2bbe5597db4df2695f5b7"/></dir></dir></dir><file name="Version.php" hash="8a6d1b57f42533ed3a3c7294d9550937"/></dir><dir name="Checkout"><dir name="Onepage"><file name="Success.php" hash="9f45ac2f4c5643f7c560f64ec6e879b9"/></dir></dir><dir name="Sales"><dir name="Order"><dir name="Creditmemo"><file name="Items.php" hash="188d1bf570876c1ee4eb10b392826969"/></dir><dir name="Info"><file name="Buttons.php" hash="092e23b4ea0532a0b1c30155bb988500"/></dir><file name="Info.php" hash="df3add1cad16f992c016f34bc50001da"/><dir name="Invoice"><file name="Items.php" hash="af0a2e0530c243f4fc36d2b1ba85a03d"/></dir><dir name="Shipment"><file name="Items.php" hash="05ba7ea0f96dd688e32ac382de3d97aa"/></dir></dir></dir></dir><dir name="Controller"><file name="Abstract.php" hash="3e12df35a1d6741c8c682f1ee5f7d490"/></dir><dir name="Helper"><file name="Data.php" hash="6952dc093b75f410bd1ba676639b935c"/><file name="Giftmessage.php" hash="fd1f964045ff32824d8adeef45d9f353"/></dir><dir name="Model"><file name="Abstract.php" hash="ac9255f2de1037adca999b56382a33a7"/><dir name="Communication"><dir name="Method"><file name="Abstract.php" hash="92691ba24ed56500a517a323dc37c783"/><file name="Soap.php" hash="82304ca82ccdc9a2e77678d992f14c7b"/><file name="Xmlrpc.php" hash="d8adbb280eed2baeac5a37fb7a58a9e9"/></dir></dir><dir name="Email"><dir name="Template"><file name="Mailer.php" hash="c0ce04b3c73aeffd55f94e180e379416"/></dir><file name="Template.php" hash="9dfdc647e61d2b156d1b1d13760ed91e"/></dir><file name="Key.php" hash="8f89ec9497dd0a7ae2cf9ea71af2a910"/><dir name="Mysql4"><dir name="Key"><file name="Collection.php" hash="2a833ffdea395c507056fed369d3efaa"/></dir><file name="Key.php" hash="ac5b19abb5f8cb75f5d4ae7226432158"/></dir><file name="Observer.php" hash="cbb09a71ba4e89a54544f7db079d94cc"/><dir name="Order"><dir name="Creditmemo"><file name="Item.php" hash="561cb96adf9e2eb21e3aacef95ddcd8f"/></dir><file name="Creditmemo.php" hash="9491d108e73004a66545f87f13c5e668"/><dir name="Invoice"><file name="Item.php" hash="30735b2ecbfc4a305fb3086573ff1f3a"/></dir><file name="Invoice.php" hash="b6c7204bd0f76c04115f14452cd5ba3f"/><file name="Item.php" hash="8de01eba904dd0b9936a61dfd6d1a309"/><dir name="Shipment"><file name="Item.php" hash="dc956967b03f0ce61092edf083088992"/></dir><file name="Shipment.php" hash="290f501ec4695ceac86f644fb32250e5"/></dir><file name="Order.php" hash="6623bb46b0d9bfb30bc9f6293dadbc59"/><file name="PdfPro.php" hash="9a2115ae3db5bb777858666a9ebe50cd"/><dir name="Processors"><file name="Easypdf.php" hash="174f02576f916c281c644933a0f26820"/></dir><dir name="Sales"><dir name="Order"><file name="Invoice.php" hash="4a61a399a80f7a9153713f5111e1e1f4"/><dir name="Pdf"><dir name="Total"><file name="Default.php" hash="f2734244f770ef8eed2e4895daaa1b4f"/></dir></dir><file name="Shipment.php" hash="8eb0e36b08068d375cce61a1215a8599"/></dir><file name="Order.php" hash="16950ae3ce187c56beb4f16d842a4a93"/></dir><dir name="Source"><file name="Attach.php" hash="9fc226589336ee965aa0d5208d2dd06e"/><dir name="Communication"><file name="Method.php" hash="c62491193fdb374fdc74e52c02609194"/></dir><file name="Key.php" hash="c9ee12407a20b4fb07bd51bd0029523c"/><file name="Processor.php" hash="6a1e053c02b8e1736f0bfd942ae71434"/></dir><dir name="System"><dir name="Config"><dir name="Backend"><file name="Easypdf.php" hash="503a34f4747cb6387ff7180e4f63b469"/></dir></dir></dir></dir><dir name="controllers"><dir name="Adminhtml"><file name="KeyController.php" hash="55b3292e66dfcde2ab30212175ab0c47"/><file name="PrintController.php" hash="2b1b02a7e50a686d639f346ed5c92e53"/></dir><file name="GuestController.php" hash="850b1dea0389803ace6a7c5455cf28d3"/><file name="PrintController.php" hash="f13d959090b27f318100e4360c9a25ce"/></dir><dir name="etc"><file name="config.xml" hash="000dc9b9c8c9de77c277a2fcfee5630d"/><file name="system.xml" hash="aefa098948007ce86bba679f34d4ab74"/></dir><dir name="sql"><dir name="pdfpro_setup"><file name="mysql4-install-0.1.0.php" hash="568fdc14a81905f4e98857691f765ae8"/></dir></dir></dir></dir></target><target name="magedesign"><dir name="adminhtml"><dir name="default"><dir name="default"><dir name="layout"><file name="ves_pdfpro.xml" hash="4fef100f3a87f396e539ff59fba0d9a6"/></dir><dir name="template"><dir name="ves_pdfpro"><file name="notifications.phtml" hash="2e4a426945b479c2e617cb06d9d506d8"/></dir></dir></dir></dir></dir></target><target name="magelocale"><dir name="en_US"><file name="VES_PdfPro.csv" hash="7443d2a6b55513d5287144307ac41018"/></dir><dir name="vi_VN"><file name="VES_PdfPro.csv" hash="685d513129c86897c9214d67a65f7690"/></dir><dir name="he_IL"><file name="VES_PdfPro.csv" hash="487635adff4c3a8fb47af8048e407c96"/></dir></target><target name="magemedia"><dir name="ves_pdfpro"><dir name="logos"><file name="logo-200x50.jpg" hash="95c633bf6d52affb4af7b60e58907c6f"/><file name="logo.png" hash="4146b1e4bae3158d3ac17054c418a1e1"/><file name="logo_1.png" hash="4146b1e4bae3158d3ac17054c418a1e1"/><file name="logo_green.png" hash="9fdf929173180e7eedd6ed08608d80d1"/><file name="logo_red.png" hash="e7367ecd282a766382ccd00febebd450"/></dir><file name="pdf.data" hash="88c44469dca59ebfcf36cb04d9acf33a"/></dir></target><target name="mageskin"><dir name="adminhtml"><dir name="default"><dir name="default"><dir name="ves_pdfpro"><file name="easypdf.png" hash="8403ec067302a4bf931862ad56965459"/><file name="favicon.png" hash="55210c2ab24e77a654bec6f51922917f"/><file name="js.js" hash="5ab27f2e16b90409bf4268b9afb7488c"/><file name="styles.css" hash="e25f82a17de40e72d7cd062f9f25588b"/></dir></dir></dir></dir></target></contents>
22
+ <compatible/>
23
+ <dependencies><required><php><min>5.1.0</min><max>6.0.0</max></php></required></dependencies>
24
+ </package>
skin/adminhtml/default/default/ves_pdfpro/easypdf.png ADDED
Binary file
skin/adminhtml/default/default/ves_pdfpro/favicon.png ADDED
Binary file
skin/adminhtml/default/default/ves_pdfpro/js.js ADDED
@@ -0,0 +1,3 @@
 
 
 
1
+ /**
2
+ *
3
+ */
skin/adminhtml/default/default/ves_pdfpro/styles.css ADDED
@@ -0,0 +1,3 @@
 
 
 
1
+ .easypdf-admin-menu{background: url("favicon.png") no-repeat scroll 0 6px transparent;font-weight: bold;padding-left: 20px;}
2
+ ul.config-tabs a span.easypdf-system-tab{background-image: url("favicon.png");background-position: 20px 4px;background-repeat: no-repeat;padding-left: 39px;}
3
+ ul.config-tabs a:hover span.easypdf-system-tab{background-image: url("favicon.png");background-position: 20px 4px;background-repeat: no-repeat;}