Jump to content

Referentie nummer veranderen in ordernummer op factuur


SanvD

Recommended Posts

Hallo,

 

Ik wil graag het referentie nummer dat bestaat uit letters zoals WEOJDEN veranderen in het ordernummer id_order. zie mijn factuur. hoe pas ik dat aan?

 

Ik begreep ook dat voorheen het referentienummer wel een getallenreeks was, dan zou ik wellicht ook de verandering als beschreven in dit topic kunnen doen, word dan het referentienummer hetzelfde als het order id?

 

http://www.prestasho...ce-with-number/

 

Alleen begrijp ik niet hoe ik dat nu precies moet doen in mijn php. ik heb deze biijgevoegd.

 

Wie kan en wil me helpen?

 

Sandra

order_conf.html

post-461715-0-36232800-1358584669_thumb.jpg

Edited by SanvD (see edit history)
Link to comment
Share on other sites

Hoi,

 

Allereerst. Welke 1.5 versie gebruik je?

Ten tweede, wat je hebt bijgesloten is geen php maar de mail template voor de order bevestiging in html. De template voor de factuur is weer een ander html bestand.

De oplossing die word aangedragen in het engelse topic is aardig, maar verre van de juiste oplossing. Wat de betreffende user heeft gedaan bevat nogal veel haken en ogen, en dat is ook precies waar de andere gebruikers op stuiten.

De makkelijkste en beste methode is door de Validateorder functie in PaymentModule class te vervangen.

Maak een PaymentModule.php aan in /override/classes/ en zet daar het volgende in:

<?php

