Reputation: 77
Using new version of Prestashop 1.5.2.0. I would like to change the Order reference ( alphabets ) to alphanumeric value. I tried searching in forums and Seen this forum. Unfortunately it wont work for me.
Can any one have solution to change Order reference ( alphabets ) to alphanumeric value in entire application.
I mean "AQMKATRQG" to "LD1001" and the increment it to "LD1002" I would like to change the Order reference ( alphabets ) to alphanumeric value. I tried searching in forums and Seen this forum. Unfortunately it wont work for me.
Can any one have solution to change Order reference ( alphabets ) to alphanumeric value in entire application.
I mean "AQMKATRQG" to "LD1001" and the increment it to "LD1002"
Upvotes: 7
Views: 22321
Reputation: 140
The above solutions are essentially correct, but you REALLY should refrain from modifying any of the core code if you can keep from it. I put all of my mods in a special folder locally after I apply any upgrades to prestashop or my theme engine, then I upload the modifications one by one (after each one is tested).
These instructions are for 1.6.x users - but MAY work on 1.5.x - I don't have that code to test with.
1) Create a file named order.php and place the code below in that file
2) Next, upload the file to /override/classes/order/order.php
3) Navigate to the /cache folder and delete the file class_index.php (it will be recreated on the next page request)
<?php
/*
* RETURN ORDER REFERENCE TO SEQUENTIAL NUMERIC VALUE
*
* 2016 PrestaShop v1.6.1.x
* Override by obewanz
*
* You can use the following SQL query to change the starting order no if desired
* where the number 101 is the next desired order number:
* ALTER TABLE `ps_orders` AUTO_INCREMENT = 101
* --------------------------------------------
* OPTION: (ALL NUMERIC)
* str_pad((int)$last_id + 1, 9, '000000000', STR_PAD_LEFT);
* OPTION SET TO ORIG 1.5.x STYLE REFERENCE NUMBERS:
* str_pad((int)$last_id + 1, 6, '000000', STR_PAD_LEFT);
*/
Class Order extends OrderCore {
public static function generateReference() {
$last_id = Db::getInstance()->getValue('SELECT MAX(id_order)
FROM '._DB_PREFIX_.'orders');
return str_pad((int)$last_id + 1, 9, 'NR-000000', STR_PAD_LEFT);
}
}
You should be finished now, and your next order will have a reference something like: NR-000101
The second "OPTION" in the code comments returns the order reference number to essentially that of PS 1.5.x - (I had a reference to it in an old file.)
I have also included the appropriate SQL statement in the code comments to set the next order number if needed.
Upvotes: 1
Reputation: 1601
In PrestaShop 1.6 (tested and confirmed working in v1.6.0.14) you can accomplish this by the following method.
Copy the file /classes/PaymentModule.php
to /override/classes/PaymentModule.php
.
Edit the file /override/classes/PaymentModule.php
as follows.
At lines 337-341 is a code block that should read like this:
if (!result)
{
PrestaShopLogger::addLog('PaymentModule::validateOrder - Order cannot be created',
3, null, 'Cart', (int)$id_cart, true);
throw new PrestaShopException('Can\'t save Order');
}
Immediately after that code block, insert the following two lines of code:
$order->reference = str_pad($order->id, 9, '0', STR_PAD_LEFT);
$order->update();
Delete the file /cache/class_index.php
so that Prestashop automatically re-creates this file taking into account the new override file.
Any existing records in your PrestaShop database can be updated to use a numerical reference manually using a tool such as phpMyAdmin.
I would imagine the steps would be very similar if not identical to these for PrestaShop v1.5 but at this time I have not tested this solution with PrestaShop v1.5. If someone finds this solution works on v1.5 perhaps they could confirm this in the comments. Thank you.
Upvotes: 16