使用opencart vqmod匹配订单ID和发票号

时间:2014-05-23 12:04:19

标签: opencart

我有一个与发票号和订单ID匹配的opencart扩展程序,因此帐号更容易。我有一个问题,订单ID实际上是发票编号后面的1个数字,我不知道为什么。这是VQmod代码

<file name="*/model/sale/order.php" error="skip">
    <operation error="skip">
        <search position="before"><![CDATA[
            // Send out any gift voucher mails
        ]]></search>
        <add trim="true"><![CDATA[
            if (empty($order_info['invoice_no']) && $data['order_status_id'] == $this->config->get('config_complete_status_id')) {
                $this->db->query("UPDATE `" . DB_PREFIX . "order` SET invoice_no = '" . (int)$order_id . "', invoice_prefix = '" . $this->db->escape($order_info['invoice_prefix']) . "' WHERE order_id = '" . (int)$order_id . "'");
            }
        ]]></add>
    </operation>
</file>

<file name="catalog/model/checkout/order.php" error="skip">
    <operation error="skip">
        <search position="before"><![CDATA[
            // Send out any gift voucher mails
        ]]></search>
        <add trim="true"><![CDATA[
            if (empty($order_info['invoice_no']) && $order_status_id == $this->config->get('config_complete_status_id')) {
                $this->db->query("UPDATE `" . DB_PREFIX . "order` SET invoice_no = '" . (int)$order_id . "', invoice_prefix = '" . $this->db->escape($order_info['invoice_prefix']) . "' WHERE order_id = '" . (int)$order_id . "'");
            }
        ]]></add>
    </operation>
</file>

任何想法?

谢谢

1 个答案:

答案 0 :(得分:1)

原因很简单:

  • 随时开始结帐流程并完成所有步骤直到最后确认一个创建新订单但仍然不可见(您可以检入数据库)是否有全新ID,状态设置为0
  • 确认订单后(通过结账流程中选择的付款方式),它将使用新的状态ID进行更新,因此您可以看到订单但目前没有发票编号
  • 现在您最终可能会开始但不会多次完成结帐流程 - 这会创建从未使用过的空白订单
    • 这一步并不罕见,因为正是在这个确认步骤中,许多客户都更加谨慎,并在付款前仔细查看所有信息。他们中的许多人在这一步取消结账过程并不奇怪,因为他们只是想要添加/删除一些产品(可能是因为基于重量的运输,这有无限的理由),结帐其他选项的一些产品,其他变种,增加产品的数量(我可以继续......)。并且,当用户对购物车进行更改并开始新的结帐流程时,会出现空白订单: - )
  • 在管理中点击生成发票编号后,会创建新的发票编号并用于发票编号,因此您的订单编号为1126,发票编号为201400994

解决此问题的方法可能是使用订单的ID作为发票编号而不是发票的ID,但这可能违反了您所在国家/地区的税法,例如在欧洲,90%的国家/地区要求订购发票编号,不断增加,不间断,实线。

另一方面,发票编号与订单编号(ID)不同并不奇怪,客户也不习惯。