PAD length refers to the minimum number of additional zeros assigned to each order number as “padding” until the order number becomes higher than the chosen increment pad length. For example:
- Pad 3 = 001, 012, 123, 1234, 12345, 123456
- Pad 4 = 0001, 0012, 0123, 1234, 12345, 123456
- Pad 6 = 000001, 000012, 000123, 001234, 012345, 123456
In the above order increment ID consist of following parts:
- Prefix (store view id)
- Pad-length
- Suffix (Actual Increment id)
In Magento\SalesSequence\Model\Sequence the getCurrentValue() method set the pattern of the increment id number.
/**
* Retrieve current value
*
* @return string
*/
public function getCurrentValue()
{
if (!isset($this->lastIncrementId)) {
return null;
}
return sprintf(
$this->pattern,
$this->meta->getActiveProfile()->getPrefix(),
$this->calculateCurrentValue(),
$this->meta->getActiveProfile()->getSuffix()
);
}
$this->pattern initially get value %s%’.09d%s from the constant DEFAULT_PATTERN.
/**
* Default pattern for Sequence
*/
const DEFAULT_PATTERN = "%s%'.09d%s";
%’.09d sets 0 as the padding character and sets the number of digits to display as the value that follows, in this case, is 9. The d presents the number as a [signed] decimal. This means that by default, the increment-ID number will be a signed decimal with 9 digits, padded with 0s.
If you want to customize order’s Increment id PAD-length to be different than Magento 2 produces by default.
You can configure the class constructor arguments in your etc/di.xml in the argument node. The object manager injects these arguments into the class during creation. The name of the argument configured in the XML file must correspond to the name of the parameter in the constructor in the configured class.
<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
<type name="Magento\SalesSequence\Model\Sequence">
<arguments>
<argument name="pattern" xsi:type="string">%s%'.05d%s</argument>
</arguments>
</type>
</config>
The following example creates instances of Magento\SalesSequence\Model\Sequence with the class constructor argument $pattern set to a value %s%’.05d%s
Finally, run php bin/magento setup:di:compile command and test by placing a new order, increment id will be changed from 9 to 5 digits.
it changes pad length at both invoice and order number! what if i need different pad length in both?