<span metal:use-macro="container/Zuite_viewTestMacroLibrary/macros/init_test_environment">init</span> | ||
openAndWait | ${base_url}/Zuite_createFunctionalTestUser | |
verifyTextPresent | Done. | |
<span metal:use-macro="container/Zuite_viewTestMacroLibrary/macros/wait_for_activities"> Wait for activities </span> | ||
openAndWait | ${base_url}/Zuite_setUpSaleOrderTest | |
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中建立一个销售订单,编辑订单详细信息,确认订单,最终生成一个“连接到该销售订单的销售装箱单。请注意,销售贸易流程中的销售装箱单被用于管理库存,货柜以及产品的交付,它也可以被应用到服务领域,并且是服务业必要的业务流程。本教程以实物产品为例,但服务的提供同实物产品是同一流程,即,确定一个服务的销售订单将会自动生成该项服务的销售装箱单。
产品/服务:销售订单=> 销售装箱单 ==> 发票 ==> 支付。
我们将用一个新的例子来介绍该流程。通过前面的教程,我们已经建立了人,组织和产品,该教材我们就将用到这些对象:
我们的公司宏照公司(宏照)是一间电子配件的供应商,在全球拥有众多用户。其中一位客户是Z Company,一间电力供应商。Z Company刚刚向我们订购了100 000个红色Led,下面是该订单的详细信息:
标题:红色LED
供应商 :您的公司(宏照)
发送人 :您的公司(宏照)
销售人 :您的公司(宏照)
贸易条款 :通用销售贸易条款
优先级 :普通
货币 :欧元
国际贸易术语 :X
交付 :空运
客户 :Z Company
在实践建立销售订单前,您需要熟悉ERP5的基本模块,如果遇到任何问题,请参见前面关于建立和建立人文件与组织文件的教程。进行到该教程,您应该已经对在ERP5中创建新的对象了如指掌了。要建立销售订单,同其他文件相同,请从ERP5主页的“新建”标签页中贸易模块的“销售订单”建立。
您将被引导进入刚刚创建的销售订单文件页面。
selectAndWait | //select[@name="select_module"] | Sale Orders |
selectAndWait | //select[@name="select_action"] | Add Sale Order |
verifyText | //div[@id="transition_message"] | Object created. |
一个销售文件有了以下几个标签页:
“概览”页面包含了订单自身的基本信息,例如卖方及买方,运送及交付信息等。
“支付”标签页集合了如何支付该订单的相关信息。
“简介”标签页包含卖方和卖方的具体信息。
“历史记录”帮助您记录订单及订单货物所涉及的所有变动。
现在就让我们运用前面提供的订单信息,首先填充该销售订单的“概览”标签页。您可以自己试着填写,然后再与图示进行对照。
注意,销售订单的“概览”页面有两个重要条目:首先,请务必并仔细填写“销售贸易条款”。本例中,我们选择“通用销售贸易条款”;其次,请填写有效的运送及交付日期,它们必须处于所选销售贸易条款生效和失效日期之间。
完成填写后,请务必保存您的修改。
verifyText | //li[@class="selected"]/a/span | View |
type | //input[@name="field_my_specialise_title"] | General Sale Trade Condition |
clickAndWait | //button[@name="Base_edit:method"] | |
type | //input[@name="field_my_title"] | ZUITE-TEST-SALEORDER-PRODUCT-001 |
select | //select[@name="field_my_source_section"] | ZUITE-TEST-SALEORDER-ORGANISATION-001 |
type | //input[@name="field_my_source_title"] | ZUITE-TEST-SALEORDER-ORGANISATION-001 |
type | //input[@name="field_my_source_decision_title"] | ZUITE-TEST-SALEORDER-ORGANISATION-001 |
select | //select[@name="field_my_order"] | Normal |
select | //select[@name="field_my_price_currency"] | EUR |
select | //select[@name="field_my_price_currency"] | EUR |
select | //select[@name="field_my_delivery_mode"] | By Air |
select | //select[@name="field_my_incoterm"] | Carriage Paid To |
type | //input[@name="field_my_destination_section_title"] | ZUITE-TEST-SALEORDER-ORGANISATION-002 |
type | //input[@name="field_my_destination_title"] | ZUITE-TEST-SALEORDER-ORGANISATION-002 |
type | //input[@name="field_my_destination_decision_title"] | ZUITE-TEST-SALEORDER-ORGANISATION-002 |
type | //input[@name="subfield_field_my_start_date_year"] | 2012 |
type | //input[@name="subfield_field_my_start_date_month"] | 01 |
type | //input[@name="subfield_field_my_start_date_day"] | 01 |
type | //input[@name="subfield_field_my_stop_date_year"] | 2012 |
type | //input[@name="subfield_field_my_stop_date_month"] | 12 |
type | //input[@name="subfield_field_my_stop_date_day"] | 31 |
clickAndWait | //button[@name="Base_edit:method"] |
保存“概览”页面基本信息后,请打开“操作”菜单并选择“应用销售贸易条款”。
虽然我们选择的“通用销售贸易条款”是在配置ERP5系统时自动建立的,但它已经具备普通贸易条款的一些基本信息。因此当您进行应用贸易条款的操作后,该销售订单文件的“概览”等标签页将被自动更新信息(请参见上一教程“建立贸易条款”)。
当您完成对该销售订单“概览”页面的操作后,由于您选择并应用了“通用销售贸易条款”,您就可以看到该订单的“支付”标签页已经根据“通用销售贸易条款”的设置而自动更新。
当然,您仍然可以根据本例中提供的该订单的具体信息编辑“支付”标签页,步骤请见下页。
clickAndWait | link=Payment | |
select | //select[@name="field_my_payment_condition_payment_mode"] | Credit Card |
select | //select[@name="field_my_payment_condition_trade_date"] | Invoice |
type | //input[@name="field_my_payment_condition_payment_term"] | 30 |
click | //input[@name="field_my_payment_condition_payment_end_of_month"] | |
clickAndWait | //button[@name="Base_edit:method"] |
本例中有一约定是“月末支付”,但系统根据“通用销售贸易条款”自动更新的信息并没有该项,因此您在创建每个具体订单时都必须核对所有具体信息。
verifyValue | //input[@name="field_my_payment_condition_payment_term"] | 30 |
由于您在本订单“概览”页面已经填写发送人和接收人,而您也已经应用所选择的销售贸易条款(条款中已包含供应商信息),因此现在您就不需要在此填写这些信息,ERP5已经自动更新相关条目。然后您唯一需要做的就是编辑发票相关信息:发票发送人是谁?谁应该接收发票?谁应该支付发票款项?请见下页。
clickAndWait | link=Profile | |
type | //input[@name="field_my_source_administration_title"] | ZUITE-TEST-SALEORDER-ORGANISATION-001 |
type | //input[@name="field_my_destination_administration_title"] | ZUITE-TEST-SALEORDER USER-001 |
clickAndWait | //button[@name="Base_edit:method"] |
现在您可以根据该订单的具体信息填写剩下的支付信息。
现在,您已经完成建立销售订单的第一部分:根据具体信息填写订单文件的“概览”“支付”以及“简介”标签页。
但是,您还没有为订单填写任何稀罕坯或服务信息。销售订单文件的目的是在系统中录入订单相关信息,因此产品和服务必须包含其中。实际上,ERP5中销售订单的操作是这样的:首先,添加销售订单的基本信息,然后,再根据您的客户的具体订购向该订单添加产品或服务。要添加产品或服务,就需要在订单中添加“销售订单明细”。每条销售订单明细代表一个产品或服务,和产品或服务的数量无关。例如,如果客户在一个订单中订购了两个不同产品,那么您的销售订单文件就有两条销售订单明细;如果您的客户在一个订单中订购了有一定数量的同一产品,您的销售订单就只有一条销售订单项目。
首先,打开“操作”菜单并选择“添加销售订单明细”。您将被引导进入销售订单明细文件。
select | //select[@name="select_action"] | Add Sale Order Line |
waitForElementPresent | //input[@name='field_my_title'] | |
storeAttribute | //div[@id="breadcrumb"]/a[4]@href | waitactivities |
<span metal:use-macro="container/Zuite_viewTestMacroLibrary/macros/wait_for_activities"> Wait for activities </span> |
正如图中定位标签所示,您正处于默认名为“1”的销售订单明细文件,因为这是您第一次创建销售订单明细。
当您为该文件正确命名后,您就可以连接一个产品到该文件。请点击“产品与服务”条目右边的齿轮进入ERP5产品于服务总列表,然后根据所学教程 “连接人与组织”介绍的方式勾选所需产品或服务并“设置联系”。
注意:这项操作基于所需产品或服务已在ERP5中创建。相关信息请参考所学教程“建立产品文件”。
当您保存对“产品和服务”条目的修改后,您会看到产品“价格”和“影响基础”会根据所选的产品或服务文件中的信息被自动更新(如果您在建立这些产品或服务文件时根据所学教程“建立产品文件”正确填写相关信息)。当然,您仍然可以根据您与买方的订购信息来填写或修改这些条目。然后,您需要请输入客户订购该产品的数量(基于具体订单状况,该信息不会由系统自自动更新)。本例中,订购数量是100000件。
定义数量并保存之后,如图所示,一些信息会根据刚刚创建的销售订单的“概览”“支付”以及“简介”页面设置的信息自动填充,例如“运送日期”,“发送人”等。这就是为什么我们建议您在编辑销售订单明细之前必须首先填写销售订单的“概览”“支付”以及“简介”标签页。因为相关信息将被自动更新到订单明细中。
问题:如果一项产品有不同的价格变量,那么该销售订单明细中已选产品的价格会如何显示?比如我们已经创建的根据型号不同而拥有不同价格的书的例子?
答案:
当您在销售订单明细页面选择有变量的产品并点击“保存”后,“产品和服务”条目下方就会出现一个新的条目“变量”。通过点击选择与Ctrl键的操作将这些变量全选,然后保存修改。您会看到两个新的标签页被建立:“数量”和“价格”。您只需要根据销售情况填写数量标签页,保存之后,该订单明细所属的销售订单中产品总量和总价就会被自动更新,您将在下页中看到。
open | ${waitactivities} | |
type | //input[@name="field_my_title"] | ZUITE-TEST-SALEORDER-PRODUCT-001 |
type | //input[@name="field_my_reference"] | ZUITE-TEST-SALEORDER-RL01 |
type | //input[@name="field_my_resource_title"] | ZUITE-TEST-SALEORDER-PRODUCT-001 |
type | //input[@name="field_my_quantity"] | 100000 |
clickAndWait | //button[@name="Base_edit:method"] | |
select | //select[@name="field_my_quantity_unit"] | Unit/Piece |
type | //input[@name="field_my_price"] | 1 |
clickAndWait | //button[@name="Base_edit:method"] | |
verifyTextNotPresent | Input data has errors. Please look at the error messages below. |
现在我们已经编辑了销售订单明细,也就向销售订单添加了相关产品,接下来就应该返回销售订单来完成订单管理。
当您完整保存了相关信息后,请查看页面上方的定位标签:
如果您还记得,定位标签显示您所处的文件,并显示一系列文件路径。例如,这里您看到的是:
ERP5/销售订单/红色LED/红色LED
这就表明您在ERP5系统中处于
销售订单明细“红色LED”文件,而它属于
销售订单“红色LED”文件。
因此,要返回您的销售订单,只需
点击“红色LED”(定位标签中,红框是您的销售订单,蓝框是刚编辑的销售订单明细)
verifyText | //div[@id="breadcrumb"]/a[1] | ERP5 |
verifyText | //div[@id="breadcrumb"]/a[2] | Sale Orders |
storeAttribute | //div[@id="breadcrumb"]/a[3]@href | waitconfirm |
<span metal:use-macro="container/Zuite_viewTestMacroLibrary/macros/wait_for_activities"> Wait for activities </span> | ||
open | ${waitconfirm} |
当您查看销售订单“概览”页面的下方的销售订单明细列表,确保一切无误,您就可以改变销售订单状态。第一步打开“操作”菜单并点击“确认”。在弹出的新窗口中您可以评论并再次考虑是否 “确认”该销售订单。
该步骤非常重要,因为当您“确认”一个销售订单,您就告知ERP5您已经和买方达成协议并确认该销售订单,因此您就可以开始备货运送了。ERP5就会根据您确认销售订单的操作而自动为该销售订单生成一个销售装箱单。
selectAndWait | //select[@name="select_action"] | Confirm Order |
clickAndWait | //button[@id="dialog_submit_button"] |
当一个销售订单被确认后,ERP5系统就会同时生成一个销售装箱单(生成过程可能要持续几分钟)。然后您就可以通过页面左上方的“跳至...”菜单中“相关销售装箱单”进入该新建装箱单文件对其进行编辑或修改。
注意:有时您会看到这样的信息提示:“无相关销售装箱单”。这可能由以下两种情况造成。
最常见的情况是,您忘记确认销售订单。因此请务必牢记在销售订单编辑完成之后进行“确认”操作。
第二种种情况是您刚刚确认销售订单,但系统仍在进行文件创建,因此文件还未生成。您会看到页面右上方有一个时钟图标,这说明ERP5系统正在进行文件创建,因此您只需稍等几分钟,等时钟图标消失后,您就可以访问新建成的相关销售装箱单了。
verifyText | //label[normalize-space(text())='State']/../div | Confirmed |
storeAttribute | //div[@id="breadcrumb"]/a[3]@href | product |
<span metal:use-macro="container/Zuite_viewTestMacroLibrary/macros/wait_for_activities"> Wait for activities </span> | ||
<span metal:use-macro="container/Zuite_viewTestMacroLibrary/macros/invoke_simulation_alarms"> Invoke simulation alarms </span> | ||
<span metal:use-macro="container/Zuite_viewTestMacroLibrary/macros/wait_for_activities"> Wait for activities </span> | ||
open | ${product} | |
selectAndWait | //select[@name="select_jump"] | Related Sale Packing List |
verifyText | //div[@id="breadcrumb"]/a[1] | ERP5 |
verifyText | //div[@id="breadcrumb"]/a[2] | Sale Packing Lists |
<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_manager">Login As Manager</span> | ||
open | ${base_url}/Zuite_tearDownSaleOrderTest | |
verifyTextPresent | Clean Ok | |
<span metal:use-macro="container/Zuite_viewTestMacroLibrary/macros/wait_for_activities"> Wait for activities </span> |
Using "Jump..." menu, you can quickly access to the newly generated "Sale Packing List related to Sale Order: Red LED". Then if you need to go back to the initial Sale Order, you can either use the "Jump..." list again, or by browsing the Sale Orders in the "Modules" list.
Now you can have a look at the fresh new Packing List document. In next tutorial, you will learn how to manage Sale Packing Lists.
For more information, please contact Jean-Paul, CEO of Nexedi (+33 629 02 44 25).