craftsnippets / craft-dpd-easyship
Requires
- php: >=8.0.2
- craftcms/cms: ^5.0.0
- datalinx/dpd-php-sdk: *
This package is not auto-updated.
Last update: 2024-09-29 16:46:37 UTC
README
在控制台运行
composer require craftsnippets/craft-dpd-easyship
允许的国家
Easyship 可用于克罗地亚和斯洛文尼亚。这对于客户端API服务的选择非常重要,该服务可以在插件的“API国家”设置中设置。
除此之外,只有来自克罗地亚和斯洛文尼亚的包裹的发件人和收件人地址是允许的。
权限
为了能够使用 Easyship,控制面板用户必须启用“管理 DDP EasyShip 包裹”权限。
DPD EasyShip 界面
DPD Easyship 仅可在克罗地亚和斯洛文尼亚使用。
要使用 DPD EasyShip,请向订单字段布局中添加一个“DPD EasyShip”类型的字段。此字段仅用作数据容器,不会在任何订单字段布局上显示任何类型的输入。
然后您需要在插件设置中启用“启用 DPD EasyShip 集成的运输方式”设置以特定运输方式启用 Easyship。这将使 Easyship 界面出现在订单页面,并且可以在订单列表上对特定订单执行元素索引操作。
如果订单有包裹,但管理员从插件设置中删除了其运输方式,界面仍然会显示,以便可以删除包裹。
订单列表
控制面板中订单列表添加的功能
- 按包裹号搜索。
- 额外的元素索引列,包含包裹状态。
- 选择一个或多个订单后,可用的元素索引操作 - 创建包裹、更新包裹、获取包裹标签的 PDF
删除包裹
由于某种原因,删除包裹的 API 调用需要很长时间才能得到响应。因此,使用队列作业 - 立即将包裹数据从订单中删除,但将 API 调用的作业推送到队列管理器。
请注意,删除状态为“已创建”的包裹将从 API 完全删除。而删除状态为“已打印”的包裹将仅在 API 中将其状态设置为“已取消”(在这种情况下,包裹数据仍然从 craft commerce 中删除)。状态为“已发送”的包裹不允许从 API 中删除,并且此选项被 Easyshp 插件界面阻止。
电话号码字段和投递指示字段
Craft 地址中没有内置电话号码字段。因此,我们需要创建一个纯文本字段,将其分配给地址字段布局,并在“电话号码字段”插件设置中选择它。
然后您需要将此字段添加到前端地址表单。要自动获取此字段对象,您可以使用此 getAddressPhoneField
函数。
{% set phoneField = craft.dpdEasyship.getAddressPhoneField() %}
{% if phoneField %}
<input name="fields[{{phoneField.handle}}]">
{% endif %}
投递指示字段以类似的方式工作,但添加到订单字段布局,而不是地址字段布局。添加到其中后,将其设置为“投递指示(快递员)字段”插件设置,并将其添加到前端购物车/订单表单
{% set instructionsField = craft.dpdEasyship.getOrderInstructionsField() %}
{% if instructionsField %}
<textarea name="fields[{{instructionsField.handle}}]"></textarea>
{% endif %}
这两个字段都像添加到地址/购物车字段布局中的常规字段一样工作。它们还具有用于内容最大长度的额外验证规则,这对于投递指示尤其重要。
请注意,即使订单字段布局中没有添加适当的字段,管理员仍然可以手动添加投递说明。可以使用订单页面的Eayship界面添加说明,在创建包裹时使用。如果添加了说明字段,则可以使用此界面覆盖它。
显示包裹跟踪链接
将此内容放在订单页面上。刚刚创建且尚未打印标签的包裹无法跟踪。
{% for parcel in order.dpdEasyship.parcels %}
{% if parcel.getTrackingUrl() %}
<a href="{{ parcel.getTrackingUrl() }}" target="_blank">
{{ parcel.number }}
</a>
{% endif %}
{% endfor %}
寄件人和收件人地址
收件人地址是从订单中设置的发货地址获取的。
寄件人地址是可选的。要使用它,您需要在 commerce/inventory/locations 中创建至少一个库存位置。然后在插件设置中将其设置为默认地址,这将用于发送。默认选择可以在订单页面的DPD界面中稍后覆盖。
请记住,地址字段布局需要分配“全名”或“组织”原生字段。
对于寄件人和收件人地址,“地址行1”将用于街道,“地址行2”用于门牌号码。
对于收件人地址,如果您输入“组织”和“全名”,则组织用于“收件人公司或个人名称”,全名用于“收件人附加名称”。如果您仅输入全名,则它将用于“收件人公司或个人名称”。
请注意,您不能在地址中输入任何邮政编码——API只接受特定格式的邮政编码。对于斯洛文尼亚,只接受4位数的代码,对于克罗地亚,接受5位数的代码(克罗地亚似乎还有一些额外的验证规则,最好找到一些现有的邮政编码)。
包裹参考号码
对于“客户包裹参考”和“客户货到付款参考”(如果使用货到付款),使用订单编号。不要与订单ID混淆。
包裹类型
在插件设置中选择哪些应具有Easyship选项的配送方法时,我们可以选择包裹类型。API允许许多包裹类型,但插件目前只允许两种——经典包裹和经典货到付款(货到付款)包裹。
其他类型的包裹需要添加插件界面中的附加选项。
货到付款
货到付款使用目的国的货币。
如果商店在前端使用不同的货币,则不应使用货到付款,因为没有不同货币之间的重新计算逻辑。
可以在“货到付款(COD)类型”插件设置中设置三种货到付款类型。其中之一是,在订单中有多件包裹的情况下,“所有”似乎将相同的COD金额放在每个包裹上,这在理论上可能会增加收到的金额。请谨慎选择此类型。
保存的包裹数据
在包裹创建后,仍然可以编辑订单。但是,这不会编辑包裹数据,因为它们已经被发送到API。
理论上,管理员用户可能会错误地认为编辑订单地址将改变已创建包裹中的地址。为了避免误解,包裹信息在创建时保存在数据库中,可以在运输界面中通过单击“显示详细信息”进行检查。大多数包裹属性为空,因为插件没有使用所有可能的设置。
更新包裹队列任务
可以通过在订单页面的运输界面中单击“更新包裹状态”按钮或选择订单列表中的多个包裹并选择“更新包裹状态”选项来更新包裹状态。这将立即更新包裹状态。
您还可以使用队列任务更新所有包裹的状态。多亏了队列任务,系统不会被大量同时运行的API请求阻塞。
该功能可以在“实用工具/DPD easyship”中触发,也可以通过使用控制台命令触发。在运行队列作业时,插件会忽略缺少Easyship数据或订单状态已定义在“当包裹状态更新为'已交付'状态时将设置的订单状态”插件设置中的订单。
触发更新包裹状态的控制台命令
php craft dpd-easy-ship/parcels/update-parcels-statuses
更新订单状态
当包裹状态更新并设置“已交付”状态时,订单状态可以自动更新。这可以在“当包裹状态更新为已交付状态时将设置的订单状态”插件设置中设置。具有该状态的订单在运行包裹更新队列作业时将被忽略。