I have in some Vendor’s Module di.xml file this entry :
<type name="AmastyRequestQuoteModelPdfPdfInformation">
<arguments>
<argument name="variables" xsi:type="array">
<item name="0" xsi:type="array">
<item name="objectType" xsi:type="string">quote</item>
<item name="variable" xsi:type="const">AmastyRequestQuoteModelSourcePdfVariables::USERNAME</item>
<item name="method" xsi:type="string">getCustomerName</item>
</item>
<item name="1" xsi:type="array">
<item name="objectType" xsi:type="string">custom</item>
<item name="variable" xsi:type="const">AmastyRequestQuoteModelSourcePdfVariables::CUSTOMER_STREET</item>
<item name="method" xsi:type="string">getBillingStreet</item>
</item>
<item name="2" xsi:type="array">
<item name="objectType" xsi:type="string">billing</item>
<item name="variable" xsi:type="const">AmastyRequestQuoteModelSourcePdfVariables::CUSTOMER_CITY</item>
<item name="method" xsi:type="string">getCity</item>
</item>
<item name="3" xsi:type="array">
<item name="objectType" xsi:type="string">custom</item>
<item name="variable" xsi:type="const">AmastyRequestQuoteModelSourcePdfVariables::CUSTOMER_REGION</item>
<item name="method" xsi:type="string">getBillingRegion</item>
</item>
<item name="4" xsi:type="array">
<item name="objectType" xsi:type="string">billing</item>
<item name="variable" xsi:type="const">AmastyRequestQuoteModelSourcePdfVariables::CUSTOMER_POSTCODE</item>
<item name="method" xsi:type="string">getPostcode</item>
</item>
<item name="5" xsi:type="array">
<item name="objectType" xsi:type="string">custom</item>
<item name="variable" xsi:type="const">AmastyRequestQuoteModelSourcePdfVariables::CUSTOMER_COUNTRY</item>
<item name="method" xsi:type="string">getBillingCountryName</item>
</item>
<item name="6" xsi:type="array">
<item name="objectType" xsi:type="string">billing</item>
<item name="variable" xsi:type="const">AmastyRequestQuoteModelSourcePdfVariables::CUSTOMER_TELEPHONE</item>
<item name="method" xsi:type="string">getTelephone</item>
</item>
<item name="7" xsi:type="array">
<item name="objectType" xsi:type="string">quote</item>
<item name="variable" xsi:type="const">AmastyRequestQuoteModelSourcePdfVariables::QUOTE_NUMBER</item>
<item name="method" xsi:type="string">getIncrementId</item>
</item>
<item name="8" xsi:type="array">
<item name="objectType" xsi:type="string">quote</item>
<item name="variable" xsi:type="const">AmastyRequestQuoteModelSourcePdfVariables::QUOTE_STATUS</item>
<item name="method" xsi:type="string">getStatusLabel</item>
</item>
<item name="9" xsi:type="array">
<item name="objectType" xsi:type="string">quote</item>
<item name="variable" xsi:type="const">AmastyRequestQuoteModelSourcePdfVariables::QUOTE_DATE</item>
<item name="method" xsi:type="string">getCreatedAt</item>
</item>
<item name="10" xsi:type="array">
<item name="objectType" xsi:type="string">quote</item>
<item name="variable" xsi:type="const">AmastyRequestQuoteModelSourcePdfVariables::QUOTE_EXPIRY_DATE</item>
<item name="method" xsi:type="string">getExpiredDate</item>
</item>
<item name="11" xsi:type="array">
<item name="objectType" xsi:type="string">custom</item>
<item name="variable" xsi:type="const">AmastyRequestQuoteModelSourcePdfVariables::SHIPPING_STREET</item>
<item name="method" xsi:type="string">getShippingStreet</item>
</item>
<item name="12" xsi:type="array">
<item name="objectType" xsi:type="string">shipping</item>
<item name="variable" xsi:type="const">AmastyRequestQuoteModelSourcePdfVariables::SHIPPING_CITY</item>
<item name="method" xsi:type="string">getCity</item>
</item>
<item name="13" xsi:type="array">
<item name="objectType" xsi:type="string">custom</item>
<item name="variable" xsi:type="const">AmastyRequestQuoteModelSourcePdfVariables::SHIPPING_REGION</item>
<item name="method" xsi:type="string">getShippingRegion</item>
</item>
<item name="14" xsi:type="array">
<item name="objectType" xsi:type="string">shipping</item>
<item name="variable" xsi:type="const">AmastyRequestQuoteModelSourcePdfVariables::SHIPPING_POSTCODE</item>
<item name="method" xsi:type="string">getPostcode</item>
</item>
<item name="15" xsi:type="array">
<item name="objectType" xsi:type="string">custom</item>
<item name="variable" xsi:type="const">AmastyRequestQuoteModelSourcePdfVariables::SHIPPING_COUNTRY</item>
<item name="method" xsi:type="string">getShippingCountryName</item>
</item>
<item name="16" xsi:type="array">
<item name="objectType" xsi:type="string">custom</item>
<item name="variable" xsi:type="const">AmastyRequestQuoteModelSourcePdfVariables::SHIPPING_TELEPHONE</item>
<item name="method" xsi:type="string">getTelephone</item>
</item>
<item name="17" xsi:type="array">
<item name="objectType" xsi:type="string">custom</item>
<item name="variable" xsi:type="const">AmastyRequestQuoteModelSourcePdfVariables::SHIPPING_METHOD</item>
<item name="method" xsi:type="string">getShippingMethod</item>
</item>
<item name="18" xsi:type="array">
<item name="objectType" xsi:type="string">custom</item>
<item name="variable" xsi:type="const">AmastyRequestQuoteModelSourcePdfVariables::PRODUCT_GRID</item>
<item name="method" xsi:type="string">getProductGrid</item>
</item>
<item name="19" xsi:type="array">
<item name="objectType" xsi:type="string">custom</item>
<item name="variable" xsi:type="const">AmastyRequestQuoteModelSourcePdfVariables::STORE_PHONE</item>
<item name="method" xsi:type="string">getStorePhone</item>
</item>
<item name="20" xsi:type="array">
<item name="objectType" xsi:type="string">custom</item>
<item name="variable" xsi:type="const">AmastyRequestQuoteModelSourcePdfVariables::HAS_SHIPPING_INFO</item>
<item name="method" xsi:type="string">hasShippingInfo</item>
</item>
</argument>
</arguments>
</type>
I would like to add in this another argument like
<item name="21" xsi:type="array">
<item name="objectType" xsi:type="string">custom</item>
<item name="variable" xsi:type="const">AmastyRequestQuoteModelSourcePdfVariables::QUOTE_REMARKS</item>
<item name="method" xsi:type="string">getComments</item>
</item>
I was able to ovveride the Model (with preferences in my own custom module di.xml), but how should I edit the original parameters ?
Thanks
Ill try to be a bit more descriptive.
What I try is to override some third party module; I succeed to do what I want, if I edit directly the vendor’s files.
This is the vendor’s edited di.xml file (see at the end)
<?xml version="1.0"?>
...
<type name="AmastyRequestQuoteModelPdfPdfInformation">
<arguments>
<argument name="variables" xsi:type="array">
<item name="0" xsi:type="array">
<item name="objectType" xsi:type="string">quote</item>
<item name="variable" xsi:type="const">AmastyRequestQuoteModelSourcePdfVariables::USERNAME</item>
<item name="method" xsi:type="string">getCustomerName</item>
</item>
<item name="1" xsi:type="array">
<item name="objectType" xsi:type="string">custom</item>
<item name="variable" xsi:type="const">AmastyRequestQuoteModelSourcePdfVariables::CUSTOMER_STREET</item>
<item name="method" xsi:type="string">getBillingStreet</item>
</item>
<item name="2" xsi:type="array">
<item name="objectType" xsi:type="string">billing</item>
<item name="variable" xsi:type="const">AmastyRequestQuoteModelSourcePdfVariables::CUSTOMER_CITY</item>
<item name="method" xsi:type="string">getCity</item>
</item>
<item name="3" xsi:type="array">
<item name="objectType" xsi:type="string">custom</item>
<item name="variable" xsi:type="const">AmastyRequestQuoteModelSourcePdfVariables::CUSTOMER_REGION</item>
<item name="method" xsi:type="string">getBillingRegion</item>
</item>
<item name="4" xsi:type="array">
<item name="objectType" xsi:type="string">billing</item>
<item name="variable" xsi:type="const">AmastyRequestQuoteModelSourcePdfVariables::CUSTOMER_POSTCODE</item>
<item name="method" xsi:type="string">getPostcode</item>
</item>
<item name="5" xsi:type="array">
<item name="objectType" xsi:type="string">custom</item>
<item name="variable" xsi:type="const">AmastyRequestQuoteModelSourcePdfVariables::CUSTOMER_COUNTRY</item>
<item name="method" xsi:type="string">getBillingCountryName</item>
</item>
<item name="6" xsi:type="array">
<item name="objectType" xsi:type="string">billing</item>
<item name="variable" xsi:type="const">AmastyRequestQuoteModelSourcePdfVariables::CUSTOMER_TELEPHONE</item>
<item name="method" xsi:type="string">getTelephone</item>
</item>
<item name="7" xsi:type="array">
<item name="objectType" xsi:type="string">quote</item>
<item name="variable" xsi:type="const">AmastyRequestQuoteModelSourcePdfVariables::QUOTE_NUMBER</item>
<item name="method" xsi:type="string">getIncrementId</item>
</item>
<item name="8" xsi:type="array">
<item name="objectType" xsi:type="string">quote</item>
<item name="variable" xsi:type="const">AmastyRequestQuoteModelSourcePdfVariables::QUOTE_STATUS</item>
<item name="method" xsi:type="string">getStatusLabel</item>
</item>
<item name="9" xsi:type="array">
<item name="objectType" xsi:type="string">quote</item>
<item name="variable" xsi:type="const">AmastyRequestQuoteModelSourcePdfVariables::QUOTE_DATE</item>
<item name="method" xsi:type="string">getCreatedAt</item>
</item>
<item name="10" xsi:type="array">
<item name="objectType" xsi:type="string">quote</item>
<item name="variable" xsi:type="const">AmastyRequestQuoteModelSourcePdfVariables::QUOTE_EXPIRY_DATE</item>
<item name="method" xsi:type="string">getExpiredDate</item>
</item>
<item name="11" xsi:type="array">
<item name="objectType" xsi:type="string">custom</item>
<item name="variable" xsi:type="const">AmastyRequestQuoteModelSourcePdfVariables::SHIPPING_STREET</item>
<item name="method" xsi:type="string">getShippingStreet</item>
</item>
<item name="12" xsi:type="array">
<item name="objectType" xsi:type="string">shipping</item>
<item name="variable" xsi:type="const">AmastyRequestQuoteModelSourcePdfVariables::SHIPPING_CITY</item>
<item name="method" xsi:type="string">getCity</item>
</item>
<item name="13" xsi:type="array">
<item name="objectType" xsi:type="string">custom</item>
<item name="variable" xsi:type="const">AmastyRequestQuoteModelSourcePdfVariables::SHIPPING_REGION</item>
<item name="method" xsi:type="string">getShippingRegion</item>
</item>
<item name="14" xsi:type="array">
<item name="objectType" xsi:type="string">shipping</item>
<item name="variable" xsi:type="const">AmastyRequestQuoteModelSourcePdfVariables::SHIPPING_POSTCODE</item>
<item name="method" xsi:type="string">getPostcode</item>
</item>
<item name="15" xsi:type="array">
<item name="objectType" xsi:type="string">custom</item>
<item name="variable" xsi:type="const">AmastyRequestQuoteModelSourcePdfVariables::SHIPPING_COUNTRY</item>
<item name="method" xsi:type="string">getShippingCountryName</item>
</item>
<item name="16" xsi:type="array">
<item name="objectType" xsi:type="string">custom</item>
<item name="variable" xsi:type="const">AmastyRequestQuoteModelSourcePdfVariables::SHIPPING_TELEPHONE</item>
<item name="method" xsi:type="string">getTelephone</item>
</item>
<item name="17" xsi:type="array">
<item name="objectType" xsi:type="string">custom</item>
<item name="variable" xsi:type="const">AmastyRequestQuoteModelSourcePdfVariables::SHIPPING_METHOD</item>
<item name="method" xsi:type="string">getShippingMethod</item>
</item>
<item name="18" xsi:type="array">
<item name="objectType" xsi:type="string">custom</item>
<item name="variable" xsi:type="const">AmastyRequestQuoteModelSourcePdfVariables::PRODUCT_GRID</item>
<item name="method" xsi:type="string">getProductGrid</item>
</item>
<item name="19" xsi:type="array">
<item name="objectType" xsi:type="string">custom</item>
<item name="variable" xsi:type="const">AmastyRequestQuoteModelSourcePdfVariables::STORE_PHONE</item>
<item name="method" xsi:type="string">getStorePhone</item>
</item>
<item name="20" xsi:type="array">
<item name="objectType" xsi:type="string">custom</item>
<item name="variable" xsi:type="const">AmastyRequestQuoteModelSourcePdfVariables::HAS_SHIPPING_INFO</item>
<item name="method" xsi:type="string">hasShippingInfo</item>
</item>
<item name="21" xsi:type="array">
<item name="objectType" xsi:type="string">custom</item>
<item name="variable" xsi:type="const">AmastyRequestQuoteModelSourcePdfVariables::QUOTE_REMARKS</item>
<item name="method" xsi:type="string">getComments</item>
</item>
</argument>
</arguments>
</type>
…
I just added the last argument :
<item name="21" xsi:type="array">
<item name="objectType" xsi:type="string">custom</item>
<item name="variable" xsi:type="const">AmastyRequestQuoteModelSourcePdfVariables::QUOTE_REMARKS</item>
<item name="method" xsi:type="string">getComments</item>
</item>
This is the edited Amasty/RequestQuote/Model/Pdf/PdfInformation.php
class PdfInformation {
private $quote;
private $variables;
private $billing;
private $shipping;
private $dataObjectFactory;
private $countryInformationAcquirer;
private $status;
private $productGrid;
private $addressRepository;
private $registry;
private $scopeConfig;
public function __construct(
DataObjectFactory $dataObjectFactory,
CountryInformationAcquirerInterface $countryInformationAcquirer,
Status $status,
Items $productGrid,
AddressRepository $addressRepository,
Registry $registry,
ScopeConfigInterface $scopeConfig,
array $variables = []
) {
$this->variables = $variables;
$this->dataObjectFactory = $dataObjectFactory;
$this->countryInformationAcquirer = $countryInformationAcquirer;
$this->status = $status;
$this->productGrid = $productGrid;
$this->addressRepository = $addressRepository;
$this->registry = $registry;
$this->scopeConfig = $scopeConfig;
}
Where I just added the following function :
private function getComments(): string
{
$json = $this->quote->getRemarks();
if ($json != ""){
$object = json_decode($json);
foreach($object as $key=>$value){
$result = $key." : ".$value."<br />";
}
}
else {
$result = "";
}
return (string)$result;
}
And finally, I edited the file AmastyRequestQuoteModelSourcePdfVariables to add the constant REMARKS, so it becomes
class PdfVariables implements OptionSourceInterface {
public const USERNAME = ‘username’;
public const CUSTOMER_STREET = ‘customer_street’;
public const CUSTOMER_CITY = ‘customer_city’;
public const CUSTOMER_REGION = ‘customer_region’;
public const CUSTOMER_POSTCODE = ‘customer_postcode’;
public const CUSTOMER_COUNTRY = ‘customer_country’;
public const CUSTOMER_TELEPHONE = ‘customer_telephone’;
public const QUOTE_NUMBER = ‘quote_number’;
public const QUOTE_STATUS = ‘quote_status’;
public const QUOTE_DATE = ‘quote_date’;
public const QUOTE_EXPIRY_DATE = ‘quote_expiry_date’;
public const HAS_SHIPPING_INFO = ‘has_shipping_info’;
public const SHIPPING_STREET = ‘shipping_street’;
public const SHIPPING_CITY = ‘shipping_city’;
public const SHIPPING_REGION = ‘shipping_region’;
public const SHIPPING_POSTCODE = ‘shipping_postcode’;
public const SHIPPING_COUNTRY = ‘shipping_country’;
public const SHIPPING_TELEPHONE = ‘shipping_telephone’;
public const SHIPPING_METHOD = ‘shipping_method’;
public const PRODUCT_GRID = ‘product_grid’;
public const STORE_PHONE = ‘store_phone’;
public const QUOTE_REMARKS = ‘quote_remarks’;
/**
* @return array|array[]
*/
public function toOptionArray()
{
return [
[
'value' => self::USERNAME,
'label' => __('Username')
],
[
'value' => self::CUSTOMER_STREET,
'label' => __('Customer Street')
],
[
'value' => self::CUSTOMER_REGION,
'label' => __('Customer Region')
],
[
'value' => self::CUSTOMER_POSTCODE,
'label' => __('Customer Postcode')
],
[
'value' => self::CUSTOMER_COUNTRY,
'label' => __('Customer Country')
],
[
'value' => self::CUSTOMER_TELEPHONE,
'label' => __('Customer Telephone')
],
[
'value' => self::QUOTE_NUMBER,
'label' => __('Quote Number')
],
[
'value' => self::QUOTE_STATUS,
'label' => __('Quote Status')
],
[
'value' => self::QUOTE_DATE,
'label' => __('Quote Date')
],
[
'value' => self::QUOTE_EXPIRY_DATE,
'label' => __('Quote Expiry Date')
],
[
'value' => self::HAS_SHIPPING_INFO,
'label' => __('Has Shipping Info')
],
[
'value' => self::SHIPPING_STREET,
'label' => __('Shipping Street')
],
[
'value' => self::SHIPPING_CITY,
'label' => __('Shipping City')
],
[
'value' => self::SHIPPING_REGION,
'label' => __('Shipping Region')
],
[
'value' => self::SHIPPING_POSTCODE,
'label' => __('Shipping Postcode')
],
[
'value' => self::SHIPPING_COUNTRY,
'label' => __('Shipping Country')
],
[
'value' => self::SHIPPING_TELEPHONE,
'label' => __('Shipping Telephone')
],
[
'value' => self::SHIPPING_METHOD,
'label' => __('Shipping Method')
],
[
'value' => self::PRODUCT_GRID,
'label' => __('Product Grid')
],
[
'value' => self::STORE_PHONE,
'label' => __('Store Phone')
],
[
'value' => self::QUOTE_REMARKS,
'label' => __('Quote Remarks')
],
];
}
}
My question is : how to implement this with a custopm module without editing the vendor ?
These are my files into my own module Paul/RequestQuote/
my di.xml in Paul/RequestQuote/etc/
<preference for="AmastyRequestQuoteModelPdfPdfInformation"
type="PaulRequestQuoteModelPdfPdfInformation" />
<preference for="AmastyRequestQuoteModelSourcePdfVariables"
type="PaulRequestQuoteModelSourcePdfVariables" />
<type name="AmastyRequestQuoteModelPdfPdfInformation">
<arguments>
<argument name="variables" xsi:type="array">
<item name="21" xsi:type="array">
<item name="objectType" xsi:type="string">custom</item>
<item name="variable" xsi:type="const">PaulRequestQuoteModelSourcePdfVariables::QUOTE_REMARKS</item>
<item name="method" xsi:type="string">getComments</item>
</item>
</argument>
</arguments>
</type>
This is my new Paul/RequestQuote/Model/Pdf/PdfInformation.php
namespace PaulRequestQuoteModelPdf;
use AmastyRequestQuoteModelQuote;
class PdfInformation extends AmastyRequestQuoteModelPdfPdfInformation {
private $quote;
private function getComments(): string
{
$json = $this->quote->getRemarks();
if ($json != “”){
$object = json_decode($json);
foreach($object as $key=>$value){
$result = $key.” : “.$value.”
“;
}
}
else {
$result = “”;
}
return (string)$result;
}
And finally,; for my new Class PdfVariables, I created a Paul/RequestQuote/Model/Source/Pdfvariables and added the constant like :
namespace PaulRequestQuoteModelSource;
use MagentoFrameworkDataOptionSourceInterface;
class PdfVariables extends AmastyRequestQuoteModelSourcePdfVariables
{ ... and I add the constant and edited fuction
It does not work.
I get the following error :
Firstly, the errors says that I’m trying to call a private function (getComments() in my overrided Pdfinformation class) from the amasty PdfInformation file.
Then I did change the “private” function getComments to “public”…but in that case the object “quote” is empty (it doesnt inherit from the original $this->quote
I got this error :
Error: Call to a member function getRemarks() on null in /var/www/site/app/code/Paul/RequestQuote/Model/Pdf/PdfInformation.php:20 Stack trace: #0 /var/www/site/vendor/amasty/module-request-quote/Model/Pdf/PdfInformation.php(115): PaulRequestQuoteModelPdfPdfInformation->getComments() #1 /var/www/site/vendor/amasty/module-request-quote/Model/Pdf/PdfInformation.php(106): AmastyRequestQuoteModelPdfPdfInformation->g ...