Se utilizzi Magento 2 per il tuo negozio elettronico e sincronizzi gli ordini con Danea EasyFatt, potresti aver riscontrato un problema con i numeri d'ordine molto elevati. Questo accade spesso quando hai viste negozio (store view) in lingue diverse, e Magento inizia a generare numeri d'ordine con prefissi differenti, come ad esempio:

  • per la vista in inglese: #2000000001
  • per la vista in francese: #3000000001

Il problema

Danea EasyFatt ha un limite massimo per i numeri d'ordine che può gestire, fissato a 2.147.483.647. Quando i numeri d'ordine superano questo valore, EasyFatt non è in grado di importarli, causando errori durante la sincronizzazione.

Messaggio di errore visualizzato:

Valore non valido:

Correggere il valore o premere il tast "Esc" per annullare la modifica

Per risolvere questo problema, è necessario ridurre la lunghezza di riempimento (pad-length) dei numeri d'ordine in Magento 2. In questo modo, i numeri d'ordine generati saranno più brevi e non supereranno il limite imposto da EasyFatt.

La lunghezza di riempimento si riferisce al numero minimo di zeri aggiuntivi assegnati a ciascun numero d'ordine come “riempimento” fino a quando il numero d'ordine diventa superiore alla lunghezza di riempimento di incremento scelta. Ad esempio:

  • riempimento 3: 001, 012, 123, 1234, 12345, 123456
  • riempimento 4: 0001, 0012, 0123, 1234, 12345, 123456
  • riempimento 6: 000001, 000012, 000123, 001234, 012345, 123456

Nell'ordine di cui sopra l'ID di incremento è composto dalle seguenti parti:

  • Prefisso (ID Vista Negozio)
  • Lunghezza di riempimento
  • Suffisso (ID effettivo del numero d'ordine)

Passaggi per modificare la lunghezza di riempimento in Magento 2

Aprire il file /vendor/magento/module-sales-sequence/Model/Sequence.php e trovare il codice:

    /**
     * Default pattern for Sequence
     */
    const DEFAULT_PATTERN  = "%s%'.09d%s";

Modificare il valore di DEFAULT_PATTERN da 09 al valore desiderato, esempio 08 (valore minimo di compatibilità con Easyfatt):

    /**
     * Default pattern for Sequence
     */
    const DEFAULT_PATTERN  = "%s%'.08d%s";

Importante

  1. Backup: Prima di effettuare qualsiasi modifica, esegui un backup completo dei file e della base dati.
  2. Impatto sugli Ordini Esistenti: Questa modifica non influenzerà gli ordini già esistenti, ma solo quelli futuri.

Aprire il file /app/code/Webprojectsol/DaneaEasyFatt/etc/di.xml e prima del seguente codice:

    <type name="Webprojectsol\DaneaEasyFatt\Logger\Handler">
	<arguments>
	    <argument name="filesystem" xsi:type="object">Magento\Framework\Filesystem\Driver\File</argument>
	</arguments>
    </type>

Inserire il seguente codice:

   <type name="Magento\SalesSequence\Model\Sequence">
       <arguments>
           <argument name="pattern" xsi:type="string">%s%'.08d%s</argument>
       </arguments>
   </type>

Facendo attenzione a valorizzare la lunghezza di riempimento secondo il valore desiderato. Infatti, nel codice precedente è pari a 08.

Per concludere, è necessario compilare la soluzione Magento eseguendo il seguente comando da terminale:

php bin/magento setup:di:compile

Importante

  1. Backup: Prima di effettuare qualsiasi modifica, esegui un backup completo dei file e della base dati.
  2. Impatto sugli Ordini Esistenti: Questa modifica non influenzerà gli ordini già esistenti, ma solo quelli futuri.