From 4d102bfc1e73bf038c3fb566f250b72c3e1cd67c Mon Sep 17 00:00:00 2001
From: Mame Coumba Sall <mame@nexedi.com>
Date: Wed, 31 Dec 2008 12:23:49 +0000
Subject: [PATCH] 2008-12-31 mame * Modified fast input to add total price of
 sale order lines, quantity_unit , title and variation in listbox. Also, fast
 input now displays sale order lines already added so that we can directly
 updates them on the fast input

git-svn-id: https://svn.erp5.org/repos/public/erp5/trunk@24997 20353a03-c40f-0410-a6d1-a30d3c3de9de
---
 ...aleOrder_getFastInputSaleOrderLineList.xml |  40 ++-
 .../SaleOrder_setSaleOrderLineList.xml        |  64 +++-
 .../SaleOrder_updateSaleOrderLineList.xml     |  56 +++-
 ...SaleOrder_viewSaleOrderFastInputDialog.xml |   7 +-
 .../listbox.xml                               |  40 +++
 .../listbox_quantity_unit.xml                 | 283 ++++++++++++++++
 .../listbox_title.xml                         |  95 ++++++
 .../listbox_variation_category_item_list.xml  | 301 ++++++++++++++++++
 .../my_total_price.xml                        | 103 ++++++
 bt5/erp5_trade/bt/revision                    |   2 +-
 10 files changed, 951 insertions(+), 40 deletions(-)
 create mode 100644 bt5/erp5_trade/SkinTemplateItem/portal_skins/erp5_trade/SaleOrder_viewSaleOrderFastInputDialog/listbox_quantity_unit.xml
 create mode 100644 bt5/erp5_trade/SkinTemplateItem/portal_skins/erp5_trade/SaleOrder_viewSaleOrderFastInputDialog/listbox_title.xml
 create mode 100644 bt5/erp5_trade/SkinTemplateItem/portal_skins/erp5_trade/SaleOrder_viewSaleOrderFastInputDialog/listbox_variation_category_item_list.xml
 create mode 100644 bt5/erp5_trade/SkinTemplateItem/portal_skins/erp5_trade/SaleOrder_viewSaleOrderFastInputDialog/my_total_price.xml

diff --git a/bt5/erp5_trade/SkinTemplateItem/portal_skins/erp5_trade/SaleOrder_getFastInputSaleOrderLineList.xml b/bt5/erp5_trade/SkinTemplateItem/portal_skins/erp5_trade/SaleOrder_getFastInputSaleOrderLineList.xml
index 5add5914fa..dbe942bdfb 100644
--- a/bt5/erp5_trade/SkinTemplateItem/portal_skins/erp5_trade/SaleOrder_getFastInputSaleOrderLineList.xml
+++ b/bt5/erp5_trade/SkinTemplateItem/portal_skins/erp5_trade/SaleOrder_getFastInputSaleOrderLineList.xml
@@ -53,15 +53,35 @@
         </item>
         <item>
             <key> <string>_body</string> </key>
-            <value> <string>from Products.ERP5Type.Document import newTempBase\n
+            <value> <string>"""\n
+  This script creates a list of empty lines when called for\n
+  the first time.When called the next time, it displays on \n
+  the fast input all sale order lines already added and \n
+  updates them based on fast input entries.\n
+"""\n
+from Products.ERP5Type.Document import newTempBase\n
 portal = context.getPortalObject()\n