abstract class PaymentModule extends PaymentModuleCore
{
   /**
   * Validate an order in database
   * Function called from a payment module
   *
   * @param integer $id_cart Value
   * @param integer $id_order_state Value
   * @param float $amount_paid Amount really paid by customer (in the default currency)
   * @param string $payment_method Payment method (eg. 'Credit card')
   * @param string $message Message to attach to order
   */
   public function validateOrder($id_cart, $id_order_state, $amount_paid, $payment_method = 'Unknown',
       $message = null, $extra_vars = array(), $currency_special = null, $dont_touch_amount = false,
       $secure_key = false, Shop $shop = null)
   {
       $this->context->cart = new Cart($id_cart);
       $this->context->customer = new Customer($this->context->cart->id_customer);
       $this->context->language = new Language($this->context->cart->id_lang);
       $this->context->shop = ($shop ? $shop : new Shop($this->context->cart->id_shop));
       $id_currency = $currency_special ? (int)$currency_special : (int)$this->context->cart->id_currency;
       $this->context->currency = new Currency($id_currency, null, $this->context->shop->id);
       if (Configuration::get('PS_TAX_ADDRESS_TYPE') == 'id_address_delivery')
           $context_country = $this->context->country;

       $order_status = new OrderState((int)$id_order_state, (int)$this->context->language->id);
       if (!Validate::isLoadedObject($order_status))
           throw new PrestaShopException('Can\'t load Order state status');

       if (!$this->active)
           die(Tools::displayError());
       // Does order already exists ?
       if (Validate::isLoadedObject($this->context->cart) && $this->context->cart->OrderExists() == false)
       {
           if ($secure_key !== false && $secure_key != $this->context->cart->secure_key)
               die(Tools::displayError());

           // For each package, generate an order
           $delivery_option_list = $this->context->cart->getDeliveryOptionList();
           $package_list = $this->context->cart->getPackageList();
           $cart_delivery_option = $this->context->cart->getDeliveryOption();

           // If some delivery options are not defined, or not valid, use the first valid option
           foreach ($delivery_option_list as $id_address => $package)
               if (!isset($cart_delivery_option[$id_address]) || !array_key_exists($cart_delivery_option[$id_address], $package))
                   foreach ($package as $key => $val)
                   {
                       $cart_delivery_option[$id_address] = $key;
                       break;
                   }

           $order_list = array();
           $order_detail_list = array();
           $reference = Order::generateReference();
           $this->currentOrderReference = $reference;

           $order_creation_failed = false;
           $cart_total_paid = (float)Tools::ps_round((float)$this->context->cart->getOrderTotal(true, Cart::BOTH), 2);

           if ($this->context->cart->orderExists())
           {
               $error = Tools::displayError('An order has already been placed using this cart.');
               Logger::addLog($error, 4, '0000001', 'Cart', intval($this->context->cart->id));
               die($error);
           }

           foreach ($cart_delivery_option as $id_address => $key_carriers)
               foreach ($delivery_option_list[$id_address][$key_carriers]['carrier_list'] as $id_carrier => $data)
                   foreach ($data['package_list'] as $id_package)
                   {
                       // Rewrite the id_warehouse
                       $package_list[$id_address][$id_package]['id_warehouse'] = (int)$this->context->cart->getPackageIdWarehouse($package_list[$id_address][$id_package], (int)$id_carrier);
                       $package_list[$id_address][$id_package]['id_carrier'] = $id_carrier;
                   }
           // Make sure CarRule caches are empty
           CartRule::cleanCache();

           foreach ($package_list as $id_address => $packageByAddress)
               foreach ($packageByAddress as $id_package => $package)
               {
                   $order = new Order();
                   $order->product_list = $package['product_list'];

                   if (Configuration::get('PS_TAX_ADDRESS_TYPE') == 'id_address_delivery')
                   {
                       $address = new Address($id_address);
                       $this->context->country = new Country($address->id_country, $this->context->cart->id_lang);
                   }

                   $carrier = null;
                   if (!$this->context->cart->isVirtualCart() && isset($package['id_carrier']))
                   {
                       $carrier = new Carrier($package['id_carrier'], $this->context->cart->id_lang);
                       $order->id_carrier = (int)$carrier->id;
                       $id_carrier = (int)$carrier->id;
                   }
                   else
                   {
                       $order->id_carrier = 0;
                       $id_carrier = 0;
                   }

                   $order->id_customer = (int)$this->context->cart->id_customer;
                   $order->id_address_invoice = (int)$this->context->cart->id_address_invoice;
                   $order->id_address_delivery = (int)$id_address;
                   $order->id_currency = $this->context->currency->id;
                   $order->id_lang = (int)$this->context->cart->id_lang;
                   $order->id_cart = (int)$this->context->cart->id;
                   $order->reference = $reference;
                   $order->id_shop = (int)$this->context->shop->id;
                   $order->id_shop_group = (int)$this->context->shop->id_shop_group;

                   $order->secure_key = ($secure_key ? pSQL($secure_key) : pSQL($this->context->customer->secure_key));
                   $order->payment = $payment_method;
                   if (isset($this->name))
                       $order->module = $this->name;
                   $order->recyclable = $this->context->cart->recyclable;
                   $order->gift = (int)$this->context->cart->gift;
                   $order->gift_message = $this->context->cart->gift_message;
                   $order->conversion_rate = $this->context->currency->conversion_rate;
                   $amount_paid = !$dont_touch_amount ? Tools::ps_round((float)$amount_paid, 2) : $amount_paid;
                   $order->total_paid_real = 0;

                   $order->total_products = (float)$this->context->cart->getOrderTotal(false, Cart::ONLY_PRODUCTS, $order->product_list, $id_carrier);
                   $order->total_products_wt = (float)$this->context->cart->getOrderTotal(true, Cart::ONLY_PRODUCTS, $order->product_list, $id_carrier);

                   $order->total_discounts_tax_excl = (float)abs($this->context->cart->getOrderTotal(false, Cart::ONLY_DISCOUNTS, $order->product_list, $id_carrier));
                   $order->total_discounts_tax_incl = (float)abs($this->context->cart->getOrderTotal(true, Cart::ONLY_DISCOUNTS, $order->product_list, $id_carrier));
                   $order->total_discounts = $order->total_discounts_tax_incl;

                   $order->total_shipping_tax_excl = (float)$this->context->cart->getPackageShippingCost((int)$id_carrier, false, null, $order->product_list);
                   $order->total_shipping_tax_incl = (float)$this->context->cart->getPackageShippingCost((int)$id_carrier, true, null, $order->product_list);
                   $order->total_shipping = $order->total_shipping_tax_incl;

                   if (!is_null($carrier) && Validate::isLoadedObject($carrier))
                       $order->carrier_tax_rate = $carrier->getTaxesRate(new Address($this->context->cart->{Configuration::get('PS_TAX_ADDRESS_TYPE')}));

                   $order->total_wrapping_tax_excl = (float)abs($this->context->cart->getOrderTotal(false, Cart::ONLY_WRAPPING, $order->product_list, $id_carrier));
                   $order->total_wrapping_tax_incl = (float)abs($this->context->cart->getOrderTotal(true, Cart::ONLY_WRAPPING, $order->product_list, $id_carrier));
                   $order->total_wrapping = $order->total_wrapping_tax_incl;

                   $order->total_paid_tax_excl = (float)Tools::ps_round((float)$this->context->cart->getOrderTotal(false, Cart::BOTH, $order->product_list, $id_carrier), 2);
                   $order->total_paid_tax_incl = (float)Tools::ps_round((float)$this->context->cart->getOrderTotal(true, Cart::BOTH, $order->product_list, $id_carrier), 2);
                   $order->total_paid = $order->total_paid_tax_incl;

                   $order->invoice_date = '0000-00-00 00:00:00';
                   $order->delivery_date = '0000-00-00 00:00:00';

                   // Creating order
                   $result = $order->add();

                   if (!$result)
                       throw new PrestaShopException('Can\'t save Order');

                   $reference = sprintf(sprintf('%09d', $order->id);
                   $this->currentOrderReference = $reference;
                   $order->update();

                   // Amount paid by customer is not the right one -> Status = payment error
                   // We don't use the following condition to avoid the float precision issues : http://www.php.net/manual/en/language.types.float.php
                   // if ($order->total_paid != $order->total_paid_real)
                   // We use number_format in order to compare two string
                   if ($order_status->logable && number_format($cart_total_paid, 2) != number_format($amount_paid, 2))
                       $id_order_state = Configuration::get('PS_OS_ERROR');

                   $order_list[] = $order;

                   // Insert new Order detail list using cart for the current order
                   $order_detail = new OrderDetail(null, null, $this->context);
                   $order_detail->createList($order, $this->context->cart, $id_order_state, $order->product_list, 0, true, $package_list[$id_address][$id_package]['id_warehouse']);
                   $order_detail_list[] = $order_detail;

                   // Adding an entry in order_carrier table
                   if (!is_null($carrier))
                   {
                       $order_carrier = new OrderCarrier();
                       $order_carrier->id_order = (int)$order->id;
                       $order_carrier->id_carrier = (int)$id_carrier;
                       $order_carrier->weight = (float)$order->getTotalWeight();
                       $order_carrier->shipping_cost_tax_excl = (float)$order->total_shipping_tax_excl;
                       $order_carrier->shipping_cost_tax_incl = (float)$order->total_shipping_tax_incl;
                       $order_carrier->add();
                   }
               }

           // The country can only change if the address used for the calculation is the delivery address, and if multi-shipping is activated
           if (Configuration::get('PS_TAX_ADDRESS_TYPE') == 'id_address_delivery')
               $this->context->country = $context_country;

           // Register Payment only if the order status validate the order
           if ($order_status->logable)
           {
               // $order is the last order loop in the foreach
               // The method addOrderPayment of the class Order make a create a paymentOrder
               //	 linked to the order reference and not to the order id
               if (isset($extra_vars['transaction_id']))
                   $transaction_id = $extra_vars['transaction_id'];
               else
                   $transaction_id = null;

               if (!$order->addOrderPayment($amount_paid, null, $transaction_id))
                   throw new PrestaShopException('Can\'t save Order Payment');
           }

           // Next !
           $only_one_gift = false;
           $cart_rule_used = array();
           $products = $this->context->cart->getProducts();
           $cart_rules = $this->context->cart->getCartRules();

           // Make sure CarRule caches are empty
           CartRule::cleanCache();

           foreach ($order_detail_list as $key => $order_detail)
           {
               $order = $order_list[$key];
               if (!$order_creation_failed & isset($order->id))
               {
                   if (!$secure_key)
                       $message .= '<br />'.Tools::displayError('Warning: the secure key is empty, check your payment account before validation');
                   // Optional message to attach to this order
                   if (isset($message) & !empty($message))
                   {
                       $msg = new Message();
                       $message = strip_tags($message, '<br>');
                       if (Validate::isCleanHtml($message))
                       {
                           $msg->message = $message;
                           $msg->id_order = intval($order->id);
                           $msg->private = 1;
                           $msg->add();
                       }
                   }

                   // Insert new Order detail list using cart for the current order
                   //$orderDetail = new OrderDetail(null, null, $this->context);
                   //$orderDetail->createList($order, $this->context->cart, $id_order_state);

                   // Construct order detail table for the email
                   $products_list = '';
                   $virtual_product = true;
                   foreach ($products as $key => $product)
                   {
                       $price = Product::getPriceStatic((int)$product['id_product'], false, ($product['id_product_attribute'] ? (int)$product['id_product_attribute'] : null), 6, null, false, true, $product['cart_quantity'], false, (int)$order->id_customer, (int)$order->id_cart, (int)$order->{Configuration::get('PS_TAX_ADDRESS_TYPE')});
                       $price_wt = Product::getPriceStatic((int)$product['id_product'], true, ($product['id_product_attribute'] ? (int)$product['id_product_attribute'] : null), 2, null, false, true, $product['cart_quantity'], false, (int)$order->id_customer, (int)$order->id_cart, (int)$order->{Configuration::get('PS_TAX_ADDRESS_TYPE')});

                       $customization_quantity = 0;
                       if (isset($customized_datas[$product['id_product']][$product['id_product_attribute']]))
                       {
                           $customization_text = '';
                           foreach ($customized_datas[$product['id_product']][$product['id_product_attribute']] as $customization)
                           {
                               if (isset($customization['datas'][Product::CUSTOMIZE_TEXTFIELD]))
                                   foreach ($customization['datas'][Product::CUSTOMIZE_TEXTFIELD] as $text)
                                       $customization_text .= $text['name'].': '.$text['value'].'<br />';

                               if (isset($customization['datas'][Product::CUSTOMIZE_FILE]))
                                   $customization_text .= sprintf(Tools::displayError('%d image(s)'), count($customization['datas'][Product::CUSTOMIZE_FILE])).'<br />';

                               $customization_text .= '---<br />';
                           }

                           $customization_text = rtrim($customization_text, '---<br />');

                           $customization_quantity = (int)$product['customizationQuantityTotal'];
                           $products_list .=
                           '<tr style="background-color: '.($key % 2 ? '#DDE2E6' : '#EBECEE').';">
                               <td style="padding: 0.6em 0.4em;width: 15%;">'.$product['reference'].'</td>
                               <td style="padding: 0.6em 0.4em;width: 30%;"><strong>'.$product['name'].(isset($product['attributes']) ? ' - '.$product['attributes'] : '').' - '.Tools::displayError('Customized').(!empty($customization_text) ? ' - '.$customization_text : '').'</strong></td>
                               <td style="padding: 0.6em 0.4em; width: 20%;">'.Tools::displayPrice(Product::getTaxCalculationMethod() == PS_TAX_EXC ?  Tools::ps_round($price, 2) : $price_wt, $this->context->currency, false).'</td>
                               <td style="padding: 0.6em 0.4em; width: 15%;">'.$customization_quantity.'</td>
                               <td style="padding: 0.6em 0.4em; width: 20%;">'.Tools::displayPrice($customization_quantity * (Product::getTaxCalculationMethod() == PS_TAX_EXC ? Tools::ps_round($price, 2) : $price_wt), $this->context->currency, false).'</td>
                           </tr>';
                       }

                       if (!$customization_quantity || (int)$product['cart_quantity'] > $customization_quantity)
                           $products_list .=
                           '<tr style="background-color: '.($key % 2 ? '#DDE2E6' : '#EBECEE').';">
                               <td style="padding: 0.6em 0.4em;width: 15%;">'.$product['reference'].'</td>
                               <td style="padding: 0.6em 0.4em;width: 30%;"><strong>'.$product['name'].(isset($product['attributes']) ? ' - '.$product['attributes'] : '').'</strong></td>
                               <td style="padding: 0.6em 0.4em; width: 20%;">'.Tools::displayPrice(Product::getTaxCalculationMethod() == PS_TAX_EXC ? Tools::ps_round($price, 2) : $price_wt, $this->context->currency, false).'</td>
                               <td style="padding: 0.6em 0.4em; width: 15%;">'.((int)$product['cart_quantity'] - $customization_quantity).'</td>
                               <td style="padding: 0.6em 0.4em; width: 20%;">'.Tools::displayPrice(((int)$product['cart_quantity'] - $customization_quantity) * (Product::getTaxCalculationMethod() == PS_TAX_EXC ? Tools::ps_round($price, 2) : $price_wt), $this->context->currency, false).'</td>
                           </tr>';

                       // Check if is not a virutal product for the displaying of shipping
                       if (!$product['is_virtual'])
                           $virtual_product &= false;

                   } // end foreach ($products)

                   $cart_rules_list = '';
                   foreach ($cart_rules as $cart_rule)
                   {
                       $package = array('id_carrier' => $order->id_carrier, 'id_address' => $order->id_address_delivery, 'products' => $order->product_list);
                       $values = array(
                           'tax_incl' => $cart_rule['obj']->getContextualValue(true, $this->context, CartRule::FILTER_ACTION_ALL, $package),
                           'tax_excl' => $cart_rule['obj']->getContextualValue(false, $this->context, CartRule::FILTER_ACTION_ALL, $package)
                       );

                       // If the reduction is not applicable to this order, then continue with the next one
                       if (!$values['tax_excl'])
                           continue;

                       $order->addCartRule($cart_rule['obj']->id, $cart_rule['obj']->name, $values);

                       /* IF
                       ** - This is not multi-shipping
                       ** - The value of the voucher is greater than the total of the order
                       ** - Partial use is allowed
                       ** - This is an "amount" reduction, not a reduction in % or a gift
                       ** THEN
                       ** The voucher is cloned with a new value corresponding to the remainder
                       */
                       if (count($order_list) == 1 && $values['tax_incl'] > $order->total_products_wt && $cart_rule['obj']->partial_use == 1 && $cart_rule['obj']->reduction_amount > 0)
                       {
                           // Create a new voucher from the original
                           $voucher = new CartRule($cart_rule['obj']->id); // We need to instantiate the CartRule without lang parameter to allow saving it
                           unset($voucher->id);

                           // Set a new voucher code
                           $voucher->code = empty($voucher->code) ? substr(md5($order->id.'-'.$order->id_customer.'-'.$cart_rule['obj']->id), 0, 16) : $voucher->code.'-2';
                           if (preg_match('/\-([0-9]{1,2})\-([0-9]{1,2})$/', $voucher->code, $matches) && $matches[1] == $matches[2])
                               $voucher->code = preg_replace('/'.$matches[0].'$/', '-'.(intval($matches[1]) + 1), $voucher->code);

                           // Set the new voucher value
                           if ($voucher->reduction_tax)
                               $voucher->reduction_amount = $values['tax_incl'] - $order->total_products_wt;
                           else
                               $voucher->reduction_amount = $values['tax_excl'] - $order->total_products;

                           $voucher->id_customer = $order->id_customer;
                           $voucher->quantity = 1;
                           if ($voucher->add())
                           {
                               // If the voucher has conditions, they are now copied to the new voucher
                               CartRule::copyConditions($cart_rule['obj']->id, $voucher->id);

                               $params = array(
                                   '{voucher_amount}' => Tools::displayPrice($voucher->reduction_amount, $this->context->currency, false),
                                   '{voucher_num}' => $voucher->code,
                                   '{firstname}' => $this->context->customer->firstname,
                                   '{lastname}' => $this->context->customer->lastname,
                                   '{id_order}' => $order->reference,
                                   '{order_name}' => $order->getUniqReference()
                               );
                               Mail::Send(
                                   (int)$order->id_lang,
                                   'voucher',
                                   sprintf(Mail::l('New voucher regarding your order %s', (int)$order->id_lang), $order->reference),
                                   $params,
                                   $this->context->customer->email,
                                   $this->context->customer->firstname.' '.$this->context->customer->lastname,
                                   null, null, null, null, _PS_MAIL_DIR_, false, (int)$order->id_shop
                               );
                           }
                       }

                       if ($id_order_state != Configuration::get('PS_OS_ERROR') && $id_order_state != Configuration::get('PS_OS_CANCELED') && !in_array($cart_rule['obj']->id, $cart_rule_used))
                       {
                           $cart_rule_used[] = $cart_rule['obj']->id;

                           // Create a new instance of Cart Rule without id_lang, in order to update its quantity
                           $cart_rule_to_update = new CartRule($cart_rule['obj']->id);
                           $cart_rule_to_update->quantity = max(0, $cart_rule_to_update->quantity - 1);
                           $cart_rule_to_update->update();
                       }

                       $cart_rules_list .= '
                       <tr>
                           <td colspan="4" style="padding:0.6em 0.4em;text-align:right">'.Tools::displayError('Voucher name:').' '.$cart_rule['obj']->name.'</td>
                           <td style="padding:0.6em 0.4em;text-align:right">'.($values['tax_incl'] != 0.00 ? '-' : '').Tools::displayPrice($values['tax_incl'], $this->context->currency, false).'</td>
                       </tr>';
                   }

                   // Specify order id for message
                   $old_message = Message::getMessageByCartId((int)$this->context->cart->id);
                   if ($old_message)
                   {
                       $update_message = new Message((int)$old_message['id_message']);
                       $update_message->id_order = (int)$order->id;
                       $update_message->update();

                       // Add this message in the customer thread
                       $customer_thread = new CustomerThread();
                       $customer_thread->id_contact = 0;
                       $customer_thread->id_customer = (int)$order->id_customer;
                       $customer_thread->id_shop = (int)$this->context->shop->id;
                       $customer_thread->id_order = (int)$order->id;
                       $customer_thread->id_lang = (int)$this->context->language->id;
                       $customer_thread->email = $this->context->customer->email;
                       $customer_thread->status = 'open';
                       $customer_thread->token = Tools::passwdGen(12);
                       $customer_thread->add();

                       $customer_message = new CustomerMessage();
                       $customer_message->id_customer_thread = $customer_thread->id;
                       $customer_message->id_employee = 0;
                       $customer_message->message = htmlentities($update_message->message, ENT_COMPAT, 'UTF-8');
                       $customer_message->private = 0;

                       if (!$customer_message->add())
                           $this->errors[] = Tools::displayError('An error occurred while saving message');
                   }

                   // Hook validate order
                   Hook::exec('actionValidateOrder', array(
                       'cart' => $this->context->cart,
                       'order' => $order,
                       'customer' => $this->context->customer,
                       'currency' => $this->context->currency,
                       'orderStatus' => $order_status
                   ));

                   foreach ($this->context->cart->getProducts() as $product)
                       if ($order_status->logable)
                           ProductSale::addProductSale((int)$product['id_product'], (int)$product['cart_quantity']);

                   if (Configuration::get('PS_STOCK_MANAGEMENT') && $order_detail->getStockState())
                   {
                       $history = new OrderHistory();
                       $history->id_order = (int)$order->id;
                       $history->changeIdOrderState(Configuration::get('PS_OS_OUTOFSTOCK'), $order, true);
                       $history->addWithemail();
                   }

                   // Set order state in order history ONLY even if the "out of stock" status has not been yet reached
                   // So you migth have two order states
                   $new_history = new OrderHistory();
                   $new_history->id_order = (int)$order->id;
                   $new_history->changeIdOrderState((int)$id_order_state, $order, true);
                   $new_history->addWithemail(true, $extra_vars);

                   unset($order_detail);

                   // Order is reloaded because the status just changed
                   $order = new Order($order->id);

                   // Send an e-mail to customer (one order = one email)
                   if ($id_order_state != Configuration::get('PS_OS_ERROR') && $id_order_state != Configuration::get('PS_OS_CANCELED') && $this->context->customer->id)
                   {
                       $invoice = new Address($order->id_address_invoice);
                       $delivery = new Address($order->id_address_delivery);
                       $delivery_state = $delivery->id_state ? new State($delivery->id_state) : false;
                       $invoice_state = $invoice->id_state ? new State($invoice->id_state) : false;

                       $data = array(
                       '{firstname}' => $this->context->customer->firstname,
                       '{lastname}' => $this->context->customer->lastname,
                       '{email}' => $this->context->customer->email,
                       '{delivery_block_txt}' => $this->_getFormatedAddress($delivery, "\n"),
                       '{invoice_block_txt}' => $this->_getFormatedAddress($invoice, "\n"),
                       '{delivery_block_html}' => $this->_getFormatedAddress($delivery, '<br />', array(
                           'firstname'    => '<span style="font-weight:bold;">%s</span>',
                           'lastname'    => '<span style="font-weight:bold;">%s</span>'
                       )),
                       '{invoice_block_html}' => $this->_getFormatedAddress($invoice, '<br />', array(
                               'firstname'    => '<span style="font-weight:bold;">%s</span>',
                               'lastname'    => '<span style="font-weight:bold;">%s</span>'
                       )),
                       '{delivery_company}' => $delivery->company,
                       '{delivery_firstname}' => $delivery->firstname,
                       '{delivery_lastname}' => $delivery->lastname,
                       '{delivery_address1}' => $delivery->address1,
                       '{delivery_address2}' => $delivery->address2,
                       '{delivery_city}' => $delivery->city,
                       '{delivery_postal_code}' => $delivery->postcode,
                       '{delivery_country}' => $delivery->country,
                       '{delivery_state}' => $delivery->id_state ? $delivery_state->name : '',
                       '{delivery_phone}' => ($delivery->phone) ? $delivery->phone : $delivery->phone_mobile,
                       '{delivery_other}' => $delivery->other,
                       '{invoice_company}' => $invoice->company,
                       '{invoice_vat_number}' => $invoice->vat_number,
                       '{invoice_firstname}' => $invoice->firstname,
                       '{invoice_lastname}' => $invoice->lastname,
                       '{invoice_address2}' => $invoice->address2,
                       '{invoice_address1}' => $invoice->address1,
                       '{invoice_city}' => $invoice->city,
                       '{invoice_postal_code}' => $invoice->postcode,
                       '{invoice_country}' => $invoice->country,
                       '{invoice_state}' => $invoice->id_state ? $invoice_state->name : '',
                       '{invoice_phone}' => ($invoice->phone) ? $invoice->phone : $invoice->phone_mobile,
                       '{invoice_other}' => $invoice->other,
                       '{order_name}' => $order->getUniqReference(),
                       '{date}' => Tools::displayDate(date('Y-m-d H:i:s'), (int)$order->id_lang, 1),
                       '{carrier}' => $virtual_product ? Tools::displayError('No carrier') : $carrier->name,
                       '{payment}' => Tools::substr($order->payment, 0, 32),
                       '{products}' => $this->formatProductAndVoucherForEmail($products_list),
                       '{discounts}' => $this->formatProductAndVoucherForEmail($cart_rules_list),
                       '{total_paid}' => Tools::displayPrice($order->total_paid, $this->context->currency, false),
                       '{total_products}' => Tools::displayPrice($order->total_paid - $order->total_shipping - $order->total_wrapping + $order->total_discounts, $this->context->currency, false),
                       '{total_discounts}' => Tools::displayPrice($order->total_discounts, $this->context->currency, false),
                       '{total_shipping}' => Tools::displayPrice($order->total_shipping, $this->context->currency, false),
                       '{total_wrapping}' => Tools::displayPrice($order->total_wrapping, $this->context->currency, false));

                       if (is_array($extra_vars))
                           $data = array_merge($data, $extra_vars);

                       // Join PDF invoice
                       if ((int)Configuration::get('PS_INVOICE') && $order_status->invoice && $order->invoice_number)
                       {
                           $pdf = new PDF($order->getInvoicesCollection(), PDF::TEMPLATE_INVOICE, $this->context->smarty);
                           $file_attachement['content'] = $pdf->render(false);
                           $file_attachement['name'] = Configuration::get('PS_INVOICE_PREFIX', (int)$order->id_lang).sprintf('%06d', $order->invoice_number).'.pdf';
                           $file_attachement['mime'] = 'application/pdf';
                       }
                       else
                           $file_attachement = null;

                       if (Validate::isEmail($this->context->customer->email))
                           Mail::Send(
                               (int)$order->id_lang,
                               'order_conf',
                               Mail::l('Order confirmation', (int)$order->id_lang),
                               $data,
                               $this->context->customer->email,
                               $this->context->customer->firstname.' '.$this->context->customer->lastname,
                               null,
                               null,
                               $file_attachement,
                               null, _PS_MAIL_DIR_, false, (int)$order->id_shop
                           );
                   }

                   // updates stock in shops
                   if (Configuration::get('PS_ADVANCED_STOCK_MANAGEMENT'))
                   {
                       $product_list = $order->getProducts();
                       foreach ($product_list as $product)
                       {
                           // if the available quantities depends on the physical stock
                           if (StockAvailable::dependsOnStock($product['product_id']))
                           {
                               // synchronizes
                               StockAvailable::synchronize($product['product_id'], $order->id_shop);
                           }
                       }
                   }
               }
               else
               {
                   $error = Tools::displayError('Order creation failed');
                   Logger::addLog($error, 4, '0000002', 'Cart', intval($order->id_cart));
                   die($error);
               }
           } // End foreach $order_detail_list
           // Use the last order as currentOrder
           $this->currentOrder = (int)$order->id;
           return true;
       }
       else
       {
           $error = Tools::displayError('Cart cannot be loaded or an order has already been placed using this cart');
           Logger::addLog($error, 4, '0000001', 'Cart', intval($this->context->cart->id));
           die($error);
       }
   }
}

Link to comment
Share on other sites

@SanvD

Het Bestelnummer is het Order number of order_id.

 

Dit bestelnummer kun je niet gelijkmaken aan je Factuurnummer. Je factuurnummer is een opeenvolgende reeks die je moet aanhouden voor je boekhouding (Belastingen). Als een bestelling geanulleerd wordt dan komen de volgende nummers al niet meer overeen.

 

Waarom ze zijn overgegaan van een cijferreeks naar een letterreeks weet ik niet, maar op de letterreeks kun je gewoon zoeken in je winkelachterkant naar een bestelling.

Link to comment
Share on other sites

Dan zijn er dus 3 nummers per bestelling

1 referentienummer met WEPWJFPJ o.i.d.

2 ordernummer

3 factuurnummer

 

ik begrijp nu ook dat ordernummer en factuurnummer niet synchroom gaan lopen.

 

Maar ik wil dan dat het referentienummer overal het ordernummer word, hoe pas ik dat het makkelijkste aan?

of blijf je altijd met 3 verschillende nummers zitten, waarom is dat eigenlijk?

 

ik blijf in de order_config die stomme nummerreeks halen, ik heb geprobeerd order_name te veranderen in id_order maar dan pakt hij hem niet

 

<td align="left">Order: <strong><span style="color: {color};">{order_name}</span> geplaatst op {date}</strong> <br />Betaalmethode: <strong>{payment}</strong></td>

 

in

 

<td align="left">Bestelling: <strong>{id_order}</strong> geplaatst op {date}</strong> <br> Betaalmethode: <strong>{payment}</strong></td>

 

 

Dus als ik wil dan dat het referentienummer overal het ordernummer word, hoe pas ik dat dan het makkelijkste aan?

of blijf je altijd met 3 verschillende nummers zitten, waarom is dat eigenlijk?

 

Sandra

Edited by SanvD (see edit history)
Link to comment
Share on other sites

@SanvD

In je winkelachterkant staat bij de bestellingen achter Bestelling het bestelnummer (#123) met daarachter het referentienummer. Waarom dit referentienummer wordt gebruikt is mij ook niet duidelijk, het komt in ieder geval op je factuur terug.

Voor zover ik het heb kunnen nagaan is het referentienummer enkel van belang bij multishipping (order verdeeld over meerdere verzendingen) en een enkele paymentmodule die de referentienummer gebruikt om naar te refereren zoals bankoverschrijving.
Link to comment
Share on other sites

Weet je, ik heb gewoon de verwijzing naar het referentienummer uit het mailtje verwijderd, dan zien ze het niet, er staat dan alleen:

 

Order: geplaatst op en dan de datum. Ze kunnen onderin op de link klikken naar de bestelling.

 

Bij het mailtje van de bankoverschrijving staat wel netjes het ordernummer, dus dan verschijnt dat achtelijke nummer nu alleen nog in mijn administratie gedeelte en helaas dus op de factuur.

 

dus als iemand nog weet hoe ik het gewoon van de factuur af kan halen dan zou ik helemaal blij zijn.

 

Alvast heel erg bedankt voor jullie hulp en het brainstormen.

Edited by SanvD (see edit history)
Link to comment
Share on other sites

Weet je, ik heb gewoon de verwijzing naar het referentienummer uit het mailtje verwijderd, dan zien ze het niet, er staat dan alleen:

 

Order: geplaatst op en dan de datum. Ze kunnen onderin op de link klikken naar de bestelling.

 

Bij het mailtje van de bankoverschrijving staat wel netjes het ordernummer, dus dan verschijnt dat achtelijke nummer nu alleen nog in mijn administratie gedeelte en helaas dus op de factuur.

 

dus als iemand nog weet hoe ik het gewoon van de factuur af kan halen dan zou ik helemaal blij zijn.

 

Alvast heel erg bedankt voor jullie hulp en het brainstormen.

Voer gewoon de code uit die ik in de 2de post heb voorzien en het referentienummer word vervangen door de order_id met voorloop-nullen. Dan hoef je verder niks aan te passen en kan het referentienummer in de orderbevestiging, factuur, BO, etc. blijven staan.
Link to comment
Share on other sites

@scorpionsworld

 

Voor zover ik het heb kunnen nagaan is het referentienummer enkel van belang bij multishipping (order verdeeld over meerdere verzendingen) en een enkele paymentmodule die de referentienummer gebruikt om naar te refereren zoals bankoverschrijving.

 

Ik dacht al zoiets, met de name de referentie bij een betalingsmodule.

Ze hebben het natuurlijk niet voor niets toegevoegd, dus ik laat het gewoon staan.

Link to comment
Share on other sites

Voer gewoon de code uit die ik in de 2de post heb voorzien en het referentienummer word vervangen door de order_id met voorloop-nullen. Dan hoef je verder niks aan te passen en kan het referentienummer in de orderbevestiging, factuur, BO, etc. blijven staan.

 

Ik ga het proberen en die moet ik dus uploaden toch?

 

Sandra

Link to comment
Share on other sites

Nou als ik dat doe dan kan ik niet meer bij mijn facturen en of bestellingen ik krijg dan een wit scherm. als ik dan mijn oude weer upload kan het wel.

 

ik heb de file met jouw script erbij gedaan, klopt die zo dan of heb ik iets fout gedaan?

 

Sandra

Mijn fout :huh:

Er stond een stukje code teveel op een regel.

Bijgaand bestand moet goed zijn.

PaymentModule.php

Link to comment
Share on other sites

nee hoor hij doet het nog niet, onderstaand verschijnt in de zoekbalk, ik kan dan niet eens in mijn admin komen.

 

http://www.sannalin....4a8ac5cf00b0a5e

 

bijgaand mij php die het wel doet.

Dat is de core file uit [prestashoproot]/classes/ :o

Het bestand wat ik je heb gegeven moet geupload worden naar [prestashoproot]/override/classes

Geen wonder dat het dan niet werkt.

Link to comment
Share on other sites

Ik heb een nieuwe order geplaatst en die stomme letterreeks staat er nog steeds grrrrrrrrr

 

zowel op de factuur als op de bestellings bevestiging

 

Sandra

Momentje. Ik ben op het moment bezig om een kleine module te maken om de referentie aan te passen naar je wensen.

Gooi de override voorlopig maar weg.

Link to comment
Share on other sites

  • 2 weeks later...

Hallo,

 

Ik heb dit ook geprobeerd bij 1.5.2.0 want ik wil ook van die lettercombi af.

Heb hem geinstalleerd en alleen ingesteld dat hij order id moet gebruiken, nu is het laatse scherm van betalen met overschrijving een wit scherm, ook na deinstalleren van de module ??

 

wat doe ik fout ?

 

Groet Dennis

Link to comment
Share on other sites

Hallo,

 

Ik heb dit ook geprobeerd bij 1.5.2.0 want ik wil ook van die lettercombi af.

Heb hem geinstalleerd en alleen ingesteld dat hij order id moet gebruiken, nu is het laatse scherm van betalen met overschrijving een wit scherm, ook na deinstalleren van de module ??

 

wat doe ik fout ?

 

Groet Dennis

In principe doe je niks fout. Probleem is dat de module een stukje van de database aanpast. na de-installatie word dit niet teruggezet (is ook niet perse nodig). Ik heb bij de ontwikkeling zowel bankoverschrijving als de ideal checkout module (ideal simulator) gebruikt om te testen, dat je dus een blanco scherm krijgt is wel wat vreemd. Een blanco scherm wil zoveel zeggen als 'Er is een fatale fout gebeurd, maar omdat error reporting uit staat laat ik niks zien', dat kan dus door vanalles veroorzaakt worden. Om te achterhalen wat er fout gaat zou je error reporting in moeten schakelen, zie hier hoe, om de foutmelding te kunnen zien.
Link to comment
Share on other sites

  • 1 month later...

Ik krijg dezelfde witte pagina in een testshop van me. In een andere testshop weer niet...

 

Ik heb de error reporting aan staan, maar waar vind ik die report terug?

 

Ik heb overigens ook versie 1.5.2 en kreeg op het scherm geen foutmelding te zien, puur een witte pagina...

Edited by dekarperboer (see edit history)
Link to comment
Share on other sites

Ik krijg dezelfde witte pagina in een testshop van me. In een andere testshop weer niet...

 

Ik heb de error reporting aan staan, maar waar vind ik die report terug?

 

Ik heb overigens ook versie 1.5.2 en kreeg op het scherm geen foutmelding te zien, puur een witte pagina...

error reporting logt geen report maar geeft een foutmelding op het beeldscherm.
Link to comment
Share on other sites

Kan iemand mij vertellen welke database tabellen ik moet exporteren vanuit een nagenoeg gelijkende prestahop installatie om van de blanco pagina af te komen?

welke versie van de modrefchange module gebruik je?

Zie topic [MODULE] Change Order reference using Order ID and/or Cart ID

Vandaag of morgen kom ik met versie 1.2 met wat bugfixes

Echter niet de bug van de blanco pagina, daar ik die niet kan reproduceren

Link to comment
Share on other sites

  • 3 years later...
  • 2 weeks later...

Als je de website bekijkt lijkt het er niet op. Ik heb de module nog wel ergens in een zip bestandje. Niet getest op 1.6 versie van Prestashop maar als je de module wilt bekijken wil ik hem wel even ergens plaatsen.

Link to comment
Share on other sites

  • 2 weeks later...

Ik heb mijn prestashop van de week ge-update naar de versie 1.6.1.6. Het enige wat niet werkt is de Order reference module. Ik krijg nu weer die rare order nummers als bv. SDFGTEJHNSV nu heb ik de order reference module even per winkel bekeken, maar de instellingen staan goed. Voor de zekerheid nog een keer opgeslagen, cache geleegd, maar krijg nog steeds die rare order nummers.

Iemand enig idee?

Link to comment
Share on other sites

Opgelost....werkt weer zoals het hoort. Ik had nog een oudere module 1.5.3 nu de versie 1.5.5.1 gedownload.

(oude versie uitgeschakeld/gedeleted - cache geleegd en daarna de nieuwe geïnstalleerd - en opnieuw geconfigureerd).

 

De 1.5.5.1 order change reference module kun je hier bij post 62 downloaden.

 

Deze werkt dus goed met prestashop versie 1.6.1.6
 

Succes

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...