EZ Publish/EZ Publish 增值税(VAT)系统
EZ Publish | EZ Publish安装与卸载 | EZ Publish的使用 | EZ Publish常见问题 | EZ Publish其他 |
网络商店系统中的增值税取决于使用的VAT类型。VAT类型包含一个名称和一个固定税率。例如:"Std,0%"。管理界面可以用来添加,删除或修改VAT 类型。尽管VAT 类型的数量没有限制,网络商店系统中至少应该有一种VAT 类型。这种VAT 类型的唯一用途是用税率保存一些固定的VAT 税率,因此可以称它们为“静态VAT 类型”或“固定VAT 类型”。如果您为商品指定静态VAT 类型,那么系统总是为这个商品征收固定税率的VAT。
增值税(VAT)系统概述[ ]
- 含税价格/不含税价格
有两种方法来使用指派的VAT类型。这取决于创建商品对象时如何输入价格。如果输入的价格为含税价格,可以使用“含税价格”方法;否则使用“不含税”价格。使用含税价格查看商品时,会显示输入的价格。使用不含税价格查看商品时,显示的价格为输入价格加上VAT 的金额。
- 动态VAT类型
动态VAT 不保存固定税率也不能通过管理界面配置。在编辑商品对象时,这种类型可以从VAT 类型列表中选择。默认情况下,这种类型被称为"Determined by VAT charging rules"。选择这种类型的VAT(为商品指派动态VAT 类型)会告诉系统这个商品没有固定税率,因此VAT 金额应该通过某些复杂的逻辑动态计算。例如:如果VAT 金额取决于用户的居住地。动态VAT 类型与含税价格不兼容。应该为商品设置不含税价格。
请注意,VAT类型与VAT 处理器连接,因此如果VAT处理器不可用,VAT类型会被禁用。
- VAT处理器
如果希望使用某些复杂的征收逻辑,必须通过自定义的VAT 处理器实现(一个可以动态决定VAT金额的PHP 类)。可以使用系统内建的默认VAT处理器(它支持基于国家的VAT)或开发自己的VAT 处理器扩展(扩展VAT 解决方案)。不能同时使用两种VAT处理器。必须在“VAT 设置”节中描述的"Handler"配置要使用的VAT 处理器。要启用内建的VAT处理器,需要在"shop.ini"重设文件中"[VATSettings]"下添加如下内容:
Handler=ezdefault
系统会开始使用默认的VAT 处理器并在创建/编辑商品或商品类时显示动态的VAT类型。
请注意,启用VAT 处理器后,动态VAT 是一种虚拟的结构。如果没有指定VAT 处理器,动态VAT 类型不会被显示。
指派商品增值税类型[ ]
要为商品指派VAT 类型,编辑商品并从“VAT 类型”下拉框中选择需要的VAT 类型(如下图)。对简单价格和多价格商品(由“价格”和“多价格”数据类型支持)都可以使用这种方法。
上图显示了一个简单价格商品编辑界面的一部分。因为价格被设置为$1,250 并且选择了“含税价格”选项,显示给客户的实际价格为$1,250。如果指派25%的固定税率,则VAT 为$250。如果选择“不含税价格”,则VAT 计算如下:
1250*25/100 = 312.50
实际的商品价格如下:
1250.00 + 312.50 = 1,562.50
如果选择“根据VAT 征收规则动态决定”,那么动态VAT 类型会被指派到这个商品。这种类型只与“不含税价格”兼容。
- 商品类中的默认VAT类型
可以在类级别上选择默认VAT类型(当创建或编辑商品类时)。在创建新商品对象时会默认使用这个VAT 类型。但是,仍然可以为每个商品单独指派VAT 类型。
下例演示了如何为商品类指派默认VAT 类型。
- 在管理界面中选择“设置”标签,然后选择左侧的“类”,再选择“内容”类组。可以看到属于这个类组的类列表。找到商品类然后点击“编辑”按钮。系统会显示类编辑界面。
- 找到价格或多价格类属性。看到“默认VAT 类型”下拉框。选择需要的VAT 类型然后点击“确定”保存修改。参阅下图。
上图演示了一个简单价格商品类("Carpet")编辑界面的一部分。这里您可以选择“含税价格”或“不含税”价格为所有这种类型的新对象的默认配置。选择例如:25%为默认VAT 类型。
请注意,可以在对象级别修改以上默认设置(为每个Carpet 类型的商品)。如果选择最后一个项目“根据VAT 征收规则动态决定”,则动态VAT 会被指派为新对象的默认VAT 类型。这种VAT 类型只能与“不含税”价格合用。
三种VAT征收方法[ ]
网络商店系统支持以下三种VAT 征收方法:
1. 基于商品的VAT
2. 基于国家的VAT
3. 扩展VAT
下一节解释了它们的区别。
- 基于商品的VAT
基本的“基于商品的VAT ”解决方案允许创建/编辑商品时,为其选择一个预定义的静态VAT类型。因此,可以为每个商品指定一个固定税率。也可以在类级别指定默认的VAT类型,从而所有这种类型的新对象都使用这种默认的VAT类型。
例
假设在挪威销售各种商品并需要征收以下VAT:
• 对大部分商品,按通用税率25%征收。
• 对食品,按缩减税率11%征收。
• 对个人交通工具,按低税率7%征收。
需要创建三种VAT 类型,然后可以为每个商品指派正确的VAT 类型。也可以创建不同的商品类并为它们指定不同的默认VAT 类型。
例如,假设已经创建了如下三种商品类:
• “地毯”,默认VAT 类型为25%
• “食品商品”,默认VAT 类型为11%
• “摩托车”,默认VAT 类型为7%
在本例中,系统会为每个新创建的“地毯”使用25%的固定税率,每个新创建的“食品商品”使用11%的固定税率,为每个新创建的“摩托车”使用7%的固定税率。
- 基于国家的VAT
大多数情况下,VAT金额取决于客户的居住地。“基于国家的VAT ”解决方案允许VAT税率依赖于商品分类(如果指定)与客户的国家。这可以通过使用动态VAT 类型和内建的默认VAT 处理器来实现。这个处理器通过VAT 征收规则来决定正确的VAT 税率。
- VAT 征收规则
VAT 征收规则由以下组件构成:
• 用户国家
• 商品分类(一个或多个)
• VAT 类型
VAT 规则还根据客户的国家和商品的分类来决定使用哪个固定税率。管理界面允许添加,删除或修改VAT 征收规则(参阅“管理VAT 规则”节)。默认的VAT 规则指派到“任何国家”和“任何分类”决定了如果其它VAT 规则都不匹配,应该使用哪个税率。
对于特定的“国家-分类”组匹配度越高的规则,优先级越高。换言之,默认的VAT 处理器会尝试选择匹配度最高的VAT 税率。要理解这个算法如何工作,参阅下表:
如果没有匹配的国件和/或没有匹配的分类,则优先级最低(0)的规则生效。
- 配置基于国家的VAT
如果您销售地毯并需要对德国的客户征收16%的VAT 而对挪威的客户征收25%的VAT,那么“基于商品的VAT ”不适合这种情况。以下文字描述了如何实施“基于国家的VAT ”方案。
1. 参阅“VAT 处理器”节启用内建的默认VAT 处理器。
2. 参阅“创建VAT 类型”节创建以下两种VAT 类型:
• 挪威一般,25%
• 德国一般,16%
3. 在用户类中添加一个“国家”数据类型的属性,并参阅“为用户类添加国家属性”节在INI 文件的"UserCountryAttribute"中指定类属性标识符。
4. 参阅“创建VAT 规则”节创建以下两种VAT 规则:
系统也会要求您创建一条用于其它国家用户的默认VAT 规则。
因为只销售一种类型的商品,没哟必要创建商品分类。对“任何”商品指定的VAT 规则会应用到所有商品。
5. 要另商品被VAT 征收规则影响,参阅“为商品指派VAT 类型”节为商品指派动态VAT 类型。
- 设置基于国家和分类的VAT
如果网络商店销售不同类型的商品且VAT 税率不同,那么税率将同时依赖于用户的国家和商品分类。这意味着您必须创建商品分类,将它们指派到商品并为这些分类指派VAT 规则(不是指派到“任何”分类)。例如:假设向挪威和德国的客户销售不同类型的商品并根据商品分类征收以下VAT:
• 德国
- ◦ 大部分商品,通用税率,16%
- ◦ 食品,缩减税率,7%
• 挪威
- ◦ 大部分商品,通用税率,25%
- ◦ 食品,缩略税率,11%
- ◦ 个人交通工具,低税率,7%
以下文字解释了如何在本例中使用“基于国家的VAT”
1. 参阅“VAT 处理器”节启用内建的VAT 处理器。
2. 参阅“创建VAT 类型”节创建以下四种VAT 类型:
- ◦ 挪威一般,25%
- ◦ 德国一般,16%
- ◦ 挪威缩减,11%
- ◦ 挪威低,德国缩减,7%
3. 为用户类添加一个国家类型的属性,并参阅“为用户类添加国家属性”节在INI 文件中的"UserCountryAttribute"指定类属性标识符。
4. 为您的商品类添加一个商品分类的属性,并参阅“为商品类添加商品分类”节在INI 文件中的"ProductCategoryAttribute"指定类属性标识符。
5. 参阅“创建商品分类”节创建以下两种商品分类:
- ◦ 食品
- ◦ 个人交通工具
6. 参阅“创建VAT 规则”节创建以下五种VAT 规则:
系统同时会要求您为任何分类和任何国家(如果其它VAT 规则都没有匹配,则使用这条规则)创建默认VAT 规则。
7. 为您的商品指派动态VAT 类型(参阅“为商品指派VAT 类型”)并为它们指派正确的商品分类(参阅“为商品指派分类”节)。
- 扩展VAT
如果需要更复杂的VAT 征收逻辑,可以开发您自己的VAT 处理器扩展来满足特定的需求。这种解决方案与前面的解决方案不兼容,因为不能同时使用两个VAT 处理器。在“VAT 配置”章节中介绍的"Handler"INI 配置确定VAT处理器的类型。
由处理器实现的VAT 征收逻辑会应用到所有使用动态VAT 类型的商品。牢记动态VAT 类型不支持“含税价格”。
商品分类[ ]
“基于国家的VAT ”解决方案假定商品可以被指派到商品分类。下一节揭示了如何创建商品分类。管理界面可以用来创建,删除或重命名商品分类(参阅“管理商品分类”节)。
- 为商品类添加新属性
要为商品指派分类,必须添加一个商品分类类型的类属性。参阅以下步骤。
1. 在管理界面中选择“设置”标签,然后选择左侧的“类”,再选择“内容”类组。应该会看到属于“内容”组的类列表。找到商品类然后点击“编辑”按钮。系统会显示类编辑界面。
2. 从下拉框中选择商品分类数据类型,然后点击“添加属性”并做如下编辑。下图演示了在类编辑界面中添加商品分类数据类型属性时的页面片段。
系统会在上篇对象的编辑界面中增加一个称为“分类”的(新属性的名称)下拉框。可以在下拉框中选择需要的分类来为商品指派分类。
3. 在"shop.ini"重设文件中的"[VATSettings]"下配置"ProductCategoryAttribute"为新添加属性的标识符。
- 为商品指派分类
如果商品类包含一个商品分类数据类型的属性,那么在编辑这个商品的时候,可以为它指派分类。要做到这一点,编辑商品然后从“分类”下拉框中选择需要的分类。参阅下图。
注意:商品分类总是与动态VAT 类型(如上图所示,“根据VAT 征收规则确定”被选中)一起使用。为固定税率的商品选择分类没有任何意义。
用户国家[ ]
“基于国家的VAT ”假设每个用户可以被指派一个国家。下一节揭示了具体步骤。注意,可用国家以及他们的属性(电话区号等等)可以在"country.ini"重设文件中指定。
- 为用户类添加新属性
要为用户指定国家,需要为用户类添加国家数据类型的属性。参阅以下步骤。
1. 在管理界面中选择“设置”,然后选择左侧的“类”,再选择“用户”组。应该可以看到属于用户组的类列表。找到用户类然后点击“编辑”按钮。系统会显示类编辑界面。
2. 从下拉框中选择“国家”数据类型,点击“添加属性”按钮并对新属性做如下编辑。参阅下图。
在编辑用户时,系统会显示国家下拉框。可以从这个下拉框中选择国家。
3. 在"shop.ini"重设文件的"[VATSettings]"中配置"UserCountryAttribute"为国家属性标识符。
- 为用户指定国家
如果用户类包含国家数据类型的属性,则可以用以下两种方法为用户指派国家:
• 新用户需要在注册表单中的国家下拉框中选择自己的国家。
• 站点管理员可以在管理界面中编辑用户并为用户指派国家。
• 站点管理员可以添加一个工具栏允许用户修改自己的国家。
- 添加客户工具栏
建议允许用户通过“用户国家”工具栏修改自己的国家。要启用工具栏,在"settings/siteaccess/example/toolbar.ini"中的"[Toolbar_right]"下添加如下代码:
Tool[]=user_country
这个设置要求系统在页面右侧显示国家工具栏。当用户选择了国家,系统会立刻根据用户所选国家对应的VAT 规则更新商品价格。
为了避免缓存问题,需要在所有的站点入口的"CachedViewPreferences[full]"中指定"user_preferred_country"。可以编辑"site.ini"的重设文件。如果文件中已经存在如下配置:
CachedViewPreferences[full]=<list_of_user_preferences>
则需要在行尾追加一个":"和"user_preferred_country",例如:
CachedViewPreferences[full]=admin_navigation_content=0; admin_navigation_details=0;<...>;admin_bookmarkmenu=1; admin_left_menu_width=13;user_preferred_country=''
注意,这一行配置通常会很长。上例中我们用<...>省略了中间部分。如果"[ContentSettings]"下没有这条配置,可以创建它:
CachedViewPreferences[full]=user_preferred_country=''
如果不指定这个配置,客户将无法改变国家(由于缓存的原因)。
- 使用其它国家数据类型
除了系统内建的国家数据类型,也可以使用其它的国家类型。这意味着您可以把其它数据类型集成到系统中用来保存用户国家,并且用户国家可以通过数据类型,VAT 规则管理界面和商店用户注册模块(shop/userregister)以相同的方式保存。以下列表揭示了具体步骤。
1. 确保数据类型内容是一个有键值的哈希或支持get 和set 值属性的对象(如eZPersistentObject)。无论内容实际上是如何保存在数据库中的,objectAttributeContent()方法必须返回一个数组/对象。返回值(通常是国家代码)接着会和VAT 规则中的国家比较。
2. 在数据类型扩展中重设"standard"界面下"templates/shop/country"目录中的"view.tpl"与"edit.tpl“,从而保证国家可以在VAT 规则管理界面和商店用户注册模块中显示和编辑。
显示增值税[ ]
下一节解释了在使用“基于商品的VAT ”和/或“基于国家的VAT”时,如何在真实的站点中显示VAT。
- 基于商品的VAT
假设某个固定税率的VAT 被指派到每个商品。当用户查看商品页面时,系统会显示这个商品的含税价格。用户可以把商品添加到购物篮中,在购物篮中会显示VAT 的税率。用户可以点击“结帐”按钮来购买商品。
点击“结帐”按钮后,系统会要求用户输入他/她的姓名,电子邮件,国家以及其它客户帐号和订单需要的信息。这些信息由"shopaccount.ini"重设文件中"[AccountSettings]"下指定的商店帐号处理器负责处理。
通常用户需要选择一个国家(这个行为不依赖于“VAT 设置”节中的"RequireUserCountry"INI 配置)。国家信息会与客户的订单信息一起保存在系统中。客户由客户唯一的电子邮件标识,所以对应不同邮件的订单属于不同的客户。客户的帐号包含关于国家的信息。国家信息在客户第一次创建订单时指定。
请注意,客户帐号是一种特殊的数据结构,它在网络商店系统中使用但不与真正的用户对象关联。
如果已经在用户类中添加了国家类型的属性就可以为用户指派国家。在"UserCountryAttribute"中指定了这个属性的标识符,那么在用户第一次创建订单的时候,国家会被自动指派给用户。请注意,对于“基于商品的VAT ”,这一特性通常是不需要的,因此如果没有指定VAT处理器,它是被禁用的。此外,如果用户的国家已经被设置了(用户的国家可以通过注册时在表单中选择国家,编辑用户并选择国家或从国家工具栏中选择国家来设置),系统不会自动修改用户的国家。
- 基于国家的VAT
假设使用“基于国家的VAT ”解决方案,用户类包含一个国家类型的属性并且它的属性标识符已经在"UserCountryAttribute"中设置。
当用户查看一个商品页面时,系统会显示商品的含税价格。用户可以把商品加入购物篮,在购物篮中会显示每个商品的VAT 税率。点击“结帐”按钮后,系统会要求用户输入他/她的姓名,电子邮件,国家以及其它用户帐号和订单需要的信息。系统会用最匹配指定国家的VAT 规则重新计算VAT 并将VAT 包含在最终商品价格中。最终价格会在确认订单页面显示。
如果为用户指派了国家,系统会根据最匹配用户的国家和商品分类的VAT 规则重新计算VAT。如果在点击“结帐”按钮之后选择了其它国家(不是用户配指派的国家),这个国家不会被指派给用户但是会用于这个特定的订单。
如果没有为用户指派国家,那么查看商品时显示的VAT 金额会根据默认VAT 规则计算。用户点击“结帐”按钮之后选择的国家会被指派给这个用户。
管理增值税类型[ ]
本节描述了如何在管理界面中添加,删除,修改静态VAT 类型。
- 创建VAT 类型
要在网络商店中使用VAT,需要创建VAT 类型。参阅以下步骤。
1. 在管理界面中选择“网络商店”,然后选择左侧的“VAT 类型”。系统会显示现存的VAT 类型列表。如下图。这个界面也可以通过"/shop/vattype"来访问。
点击“新VAT 类型”按钮。系统会添加一个新的项目"VAT type 1",默认的税率为0%。
2. 如下图所示,为这个项目指定名称和税率。
3. 点击“应用修改”按钮保存您的修改或点击“新建VAT 类型”继续创建VAT 类型。
- 编辑VAT 类型
如果希望修改VAT 类型,参阅如下步骤:
1. 在管理界面选择“网络商店”并选择左侧的“VAT 类型”,系统会显示VAT 类型的列表。
2. 为需要修改的VAT 类型指定名称和税率(可以同时修改多个VAT 类型)。
3. 点击“应用修改”按钮保存修改。
- 删除VAT 类型
不能删除商品类的默认VAT 类型。可以删除被指派到商品对象和/或用于VAT 规则的VAT 类型,但是不建议这样做(这些VAT 规则会被删除并且默认的VAT 类型会被指派给商品)。大部分情况下,应该修改VAT 类型的名称和税率,而不是删除它。
请注意,不能删除所有的VAT 类型。如果不希望对您的商品征收VAT,可以保留一个VAT 类型并将它的税率设为0。
以下文字揭示了如何从网络商店系统中删除一个或多个VAT 类型。
1. 在管理界面中选择“网络商店”标签,然后选择左侧的“VAT 类型”,系统会显示VAT 类型列表。
2. 用复选框够选希望删除的VAT 类型。不要选择所有的VAT 类型。
3. 点击“删除所选”按钮
4. 如果某些商品使用这个VAT 类型并且/或某些VAT 规则基于这个VAT 类型,系统会显示一个确认对话框(如下图)。
管理商品类型[ ]
本章揭示了如何在管理界面中添加,删除或修改商品分类。
- 创建商品分类
管理界面允许在网络商店系统中添加新的商品分类。参阅如下步骤。
1. 在管理界面中选择“网络商店”标签,然后选择左侧的“商品分类”。系统会显示现存的商品分类列表(如下图)。这个界面也可以通过"/shop/productcategories"访问。
点击“新建商品分类”按钮。系统会添加一个新项目"Product category 1"。
2. 为这个分类指定名称(如下图)。
3. 点击“应用修改”按钮保存修改。
- 删除商品分类
可以删除被指派到商品的分类和/或用于VAT 规则的商品分类,但是不推荐这样做。大多数情况下,应该修改这个分类的名称活修改这个分类的VAT 规则,而不是从系统中删除它。删除一个商品分类,不会删除属于这个分类的商品。系统会将这些商品的分类属性复位并修改或删除用于这个分类的VAT 规则。
例
假设有如下的VAT 规则。
如果删除洗发水分类,第二条VAT 规则会被删除。如果删除“巧克力”分类,第一条规则会被修改如下。
以下文字揭示了如何删除商品分类。
1.在管理界面中选择“网络商店”标签,然后选择左侧的“商品分类”。
2.用复选框够选要删除的分类。
3.点击“删除所选”按钮。如果有商品和/或VAT 规则在使用这个分类,系统会显示删除确认对话框,如下图。点击“确定”按钮确认删除。
管理增值税规则[ ]
这一节描述了如何在管理界面中添加,删除或修改VAT 征收规则。
- 创建VAT 规则
管理界面允许为网络商店添加新的VAT 征收规则。参阅以下步骤。
请注意,建议(但不是一定)在创建VAT 征收规则之前,先创建静态VAT 类型和商品分类(如果有)。
1. 在管理界面中选择“网络商店”标签,然后选择左侧的“VAT 规则”。系统会显示现存VAT 规则列表,如下图。这个界面也可以通过"/shop/vatrules"访问。
点击“新建规则”按钮。系统会显示VAT 规则编辑界面(如下图)。
2. 为VAT 规则指定如下参数:
• 从国家下拉框中选择需要的国家。这个VAT 规则会用于属于这个国家的用户。
• 选择一或多个受这条规则影响的商品分类。
• 从下拉框中选择一种静态VAT 类型。选定的VAT 类型决定实际的VAT 税率。
• 点击“创建”按钮。
新的VAT 规则会在列表中显示,如下图。
- 编辑VAT 规则
以下文字揭示了如何编辑VAT 规则。
1. 在管理界面中选择“网络商店”标签,然后选择左侧的“VAT 规则”,系统会显示VAT 规则列表。
2. 找到要修改的VAT 规则并点击“编辑规则”按钮。
3. 系统会显示VAT 规则编辑界面。在编辑界面中指定参数并点击“保存修改”按钮。
- 删除VAT 规则
以下文字揭示了如何删除VAT 规则。
1. 在管理界面中选择“网络商店”标签,然后选择左侧的“VAT 规则”,系统会显示VAT 规则列表。
2. 用复选框勾选要删除的VAT 规则。
3. 点击“删除所选”按钮
增值税配置[ ]
在"shop.ini"文件中的"[VATSettings]"分区定义了VAT 处理器。在这个分区内可以指定以下配置:
• "Handler"指定应该使用的VAT 处理器。
• "RepositoryDirectories[]"数组指定了eZ Publish 应该从哪里搜索内建的VAT 处理器。
• "UserCountryAttribute"指定了用户类中的国家属性标识符。
• "ProductCategoryAttribute"指定了商品分类属性标识符。
• "RequireUserCountry"默认为true,因此系统总是需要用户国家。如果设置为false,如果没有指定用户国家,系统不会报错。
• "DynamicVatTypeName"指定系统如何显示动态VAT 类型的名称。默认名称为“根据VAT 规则”,可以设置为例如:“动态VAT”,“基于国家的VAT”,“扩展VAT”或“我的VAT”等等。系统会将这个名称作为类/对象查看/编辑界面中的VAT 下拉框中最后一项的名称。
例1
以下内容可以被添加到"shop.ini"重设文件中的"[VATSettings]"内:
[VATSettings] Handler=ezdefault RepositoryDirectories[]=kernel/classes/vathandlers
这些配置会要求eZ Publish 使用内建的VAT 处理器。这个文件位于"kernel/classes/vathandlers/ezdefaultvathandler.php"。
例2
可以通过开发自定义的VAT 处理器扩展来满足特定的需求。例如,如果有一个扩展"myextension",它包含一个VAT 处理器"myrule",可以将以下内容加入"shop.ini"重设文件中:
[VATSettings] Handler=myrule ExtensionDirectories[]=myextension
或
[VATSettings] Handler=myrule RepositoryDirectories[]=extension/myextension/vathandlers
这些配置会要求eZ Publish 使用位于"extension/myextension/vathandlers/myrulevathandler.php"的VAT 处理器。
创建增值税处理器[ ]
本节为希望开发新VAT 处理器的程序员(只适合那些熟悉PHP 的程序员)提供了一些有用的信息.
请注意,不建议修改eZ Publish 内核,因此您应该在扩展中实现您的VAT 处理器。
- 处理器接口
在本节描述了一些实现细节。
VAT 处理器是一个PHP 文件,它包含一个实现了如下方法的类:
/** * * \public * \static * \param $object The product content object. * \param $country Country the buyer is from, or false if not specified. * \return VAT percent (integer), or null in case of an error. */ mixed function getVatPercent( eZContentObject $object, mixed $country );
处理器不是被系统直接调用而是通过eZVATManager 类调用。这个类的getVAT()方法返回对于某个商品因该使用的VAT 税率:
$vatPercent = eZVATManager::getVAT( $object, $country );
getVAT()方法实际上会调用"Handler"INI 配置中指定的处理器的getVatPercent()方法。
下一节解释了如何实现自己的VAT 处理器。
- 创建自己的VAT 处理器
假设需要根据商品所在的分区动态地决定VAT 税率。可以按照如下步骤创建您自己的VAT 处理器"mysectionbased"。
1. 在eZ Publish 的extension 目录下创建以下目录:
• myextension
• myextension/settings
• myextension/vathandlers
2. 在"myextension/vathandlers/"目录中创建"mysectionbasedvathandler.php"(这个文件必须包含一个名为"MySectionBasedVATHandler"的PHP 类)并加入以下内容:
<?php class MySectionBasedVATHandler { /** * \public * \static */ function getVatPercent( $object, $country ) { $section = $object->attribute( 'section_id' ); if ( $section == 1 ) $percentage = 10; else $percentage = 20; return $percentage; } } ?>
3. 在"myextension/settings"目录中创建"shop.ini.append.php"并添加如下内容:
[VATSettings] ExtensionDirectories[]=myextension Handler=mysectionbased RequireUserCountry=false DynamicVatTypeName=Section based VAT
这会要求eZ Publish 使用"extension/myextension/vathandlers/mysectionbasedvathandler.php"中的VAT 处理器。因为由这个处理器决定的税率不依赖于用户的国家,"RequireUserCountry"必须被设置为false。因为这个处理器不使用VAT规则,将动态VAT 类型显示为“基于分区的VAT”(而不是“由VAT 征收规则决定”)将更合理。这是通过"DynamicVatTypeName"来配置的。
4. 要启用扩展,登录eZ Publish 管理界面,选择“设置”标签,然后选择左侧的“扩展”。系统会显示可用的扩展列表。选择"myextension"然后点击“应用修改”按钮。