+request = context.REQUEST\n
+listbox = getattr(request, \'listbox\', None) \n
 \n
 result = []\n
+line_list = context.contentValues(portal_type=\'Sale Order Line\')\n
 \n
-for i in range(lines_num):\n
-  obj = newTempBase(portal, id="tmp_item_%s" % i, uid="tmp_item_%s" % i)\n
-  result.append(obj)\n
-\n
+len_line_list = len(line_list)\n
+if len(line_list)!=0:\n
+  for line in line_list:\n
+    obj = newTempBase(portal, id="tmp_item_%s" % line.getId(), uid="tmp_item_%s" % line.getId())    \n
+    obj.edit(title=line.getResourceTitle(),\n
+           quantity=line.getQuantity(),\n
+           quantity_unit=line.getQuantityUnit(),\n
+           total_price=line.getTotalPrice(),\n
+           getAvailableInventory=line.getResourceValue().getAvailableInventory(),\n
+           getCurrentInventory=line.getResourceValue().getCurrentInventory(),\n
+           inventory=line.getResourceValue().getInventory())\n
+    result.append(obj)\n
+for i in range(len_line_list+1,lines_num+1):\n
+   obj = newTempBase(portal, id="tmp_item_%s" % i, uid="tmp_item_%s" % i)\n
+   result.append(obj)\n
 return result\n
 </string> </value>
         </item>
@@ -106,11 +126,19 @@ return result\n
                             <string>_getattr_</string>
                             <string>context</string>
                             <string>portal</string>
+                            <string>request</string>
+                            <string>getattr</string>
+                            <string>None</string>
+                            <string>listbox</string>
                             <string>result</string>
+                            <string>line_list</string>
+                            <string>len</string>
+                            <string>len_line_list</string>
                             <string>_getiter_</string>
+                            <string>line</string>
+                            <string>obj</string>
                             <string>range</string>
                             <string>i</string>
-                            <string>obj</string>
                           </tuple>
                         </value>
                     </item>
diff --git a/bt5/erp5_trade/SkinTemplateItem/portal_skins/erp5_trade/SaleOrder_setSaleOrderLineList.xml b/bt5/erp5_trade/SkinTemplateItem/portal_skins/erp5_trade/SaleOrder_setSaleOrderLineList.xml
index 115e10deb1..55bb6b1381 100644
--- a/bt5/erp5_trade/SkinTemplateItem/portal_skins/erp5_trade/SaleOrder_setSaleOrderLineList.xml
+++ b/bt5/erp5_trade/SkinTemplateItem/portal_skins/erp5_trade/SaleOrder_setSaleOrderLineList.xml
@@ -53,25 +53,53 @@
         </item>
         <item>
             <key> <string>_body</string> </key>
-            <value> <string>result_list = []\n
+            <value> <string>"""\n
+  This script creates or updates sale order lines based on the fast \n
+  input information.It should take into account any sale order line \n
+  which were already created so that they are not duplicated.\n
+"""\n
+result_list = []\n
+sale_order_line_list = context.contentValues(portal_type=\'Sale Order Line\')\n
+if sale_order_line_list!=[]:\n
+  sale_order_line_id_list = [x.getId() for x in sale_order_line_list]\n
 for line in listbox:\n
-  if line.has_key(\'listbox_key\') and line[\'reference\'] not in (\'\', None):\n
-    product_list = [x.getObject() for x in context.portal_catalog(portal_type=\'Product\',\n
+ #for each line in listbox if line has a reference defined, search \n
+ #for the product whose reference has been entered\n
+ if line.has_key(\'listbox_key\') and line[\'reference\'] not in (\'\', None):\n
+   line_id = line[\'listbox_key\'].split(\'/erp5/tmp_item_\')[1]\n
+   product_list = [x.getObject() for x in context.portal_catalog(\n
+                                    portal_type=\'Product\',\n
                                     reference=line[\'reference\'])]\n
-    product = product_list[0]\n
-    sale_order_line= context.newContent(\n
+   product = product_list[0]\n
+   #for each sale order line already added,\n
+   #if the line\'s id is the same as the sale order line, update it\n
+   for sale_order_line in sale_order_line_list:\n
+     if sale_order_line.getId()==line_id:\n
+       sale_order_line.edit(start_date=context.getStartDate(),\n
+               stop_date=context.getStopDate(),\n
+               resource_title=product.getTitle(),\n
+               price_currency = context.getPriceCurrency(),\n
+               quantity = line["quantity"],\n
+               quantity_unit = product.getQuantityUnit(),)\n
+       sale_order_line.setResourceValue(product)\n
+       result_list.append(sale_order_line)\n
+   else:\n
+     # if there was no sale order line already defined\n
+     # for the sale order, add a new sale order line\n
+     if len(sale_order_line_list)==0 or line_id not in sale_order_line_id_list:\n
+      sale_order_line= context.newContent(\n
                  portal_type=\'Sale Order Line\',)\n
-    sale_order_line.edit(\n
+      sale_order_line.edit(\n
                start_date=context.getStartDate(),\n
-               stop_dat=context.getStopDate(),\n
+               stop_date=context.getStopDate(),\n
                resource_title=product.getTitle(),\n
-               total_price = line[\'total_price\'],\n
                price_currency = context.getPriceCurrency(),\n
                quantity = line["quantity"],\n
                quantity_unit = product.getQuantityUnit(),)\n
-    sale_order_line.setResourceValue(product)\n
-    result_list.append(sale_order_line)\n
-\n
+     sale_order_line.setResourceValue(product)\n
+     result_list.append(sale_order_line)\n
+  \n
+#return to the feature module\n
 context.REQUEST.response.redirect(\n
      \'%s/view?portal_status_message=%s\' % (context.absolute_url(), \'Sale Order Lines created.\'.replace(\' \', \'%20\')))\n
 </string> </value>
@@ -113,18 +141,22 @@ context.REQUEST.response.redirect(\n
                             <string>listbox</string>
                             <string>kw</string>
                             <string>result_list</string>
-                            <string>_getiter_</string>
-                            <string>line</string>
                             <string>_getattr_</string>
-                            <string>_getitem_</string>
-                            <string>None</string>
+                            <string>context</string>
+                            <string>sale_order_line_list</string>
                             <string>append</string>
                             <string>$append0</string>
-                            <string>context</string>
+                            <string>_getiter_</string>
                             <string>x</string>
+                            <string>sale_order_line_id_list</string>
+                            <string>line</string>
+                            <string>_getitem_</string>
+                            <string>None</string>
+                            <string>line_id</string>
                             <string>product_list</string>
                             <string>product</string>
                             <string>sale_order_line</string>
+                            <string>len</string>
                           </tuple>
                         </value>
                     </item>
diff --git a/bt5/erp5_trade/SkinTemplateItem/portal_skins/erp5_trade/SaleOrder_updateSaleOrderLineList.xml b/bt5/erp5_trade/SkinTemplateItem/portal_skins/erp5_trade/SaleOrder_updateSaleOrderLineList.xml
index 58cb7d7640..23d577f511 100644
--- a/bt5/erp5_trade/SkinTemplateItem/portal_skins/erp5_trade/SaleOrder_updateSaleOrderLineList.xml
+++ b/bt5/erp5_trade/SkinTemplateItem/portal_skins/erp5_trade/SaleOrder_updateSaleOrderLineList.xml
@@ -53,30 +53,49 @@
         </item>
         <item>
             <key> <string>_body</string> </key>
-            <value> <string>"""\n
+            <value> <string encoding="cdata"><![CDATA[
+
+"""\n
   This script just returns what the user entered in\n
-  the fast input form.\n
+  the fast input form, searches for the product whose\n
+  reference or title has been just entered and updates\n
+  the total price and the stock corresponding to the \n
+  product\n
 """\n
 request = context.REQUEST\n
-\n
+portal = context.getPortalObject()\n
+Base_translateString = portal.Base_translateString\n
+total_price = 0.0\n
 portal = context.getPortalObject()\n
 for line in listbox:\n
-  if line.has_key(\'listbox_key\') and line[\'reference\'] not in (\'\', None):\n
+  if line.has_key(\'listbox_key\') and (line[\'title\'] or line[\'reference\'] not in (\'\', None)):\n
      product_list = context.portal_catalog(portal_type=\'Product\',\n
+                                    title=line[\'title\'],\n
                                     reference=line[\'reference\'])\n
      product = product_list[0]\n
-     line[\'getAvailableInventory\'] = product.getAvailableInventory()\n
-     line["inventory"] = product.getInventory()\n
-     inventory = line["inventory"]\n
-     line_id = line[\'listbox_key\'].split(\'/erp5/\')[1]\n
-     line["total_price"] = line[\'quantity\'] * product.getPrice()\n
-     request.form["field_listbox_total_price_%s"%line_id] = line[\'quantity\'] * product.getPrice()\n
-     request.form["field_listbox_getAvailableInventory_%s"%line_id] = product.getAvailableInventory()\n
-     request.form[\'field_listbox_inventory_%s\'%line_id] = product.getInventory()\n
-     request.form["field_listbox_getCurrentInventory_%s"%line_id] = product.getCurrentInventory()\n
+     if line[\'quantity\'] <= product.getAvailableInventory():\n
+       line_id = line[\'listbox_key\'].split(\'/erp5/\')[1]\n
+       line["total_price"] = line[\'quantity\'] * product.getPrice()\n
+       line["quantity_unit"] = product.getQuantityUnit()\n
+       request.form["field_listbox_reference_%s"%line_id] = product.getReference()\n
+       request.form["field_listbox_title_%s"%line_id] = product.getTitle()\n
+       request.form["field_listbox_total_price_%s"%line_id] = line[\'quantity\'] * product.getPrice()\n
+       request.form["field_listbox_quantity_unit_%s"%line_id] = product.getQuantityUnit()\n
+       request.form["field_listbox_getAvailableInventory_%s"%line_id] = product.getAvailableInventory()\n
+       request.form[\'field_listbox_inventory_%s\'%line_id] = product.getInventory()\n
+       request.form["field_listbox_getCurrentInventory_%s"%line_id] = product.getCurrentInventory()\n
+       request.form["field_listbox_variation_category_item_list_%s"%line_id] =\\\n
+                         [x[0] for x in product.getVariationCategoryItemList()]\n
+       total_price +=line[\'total_price\']\n
+       request.form["field_my_total_price"] = total_price\n
+     else:\n
+       request.set(\'portal_status_message\', Base_translateString(\'Quantity Asked Not Available In Inventory\')) \n
+     \n
 context.Base_updateDialogForm(listbox=listbox,update=1,kw=kw)\n
 return context.SaleOrder_viewSaleOrderFastInputDialog(listbox=listbox,**kw)\n
-</string> </value>
+
+
+]]></string> </value>
         </item>
         <item>
             <key> <string>_code</string> </key>
@@ -118,15 +137,20 @@ return context.SaleOrder_viewSaleOrderFastInputDialog(listbox=listbox,**kw)\n
                             <string>context</string>
                             <string>request</string>
                             <string>portal</string>
+                            <string>Base_translateString</string>
+                            <string>total_price</string>
                             <string>_getiter_</string>
                             <string>line</string>
                             <string>_getitem_</string>
                             <string>None</string>
                             <string>product_list</string>
                             <string>product</string>
-                            <string>_write_</string>
-                            <string>inventory</string>
                             <string>line_id</string>
+                            <string>_write_</string>
+                            <string>append</string>
+                            <string>$append0</string>
+                            <string>x</string>
+                            <string>_inplacevar_</string>
                             <string>_apply_</string>
                           </tuple>
                         </value>
diff --git a/bt5/erp5_trade/SkinTemplateItem/portal_skins/erp5_trade/SaleOrder_viewSaleOrderFastInputDialog.xml b/bt5/erp5_trade/SkinTemplateItem/portal_skins/erp5_trade/SaleOrder_viewSaleOrderFastInputDialog.xml
index f44cfeb928..94591a154e 100644
--- a/bt5/erp5_trade/SkinTemplateItem/portal_skins/erp5_trade/SaleOrder_viewSaleOrderFastInputDialog.xml
+++ b/bt5/erp5_trade/SkinTemplateItem/portal_skins/erp5_trade/SaleOrder_viewSaleOrderFastInputDialog.xml
@@ -99,13 +99,18 @@
                         <string>listbox_getAvailableInventory</string>
                         <string>listbox_getCurrentInventory</string>
                         <string>listbox_inventory</string>
+                        <string>listbox_variation_category_item_list</string>
+                        <string>listbox_title</string>
+                        <string>listbox_quantity_unit</string>
                       </list>
                     </value>
                 </item>
                 <item>
                     <key> <string>left</string> </key>
                     <value>
-                      <list/>
+                      <list>
+                        <string>my_total_price</string>
+                      </list>
                     </value>
                 </item>
                 <item>
diff --git a/bt5/erp5_trade/SkinTemplateItem/portal_skins/erp5_trade/SaleOrder_viewSaleOrderFastInputDialog/listbox.xml b/bt5/erp5_trade/SkinTemplateItem/portal_skins/erp5_trade/SaleOrder_viewSaleOrderFastInputDialog/listbox.xml
index f14688940a..047e47a6bf 100644
--- a/bt5/erp5_trade/SkinTemplateItem/portal_skins/erp5_trade/SaleOrder_viewSaleOrderFastInputDialog/listbox.xml
+++ b/bt5/erp5_trade/SkinTemplateItem/portal_skins/erp5_trade/SaleOrder_viewSaleOrderFastInputDialog/listbox.xml
@@ -326,14 +326,26 @@
                     <key> <string>all_columns</string> </key>
                     <value>
                       <list>
+                        <tuple>
+                          <string>title</string>
+                          <string>Title</string>
+                        </tuple>
                         <tuple>
                           <string>reference</string>
                           <string>Reference</string>
                         </tuple>
+                        <tuple>
+                          <string>variation_category_item_list</string>
+                          <string>Variation</string>
+                        </tuple>
                         <tuple>
                           <string>quantity</string>
                           <string>Quantity</string>
                         </tuple>
+                        <tuple>
+                          <string>quantity_unit</string>
+                          <string>Quantity Unit</string>
+                        </tuple>
                         <tuple>
                           <string>total_price</string>
                           <string>Total Price</string>
@@ -365,14 +377,26 @@
                     <key> <string>columns</string> </key>
                     <value>
                       <list>
+                        <tuple>
+                          <string>title</string>
+                          <string>Title</string>
+                        </tuple>
                         <tuple>
                           <string>reference</string>
                           <string>Reference</string>
                         </tuple>
+                        <tuple>
+                          <string>variation_category_item_list</string>
+                          <string>Variation</string>
+                        </tuple>
                         <tuple>
                           <string>quantity</string>
                           <string>Quantity</string>
                         </tuple>
+                        <tuple>
+                          <string>quantity_unit</string>
+                          <string>Quantity Unit</string>
+                        </tuple>
                         <tuple>
                           <string>total_price</string>
                           <string>Total Price</string>
@@ -428,14 +452,26 @@
                     <key> <string>editable_columns</string> </key>
                     <value>
                       <list>
+                        <tuple>
+                          <string>title</string>
+                          <string>Title</string>
+                        </tuple>
                         <tuple>
                           <string>reference</string>
                           <string>Reference</string>
                         </tuple>
+                        <tuple>
+                          <string>variation_category_item_list</string>
+                          <string>Variation</string>
+                        </tuple>
                         <tuple>
                           <string>quantity</string>
                           <string>Quantity</string>
                         </tuple>
+                        <tuple>
+                          <string>quantity_unit</string>
+                          <string>Quantity Unit</string>
+                        </tuple>
                         <tuple>
                           <string>total_price</string>
                           <string>Total Price</string>
@@ -521,6 +557,10 @@
                     <key> <string>search_columns</string> </key>
                     <value>
                       <list>
+                        <tuple>
+                          <string>title</string>
+                          <string>Title</string>
+                        </tuple>
                         <tuple>
                           <string>reference</string>
                           <string>Reference</string>
diff --git a/bt5/erp5_trade/SkinTemplateItem/portal_skins/erp5_trade/SaleOrder_viewSaleOrderFastInputDialog/listbox_quantity_unit.xml b/bt5/erp5_trade/SkinTemplateItem/portal_skins/erp5_trade/SaleOrder_viewSaleOrderFastInputDialog/listbox_quantity_unit.xml
new file mode 100644
index 0000000000..479d0a6cfc
--- /dev/null
+++ b/bt5/erp5_trade/SkinTemplateItem/portal_skins/erp5_trade/SaleOrder_viewSaleOrderFastInputDialog/listbox_quantity_unit.xml
@@ -0,0 +1,283 @@
+<?xml version="1.0"?>
+<ZopeData>
+  <record id="1" aka="AAAAAAAAAAE=">
+    <pickle>
+      <tuple>
+        <global name="ListField" module="Products.Formulator.StandardFields"/>
+        <tuple/>
+      </tuple>
+    </pickle>
+    <pickle>
+      <dictionary>
+        <item>
+            <key> <string>id</string> </key>
+            <value> <string>listbox_quantity_unit</string> </value>
+        </item>
+        <item>
+            <key> <string>message_values</string> </key>
+            <value>
+              <dictionary>
+                <item>
+                    <key> <string>external_validator_failed</string> </key>
+                    <value> <string>The input failed the external validator.</string> </value>
+                </item>
+                <item>
+                    <key> <string>required_not_found</string> </key>
+                    <value> <string>Input is required but no input given.</string> </value>
+                </item>
+                <item>
+                    <key> <string>unknown_selection</string> </key>
+                    <value> <string>You selected an item that was not in the list.</string> </value>
+                </item>
+              </dictionary>
+            </value>
+        </item>
+        <item>
+            <key> <string>overrides</string> </key>
+            <value>
+              <dictionary>
+                <item>
+                    <key> <string>alternate_name</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>css_class</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>default</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>description</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>editable</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>enabled</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>external_validator</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>extra</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>extra_item</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>first_item</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>hidden</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>items</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>required</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>size</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>title</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>unicode</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>whitespace_preserve</string> </key>
+                    <value> <string></string> </value>
+                </item>
+              </dictionary>
+            </value>
+        </item>
+        <item>
+            <key> <string>tales</string> </key>
+            <value>
+              <dictionary>
+                <item>
+                    <key> <string>alternate_name</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>css_class</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>default</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>description</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>editable</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>enabled</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>external_validator</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>extra</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>extra_item</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>first_item</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>hidden</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>items</string> </key>
+                    <value>
+                      <persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent>
+                    </value>
+                </item>
+                <item>
+                    <key> <string>required</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>size</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>title</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>unicode</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>whitespace_preserve</string> </key>
+                    <value> <string></string> </value>
+                </item>
+              </dictionary>
+            </value>
+        </item>
+        <item>
+            <key> <string>values</string> </key>
+            <value>
+              <dictionary>
+                <item>
+                    <key> <string>alternate_name</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>css_class</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>default</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>description</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>editable</string> </key>
+                    <value> <int>1</int> </value>
+                </item>
+                <item>
+                    <key> <string>enabled</string> </key>
+                    <value> <int>1</int> </value>
+                </item>
+                <item>
+                    <key> <string>external_validator</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>extra</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>extra_item</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>first_item</string> </key>
+                    <value> <int>0</int> </value>
+                </item>
+                <item>
+                    <key> <string>hidden</string> </key>
+                    <value> <int>0</int> </value>
+                </item>
+                <item>
+                    <key> <string>items</string> </key>
+                    <value>
+                      <list/>
+                    </value>
+                </item>
+                <item>
+                    <key> <string>required</string> </key>
+                    <value> <int>0</int> </value>
+                </item>
+                <item>
+                    <key> <string>size</string> </key>
+                    <value> <int>1</int> </value>
+                </item>
+                <item>
+                    <key> <string>title</string> </key>
+                    <value> <string>my_quantity_unit</string> </value>
+                </item>
+                <item>
+                    <key> <string>unicode</string> </key>
+                    <value> <int>0</int> </value>
+                </item>
+                <item>
+                    <key> <string>whitespace_preserve</string> </key>
+                    <value> <int>0</int> </value>
+                </item>
+              </dictionary>
+            </value>
+        </item>
+      </dictionary>
+    </pickle>
+  </record>
+  <record id="2" aka="AAAAAAAAAAI=">
+    <pickle>
+      <tuple>
+        <global name="TALESMethod" module="Products.Formulator.TALESField"/>
+        <tuple/>
+      </tuple>
+    </pickle>
+    <pickle>
+      <dictionary>
+        <item>
+            <key> <string>_text</string> </key>
+            <value> <string>python:getattr(here.portal_categories[\'quantity_unit\'], preferences.getPreference(\'preferred_category_child_item_list_method_id\', \'getCategoryChildCompactLogicalPathItemList\'))(base=0, local_sort_id=(\'int_index\', \'translated_title\'), checked_permission=\'View\')</string> </value>
+        </item>
+      </dictionary>
+    </pickle>
+  </record>
+</ZopeData>
diff --git a/bt5/erp5_trade/SkinTemplateItem/portal_skins/erp5_trade/SaleOrder_viewSaleOrderFastInputDialog/listbox_title.xml b/bt5/erp5_trade/SkinTemplateItem/portal_skins/erp5_trade/SaleOrder_viewSaleOrderFastInputDialog/listbox_title.xml
new file mode 100644
index 0000000000..12d126e31f
--- /dev/null
+++ b/bt5/erp5_trade/SkinTemplateItem/portal_skins/erp5_trade/SaleOrder_viewSaleOrderFastInputDialog/listbox_title.xml
@@ -0,0 +1,95 @@
+<?xml version="1.0"?>
+<ZopeData>
+  <record id="1" aka="AAAAAAAAAAE=">
+    <pickle>
+      <tuple>
+        <global name="ProxyField" module="Products.ERP5Form.ProxyField"/>
+        <tuple/>
+      </tuple>
+    </pickle>
+    <pickle>
+      <dictionary>
+        <item>
+            <key> <string>delegated_list</string> </key>
+            <value>
+              <list/>
+            </value>
+        </item>
+        <item>
+            <key> <string>id</string> </key>
+            <value> <string>listbox_title</string> </value>
+        </item>
+        <item>
+            <key> <string>message_values</string> </key>
+            <value>
+              <dictionary>
+                <item>
+                    <key> <string>external_validator_failed</string> </key>
+                    <value> <string>The input failed the external validator.</string> </value>
+                </item>
+              </dictionary>
+            </value>
+        </item>
+        <item>
+            <key> <string>overrides</string> </key>
+            <value>
+              <dictionary>
+                <item>
+                    <key> <string>extra_context</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>field_id</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>form_id</string> </key>
+                    <value> <string></string> </value>
+                </item>
+              </dictionary>
+            </value>
+        </item>
+        <item>
+            <key> <string>tales</string> </key>
+            <value>
+              <dictionary>
+                <item>
+                    <key> <string>extra_context</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>field_id</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>form_id</string> </key>
+                    <value> <string></string> </value>
+                </item>
+              </dictionary>
+            </value>
+        </item>
+        <item>
+            <key> <string>values</string> </key>
+            <value>
+              <dictionary>
+                <item>
+                    <key> <string>extra_context</string> </key>
+                    <value>
+                      <list/>
+                    </value>
+                </item>
+                <item>
+                    <key> <string>field_id</string> </key>
+                    <value> <string>my_title</string> </value>
+                </item>
+                <item>
+                    <key> <string>form_id</string> </key>
+                    <value> <string>OrderLine_viewFieldLibrary</string> </value>
+                </item>
+              </dictionary>
+            </value>
+        </item>
+      </dictionary>
+    </pickle>
+  </record>
+</ZopeData>
diff --git a/bt5/erp5_trade/SkinTemplateItem/portal_skins/erp5_trade/SaleOrder_viewSaleOrderFastInputDialog/listbox_variation_category_item_list.xml b/bt5/erp5_trade/SkinTemplateItem/portal_skins/erp5_trade/SaleOrder_viewSaleOrderFastInputDialog/listbox_variation_category_item_list.xml
new file mode 100644
index 0000000000..936b86c080
--- /dev/null
+++ b/bt5/erp5_trade/SkinTemplateItem/portal_skins/erp5_trade/SaleOrder_viewSaleOrderFastInputDialog/listbox_variation_category_item_list.xml
@@ -0,0 +1,301 @@
+<?xml version="1.0"?>
+<ZopeData>
+  <record id="1" aka="AAAAAAAAAAE=">
+    <pickle>
+      <tuple>
+        <global name="LinesField" module="Products.Formulator.StandardFields"/>
+        <tuple/>
+      </tuple>
+    </pickle>
+    <pickle>
+      <dictionary>
+        <item>
+            <key> <string>id</string> </key>
+            <value> <string>listbox_variation_category_item_list</string> </value>
+        </item>
+        <item>
+            <key> <string>message_values</string> </key>
+            <value>
+              <dictionary>
+                <item>
+                    <key> <string>external_validator_failed</string> </key>
+                    <value> <string>The input failed the external validator.</string> </value>
+                </item>
+                <item>
+                    <key> <string>line_too_long</string> </key>
+                    <value> <string>A line was too long.</string> </value>
+                </item>
+                <item>
+                    <key> <string>required_not_found</string> </key>
+                    <value> <string>Input is required but no input given.</string> </value>
+                </item>
+                <item>
+                    <key> <string>too_long</string> </key>
+                    <value> <string>You entered too many characters.</string> </value>
+                </item>
+                <item>
+                    <key> <string>too_many_lines</string> </key>
+                    <value> <string>You entered too many lines.</string> </value>
+                </item>
+              </dictionary>
+            </value>
+        </item>
+        <item>
+            <key> <string>overrides</string> </key>
+            <value>
+              <dictionary>
+                <item>
+                    <key> <string>alternate_name</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>css_class</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>default</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>description</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>editable</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>enabled</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>external_validator</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>extra</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>height</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>hidden</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>max_length</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>max_linelength</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>max_lines</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>required</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>title</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>unicode</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>view_separator</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>whitespace_preserve</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>width</string> </key>
+                    <value> <string></string> </value>
+                </item>
+              </dictionary>
+            </value>
+        </item>
+        <item>
+            <key> <string>tales</string> </key>
+            <value>
+              <dictionary>
+                <item>
+                    <key> <string>alternate_name</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>css_class</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>default</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>description</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>editable</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>enabled</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>external_validator</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>extra</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>height</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>hidden</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>max_length</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>max_linelength</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>max_lines</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>required</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>title</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>unicode</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>view_separator</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>whitespace_preserve</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>width</string> </key>
+                    <value> <string></string> </value>
+                </item>
+              </dictionary>
+            </value>
+        </item>
+        <item>
+            <key> <string>values</string> </key>
+            <value>
+              <dictionary>
+                <item>
+                    <key> <string>alternate_name</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>css_class</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>default</string> </key>
+                    <value>
+                      <list/>
+                    </value>
+                </item>
+                <item>
+                    <key> <string>description</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>editable</string> </key>
+                    <value> <int>0</int> </value>
+                </item>
+                <item>
+                    <key> <string>enabled</string> </key>
+                    <value> <int>1</int> </value>
+                </item>
+                <item>
+                    <key> <string>external_validator</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>extra</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>height</string> </key>
+                    <value> <int>5</int> </value>
+                </item>
+                <item>
+                    <key> <string>hidden</string> </key>
+                    <value> <int>0</int> </value>
+                </item>
+                <item>
+                    <key> <string>max_length</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>max_linelength</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>max_lines</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>required</string> </key>
+                    <value> <int>0</int> </value>
+                </item>
+                <item>
+                    <key> <string>title</string> </key>
+                    <value> <string>listbox_variation_category_item_list</string> </value>
+                </item>
+                <item>
+                    <key> <string>unicode</string> </key>
+                    <value> <int>0</int> </value>
+                </item>
+                <item>
+                    <key> <string>view_separator</string> </key>
+                    <value> <string encoding="cdata"><![CDATA[
+
+<br />
+
+]]></string> </value>
+                </item>
+                <item>
+                    <key> <string>whitespace_preserve</string> </key>
+                    <value> <int>0</int> </value>
+                </item>
+                <item>
+                    <key> <string>width</string> </key>
+                    <value> <int>40</int> </value>
+                </item>
+              </dictionary>
+            </value>
+        </item>
+      </dictionary>
+    </pickle>
+  </record>
+</ZopeData>
diff --git a/bt5/erp5_trade/SkinTemplateItem/portal_skins/erp5_trade/SaleOrder_viewSaleOrderFastInputDialog/my_total_price.xml b/bt5/erp5_trade/SkinTemplateItem/portal_skins/erp5_trade/SaleOrder_viewSaleOrderFastInputDialog/my_total_price.xml
new file mode 100644
index 0000000000..46496234ef
--- /dev/null
+++ b/bt5/erp5_trade/SkinTemplateItem/portal_skins/erp5_trade/SaleOrder_viewSaleOrderFastInputDialog/my_total_price.xml
@@ -0,0 +1,103 @@
+<?xml version="1.0"?>
+<ZopeData>
+  <record id="1" aka="AAAAAAAAAAE=">
+    <pickle>
+      <tuple>
+        <global name="ProxyField" module="Products.ERP5Form.ProxyField"/>
+        <tuple/>
+      </tuple>
+    </pickle>
+    <pickle>
+      <dictionary>
+        <item>
+            <key> <string>delegated_list</string> </key>
+            <value>
+              <list>
+                <string>precision</string>
+              </list>
+            </value>
+        </item>
+        <item>
+            <key> <string>id</string> </key>
+            <value> <string>my_total_price</string> </value>
+        </item>
+        <item>
+            <key> <string>message_values</string> </key>
+            <value>
+              <dictionary>
+                <item>
+                    <key> <string>external_validator_failed</string> </key>
+                    <value> <string>The input failed the external validator.</string> </value>
+                </item>
+              </dictionary>
+            </value>
+        </item>
+        <item>
+            <key> <string>overrides</string> </key>
+            <value>
+              <dictionary>
+                <item>
+                    <key> <string>field_id</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>form_id</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>target</string> </key>
+                    <value> <string></string> </value>
+                </item>
+              </dictionary>
+            </value>
+        </item>
+        <item>
+            <key> <string>tales</string> </key>
+            <value>
+              <dictionary>
+                <item>
+                    <key> <string>field_id</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>form_id</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>precision</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>target</string> </key>
+                    <value> <string></string> </value>
+                </item>
+              </dictionary>
+            </value>
+        </item>
+        <item>
+            <key> <string>values</string> </key>
+            <value>
+              <dictionary>
+                <item>
+                    <key> <string>field_id</string> </key>
+                    <value> <string>my_total_price</string> </value>
+                </item>
+                <item>
+                    <key> <string>form_id</string> </key>
+                    <value> <string>OrderLine_viewFieldLibrary</string> </value>
+                </item>
+                <item>
+                    <key> <string>precision</string> </key>
+                    <value> <string></string> </value>
+                </item>
+                <item>
+                    <key> <string>target</string> </key>
+                    <value> <string>Click to edit the target</string> </value>
+                </item>
+              </dictionary>
+            </value>
+        </item>
+      </dictionary>
+    </pickle>
+  </record>
+</ZopeData>
diff --git a/bt5/erp5_trade/bt/revision b/bt5/erp5_trade/bt/revision
index f5bba53e70..bccf25b788 100644
--- a/bt5/erp5_trade/bt/revision
+++ b/bt5/erp5_trade/bt/revision
@@ -1 +1 @@
-556
\ No newline at end of file
+557
\ No newline at end of file
-- 
2.30.9