<span metal:use-macro="container/Zuite_viewTestMacroLibrary/macros/init_test_environment">init</span> | ||
openAndWait | ${base_url}/Zuite_setUpProductTest | |
verifyTextPresent | Init Ok | |
<span metal:use-macro="container/Zuite_viewTestMacroLibrary/macros/wait_for_activities"> Wait for activities </span> | ||
<span metal:use-macro="container/Zuite_viewTestMacroLibrary/macros/login_as_functional_test_user">Login As Functional Test User</span> |
该教程中,您将学习如何在ERP5系统中创建及管理产品和服务。该程序和前面关于人与组织文件的教程相似,因此您已经可以自己试着建立产品和服务文件,也可以根据以下演示进行。该流程是同样的三步骤:
建立新文件;
根据相应特性填写不同标签页;
验证您的数据。
本例中您是一家进行电子产品销售的公司,您的业务核心是销售高质量的元件,例如LED灯泡,这也是您的明星产品。
本章节中我们通过一个新的情景来帮助您理解在ERP5中创建产品的不同步骤。您的公司是一家电子设备销售商,销售LED灯,它们是为电子设备配备的小灯泡。
这里我们列出了该产品的一些特征数据,但不已逻辑顺序排列,因此您在使用的时候可能要进行筛选。
名称:红色Led
编号:RL01
电子元件
应税
采购价格:0,5€
销售价格:1€
有效期:01/01/2010
供应商:EC China
通过前两章教程的学习,现在您对在ERP5中建立一个对象已经熟悉。产品的创建是同样的步骤:
首先在ERP5首页点击“新建”标签。
如图所示,和前面教材唯一不同的是,现在您要使用“PDM”(产品资料管理)这个新的模块。该模块被用来管理基于产品和服务商业事务。
要创建一个产品文件,请点击“产品”,这将打开一个新建的产品文件页面,您就可以在里面管理产品的详细信息。
selectAndWait | //select[@name="select_module"] | Products |
selectAndWait | //select[@name="select_action"] | Add Product |
verifyText | //div[@id="transition_message"] | Object created. |
verifyText | //li[@class="selected"]/a/span | View |
首先,和人文件于组织文件一样,请填写产品文件的“概览”标签页。
请根据图中关于“红色Led”产品的详细信息填写。这是进行产品详细信息编辑的第一步,因为不是所有信息都填写在该标签页。
请注意,由于该产品没有任何大小或价格变量,在“独立变量基本类别列表”中,我们不可以选择“变量”。因此,请先点击“变量”,然后按住键盘的“Ctrl”键同时再次点击“变量”。当您完成操作,请保存数据,您就会看到修改结果。有些条目可以是空白的,但如果是必须填写的条目空白,ERP5将不允许您保存输入的数据,直至您将这些条目填好。
该步骤将创建新产品文件。
注意:如果一项产品有采购/销售价格变量或大小变量,比如一本拥有两种型号的书(大型号和小型号),其售价可能就会不同,那么您就必须在“独立变量基本类别列表”中选择“变量”,因此您就可以在该产品文件的“采购”和“销售”标签页设置不同的价格。我们将在本教程后半部分“复杂产品--变量”中进行详细介绍。
type | //input[@name="field_my_title"] | ZUITE-TEST-PRODUCT-PRODUCT-001 |
type | //input[@name="field_my_reference"] | RL 01 |
select | //select[@name="field_my_base_contribution_list"] | Taxable |
select | //select[@name="subfield_field_my_quantity_unit_list_default:list"] | Unit/Piece |
clickAndWait | //button[@name="Base_edit:method"] | |
verifyValue | //input[@name="field_my_title"] | ZUITE-TEST-PRODUCT-PRODUCT-001 |
根据提供的产品特征,我们就可以填写“采购”标签页中5个条目。这是因为ERP5将一项数据进行划分,直到达到系统规范形式,这就说明“采购价格:0.5€/件”实际包含3个值,而非通常理解的2个值:每 件 (1) 售价0.5(2)欧元(3)。
我们建议您经常输入产品评论以及其他数据,以存储在ERP5系统中。
clickAndWait | link=Purchase | |
type | //input[@name="subfield_field_my_purchase_supply_line_start_date_range_max_year"] | 2014 |
type | //input[@name="subfield_field_my_purchase_supply_line_start_date_range_max_month"] | 10 |
type | //input[@name="subfield_field_my_purchase_supply_line_start_date_range_max_day"] | 01 |
type | //input[@name="field_my_purchase_supply_line_base_price"] | 0.50 |
type | //input[@name="field_my_purchase_supply_line_priced_quantity"] | 1.0 |
clickAndWait | //button[@name="Base_edit:method"] | |
verifyValue | //input[@name="subfield_field_my_purchase_supply_line_start_date_range_max_year"] | 2014 |
verifyValue | //input[@name="subfield_field_my_purchase_supply_line_start_date_range_max_month"] | 10 |
verifyValue | //input[@name="subfield_field_my_purchase_supply_line_start_date_range_max_day"] | 01 |
verifyValue | //input[@name="field_my_purchase_supply_line_base_price"] | 0.50 |
verifyValue | //input[@name="field_my_purchase_supply_line_priced_quantity"] | 1.0 |
现在我们已经正确填写采购信息,就让我们转到销售信息。
请点击“销售”标签页,并填写以下详细信息:
例子:您的Led售价是1€ / 件,该售价保持稳定直到2014年1月。许多公司已经习惯向您购买该产品。
如图所示,另外还有关于销售价格的4个条目需要填写:“销售价格”,“货币”,“定价数量”以及“价格有效期”。
注意,“接收人”条目可以留空,它只有在产品对一位客户独销时才被使用。
clickAndWait | link=Sale | |
type | //input[@name="field_my_sale_supply_line_base_price"] | 1 |
type | //input[@name="field_my_sale_supply_line_priced_quantity"] | 1.0 |
select | //select[@name="field_my_sale_supply_line_price_currency"] | EUR |
clickAndWait | //button[@name="Base_edit:method"] |
库存水平管理是另一向关键业务活动,ERP5系统的“库存”功能模块使您能够很流畅地跟踪库存。您可以通过建立库存文件来建立每项产品的库存水平。如果您操作正确,您的库存将被ERP5实时更新。您可以在产品文件的“库存”标签页找到相关信息。每当您购进或售出一件产品,ERP5将自动更新其库存水平。
现在您已经定义了您的产品,就可以对其进行验证。
请依据人文件于组织文件的验证步骤进行操作。验证文件的目的是告知您的组织成员您输入的产品信息是有效的可以使用的。如果您对输入的数据不确定,请勿验证,而是将其保持在草拟状态已避免造成困惑!
selectAndWait | //select[@name="select_action"] | Validate |
clickAndWait | //button[@id="dialog_submit_button"] | |
verifyText | //li[@class="selected"]/a/span | Sale |
verifyText | //div[@id="transition_message"] | Status changed. |
clickAndWait | link=View | |
verifyText | //div[@title="The current state of the document."]/div[1] | Validated |
storeLocation | product | |
<span metal:use-macro="container/Zuite_viewTestMacroLibrary/macros/wait_for_activities"> Wait for activities </span> |
在ERP5系统中,我们还可以建立比刚刚创建的标准产品更为复杂的产品。比如,您可能需要输入一个独有编号,来存储不同的产品变量。这里我们将看到一个拥有大小两种不同型号的书的例子。当然,采购和销售价格也会不同。但这里我们希望该产品使用唯一编号来表示大小 两种型号,以及它们各自的信息,例如价格以及库存水平。
当您新建产品文件后,在“概览”标签页,请在“独立变量基础类别列表”中选择“变量”。然后保存操作并进行下面的步骤。
openAndWait | ${product} |
第二步就是添加产品独立变量。请打开“操作”菜单选择“添加产品独立变量”。一个新的文件就会为该变量而建立,您会被引导至该页面以对其进行编辑。
selectAndWait | //select[@name="select_action"] | Add Product Individual Variation |
这就是您刚建立的产品独立变量文件。您可以设置名称并保存
结束操作后,请通过点击定位标签返回产品文件。请重复该操作已创建另一产品独立变量文件“小型号”。cument "Small Format".
type | //input[@name="field_my_title"] | ZUITE-PRODUCT-VARIATION-001 |
clickAndWait | //button[@name="Base_edit:method"] | |
clickAndWait | link=ZUITE-TEST-PRODUCT-PRODUCT-001 | |
selectAndWait | //select[@name="select_action"] | Add Product Individual Variation |
type | //input[@name='field_my_title'] | ZUITE-PRODUCT-VARIATION-002 |
clickAndWait | //button[@name="Base_edit:method"] |
现在我们已经返回产品文件。如图下方显示,产品文件包含了产品独立变量列表。您可以点击任何一栏已编辑变量名称。但如果您需要设置相应的采购和销售价格,请见下面步骤。
clickAndWait | link=ZUITE-TEST-PRODUCT-PRODUCT-001 | |
verifyValue | //input[@name='field_my_title'] | ZUITE-TEST-PRODUCT-PRODUCT-001 |
verifyText | //span[@class="listbox-current-page-total-number"] | 2 records |
现在我们就来为产品独立变量设定采购价格。
如图所示,在“采购”标签页中,您刚刚创建的产品变量并没有显示在页面中。实际上,要进行变量的价格设定,还需要进行一项操作,请见下一页。
clickAndWait | link=Purchase |
在蓝框区域,点击“变量”并保存修改。
select | //select[@name='field_my_purchase_supply_line_p_variation_base_category_list'] | Variation |
clickAndWait | //button[@name="Base_edit:method"] |
现在您就可以看到红框区域已经显示有您刚刚创建的变量了。现在您就可以为相应的变量设定采购价格,并保存修改。
type | //input[@name="field_matrixbox_base_price_cell_0_0_0"] | 10 |
type | //input[@name="field_matrixbox_base_price_cell_1_0_0"] | 20 |
clickAndWait | //button[@name="Base_edit:method"] | |
verifyTextPresent | Variation/ZUITE-PRODUCT-VARIATION-001 | |
verifyTextPresent | Variation/ZUITE-PRODUCT-VARIATION-002 |
要设定销售价格,点击“销售”标签然后重复设定采购价格的步骤。请勿忘记保存任何修改。
clickAndWait | link=Sale | |
select | //select[@name='field_my_sale_supply_line_p_variation_base_category_list'] | Variation |
clickAndWait | //button[@name="Base_edit:method"] | |
type | //input[@name="field_matrixbox_base_price_cell_0_0_0"] | 15 |
type | //input[@name="field_matrixbox_base_price_cell_1_0_0"] | 25 |
clickAndWait | //button[@name="Base_edit:method"] |
ERP5还可以管理价格的数量区间。该项功能在产品价格随着订购或销售的数量而变化时有用。本例中,我们会对采购和销售价格各设定三个数量区间,即产品数量少于50件,造50和100件之间,以及多于100件。数量区间条目帮助您进行该项操作。输入不同的数量区间,您需要通过点击键盘的Enter确认键来区分数据。然后请保存修改。
type | //textarea[@name="field_my_sale_supply_line_quantity_step_list"] | 50 |
clickAndWait | //button[@name="Base_edit:method"] |
由于我们已经为该产品设置了独立变量,刚刚设置的数量区间就会应用到各个变量上。如图所示,每个变量有三个价格区间。第一栏是订货数量少于50件的产品单价,第二栏是订货数量在50到100件之间的产品单价,最右边一栏则是订货数量超过100件的产品单价。每个变量都有相应数量区间。本例中,大小型号各有三个数量区间。
verifyTextPresent | Quantity < 50.0 | |
verifyTextPresent | 50.0 <= Quantity |
输入所有变量根据不同数量区间的单价,然后保存操作。
这就是本教程的最后一步,您现在应该能够自己建立和管理产品,包括拥有产品独立变量以及数量区间的复杂产品。我们建议您在编辑一个产品文件时要非常仔细,因为产品文件包含的信息将会被自动导入与该产品相关的订单,而这将为您节省许多订单操作时间。
type | //input[@name="field_matrixbox_base_price_cell_0_0_0"] | 15 |
type | //input[@name="field_matrixbox_base_price_cell_0_1_0"] | 14 |
type | //input[@name="field_matrixbox_base_price_cell_1_0_0"] | 25 |
type | //input[@name="field_matrixbox_base_price_cell_1_1_0"] | 24 |
clickAndWait | //button[@name="Base_edit:method"] | |
verifyValue | //input[@name="field_matrixbox_base_price_cell_0_0_0"] | 15.00 |
verifyValue | //input[@name="field_matrixbox_base_price_cell_0_1_0"] | 14.00 |
verifyValue | //input[@name="field_matrixbox_base_price_cell_1_0_0"] | 25.00 |
verifyValue | //input[@name="field_matrixbox_base_price_cell_1_1_0"] | 24.00 |
open | ${base_url}/view | |
selectAndWait | //select[@name="select_module"] | Products |
verifyText | //div[@id="breadcrumb"]/a[1] | ERP5 |
verifyText | //div[@id="breadcrumb"]/a[2] | Products |
<tal:block tal:content="structure python: here.Zuite_generateListboxBrowsing(listbox_selection=(['title', 'ZUITE-TEST-PRODUCT-PRODUCT-001'],), enter_object=True)"/> | ||
verifyText | //div[@id="breadcrumb"]/a[3] | ZUITE-TEST-PRODUCT-PRODUCT-001 |
<span metal:use-macro="container/Zuite_viewTestMacroLibrary/macros/login_as_manager">Login As Manager</span> | ||
openAndWait | ${base_url}/Zuite_tearDownProductTest | |
verifyTextPresent | Clean Ok | |
<span metal:use-macro="container/Zuite_viewTestMacroLibrary/macros/wait_for_activities"> Wait for activities </span> |
For more information, please contact Jean-Paul, CEO of Nexedi (+33 629 02 44 25).