summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorstephanchrst <stephanchrst@gmail.com>2024-11-13 10:06:15 +0700
committerstephanchrst <stephanchrst@gmail.com>2024-11-13 10:06:15 +0700
commit51d7a6c5aeb76ff33f8d7ffdae2bbc9e570c1367 (patch)
tree8f398dee374ac754b76fbb026d0439571066f0d0
parent9af72c43ddad7df9f628ffdd75a7647ab6e50941 (diff)
add fulfillment
-rw-r--r--calculate_pareto_status.ktr1
-rw-r--r--collect_fulfillment.ktr1506
-rw-r--r--collect_fulfillment_po.ktr888
-rw-r--r--example_use_param_table_input.ktr903
-rw-r--r--run_fulfillment_job.kjb413
-rw-r--r--update_null_md_vendor.ktr937
-rw-r--r--update_state_reserve_picking.ktr552
7 files changed, 5200 insertions, 0 deletions
diff --git a/calculate_pareto_status.ktr b/calculate_pareto_status.ktr
index 1cb14ff..b636486 100644
--- a/calculate_pareto_status.ktr
+++ b/calculate_pareto_status.ktr
@@ -6,6 +6,7 @@
<extended_description/>
<trans_version/>
<trans_type>Normal</trans_type>
+ <trans_status>0</trans_status>
<directory>/</directory>
<parameters>
</parameters>
diff --git a/collect_fulfillment.ktr b/collect_fulfillment.ktr
new file mode 100644
index 0000000..6197a8d
--- /dev/null
+++ b/collect_fulfillment.ktr
@@ -0,0 +1,1506 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<transformation>
+ <info>
+ <name>collect_fulfillment</name>
+ <description/>
+ <extended_description/>
+ <trans_version/>
+ <trans_type>Normal</trans_type>
+ <directory>/</directory>
+ <parameters>
+ </parameters>
+ <log>
+ <trans-log-table>
+ <connection/>
+ <schema/>
+ <table/>
+ <size_limit_lines/>
+ <interval/>
+ <timeout_days/>
+ <field>
+ <id>ID_BATCH</id>
+ <enabled>Y</enabled>
+ <name>ID_BATCH</name>
+ </field>
+ <field>
+ <id>CHANNEL_ID</id>
+ <enabled>Y</enabled>
+ <name>CHANNEL_ID</name>
+ </field>
+ <field>
+ <id>TRANSNAME</id>
+ <enabled>Y</enabled>
+ <name>TRANSNAME</name>
+ </field>
+ <field>
+ <id>STATUS</id>
+ <enabled>Y</enabled>
+ <name>STATUS</name>
+ </field>
+ <field>
+ <id>LINES_READ</id>
+ <enabled>Y</enabled>
+ <name>LINES_READ</name>
+ <subject/>
+ </field>
+ <field>
+ <id>LINES_WRITTEN</id>
+ <enabled>Y</enabled>
+ <name>LINES_WRITTEN</name>
+ <subject/>
+ </field>
+ <field>
+ <id>LINES_UPDATED</id>
+ <enabled>Y</enabled>
+ <name>LINES_UPDATED</name>
+ <subject/>
+ </field>
+ <field>
+ <id>LINES_INPUT</id>
+ <enabled>Y</enabled>
+ <name>LINES_INPUT</name>
+ <subject/>
+ </field>
+ <field>
+ <id>LINES_OUTPUT</id>
+ <enabled>Y</enabled>
+ <name>LINES_OUTPUT</name>
+ <subject/>
+ </field>
+ <field>
+ <id>LINES_REJECTED</id>
+ <enabled>Y</enabled>
+ <name>LINES_REJECTED</name>
+ <subject/>
+ </field>
+ <field>
+ <id>ERRORS</id>
+ <enabled>Y</enabled>
+ <name>ERRORS</name>
+ </field>
+ <field>
+ <id>STARTDATE</id>
+ <enabled>Y</enabled>
+ <name>STARTDATE</name>
+ </field>
+ <field>
+ <id>ENDDATE</id>
+ <enabled>Y</enabled>
+ <name>ENDDATE</name>
+ </field>
+ <field>
+ <id>LOGDATE</id>
+ <enabled>Y</enabled>
+ <name>LOGDATE</name>
+ </field>
+ <field>
+ <id>DEPDATE</id>
+ <enabled>Y</enabled>
+ <name>DEPDATE</name>
+ </field>
+ <field>
+ <id>REPLAYDATE</id>
+ <enabled>Y</enabled>
+ <name>REPLAYDATE</name>
+ </field>
+ <field>
+ <id>LOG_FIELD</id>
+ <enabled>Y</enabled>
+ <name>LOG_FIELD</name>
+ </field>
+ <field>
+ <id>EXECUTING_SERVER</id>
+ <enabled>N</enabled>
+ <name>EXECUTING_SERVER</name>
+ </field>
+ <field>
+ <id>EXECUTING_USER</id>
+ <enabled>N</enabled>
+ <name>EXECUTING_USER</name>
+ </field>
+ <field>
+ <id>CLIENT</id>
+ <enabled>N</enabled>
+ <name>CLIENT</name>
+ </field>
+ </trans-log-table>
+ <perf-log-table>
+ <connection/>
+ <schema/>
+ <table/>
+ <interval/>
+ <timeout_days/>
+ <field>
+ <id>ID_BATCH</id>
+ <enabled>Y</enabled>
+ <name>ID_BATCH</name>
+ </field>
+ <field>
+ <id>SEQ_NR</id>
+ <enabled>Y</enabled>
+ <name>SEQ_NR</name>
+ </field>
+ <field>
+ <id>LOGDATE</id>
+ <enabled>Y</enabled>
+ <name>LOGDATE</name>
+ </field>
+ <field>
+ <id>TRANSNAME</id>
+ <enabled>Y</enabled>
+ <name>TRANSNAME</name>
+ </field>
+ <field>
+ <id>STEPNAME</id>
+ <enabled>Y</enabled>
+ <name>STEPNAME</name>
+ </field>
+ <field>
+ <id>STEP_COPY</id>
+ <enabled>Y</enabled>
+ <name>STEP_COPY</name>
+ </field>
+ <field>
+ <id>LINES_READ</id>
+ <enabled>Y</enabled>
+ <name>LINES_READ</name>
+ </field>
+ <field>
+ <id>LINES_WRITTEN</id>
+ <enabled>Y</enabled>
+ <name>LINES_WRITTEN</name>
+ </field>
+ <field>
+ <id>LINES_UPDATED</id>
+ <enabled>Y</enabled>
+ <name>LINES_UPDATED</name>
+ </field>
+ <field>
+ <id>LINES_INPUT</id>
+ <enabled>Y</enabled>
+ <name>LINES_INPUT</name>
+ </field>
+ <field>
+ <id>LINES_OUTPUT</id>
+ <enabled>Y</enabled>
+ <name>LINES_OUTPUT</name>
+ </field>
+ <field>
+ <id>LINES_REJECTED</id>
+ <enabled>Y</enabled>
+ <name>LINES_REJECTED</name>
+ </field>
+ <field>
+ <id>ERRORS</id>
+ <enabled>Y</enabled>
+ <name>ERRORS</name>
+ </field>
+ <field>
+ <id>INPUT_BUFFER_ROWS</id>
+ <enabled>Y</enabled>
+ <name>INPUT_BUFFER_ROWS</name>
+ </field>
+ <field>
+ <id>OUTPUT_BUFFER_ROWS</id>
+ <enabled>Y</enabled>
+ <name>OUTPUT_BUFFER_ROWS</name>
+ </field>
+ </perf-log-table>
+ <channel-log-table>
+ <connection/>
+ <schema/>
+ <table/>
+ <timeout_days/>
+ <field>
+ <id>ID_BATCH</id>
+ <enabled>Y</enabled>
+ <name>ID_BATCH</name>
+ </field>
+ <field>
+ <id>CHANNEL_ID</id>
+ <enabled>Y</enabled>
+ <name>CHANNEL_ID</name>
+ </field>
+ <field>
+ <id>LOG_DATE</id>
+ <enabled>Y</enabled>
+ <name>LOG_DATE</name>
+ </field>
+ <field>
+ <id>LOGGING_OBJECT_TYPE</id>
+ <enabled>Y</enabled>
+ <name>LOGGING_OBJECT_TYPE</name>
+ </field>
+ <field>
+ <id>OBJECT_NAME</id>
+ <enabled>Y</enabled>
+ <name>OBJECT_NAME</name>
+ </field>
+ <field>
+ <id>OBJECT_COPY</id>
+ <enabled>Y</enabled>
+ <name>OBJECT_COPY</name>
+ </field>
+ <field>
+ <id>REPOSITORY_DIRECTORY</id>
+ <enabled>Y</enabled>
+ <name>REPOSITORY_DIRECTORY</name>
+ </field>
+ <field>
+ <id>FILENAME</id>
+ <enabled>Y</enabled>
+ <name>FILENAME</name>
+ </field>
+ <field>
+ <id>OBJECT_ID</id>
+ <enabled>Y</enabled>
+ <name>OBJECT_ID</name>
+ </field>
+ <field>
+ <id>OBJECT_REVISION</id>
+ <enabled>Y</enabled>
+ <name>OBJECT_REVISION</name>
+ </field>
+ <field>
+ <id>PARENT_CHANNEL_ID</id>
+ <enabled>Y</enabled>
+ <name>PARENT_CHANNEL_ID</name>
+ </field>
+ <field>
+ <id>ROOT_CHANNEL_ID</id>
+ <enabled>Y</enabled>
+ <name>ROOT_CHANNEL_ID</name>
+ </field>
+ </channel-log-table>
+ <step-log-table>
+ <connection/>
+ <schema/>
+ <table/>
+ <timeout_days/>
+ <field>
+ <id>ID_BATCH</id>
+ <enabled>Y</enabled>
+ <name>ID_BATCH</name>
+ </field>
+ <field>
+ <id>CHANNEL_ID</id>
+ <enabled>Y</enabled>
+ <name>CHANNEL_ID</name>
+ </field>
+ <field>
+ <id>LOG_DATE</id>
+ <enabled>Y</enabled>
+ <name>LOG_DATE</name>
+ </field>
+ <field>
+ <id>TRANSNAME</id>
+ <enabled>Y</enabled>
+ <name>TRANSNAME</name>
+ </field>
+ <field>
+ <id>STEPNAME</id>
+ <enabled>Y</enabled>
+ <name>STEPNAME</name>
+ </field>
+ <field>
+ <id>STEP_COPY</id>
+ <enabled>Y</enabled>
+ <name>STEP_COPY</name>
+ </field>
+ <field>
+ <id>LINES_READ</id>
+ <enabled>Y</enabled>
+ <name>LINES_READ</name>
+ </field>
+ <field>
+ <id>LINES_WRITTEN</id>
+ <enabled>Y</enabled>
+ <name>LINES_WRITTEN</name>
+ </field>
+ <field>
+ <id>LINES_UPDATED</id>
+ <enabled>Y</enabled>
+ <name>LINES_UPDATED</name>
+ </field>
+ <field>
+ <id>LINES_INPUT</id>
+ <enabled>Y</enabled>
+ <name>LINES_INPUT</name>
+ </field>
+ <field>
+ <id>LINES_OUTPUT</id>
+ <enabled>Y</enabled>
+ <name>LINES_OUTPUT</name>
+ </field>
+ <field>
+ <id>LINES_REJECTED</id>
+ <enabled>Y</enabled>
+ <name>LINES_REJECTED</name>
+ </field>
+ <field>
+ <id>ERRORS</id>
+ <enabled>Y</enabled>
+ <name>ERRORS</name>
+ </field>
+ <field>
+ <id>LOG_FIELD</id>
+ <enabled>N</enabled>
+ <name>LOG_FIELD</name>
+ </field>
+ </step-log-table>
+ <metrics-log-table>
+ <connection/>
+ <schema/>
+ <table/>
+ <timeout_days/>
+ <field>
+ <id>ID_BATCH</id>
+ <enabled>Y</enabled>
+ <name>ID_BATCH</name>
+ </field>
+ <field>
+ <id>CHANNEL_ID</id>
+ <enabled>Y</enabled>
+ <name>CHANNEL_ID</name>
+ </field>
+ <field>
+ <id>LOG_DATE</id>
+ <enabled>Y</enabled>
+ <name>LOG_DATE</name>
+ </field>
+ <field>
+ <id>METRICS_DATE</id>
+ <enabled>Y</enabled>
+ <name>METRICS_DATE</name>
+ </field>
+ <field>
+ <id>METRICS_CODE</id>
+ <enabled>Y</enabled>
+ <name>METRICS_CODE</name>
+ </field>
+ <field>
+ <id>METRICS_DESCRIPTION</id>
+ <enabled>Y</enabled>
+ <name>METRICS_DESCRIPTION</name>
+ </field>
+ <field>
+ <id>METRICS_SUBJECT</id>
+ <enabled>Y</enabled>
+ <name>METRICS_SUBJECT</name>
+ </field>
+ <field>
+ <id>METRICS_TYPE</id>
+ <enabled>Y</enabled>
+ <name>METRICS_TYPE</name>
+ </field>
+ <field>
+ <id>METRICS_VALUE</id>
+ <enabled>Y</enabled>
+ <name>METRICS_VALUE</name>
+ </field>
+ </metrics-log-table>
+ </log>
+ <maxdate>
+ <connection/>
+ <table/>
+ <field/>
+ <offset>0.0</offset>
+ <maxdiff>0.0</maxdiff>
+ </maxdate>
+ <size_rowset>10000</size_rowset>
+ <sleep_time_empty>50</sleep_time_empty>
+ <sleep_time_full>50</sleep_time_full>
+ <unique_connections>N</unique_connections>
+ <feedback_shown>Y</feedback_shown>
+ <feedback_size>50000</feedback_size>
+ <using_thread_priorities>Y</using_thread_priorities>
+ <shared_objects_file/>
+ <capture_step_performance>N</capture_step_performance>
+ <step_performance_capturing_delay>1000</step_performance_capturing_delay>
+ <step_performance_capturing_size_limit>100</step_performance_capturing_size_limit>
+ <dependencies>
+ </dependencies>
+ <partitionschemas>
+ </partitionschemas>
+ <slaveservers>
+ </slaveservers>
+ <clusterschemas>
+ </clusterschemas>
+ <created_user>-</created_user>
+ <created_date>2024/11/09 08:11:14.886</created_date>
+ <modified_user>-</modified_user>
+ <modified_date>2024/11/09 08:11:14.886</modified_date>
+ <key_for_session_key>H4sIAAAAAAAAAAMAAAAAAAAAAAA=</key_for_session_key>
+ <is_key_private>N</is_key_private>
+ </info>
+ <notepads>
+ </notepads>
+ <connection>
+ <name>erp indoteknik production (localhost)</name>
+ <server>10.148.0.3</server>
+ <type>POSTGRESQL</type>
+ <access>Native</access>
+ <database>erp_indoteknik</database>
+ <port>5432</port>
+ <username>odoo</username>
+ <password>Encrypted 2be98afc82bdfd8dd9a2ca45acc83f6c3</password>
+ <servername/>
+ <data_tablespace/>
+ <index_tablespace/>
+ <attributes>
+ <attribute>
+ <code>FORCE_IDENTIFIERS_TO_LOWERCASE</code>
+ <attribute>N</attribute>
+ </attribute>
+ <attribute>
+ <code>FORCE_IDENTIFIERS_TO_UPPERCASE</code>
+ <attribute>N</attribute>
+ </attribute>
+ <attribute>
+ <code>IS_CLUSTERED</code>
+ <attribute>N</attribute>
+ </attribute>
+ <attribute>
+ <code>PORT_NUMBER</code>
+ <attribute>5432</attribute>
+ </attribute>
+ <attribute>
+ <code>PRESERVE_RESERVED_WORD_CASE</code>
+ <attribute>Y</attribute>
+ </attribute>
+ <attribute>
+ <code>QUOTE_ALL_FIELDS</code>
+ <attribute>N</attribute>
+ </attribute>
+ <attribute>
+ <code>SUPPORTS_BOOLEAN_DATA_TYPE</code>
+ <attribute>Y</attribute>
+ </attribute>
+ <attribute>
+ <code>SUPPORTS_TIMESTAMP_DATA_TYPE</code>
+ <attribute>N</attribute>
+ </attribute>
+ <attribute>
+ <code>USE_POOLING</code>
+ <attribute>N</attribute>
+ </attribute>
+ </attributes>
+ </connection>
+ <order>
+ <hop>
+ <from>sale order</from>
+ <to>so+deliv</to>
+ <enabled>Y</enabled>
+ </hop>
+ <hop>
+ <from>delivered qty</from>
+ <to>so+deliv</to>
+ <enabled>Y</enabled>
+ </hop>
+ <hop>
+ <from>so+deliv</from>
+ <to>so+deliv+reserv</to>
+ <enabled>Y</enabled>
+ </hop>
+ <hop>
+ <from>reserved qty</from>
+ <to>so+deliv+reserv</to>
+ <enabled>Y</enabled>
+ </hop>
+ <hop>
+ <from>so+deliv+reserv</from>
+ <to>so+deliv+reserv+po</to>
+ <enabled>Y</enabled>
+ </hop>
+ <hop>
+ <from>po qty</from>
+ <to>so+deliv+reserv+po</to>
+ <enabled>Y</enabled>
+ </hop>
+ <hop>
+ <from>so+deliv+reserv+po</from>
+ <to>so+deliv+reserv+po+received</to>
+ <enabled>Y</enabled>
+ </hop>
+ <hop>
+ <from>received qty</from>
+ <to>so+deliv+reserv+po+received</to>
+ <enabled>Y</enabled>
+ </hop>
+ <hop>
+ <from>Select values</from>
+ <to>Insert / update</to>
+ <enabled>Y</enabled>
+ </hop>
+ <hop>
+ <from>so+deliv+reserv+po+received</from>
+ <to>Add constants</to>
+ <enabled>Y</enabled>
+ </hop>
+ <hop>
+ <from>Add constants</from>
+ <to>Select values</to>
+ <enabled>Y</enabled>
+ </hop>
+ </order>
+ <step>
+ <name>Insert / update</name>
+ <type>InsertUpdate</type>
+ <description/>
+ <distribute>Y</distribute>
+ <custom_distribution/>
+ <copies>1</copies>
+ <partitioning>
+ <method>none</method>
+ <schema_name/>
+ </partitioning>
+ <connection>erp indoteknik production (localhost)</connection>
+ <commit>100</commit>
+ <update_bypassed>N</update_bypassed>
+ <lookup>
+ <schema>public</schema>
+ <table>sales_order_fulfillment_v2</table>
+ <key>
+ <name>sale_order_line_id</name>
+ <field>sale_order_line_id</field>
+ <condition>=</condition>
+ <name2/>
+ </key>
+ <value>
+ <name>sale_order_id</name>
+ <rename>sale_order_id</rename>
+ <update>Y</update>
+ </value>
+ <value>
+ <name>sale_order_line_id</name>
+ <rename>sale_order_line_id</rename>
+ <update>N</update>
+ </value>
+ <value>
+ <name>product_id</name>
+ <rename>product_id</rename>
+ <update>Y</update>
+ </value>
+ <value>
+ <name>so_qty</name>
+ <rename>so_qty</rename>
+ <update>Y</update>
+ </value>
+ <value>
+ <name>delivered_qty</name>
+ <rename>delivered_qty</rename>
+ <update>Y</update>
+ </value>
+ <value>
+ <name>reserved_stock_qty</name>
+ <rename>reserved_stock_qty</rename>
+ <update>Y</update>
+ </value>
+ <value>
+ <name>po_qty</name>
+ <rename>po_qty</rename>
+ <update>Y</update>
+ </value>
+ <value>
+ <name>received_qty</name>
+ <rename>received_qty</rename>
+ <update>Y</update>
+ </value>
+ <value>
+ <name>create_date</name>
+ <rename>current_date</rename>
+ <update>N</update>
+ </value>
+ <value>
+ <name>write_date</name>
+ <rename>current_date</rename>
+ <update>Y</update>
+ </value>
+ <value>
+ <name>create_uid</name>
+ <rename>created_by_id</rename>
+ <update>Y</update>
+ </value>
+ <value>
+ <name>write_uid</name>
+ <rename>created_by_id</rename>
+ <update>Y</update>
+ </value>
+ </lookup>
+ <attributes/>
+ <cluster_schema/>
+ <remotesteps>
+ <input>
+ </input>
+ <output>
+ </output>
+ </remotesteps>
+ <GUI>
+ <xloc>848</xloc>
+ <yloc>368</yloc>
+ <draw>Y</draw>
+ </GUI>
+ </step>
+ <step>
+ <name>Select values</name>
+ <type>SelectValues</type>
+ <description/>
+ <distribute>Y</distribute>
+ <custom_distribution/>
+ <copies>1</copies>
+ <partitioning>
+ <method>none</method>
+ <schema_name/>
+ </partitioning>
+ <fields>
+ <field>
+ <name>sale_order_id</name>
+ <rename/>
+ </field>
+ <field>
+ <name>sale_order_line_id</name>
+ <rename/>
+ </field>
+ <field>
+ <name>product_id</name>
+ <rename/>
+ </field>
+ <field>
+ <name>so_qty</name>
+ <rename/>
+ </field>
+ <field>
+ <name>current_date</name>
+ <rename/>
+ </field>
+ <field>
+ <name>delivered_qty</name>
+ <rename/>
+ </field>
+ <field>
+ <name>reserved_stock_qty</name>
+ <rename/>
+ </field>
+ <field>
+ <name>po_qty</name>
+ <rename/>
+ </field>
+ <field>
+ <name>received_qty</name>
+ <rename/>
+ </field>
+ <field>
+ <name>created_by_id</name>
+ <rename/>
+ </field>
+ <select_unspecified>N</select_unspecified>
+ </fields>
+ <attributes/>
+ <cluster_schema/>
+ <remotesteps>
+ <input>
+ </input>
+ <output>
+ </output>
+ </remotesteps>
+ <GUI>
+ <xloc>1008</xloc>
+ <yloc>368</yloc>
+ <draw>Y</draw>
+ </GUI>
+ </step>
+ <step>
+ <name>delivered qty</name>
+ <type>TableInput</type>
+ <description/>
+ <distribute>Y</distribute>
+ <custom_distribution/>
+ <copies>1</copies>
+ <partitioning>
+ <method>none</method>
+ <schema_name/>
+ </partitioning>
+ <connection>erp indoteknik production (localhost)</connection>
+ <sql>select sm.sale_line_id as sale_order_line_id, sml.product_id, sum(sml.qty_done) as delivered_qty
+from stock_move_line sml
+join stock_move sm on sm.id = sml.move_id
+join stock_picking sp on sp.id = sm.picking_id
+where 1=1
+and sp.state not in ('cancel')
+and sm.sale_line_id is not null
+and sm.write_date >= (now() - '180 days'::interval)
+group by sm.sale_line_id, sml.product_id
+order by sm.sale_line_id, sml.product_id</sql>
+ <limit>0</limit>
+ <lookup/>
+ <execute_each_row>N</execute_each_row>
+ <variables_active>N</variables_active>
+ <lazy_conversion_active>N</lazy_conversion_active>
+ <cached_row_meta_active>N</cached_row_meta_active>
+ <row-meta>
+ <value-meta>
+ <type>Integer</type>
+ <storagetype>normal</storagetype>
+ <name>sale_order_line_id</name>
+ <length>9</length>
+ <precision>0</precision>
+ <origin>delivered qty</origin>
+ <comments>sale_order_line_id</comments>
+ <conversion_Mask>####0;-####0</conversion_Mask>
+ <decimal_symbol>.</decimal_symbol>
+ <grouping_symbol>,</grouping_symbol>
+ <currency_symbol/>
+ <trim_type>none</trim_type>
+ <case_insensitive>N</case_insensitive>
+ <collator_disabled>Y</collator_disabled>
+ <collator_strength>0</collator_strength>
+ <sort_descending>N</sort_descending>
+ <output_padding>N</output_padding>
+ <date_format_lenient>N</date_format_lenient>
+ <date_format_locale>en_US</date_format_locale>
+ <date_format_timezone>Asia/Bangkok</date_format_timezone>
+ <lenient_string_to_number>N</lenient_string_to_number>
+ </value-meta>
+ <value-meta>
+ <type>Integer</type>
+ <storagetype>normal</storagetype>
+ <name>product_id</name>
+ <length>9</length>
+ <precision>0</precision>
+ <origin>delivered qty</origin>
+ <comments>product_id</comments>
+ <conversion_Mask>####0;-####0</conversion_Mask>
+ <decimal_symbol>.</decimal_symbol>
+ <grouping_symbol>,</grouping_symbol>
+ <currency_symbol/>
+ <trim_type>none</trim_type>
+ <case_insensitive>N</case_insensitive>
+ <collator_disabled>Y</collator_disabled>
+ <collator_strength>0</collator_strength>
+ <sort_descending>N</sort_descending>
+ <output_padding>N</output_padding>
+ <date_format_lenient>N</date_format_lenient>
+ <date_format_locale>en_US</date_format_locale>
+ <date_format_timezone>Asia/Bangkok</date_format_timezone>
+ <lenient_string_to_number>N</lenient_string_to_number>
+ </value-meta>
+ <value-meta>
+ <type>BigNumber</type>
+ <storagetype>normal</storagetype>
+ <name>delivered_qty</name>
+ <length>-1</length>
+ <precision>-1</precision>
+ <origin>delivered qty</origin>
+ <comments>delivered_qty</comments>
+ <conversion_Mask>######0.0###################;-######0.0###################</conversion_Mask>
+ <decimal_symbol>.</decimal_symbol>
+ <grouping_symbol/>
+ <currency_symbol/>
+ <trim_type>none</trim_type>
+ <case_insensitive>N</case_insensitive>
+ <collator_disabled>Y</collator_disabled>
+ <collator_strength>0</collator_strength>
+ <sort_descending>N</sort_descending>
+ <output_padding>N</output_padding>
+ <date_format_lenient>N</date_format_lenient>
+ <date_format_locale>en_US</date_format_locale>
+ <date_format_timezone>Asia/Bangkok</date_format_timezone>
+ <lenient_string_to_number>N</lenient_string_to_number>
+ </value-meta>
+ </row-meta>
+ <attributes/>
+ <cluster_schema/>
+ <remotesteps>
+ <input>
+ </input>
+ <output>
+ </output>
+ </remotesteps>
+ <GUI>
+ <xloc>288</xloc>
+ <yloc>96</yloc>
+ <draw>Y</draw>
+ </GUI>
+ </step>
+ <step>
+ <name>po qty</name>
+ <type>TableInput</type>
+ <description/>
+ <distribute>Y</distribute>
+ <custom_distribution/>
+ <copies>1</copies>
+ <partitioning>
+ <method>none</method>
+ <schema_name/>
+ </partitioning>
+ <connection>erp indoteknik production (localhost)</connection>
+ <sql>select posm.sale_line_id as sale_order_line_id, posm.product_id, sum(posm.qty_po) as po_qty
+from purchase_order_sales_match posm
+join purchase_order po on po.id = posm.purchase_order_id
+where 1=1
+and po.state in ('done', 'purchase')
+and posm.write_date >= (now() - '180 days'::interval)
+group by posm.sale_line_id, posm.product_id
+order by posm.sale_line_id, posm.product_id</sql>
+ <limit>0</limit>
+ <lookup/>
+ <execute_each_row>N</execute_each_row>
+ <variables_active>N</variables_active>
+ <lazy_conversion_active>N</lazy_conversion_active>
+ <cached_row_meta_active>N</cached_row_meta_active>
+ <row-meta>
+ <value-meta>
+ <type>Integer</type>
+ <storagetype>normal</storagetype>
+ <name>sale_order_line_id</name>
+ <length>9</length>
+ <precision>0</precision>
+ <origin>po qty</origin>
+ <comments>sale_order_line_id</comments>
+ <conversion_Mask>####0;-####0</conversion_Mask>
+ <decimal_symbol>.</decimal_symbol>
+ <grouping_symbol>,</grouping_symbol>
+ <currency_symbol/>
+ <trim_type>none</trim_type>
+ <case_insensitive>N</case_insensitive>
+ <collator_disabled>Y</collator_disabled>
+ <collator_strength>0</collator_strength>
+ <sort_descending>N</sort_descending>
+ <output_padding>N</output_padding>
+ <date_format_lenient>N</date_format_lenient>
+ <date_format_locale>en_US</date_format_locale>
+ <date_format_timezone>Asia/Bangkok</date_format_timezone>
+ <lenient_string_to_number>N</lenient_string_to_number>
+ </value-meta>
+ <value-meta>
+ <type>Integer</type>
+ <storagetype>normal</storagetype>
+ <name>product_id</name>
+ <length>9</length>
+ <precision>0</precision>
+ <origin>po qty</origin>
+ <comments>product_id</comments>
+ <conversion_Mask>####0;-####0</conversion_Mask>
+ <decimal_symbol>.</decimal_symbol>
+ <grouping_symbol>,</grouping_symbol>
+ <currency_symbol/>
+ <trim_type>none</trim_type>
+ <case_insensitive>N</case_insensitive>
+ <collator_disabled>Y</collator_disabled>
+ <collator_strength>0</collator_strength>
+ <sort_descending>N</sort_descending>
+ <output_padding>N</output_padding>
+ <date_format_lenient>N</date_format_lenient>
+ <date_format_locale>en_US</date_format_locale>
+ <date_format_timezone>Asia/Bangkok</date_format_timezone>
+ <lenient_string_to_number>N</lenient_string_to_number>
+ </value-meta>
+ <value-meta>
+ <type>Number</type>
+ <storagetype>normal</storagetype>
+ <name>po_qty</name>
+ <length>-1</length>
+ <precision>-1</precision>
+ <origin>po qty</origin>
+ <comments>po_qty</comments>
+ <conversion_Mask>####0.0#########;-####0.0#########</conversion_Mask>
+ <decimal_symbol>.</decimal_symbol>
+ <grouping_symbol>,</grouping_symbol>
+ <currency_symbol/>
+ <trim_type>none</trim_type>
+ <case_insensitive>N</case_insensitive>
+ <collator_disabled>Y</collator_disabled>
+ <collator_strength>0</collator_strength>
+ <sort_descending>N</sort_descending>
+ <output_padding>N</output_padding>
+ <date_format_lenient>N</date_format_lenient>
+ <date_format_locale>en_US</date_format_locale>
+ <date_format_timezone>Asia/Bangkok</date_format_timezone>
+ <lenient_string_to_number>N</lenient_string_to_number>
+ </value-meta>
+ </row-meta>
+ <attributes/>
+ <cluster_schema/>
+ <remotesteps>
+ <input>
+ </input>
+ <output>
+ </output>
+ </remotesteps>
+ <GUI>
+ <xloc>608</xloc>
+ <yloc>96</yloc>
+ <draw>Y</draw>
+ </GUI>
+ </step>
+ <step>
+ <name>received qty</name>
+ <type>TableInput</type>
+ <description/>
+ <distribute>Y</distribute>
+ <custom_distribution/>
+ <copies>1</copies>
+ <partitioning>
+ <method>none</method>
+ <schema_name/>
+ </partitioning>
+ <connection>erp indoteknik production (localhost)</connection>
+ <sql>select posm.sale_line_id as sale_order_line_id, sml.product_id, sum(sml.qty_done) as received_qty
+from purchase_order_sales_match posm
+join purchase_order po on po.id = posm.purchase_order_id
+join purchase_order_line pol on (pol.order_id = po.id and pol.product_id = posm.product_id)
+join stock_move sm on sm.purchase_line_id = pol.id
+join stock_move_line sml on sml.move_id = sm.id
+join stock_picking sp on sp.id = sm.picking_id
+where 1=1
+and po.state in ('done', 'purchase')
+and sp.state not in ('cancel')
+and posm.write_date >= (now() - '180 days'::interval)
+group by posm.sale_line_id, sml.product_id
+order by posm.sale_line_id, sml.product_id</sql>
+ <limit>0</limit>
+ <lookup/>
+ <execute_each_row>N</execute_each_row>
+ <variables_active>N</variables_active>
+ <lazy_conversion_active>N</lazy_conversion_active>
+ <cached_row_meta_active>N</cached_row_meta_active>
+ <row-meta>
+ <value-meta>
+ <type>Integer</type>
+ <storagetype>normal</storagetype>
+ <name>sale_order_line_id</name>
+ <length>9</length>
+ <precision>0</precision>
+ <origin>received qty</origin>
+ <comments>sale_order_line_id</comments>
+ <conversion_Mask>####0;-####0</conversion_Mask>
+ <decimal_symbol>.</decimal_symbol>
+ <grouping_symbol>,</grouping_symbol>
+ <currency_symbol/>
+ <trim_type>none</trim_type>
+ <case_insensitive>N</case_insensitive>
+ <collator_disabled>Y</collator_disabled>
+ <collator_strength>0</collator_strength>
+ <sort_descending>N</sort_descending>
+ <output_padding>N</output_padding>
+ <date_format_lenient>N</date_format_lenient>
+ <date_format_locale>en_US</date_format_locale>
+ <date_format_timezone>Asia/Bangkok</date_format_timezone>
+ <lenient_string_to_number>N</lenient_string_to_number>
+ </value-meta>
+ <value-meta>
+ <type>Integer</type>
+ <storagetype>normal</storagetype>
+ <name>product_id</name>
+ <length>9</length>
+ <precision>0</precision>
+ <origin>received qty</origin>
+ <comments>product_id</comments>
+ <conversion_Mask>####0;-####0</conversion_Mask>
+ <decimal_symbol>.</decimal_symbol>
+ <grouping_symbol>,</grouping_symbol>
+ <currency_symbol/>
+ <trim_type>none</trim_type>
+ <case_insensitive>N</case_insensitive>
+ <collator_disabled>Y</collator_disabled>
+ <collator_strength>0</collator_strength>
+ <sort_descending>N</sort_descending>
+ <output_padding>N</output_padding>
+ <date_format_lenient>N</date_format_lenient>
+ <date_format_locale>en_US</date_format_locale>
+ <date_format_timezone>Asia/Bangkok</date_format_timezone>
+ <lenient_string_to_number>N</lenient_string_to_number>
+ </value-meta>
+ <value-meta>
+ <type>BigNumber</type>
+ <storagetype>normal</storagetype>
+ <name>received_qty</name>
+ <length>-1</length>
+ <precision>-1</precision>
+ <origin>received qty</origin>
+ <comments>received_qty</comments>
+ <conversion_Mask>######0.0###################;-######0.0###################</conversion_Mask>
+ <decimal_symbol>.</decimal_symbol>
+ <grouping_symbol/>
+ <currency_symbol/>
+ <trim_type>none</trim_type>
+ <case_insensitive>N</case_insensitive>
+ <collator_disabled>Y</collator_disabled>
+ <collator_strength>0</collator_strength>
+ <sort_descending>N</sort_descending>
+ <output_padding>N</output_padding>
+ <date_format_lenient>N</date_format_lenient>
+ <date_format_locale>en_US</date_format_locale>
+ <date_format_timezone>Asia/Bangkok</date_format_timezone>
+ <lenient_string_to_number>N</lenient_string_to_number>
+ </value-meta>
+ </row-meta>
+ <attributes/>
+ <cluster_schema/>
+ <remotesteps>
+ <input>
+ </input>
+ <output>
+ </output>
+ </remotesteps>
+ <GUI>
+ <xloc>800</xloc>
+ <yloc>96</yloc>
+ <draw>Y</draw>
+ </GUI>
+ </step>
+ <step>
+ <name>reserved qty</name>
+ <type>TableInput</type>
+ <description/>
+ <distribute>Y</distribute>
+ <custom_distribution/>
+ <copies>1</copies>
+ <partitioning>
+ <method>none</method>
+ <schema_name/>
+ </partitioning>
+ <connection>erp indoteknik production (localhost)</connection>
+ <sql>select sm.sale_line_id as sale_order_line_id, sml.product_id, sum(sml.product_uom_qty) as reserved_stock_qty
+from stock_move_line sml
+join stock_move sm on sm.id = sml.move_id
+join stock_picking sp on sp.id = sm.picking_id
+where 1=1
+and sp.state not in ('cancel')
+and sm.sale_line_id is not null
+and sm.write_date >= (now() - '180 days'::interval)
+group by sm.sale_line_id, sml.product_id
+order by sm.sale_line_id, sml.product_id</sql>
+ <limit>0</limit>
+ <lookup/>
+ <execute_each_row>N</execute_each_row>
+ <variables_active>N</variables_active>
+ <lazy_conversion_active>N</lazy_conversion_active>
+ <cached_row_meta_active>N</cached_row_meta_active>
+ <row-meta>
+ <value-meta>
+ <type>Integer</type>
+ <storagetype>normal</storagetype>
+ <name>sale_order_line_id</name>
+ <length>9</length>
+ <precision>0</precision>
+ <origin>reserved qty</origin>
+ <comments>sale_order_line_id</comments>
+ <conversion_Mask>####0;-####0</conversion_Mask>
+ <decimal_symbol>.</decimal_symbol>
+ <grouping_symbol>,</grouping_symbol>
+ <currency_symbol/>
+ <trim_type>none</trim_type>
+ <case_insensitive>N</case_insensitive>
+ <collator_disabled>Y</collator_disabled>
+ <collator_strength>0</collator_strength>
+ <sort_descending>N</sort_descending>
+ <output_padding>N</output_padding>
+ <date_format_lenient>N</date_format_lenient>
+ <date_format_locale>en_US</date_format_locale>
+ <date_format_timezone>Asia/Bangkok</date_format_timezone>
+ <lenient_string_to_number>N</lenient_string_to_number>
+ </value-meta>
+ <value-meta>
+ <type>Integer</type>
+ <storagetype>normal</storagetype>
+ <name>product_id</name>
+ <length>9</length>
+ <precision>0</precision>
+ <origin>reserved qty</origin>
+ <comments>product_id</comments>
+ <conversion_Mask>####0;-####0</conversion_Mask>
+ <decimal_symbol>.</decimal_symbol>
+ <grouping_symbol>,</grouping_symbol>
+ <currency_symbol/>
+ <trim_type>none</trim_type>
+ <case_insensitive>N</case_insensitive>
+ <collator_disabled>Y</collator_disabled>
+ <collator_strength>0</collator_strength>
+ <sort_descending>N</sort_descending>
+ <output_padding>N</output_padding>
+ <date_format_lenient>N</date_format_lenient>
+ <date_format_locale>en_US</date_format_locale>
+ <date_format_timezone>Asia/Bangkok</date_format_timezone>
+ <lenient_string_to_number>N</lenient_string_to_number>
+ </value-meta>
+ <value-meta>
+ <type>BigNumber</type>
+ <storagetype>normal</storagetype>
+ <name>reserved_stock_qty</name>
+ <length>-1</length>
+ <precision>-1</precision>
+ <origin>reserved qty</origin>
+ <comments>reserved_stock_qty</comments>
+ <conversion_Mask>######0.0###################;-######0.0###################</conversion_Mask>
+ <decimal_symbol>.</decimal_symbol>
+ <grouping_symbol/>
+ <currency_symbol/>
+ <trim_type>none</trim_type>
+ <case_insensitive>N</case_insensitive>
+ <collator_disabled>Y</collator_disabled>
+ <collator_strength>0</collator_strength>
+ <sort_descending>N</sort_descending>
+ <output_padding>N</output_padding>
+ <date_format_lenient>N</date_format_lenient>
+ <date_format_locale>en_US</date_format_locale>
+ <date_format_timezone>Asia/Bangkok</date_format_timezone>
+ <lenient_string_to_number>N</lenient_string_to_number>
+ </value-meta>
+ </row-meta>
+ <attributes/>
+ <cluster_schema/>
+ <remotesteps>
+ <input>
+ </input>
+ <output>
+ </output>
+ </remotesteps>
+ <GUI>
+ <xloc>448</xloc>
+ <yloc>96</yloc>
+ <draw>Y</draw>
+ </GUI>
+ </step>
+ <step>
+ <name>sale order</name>
+ <type>TableInput</type>
+ <description/>
+ <distribute>Y</distribute>
+ <custom_distribution/>
+ <copies>1</copies>
+ <partitioning>
+ <method>none</method>
+ <schema_name/>
+ </partitioning>
+ <connection>erp indoteknik production (localhost)</connection>
+ <sql>select so.id as sale_order_id, sol.id as sale_order_line_id,
+sol.product_id as product_id, sol.product_uom_qty as so_qty,
+now()::timestamp as current_date
+from sale_order_line sol
+join sale_order so on so.id = sol.order_id
+join product_product pp on pp.id = sol.product_id
+where 1=1
+and so.state in ('sale', 'done')
+and sol.product_uom_qty &lt;&gt; sol.qty_delivered
+and sol.write_date >= (now() - '180 days'::interval)
+order by sol.id, sol.product_id</sql>
+ <limit>0</limit>
+ <lookup/>
+ <execute_each_row>N</execute_each_row>
+ <variables_active>N</variables_active>
+ <lazy_conversion_active>N</lazy_conversion_active>
+ <cached_row_meta_active>N</cached_row_meta_active>
+ <row-meta>
+ <value-meta>
+ <type>Integer</type>
+ <storagetype>normal</storagetype>
+ <name>sale_order_id</name>
+ <length>9</length>
+ <precision>0</precision>
+ <origin>sale order</origin>
+ <comments>sale_order_id</comments>
+ <conversion_Mask>####0;-####0</conversion_Mask>
+ <decimal_symbol>.</decimal_symbol>
+ <grouping_symbol>,</grouping_symbol>
+ <currency_symbol/>
+ <trim_type>none</trim_type>
+ <case_insensitive>N</case_insensitive>
+ <collator_disabled>Y</collator_disabled>
+ <collator_strength>0</collator_strength>
+ <sort_descending>N</sort_descending>
+ <output_padding>N</output_padding>
+ <date_format_lenient>N</date_format_lenient>
+ <date_format_locale>en_US</date_format_locale>
+ <date_format_timezone>Asia/Bangkok</date_format_timezone>
+ <lenient_string_to_number>N</lenient_string_to_number>
+ </value-meta>
+ <value-meta>
+ <type>Integer</type>
+ <storagetype>normal</storagetype>
+ <name>sale_order_line_id</name>
+ <length>9</length>
+ <precision>0</precision>
+ <origin>sale order</origin>
+ <comments>sale_order_line_id</comments>
+ <conversion_Mask>####0;-####0</conversion_Mask>
+ <decimal_symbol>.</decimal_symbol>
+ <grouping_symbol>,</grouping_symbol>
+ <currency_symbol/>
+ <trim_type>none</trim_type>
+ <case_insensitive>N</case_insensitive>
+ <collator_disabled>Y</collator_disabled>
+ <collator_strength>0</collator_strength>
+ <sort_descending>N</sort_descending>
+ <output_padding>N</output_padding>
+ <date_format_lenient>N</date_format_lenient>
+ <date_format_locale>en_US</date_format_locale>
+ <date_format_timezone>Asia/Bangkok</date_format_timezone>
+ <lenient_string_to_number>N</lenient_string_to_number>
+ </value-meta>
+ <value-meta>
+ <type>Integer</type>
+ <storagetype>normal</storagetype>
+ <name>product_id</name>
+ <length>9</length>
+ <precision>0</precision>
+ <origin>sale order</origin>
+ <comments>product_id</comments>
+ <conversion_Mask>####0;-####0</conversion_Mask>
+ <decimal_symbol>.</decimal_symbol>
+ <grouping_symbol>,</grouping_symbol>
+ <currency_symbol/>
+ <trim_type>none</trim_type>
+ <case_insensitive>N</case_insensitive>
+ <collator_disabled>Y</collator_disabled>
+ <collator_strength>0</collator_strength>
+ <sort_descending>N</sort_descending>
+ <output_padding>N</output_padding>
+ <date_format_lenient>N</date_format_lenient>
+ <date_format_locale>en_US</date_format_locale>
+ <date_format_timezone>Asia/Bangkok</date_format_timezone>
+ <lenient_string_to_number>N</lenient_string_to_number>
+ </value-meta>
+ <value-meta>
+ <type>BigNumber</type>
+ <storagetype>normal</storagetype>
+ <name>so_qty</name>
+ <length>-1</length>
+ <precision>-1</precision>
+ <origin>sale order</origin>
+ <comments>so_qty</comments>
+ <conversion_Mask>######0.0###################;-######0.0###################</conversion_Mask>
+ <decimal_symbol>.</decimal_symbol>
+ <grouping_symbol/>
+ <currency_symbol/>
+ <trim_type>none</trim_type>
+ <case_insensitive>N</case_insensitive>
+ <collator_disabled>Y</collator_disabled>
+ <collator_strength>0</collator_strength>
+ <sort_descending>N</sort_descending>
+ <output_padding>N</output_padding>
+ <date_format_lenient>N</date_format_lenient>
+ <date_format_locale>en_US</date_format_locale>
+ <date_format_timezone>Asia/Bangkok</date_format_timezone>
+ <lenient_string_to_number>N</lenient_string_to_number>
+ </value-meta>
+ <value-meta>
+ <type>Timestamp</type>
+ <storagetype>normal</storagetype>
+ <name>current_date</name>
+ <length>6</length>
+ <precision>-1</precision>
+ <origin>sale order</origin>
+ <comments>current_date</comments>
+ <conversion_Mask/>
+ <decimal_symbol>.</decimal_symbol>
+ <grouping_symbol>,</grouping_symbol>
+ <currency_symbol/>
+ <trim_type>none</trim_type>
+ <case_insensitive>N</case_insensitive>
+ <collator_disabled>Y</collator_disabled>
+ <collator_strength>0</collator_strength>
+ <sort_descending>N</sort_descending>
+ <output_padding>N</output_padding>
+ <date_format_lenient>N</date_format_lenient>
+ <date_format_locale>en_US</date_format_locale>
+ <date_format_timezone>Asia/Bangkok</date_format_timezone>
+ <lenient_string_to_number>N</lenient_string_to_number>
+ </value-meta>
+ </row-meta>
+ <attributes/>
+ <cluster_schema/>
+ <remotesteps>
+ <input>
+ </input>
+ <output>
+ </output>
+ </remotesteps>
+ <GUI>
+ <xloc>144</xloc>
+ <yloc>224</yloc>
+ <draw>Y</draw>
+ </GUI>
+ </step>
+ <step>
+ <name>so+deliv</name>
+ <type>MergeJoin</type>
+ <description/>
+ <distribute>Y</distribute>
+ <custom_distribution/>
+ <copies>1</copies>
+ <partitioning>
+ <method>none</method>
+ <schema_name/>
+ </partitioning>
+ <join_type>LEFT OUTER</join_type>
+ <step1>sale order</step1>
+ <step2>delivered qty</step2>
+ <keys_1>
+ <key>sale_order_line_id</key>
+ </keys_1>
+ <keys_2>
+ <key>sale_order_line_id</key>
+ </keys_2>
+ <attributes/>
+ <cluster_schema/>
+ <remotesteps>
+ <input>
+ </input>
+ <output>
+ </output>
+ </remotesteps>
+ <GUI>
+ <xloc>288</xloc>
+ <yloc>224</yloc>
+ <draw>Y</draw>
+ </GUI>
+ </step>
+ <step>
+ <name>so+deliv+reserv</name>
+ <type>MergeJoin</type>
+ <description/>
+ <distribute>Y</distribute>
+ <custom_distribution/>
+ <copies>1</copies>
+ <partitioning>
+ <method>none</method>
+ <schema_name/>
+ </partitioning>
+ <join_type>LEFT OUTER</join_type>
+ <step1>so+deliv</step1>
+ <step2>reserved qty</step2>
+ <keys_1>
+ <key>sale_order_line_id</key>
+ </keys_1>
+ <keys_2>
+ <key>sale_order_line_id</key>
+ </keys_2>
+ <attributes/>
+ <cluster_schema/>
+ <remotesteps>
+ <input>
+ </input>
+ <output>
+ </output>
+ </remotesteps>
+ <GUI>
+ <xloc>448</xloc>
+ <yloc>224</yloc>
+ <draw>Y</draw>
+ </GUI>
+ </step>
+ <step>
+ <name>so+deliv+reserv+po</name>
+ <type>MergeJoin</type>
+ <description/>
+ <distribute>Y</distribute>
+ <custom_distribution/>
+ <copies>1</copies>
+ <partitioning>
+ <method>none</method>
+ <schema_name/>
+ </partitioning>
+ <join_type>LEFT OUTER</join_type>
+ <step1>so+deliv+reserv</step1>
+ <step2>po qty</step2>
+ <keys_1>
+ <key>sale_order_line_id</key>
+ </keys_1>
+ <keys_2>
+ <key>sale_order_line_id</key>
+ </keys_2>
+ <attributes/>
+ <cluster_schema/>
+ <remotesteps>
+ <input>
+ </input>
+ <output>
+ </output>
+ </remotesteps>
+ <GUI>
+ <xloc>608</xloc>
+ <yloc>224</yloc>
+ <draw>Y</draw>
+ </GUI>
+ </step>
+ <step>
+ <name>so+deliv+reserv+po+received</name>
+ <type>MergeJoin</type>
+ <description/>
+ <distribute>Y</distribute>
+ <custom_distribution/>
+ <copies>1</copies>
+ <partitioning>
+ <method>none</method>
+ <schema_name/>
+ </partitioning>
+ <join_type>LEFT OUTER</join_type>
+ <step1>so+deliv+reserv+po</step1>
+ <step2>received qty</step2>
+ <keys_1>
+ <key>sale_order_line_id</key>
+ </keys_1>
+ <keys_2>
+ <key>sale_order_line_id</key>
+ </keys_2>
+ <attributes/>
+ <cluster_schema/>
+ <remotesteps>
+ <input>
+ </input>
+ <output>
+ </output>
+ </remotesteps>
+ <GUI>
+ <xloc>800</xloc>
+ <yloc>224</yloc>
+ <draw>Y</draw>
+ </GUI>
+ </step>
+ <step>
+ <name>Add constants</name>
+ <type>Constant</type>
+ <description/>
+ <distribute>Y</distribute>
+ <custom_distribution/>
+ <copies>1</copies>
+ <partitioning>
+ <method>none</method>
+ <schema_name/>
+ </partitioning>
+ <fields>
+ <field>
+ <name>created_by_id</name>
+ <type>Integer</type>
+ <format/>
+ <currency/>
+ <decimal/>
+ <group/>
+ <nullif>1</nullif>
+ <length>-1</length>
+ <precision>-1</precision>
+ <set_empty_string>N</set_empty_string>
+ </field>
+ </fields>
+ <attributes/>
+ <cluster_schema/>
+ <remotesteps>
+ <input>
+ </input>
+ <output>
+ </output>
+ </remotesteps>
+ <GUI>
+ <xloc>1008</xloc>
+ <yloc>224</yloc>
+ <draw>Y</draw>
+ </GUI>
+ </step>
+ <step_error_handling>
+ </step_error_handling>
+ <slave-step-copy-partition-distribution>
+ </slave-step-copy-partition-distribution>
+ <slave_transformation>N</slave_transformation>
+ <attributes/>
+</transformation>
diff --git a/collect_fulfillment_po.ktr b/collect_fulfillment_po.ktr
new file mode 100644
index 0000000..6683ec9
--- /dev/null
+++ b/collect_fulfillment_po.ktr
@@ -0,0 +1,888 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<transformation>
+ <info>
+ <name>collect_fulfillment_po</name>
+ <description/>
+ <extended_description/>
+ <trans_version/>
+ <trans_type>Normal</trans_type>
+ <directory>/</directory>
+ <parameters>
+ </parameters>
+ <log>
+ <trans-log-table>
+ <connection/>
+ <schema/>
+ <table/>
+ <size_limit_lines/>
+ <interval/>
+ <timeout_days/>
+ <field>
+ <id>ID_BATCH</id>
+ <enabled>Y</enabled>
+ <name>ID_BATCH</name>
+ </field>
+ <field>
+ <id>CHANNEL_ID</id>
+ <enabled>Y</enabled>
+ <name>CHANNEL_ID</name>
+ </field>
+ <field>
+ <id>TRANSNAME</id>
+ <enabled>Y</enabled>
+ <name>TRANSNAME</name>
+ </field>
+ <field>
+ <id>STATUS</id>
+ <enabled>Y</enabled>
+ <name>STATUS</name>
+ </field>
+ <field>
+ <id>LINES_READ</id>
+ <enabled>Y</enabled>
+ <name>LINES_READ</name>
+ <subject/>
+ </field>
+ <field>
+ <id>LINES_WRITTEN</id>
+ <enabled>Y</enabled>
+ <name>LINES_WRITTEN</name>
+ <subject/>
+ </field>
+ <field>
+ <id>LINES_UPDATED</id>
+ <enabled>Y</enabled>
+ <name>LINES_UPDATED</name>
+ <subject/>
+ </field>
+ <field>
+ <id>LINES_INPUT</id>
+ <enabled>Y</enabled>
+ <name>LINES_INPUT</name>
+ <subject/>
+ </field>
+ <field>
+ <id>LINES_OUTPUT</id>
+ <enabled>Y</enabled>
+ <name>LINES_OUTPUT</name>
+ <subject/>
+ </field>
+ <field>
+ <id>LINES_REJECTED</id>
+ <enabled>Y</enabled>
+ <name>LINES_REJECTED</name>
+ <subject/>
+ </field>
+ <field>
+ <id>ERRORS</id>
+ <enabled>Y</enabled>
+ <name>ERRORS</name>
+ </field>
+ <field>
+ <id>STARTDATE</id>
+ <enabled>Y</enabled>
+ <name>STARTDATE</name>
+ </field>
+ <field>
+ <id>ENDDATE</id>
+ <enabled>Y</enabled>
+ <name>ENDDATE</name>
+ </field>
+ <field>
+ <id>LOGDATE</id>
+ <enabled>Y</enabled>
+ <name>LOGDATE</name>
+ </field>
+ <field>
+ <id>DEPDATE</id>
+ <enabled>Y</enabled>
+ <name>DEPDATE</name>
+ </field>
+ <field>
+ <id>REPLAYDATE</id>
+ <enabled>Y</enabled>
+ <name>REPLAYDATE</name>
+ </field>
+ <field>
+ <id>LOG_FIELD</id>
+ <enabled>Y</enabled>
+ <name>LOG_FIELD</name>
+ </field>
+ <field>
+ <id>EXECUTING_SERVER</id>
+ <enabled>N</enabled>
+ <name>EXECUTING_SERVER</name>
+ </field>
+ <field>
+ <id>EXECUTING_USER</id>
+ <enabled>N</enabled>
+ <name>EXECUTING_USER</name>
+ </field>
+ <field>
+ <id>CLIENT</id>
+ <enabled>N</enabled>
+ <name>CLIENT</name>
+ </field>
+ </trans-log-table>
+ <perf-log-table>
+ <connection/>
+ <schema/>
+ <table/>
+ <interval/>
+ <timeout_days/>
+ <field>
+ <id>ID_BATCH</id>
+ <enabled>Y</enabled>
+ <name>ID_BATCH</name>
+ </field>
+ <field>
+ <id>SEQ_NR</id>
+ <enabled>Y</enabled>
+ <name>SEQ_NR</name>
+ </field>
+ <field>
+ <id>LOGDATE</id>
+ <enabled>Y</enabled>
+ <name>LOGDATE</name>
+ </field>
+ <field>
+ <id>TRANSNAME</id>
+ <enabled>Y</enabled>
+ <name>TRANSNAME</name>
+ </field>
+ <field>
+ <id>STEPNAME</id>
+ <enabled>Y</enabled>
+ <name>STEPNAME</name>
+ </field>
+ <field>
+ <id>STEP_COPY</id>
+ <enabled>Y</enabled>
+ <name>STEP_COPY</name>
+ </field>
+ <field>
+ <id>LINES_READ</id>
+ <enabled>Y</enabled>
+ <name>LINES_READ</name>
+ </field>
+ <field>
+ <id>LINES_WRITTEN</id>
+ <enabled>Y</enabled>
+ <name>LINES_WRITTEN</name>
+ </field>
+ <field>
+ <id>LINES_UPDATED</id>
+ <enabled>Y</enabled>
+ <name>LINES_UPDATED</name>
+ </field>
+ <field>
+ <id>LINES_INPUT</id>
+ <enabled>Y</enabled>
+ <name>LINES_INPUT</name>
+ </field>
+ <field>
+ <id>LINES_OUTPUT</id>
+ <enabled>Y</enabled>
+ <name>LINES_OUTPUT</name>
+ </field>
+ <field>
+ <id>LINES_REJECTED</id>
+ <enabled>Y</enabled>
+ <name>LINES_REJECTED</name>
+ </field>
+ <field>
+ <id>ERRORS</id>
+ <enabled>Y</enabled>
+ <name>ERRORS</name>
+ </field>
+ <field>
+ <id>INPUT_BUFFER_ROWS</id>
+ <enabled>Y</enabled>
+ <name>INPUT_BUFFER_ROWS</name>
+ </field>
+ <field>
+ <id>OUTPUT_BUFFER_ROWS</id>
+ <enabled>Y</enabled>
+ <name>OUTPUT_BUFFER_ROWS</name>
+ </field>
+ </perf-log-table>
+ <channel-log-table>
+ <connection/>
+ <schema/>
+ <table/>
+ <timeout_days/>
+ <field>
+ <id>ID_BATCH</id>
+ <enabled>Y</enabled>
+ <name>ID_BATCH</name>
+ </field>
+ <field>
+ <id>CHANNEL_ID</id>
+ <enabled>Y</enabled>
+ <name>CHANNEL_ID</name>
+ </field>
+ <field>
+ <id>LOG_DATE</id>
+ <enabled>Y</enabled>
+ <name>LOG_DATE</name>
+ </field>
+ <field>
+ <id>LOGGING_OBJECT_TYPE</id>
+ <enabled>Y</enabled>
+ <name>LOGGING_OBJECT_TYPE</name>
+ </field>
+ <field>
+ <id>OBJECT_NAME</id>
+ <enabled>Y</enabled>
+ <name>OBJECT_NAME</name>
+ </field>
+ <field>
+ <id>OBJECT_COPY</id>
+ <enabled>Y</enabled>
+ <name>OBJECT_COPY</name>
+ </field>
+ <field>
+ <id>REPOSITORY_DIRECTORY</id>
+ <enabled>Y</enabled>
+ <name>REPOSITORY_DIRECTORY</name>
+ </field>
+ <field>
+ <id>FILENAME</id>
+ <enabled>Y</enabled>
+ <name>FILENAME</name>
+ </field>
+ <field>
+ <id>OBJECT_ID</id>
+ <enabled>Y</enabled>
+ <name>OBJECT_ID</name>
+ </field>
+ <field>
+ <id>OBJECT_REVISION</id>
+ <enabled>Y</enabled>
+ <name>OBJECT_REVISION</name>
+ </field>
+ <field>
+ <id>PARENT_CHANNEL_ID</id>
+ <enabled>Y</enabled>
+ <name>PARENT_CHANNEL_ID</name>
+ </field>
+ <field>
+ <id>ROOT_CHANNEL_ID</id>
+ <enabled>Y</enabled>
+ <name>ROOT_CHANNEL_ID</name>
+ </field>
+ </channel-log-table>
+ <step-log-table>
+ <connection/>
+ <schema/>
+ <table/>
+ <timeout_days/>
+ <field>
+ <id>ID_BATCH</id>
+ <enabled>Y</enabled>
+ <name>ID_BATCH</name>
+ </field>
+ <field>
+ <id>CHANNEL_ID</id>
+ <enabled>Y</enabled>
+ <name>CHANNEL_ID</name>
+ </field>
+ <field>
+ <id>LOG_DATE</id>
+ <enabled>Y</enabled>
+ <name>LOG_DATE</name>
+ </field>
+ <field>
+ <id>TRANSNAME</id>
+ <enabled>Y</enabled>
+ <name>TRANSNAME</name>
+ </field>
+ <field>
+ <id>STEPNAME</id>
+ <enabled>Y</enabled>
+ <name>STEPNAME</name>
+ </field>
+ <field>
+ <id>STEP_COPY</id>
+ <enabled>Y</enabled>
+ <name>STEP_COPY</name>
+ </field>
+ <field>
+ <id>LINES_READ</id>
+ <enabled>Y</enabled>
+ <name>LINES_READ</name>
+ </field>
+ <field>
+ <id>LINES_WRITTEN</id>
+ <enabled>Y</enabled>
+ <name>LINES_WRITTEN</name>
+ </field>
+ <field>
+ <id>LINES_UPDATED</id>
+ <enabled>Y</enabled>
+ <name>LINES_UPDATED</name>
+ </field>
+ <field>
+ <id>LINES_INPUT</id>
+ <enabled>Y</enabled>
+ <name>LINES_INPUT</name>
+ </field>
+ <field>
+ <id>LINES_OUTPUT</id>
+ <enabled>Y</enabled>
+ <name>LINES_OUTPUT</name>
+ </field>
+ <field>
+ <id>LINES_REJECTED</id>
+ <enabled>Y</enabled>
+ <name>LINES_REJECTED</name>
+ </field>
+ <field>
+ <id>ERRORS</id>
+ <enabled>Y</enabled>
+ <name>ERRORS</name>
+ </field>
+ <field>
+ <id>LOG_FIELD</id>
+ <enabled>N</enabled>
+ <name>LOG_FIELD</name>
+ </field>
+ </step-log-table>
+ <metrics-log-table>
+ <connection/>
+ <schema/>
+ <table/>
+ <timeout_days/>
+ <field>
+ <id>ID_BATCH</id>
+ <enabled>Y</enabled>
+ <name>ID_BATCH</name>
+ </field>
+ <field>
+ <id>CHANNEL_ID</id>
+ <enabled>Y</enabled>
+ <name>CHANNEL_ID</name>
+ </field>
+ <field>
+ <id>LOG_DATE</id>
+ <enabled>Y</enabled>
+ <name>LOG_DATE</name>
+ </field>
+ <field>
+ <id>METRICS_DATE</id>
+ <enabled>Y</enabled>
+ <name>METRICS_DATE</name>
+ </field>
+ <field>
+ <id>METRICS_CODE</id>
+ <enabled>Y</enabled>
+ <name>METRICS_CODE</name>
+ </field>
+ <field>
+ <id>METRICS_DESCRIPTION</id>
+ <enabled>Y</enabled>
+ <name>METRICS_DESCRIPTION</name>
+ </field>
+ <field>
+ <id>METRICS_SUBJECT</id>
+ <enabled>Y</enabled>
+ <name>METRICS_SUBJECT</name>
+ </field>
+ <field>
+ <id>METRICS_TYPE</id>
+ <enabled>Y</enabled>
+ <name>METRICS_TYPE</name>
+ </field>
+ <field>
+ <id>METRICS_VALUE</id>
+ <enabled>Y</enabled>
+ <name>METRICS_VALUE</name>
+ </field>
+ </metrics-log-table>
+ </log>
+ <maxdate>
+ <connection/>
+ <table/>
+ <field/>
+ <offset>0.0</offset>
+ <maxdiff>0.0</maxdiff>
+ </maxdate>
+ <size_rowset>10000</size_rowset>
+ <sleep_time_empty>50</sleep_time_empty>
+ <sleep_time_full>50</sleep_time_full>
+ <unique_connections>N</unique_connections>
+ <feedback_shown>Y</feedback_shown>
+ <feedback_size>50000</feedback_size>
+ <using_thread_priorities>Y</using_thread_priorities>
+ <shared_objects_file/>
+ <capture_step_performance>N</capture_step_performance>
+ <step_performance_capturing_delay>1000</step_performance_capturing_delay>
+ <step_performance_capturing_size_limit>100</step_performance_capturing_size_limit>
+ <dependencies>
+ </dependencies>
+ <partitionschemas>
+ </partitionschemas>
+ <slaveservers>
+ </slaveservers>
+ <clusterschemas>
+ </clusterschemas>
+ <created_user>-</created_user>
+ <created_date>2024/11/13 08:53:00.392</created_date>
+ <modified_user>-</modified_user>
+ <modified_date>2024/11/13 08:53:00.392</modified_date>
+ <key_for_session_key/>
+ <is_key_private>N</is_key_private>
+ </info>
+ <notepads>
+ </notepads>
+ <connection>
+ <name>erp indoteknik production (localhost)</name>
+ <server>10.148.0.3</server>
+ <type>POSTGRESQL</type>
+ <access>Native</access>
+ <database>erp_indoteknik</database>
+ <port>5432</port>
+ <username>odoo</username>
+ <password>Encrypted 2be98afc82bdfd8dd9a2ca45acc83f6c3</password>
+ <servername/>
+ <data_tablespace/>
+ <index_tablespace/>
+ <attributes>
+ <attribute>
+ <code>FORCE_IDENTIFIERS_TO_LOWERCASE</code>
+ <attribute>N</attribute>
+ </attribute>
+ <attribute>
+ <code>FORCE_IDENTIFIERS_TO_UPPERCASE</code>
+ <attribute>N</attribute>
+ </attribute>
+ <attribute>
+ <code>IS_CLUSTERED</code>
+ <attribute>N</attribute>
+ </attribute>
+ <attribute>
+ <code>PORT_NUMBER</code>
+ <attribute>5432</attribute>
+ </attribute>
+ <attribute>
+ <code>PRESERVE_RESERVED_WORD_CASE</code>
+ <attribute>Y</attribute>
+ </attribute>
+ <attribute>
+ <code>QUOTE_ALL_FIELDS</code>
+ <attribute>N</attribute>
+ </attribute>
+ <attribute>
+ <code>SUPPORTS_BOOLEAN_DATA_TYPE</code>
+ <attribute>Y</attribute>
+ </attribute>
+ <attribute>
+ <code>SUPPORTS_TIMESTAMP_DATA_TYPE</code>
+ <attribute>N</attribute>
+ </attribute>
+ <attribute>
+ <code>USE_POOLING</code>
+ <attribute>N</attribute>
+ </attribute>
+ </attributes>
+ </connection>
+ <order>
+ <hop>
+ <from>match po so</from>
+ <to>match po so with fulfillment</to>
+ <enabled>Y</enabled>
+ </hop>
+ <hop>
+ <from>fulfillment</from>
+ <to>match po so with fulfillment</to>
+ <enabled>Y</enabled>
+ </hop>
+ <hop>
+ <from>match po so with fulfillment</from>
+ <to>Filter fulfillment is not null</to>
+ <enabled>Y</enabled>
+ </hop>
+ <hop>
+ <from>Filter fulfillment is not null</from>
+ <to>Select values</to>
+ <enabled>Y</enabled>
+ </hop>
+ <hop>
+ <from>Filter fulfillment is not null</from>
+ <to>log fulfillment null</to>
+ <enabled>Y</enabled>
+ </hop>
+ <hop>
+ <from>Select values</from>
+ <to>Insert / update</to>
+ <enabled>Y</enabled>
+ </hop>
+ </order>
+ <step>
+ <name>fulfillment</name>
+ <type>TableInput</type>
+ <description/>
+ <distribute>Y</distribute>
+ <custom_distribution/>
+ <copies>1</copies>
+ <partitioning>
+ <method>none</method>
+ <schema_name/>
+ </partitioning>
+ <connection>erp indoteknik production (localhost)</connection>
+ <sql>select id as fulfillment_id, sale_order_line_id
+from sales_order_fulfillment_v2
+where 1=1
+and write_date >= (now() - '180 days'::interval)
+order by sale_order_line_id</sql>
+ <limit>0</limit>
+ <lookup/>
+ <execute_each_row>N</execute_each_row>
+ <variables_active>N</variables_active>
+ <lazy_conversion_active>N</lazy_conversion_active>
+ <cached_row_meta_active>N</cached_row_meta_active>
+ <row-meta>
+ <value-meta>
+ <type>Integer</type>
+ <storagetype>normal</storagetype>
+ <name>fulfillment_id</name>
+ <length>9</length>
+ <precision>0</precision>
+ <origin>fulfillment</origin>
+ <comments>fulfillment_id</comments>
+ <conversion_Mask>####0;-####0</conversion_Mask>
+ <decimal_symbol>.</decimal_symbol>
+ <grouping_symbol>,</grouping_symbol>
+ <currency_symbol/>
+ <trim_type>none</trim_type>
+ <case_insensitive>N</case_insensitive>
+ <collator_disabled>Y</collator_disabled>
+ <collator_strength>0</collator_strength>
+ <sort_descending>N</sort_descending>
+ <output_padding>N</output_padding>
+ <date_format_lenient>N</date_format_lenient>
+ <date_format_locale>en_US</date_format_locale>
+ <date_format_timezone>Asia/Bangkok</date_format_timezone>
+ <lenient_string_to_number>N</lenient_string_to_number>
+ </value-meta>
+ <value-meta>
+ <type>Integer</type>
+ <storagetype>normal</storagetype>
+ <name>sale_order_line_id</name>
+ <length>9</length>
+ <precision>0</precision>
+ <origin>fulfillment</origin>
+ <comments>sale_order_line_id</comments>
+ <conversion_Mask>####0;-####0</conversion_Mask>
+ <decimal_symbol>.</decimal_symbol>
+ <grouping_symbol>,</grouping_symbol>
+ <currency_symbol/>
+ <trim_type>none</trim_type>
+ <case_insensitive>N</case_insensitive>
+ <collator_disabled>Y</collator_disabled>
+ <collator_strength>0</collator_strength>
+ <sort_descending>N</sort_descending>
+ <output_padding>N</output_padding>
+ <date_format_lenient>N</date_format_lenient>
+ <date_format_locale>en_US</date_format_locale>
+ <date_format_timezone>Asia/Bangkok</date_format_timezone>
+ <lenient_string_to_number>N</lenient_string_to_number>
+ </value-meta>
+ </row-meta>
+ <attributes/>
+ <cluster_schema/>
+ <remotesteps>
+ <input>
+ </input>
+ <output>
+ </output>
+ </remotesteps>
+ <GUI>
+ <xloc>368</xloc>
+ <yloc>96</yloc>
+ <draw>Y</draw>
+ </GUI>
+ </step>
+ <step>
+ <name>match po so</name>
+ <type>TableInput</type>
+ <description/>
+ <distribute>Y</distribute>
+ <custom_distribution/>
+ <copies>1</copies>
+ <partitioning>
+ <method>none</method>
+ <schema_name/>
+ </partitioning>
+ <connection>erp indoteknik production (localhost)</connection>
+ <sql>select posm.sale_line_id as sale_order_line_id, po.id as purchase_order_id
+from purchase_order_sales_match posm
+join purchase_order po on po.id = posm.purchase_order_id
+where 1=1
+and po.state in ('purchase', 'done')
+and posm.write_date >= (now() - '180 days'::interval)
+order by posm.sale_line_id</sql>
+ <limit>0</limit>
+ <lookup/>
+ <execute_each_row>N</execute_each_row>
+ <variables_active>N</variables_active>
+ <lazy_conversion_active>N</lazy_conversion_active>
+ <cached_row_meta_active>N</cached_row_meta_active>
+ <row-meta>
+ <value-meta>
+ <type>Integer</type>
+ <storagetype>normal</storagetype>
+ <name>sale_order_line_id</name>
+ <length>9</length>
+ <precision>0</precision>
+ <origin>match po so</origin>
+ <comments>sale_order_line_id</comments>
+ <conversion_Mask>####0;-####0</conversion_Mask>
+ <decimal_symbol>.</decimal_symbol>
+ <grouping_symbol>,</grouping_symbol>
+ <currency_symbol/>
+ <trim_type>none</trim_type>
+ <case_insensitive>N</case_insensitive>
+ <collator_disabled>Y</collator_disabled>
+ <collator_strength>0</collator_strength>
+ <sort_descending>N</sort_descending>
+ <output_padding>N</output_padding>
+ <date_format_lenient>N</date_format_lenient>
+ <date_format_locale>en_US</date_format_locale>
+ <date_format_timezone>Asia/Bangkok</date_format_timezone>
+ <lenient_string_to_number>N</lenient_string_to_number>
+ </value-meta>
+ <value-meta>
+ <type>Integer</type>
+ <storagetype>normal</storagetype>
+ <name>purchase_order_id</name>
+ <length>9</length>
+ <precision>0</precision>
+ <origin>match po so</origin>
+ <comments>purchase_order_id</comments>
+ <conversion_Mask>####0;-####0</conversion_Mask>
+ <decimal_symbol>.</decimal_symbol>
+ <grouping_symbol>,</grouping_symbol>
+ <currency_symbol/>
+ <trim_type>none</trim_type>
+ <case_insensitive>N</case_insensitive>
+ <collator_disabled>Y</collator_disabled>
+ <collator_strength>0</collator_strength>
+ <sort_descending>N</sort_descending>
+ <output_padding>N</output_padding>
+ <date_format_lenient>N</date_format_lenient>
+ <date_format_locale>en_US</date_format_locale>
+ <date_format_timezone>Asia/Bangkok</date_format_timezone>
+ <lenient_string_to_number>N</lenient_string_to_number>
+ </value-meta>
+ </row-meta>
+ <attributes/>
+ <cluster_schema/>
+ <remotesteps>
+ <input>
+ </input>
+ <output>
+ </output>
+ </remotesteps>
+ <GUI>
+ <xloc>160</xloc>
+ <yloc>192</yloc>
+ <draw>Y</draw>
+ </GUI>
+ </step>
+ <step>
+ <name>match po so with fulfillment</name>
+ <type>MergeJoin</type>
+ <description/>
+ <distribute>Y</distribute>
+ <custom_distribution/>
+ <copies>1</copies>
+ <partitioning>
+ <method>none</method>
+ <schema_name/>
+ </partitioning>
+ <join_type>LEFT OUTER</join_type>
+ <step1>match po so</step1>
+ <step2>fulfillment</step2>
+ <keys_1>
+ <key>sale_order_line_id</key>
+ </keys_1>
+ <keys_2>
+ <key>sale_order_line_id</key>
+ </keys_2>
+ <attributes/>
+ <cluster_schema/>
+ <remotesteps>
+ <input>
+ </input>
+ <output>
+ </output>
+ </remotesteps>
+ <GUI>
+ <xloc>368</xloc>
+ <yloc>192</yloc>
+ <draw>Y</draw>
+ </GUI>
+ </step>
+ <step>
+ <name>Filter fulfillment is not null</name>
+ <type>FilterRows</type>
+ <description/>
+ <distribute>Y</distribute>
+ <custom_distribution/>
+ <copies>1</copies>
+ <partitioning>
+ <method>none</method>
+ <schema_name/>
+ </partitioning>
+ <send_true_to>Select values</send_true_to>
+ <send_false_to>log fulfillment null</send_false_to>
+ <compare>
+ <condition>
+ <negated>N</negated>
+ <leftvalue>fulfillment_id</leftvalue>
+ <function>IS NOT NULL</function>
+ <rightvalue/>
+ </condition>
+ </compare>
+ <attributes/>
+ <cluster_schema/>
+ <remotesteps>
+ <input>
+ </input>
+ <output>
+ </output>
+ </remotesteps>
+ <GUI>
+ <xloc>592</xloc>
+ <yloc>192</yloc>
+ <draw>Y</draw>
+ </GUI>
+ </step>
+ <step>
+ <name>Select values</name>
+ <type>SelectValues</type>
+ <description/>
+ <distribute>Y</distribute>
+ <custom_distribution/>
+ <copies>1</copies>
+ <partitioning>
+ <method>none</method>
+ <schema_name/>
+ </partitioning>
+ <fields>
+ <field>
+ <name>sale_order_line_id</name>
+ <rename/>
+ </field>
+ <field>
+ <name>purchase_order_id</name>
+ <rename/>
+ </field>
+ <field>
+ <name>fulfillment_id</name>
+ <rename/>
+ </field>
+ <select_unspecified>N</select_unspecified>
+ </fields>
+ <attributes/>
+ <cluster_schema/>
+ <remotesteps>
+ <input>
+ </input>
+ <output>
+ </output>
+ </remotesteps>
+ <GUI>
+ <xloc>752</xloc>
+ <yloc>192</yloc>
+ <draw>Y</draw>
+ </GUI>
+ </step>
+ <step>
+ <name>log fulfillment null</name>
+ <type>WriteToLog</type>
+ <description/>
+ <distribute>Y</distribute>
+ <custom_distribution/>
+ <copies>1</copies>
+ <partitioning>
+ <method>none</method>
+ <schema_name/>
+ </partitioning>
+ <loglevel>log_level_basic</loglevel>
+ <displayHeader>Y</displayHeader>
+ <limitRows>N</limitRows>
+ <limitRowsNumber>0</limitRowsNumber>
+ <logmessage/>
+ <fields>
+ </fields>
+ <attributes/>
+ <cluster_schema/>
+ <remotesteps>
+ <input>
+ </input>
+ <output>
+ </output>
+ </remotesteps>
+ <GUI>
+ <xloc>592</xloc>
+ <yloc>304</yloc>
+ <draw>Y</draw>
+ </GUI>
+ </step>
+ <step>
+ <name>Insert / update</name>
+ <type>InsertUpdate</type>
+ <description/>
+ <distribute>Y</distribute>
+ <custom_distribution/>
+ <copies>1</copies>
+ <partitioning>
+ <method>none</method>
+ <schema_name/>
+ </partitioning>
+ <connection>erp indoteknik production (localhost)</connection>
+ <commit>100</commit>
+ <update_bypassed>N</update_bypassed>
+ <lookup>
+ <schema>public</schema>
+ <table>purchase_order_sales_order_fulfillment_v2_rel</table>
+ <key>
+ <name>fulfillment_id</name>
+ <field>sales_order_fulfillment_v2_id</field>
+ <condition>=</condition>
+ <name2/>
+ </key>
+ <value>
+ <name>purchase_order_id</name>
+ <rename>purchase_order_id</rename>
+ <update>Y</update>
+ </value>
+ <value>
+ <name>sales_order_fulfillment_v2_id</name>
+ <rename>fulfillment_id</rename>
+ <update>N</update>
+ </value>
+ </lookup>
+ <attributes/>
+ <cluster_schema/>
+ <remotesteps>
+ <input>
+ </input>
+ <output>
+ </output>
+ </remotesteps>
+ <GUI>
+ <xloc>912</xloc>
+ <yloc>192</yloc>
+ <draw>Y</draw>
+ </GUI>
+ </step>
+ <step_error_handling>
+ </step_error_handling>
+ <slave-step-copy-partition-distribution>
+ </slave-step-copy-partition-distribution>
+ <slave_transformation>N</slave_transformation>
+ <attributes/>
+</transformation>
diff --git a/example_use_param_table_input.ktr b/example_use_param_table_input.ktr
new file mode 100644
index 0000000..c5bb577
--- /dev/null
+++ b/example_use_param_table_input.ktr
@@ -0,0 +1,903 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<transformation>
+ <info>
+ <name>example_use_param_table_input</name>
+ <description/>
+ <extended_description/>
+ <trans_version/>
+ <trans_type>Normal</trans_type>
+ <trans_status>0</trans_status>
+ <directory>/</directory>
+ <parameters>
+ </parameters>
+ <log>
+ <trans-log-table>
+ <connection/>
+ <schema/>
+ <table/>
+ <size_limit_lines/>
+ <interval/>
+ <timeout_days/>
+ <field>
+ <id>ID_BATCH</id>
+ <enabled>Y</enabled>
+ <name>ID_BATCH</name>
+ </field>
+ <field>
+ <id>CHANNEL_ID</id>
+ <enabled>Y</enabled>
+ <name>CHANNEL_ID</name>
+ </field>
+ <field>
+ <id>TRANSNAME</id>
+ <enabled>Y</enabled>
+ <name>TRANSNAME</name>
+ </field>
+ <field>
+ <id>STATUS</id>
+ <enabled>Y</enabled>
+ <name>STATUS</name>
+ </field>
+ <field>
+ <id>LINES_READ</id>
+ <enabled>Y</enabled>
+ <name>LINES_READ</name>
+ <subject/>
+ </field>
+ <field>
+ <id>LINES_WRITTEN</id>
+ <enabled>Y</enabled>
+ <name>LINES_WRITTEN</name>
+ <subject/>
+ </field>
+ <field>
+ <id>LINES_UPDATED</id>
+ <enabled>Y</enabled>
+ <name>LINES_UPDATED</name>
+ <subject/>
+ </field>
+ <field>
+ <id>LINES_INPUT</id>
+ <enabled>Y</enabled>
+ <name>LINES_INPUT</name>
+ <subject/>
+ </field>
+ <field>
+ <id>LINES_OUTPUT</id>
+ <enabled>Y</enabled>
+ <name>LINES_OUTPUT</name>
+ <subject/>
+ </field>
+ <field>
+ <id>LINES_REJECTED</id>
+ <enabled>Y</enabled>
+ <name>LINES_REJECTED</name>
+ <subject/>
+ </field>
+ <field>
+ <id>ERRORS</id>
+ <enabled>Y</enabled>
+ <name>ERRORS</name>
+ </field>
+ <field>
+ <id>STARTDATE</id>
+ <enabled>Y</enabled>
+ <name>STARTDATE</name>
+ </field>
+ <field>
+ <id>ENDDATE</id>
+ <enabled>Y</enabled>
+ <name>ENDDATE</name>
+ </field>
+ <field>
+ <id>LOGDATE</id>
+ <enabled>Y</enabled>
+ <name>LOGDATE</name>
+ </field>
+ <field>
+ <id>DEPDATE</id>
+ <enabled>Y</enabled>
+ <name>DEPDATE</name>
+ </field>
+ <field>
+ <id>REPLAYDATE</id>
+ <enabled>Y</enabled>
+ <name>REPLAYDATE</name>
+ </field>
+ <field>
+ <id>LOG_FIELD</id>
+ <enabled>Y</enabled>
+ <name>LOG_FIELD</name>
+ </field>
+ <field>
+ <id>EXECUTING_SERVER</id>
+ <enabled>N</enabled>
+ <name>EXECUTING_SERVER</name>
+ </field>
+ <field>
+ <id>EXECUTING_USER</id>
+ <enabled>N</enabled>
+ <name>EXECUTING_USER</name>
+ </field>
+ <field>
+ <id>CLIENT</id>
+ <enabled>N</enabled>
+ <name>CLIENT</name>
+ </field>
+ </trans-log-table>
+ <perf-log-table>
+ <connection/>
+ <schema/>
+ <table/>
+ <interval/>
+ <timeout_days/>
+ <field>
+ <id>ID_BATCH</id>
+ <enabled>Y</enabled>
+ <name>ID_BATCH</name>
+ </field>
+ <field>
+ <id>SEQ_NR</id>
+ <enabled>Y</enabled>
+ <name>SEQ_NR</name>
+ </field>
+ <field>
+ <id>LOGDATE</id>
+ <enabled>Y</enabled>
+ <name>LOGDATE</name>
+ </field>
+ <field>
+ <id>TRANSNAME</id>
+ <enabled>Y</enabled>
+ <name>TRANSNAME</name>
+ </field>
+ <field>
+ <id>STEPNAME</id>
+ <enabled>Y</enabled>
+ <name>STEPNAME</name>
+ </field>
+ <field>
+ <id>STEP_COPY</id>
+ <enabled>Y</enabled>
+ <name>STEP_COPY</name>
+ </field>
+ <field>
+ <id>LINES_READ</id>
+ <enabled>Y</enabled>
+ <name>LINES_READ</name>
+ </field>
+ <field>
+ <id>LINES_WRITTEN</id>
+ <enabled>Y</enabled>
+ <name>LINES_WRITTEN</name>
+ </field>
+ <field>
+ <id>LINES_UPDATED</id>
+ <enabled>Y</enabled>
+ <name>LINES_UPDATED</name>
+ </field>
+ <field>
+ <id>LINES_INPUT</id>
+ <enabled>Y</enabled>
+ <name>LINES_INPUT</name>
+ </field>
+ <field>
+ <id>LINES_OUTPUT</id>
+ <enabled>Y</enabled>
+ <name>LINES_OUTPUT</name>
+ </field>
+ <field>
+ <id>LINES_REJECTED</id>
+ <enabled>Y</enabled>
+ <name>LINES_REJECTED</name>
+ </field>
+ <field>
+ <id>ERRORS</id>
+ <enabled>Y</enabled>
+ <name>ERRORS</name>
+ </field>
+ <field>
+ <id>INPUT_BUFFER_ROWS</id>
+ <enabled>Y</enabled>
+ <name>INPUT_BUFFER_ROWS</name>
+ </field>
+ <field>
+ <id>OUTPUT_BUFFER_ROWS</id>
+ <enabled>Y</enabled>
+ <name>OUTPUT_BUFFER_ROWS</name>
+ </field>
+ </perf-log-table>
+ <channel-log-table>
+ <connection/>
+ <schema/>
+ <table/>
+ <timeout_days/>
+ <field>
+ <id>ID_BATCH</id>
+ <enabled>Y</enabled>
+ <name>ID_BATCH</name>
+ </field>
+ <field>
+ <id>CHANNEL_ID</id>
+ <enabled>Y</enabled>
+ <name>CHANNEL_ID</name>
+ </field>
+ <field>
+ <id>LOG_DATE</id>
+ <enabled>Y</enabled>
+ <name>LOG_DATE</name>
+ </field>
+ <field>
+ <id>LOGGING_OBJECT_TYPE</id>
+ <enabled>Y</enabled>
+ <name>LOGGING_OBJECT_TYPE</name>
+ </field>
+ <field>
+ <id>OBJECT_NAME</id>
+ <enabled>Y</enabled>
+ <name>OBJECT_NAME</name>
+ </field>
+ <field>
+ <id>OBJECT_COPY</id>
+ <enabled>Y</enabled>
+ <name>OBJECT_COPY</name>
+ </field>
+ <field>
+ <id>REPOSITORY_DIRECTORY</id>
+ <enabled>Y</enabled>
+ <name>REPOSITORY_DIRECTORY</name>
+ </field>
+ <field>
+ <id>FILENAME</id>
+ <enabled>Y</enabled>
+ <name>FILENAME</name>
+ </field>
+ <field>
+ <id>OBJECT_ID</id>
+ <enabled>Y</enabled>
+ <name>OBJECT_ID</name>
+ </field>
+ <field>
+ <id>OBJECT_REVISION</id>
+ <enabled>Y</enabled>
+ <name>OBJECT_REVISION</name>
+ </field>
+ <field>
+ <id>PARENT_CHANNEL_ID</id>
+ <enabled>Y</enabled>
+ <name>PARENT_CHANNEL_ID</name>
+ </field>
+ <field>
+ <id>ROOT_CHANNEL_ID</id>
+ <enabled>Y</enabled>
+ <name>ROOT_CHANNEL_ID</name>
+ </field>
+ </channel-log-table>
+ <step-log-table>
+ <connection/>
+ <schema/>
+ <table/>
+ <timeout_days/>
+ <field>
+ <id>ID_BATCH</id>
+ <enabled>Y</enabled>
+ <name>ID_BATCH</name>
+ </field>
+ <field>
+ <id>CHANNEL_ID</id>
+ <enabled>Y</enabled>
+ <name>CHANNEL_ID</name>
+ </field>
+ <field>
+ <id>LOG_DATE</id>
+ <enabled>Y</enabled>
+ <name>LOG_DATE</name>
+ </field>
+ <field>
+ <id>TRANSNAME</id>
+ <enabled>Y</enabled>
+ <name>TRANSNAME</name>
+ </field>
+ <field>
+ <id>STEPNAME</id>
+ <enabled>Y</enabled>
+ <name>STEPNAME</name>
+ </field>
+ <field>
+ <id>STEP_COPY</id>
+ <enabled>Y</enabled>
+ <name>STEP_COPY</name>
+ </field>
+ <field>
+ <id>LINES_READ</id>
+ <enabled>Y</enabled>
+ <name>LINES_READ</name>
+ </field>
+ <field>
+ <id>LINES_WRITTEN</id>
+ <enabled>Y</enabled>
+ <name>LINES_WRITTEN</name>
+ </field>
+ <field>
+ <id>LINES_UPDATED</id>
+ <enabled>Y</enabled>
+ <name>LINES_UPDATED</name>
+ </field>
+ <field>
+ <id>LINES_INPUT</id>
+ <enabled>Y</enabled>
+ <name>LINES_INPUT</name>
+ </field>
+ <field>
+ <id>LINES_OUTPUT</id>
+ <enabled>Y</enabled>
+ <name>LINES_OUTPUT</name>
+ </field>
+ <field>
+ <id>LINES_REJECTED</id>
+ <enabled>Y</enabled>
+ <name>LINES_REJECTED</name>
+ </field>
+ <field>
+ <id>ERRORS</id>
+ <enabled>Y</enabled>
+ <name>ERRORS</name>
+ </field>
+ <field>
+ <id>LOG_FIELD</id>
+ <enabled>N</enabled>
+ <name>LOG_FIELD</name>
+ </field>
+ </step-log-table>
+ <metrics-log-table>
+ <connection/>
+ <schema/>
+ <table/>
+ <timeout_days/>
+ <field>
+ <id>ID_BATCH</id>
+ <enabled>Y</enabled>
+ <name>ID_BATCH</name>
+ </field>
+ <field>
+ <id>CHANNEL_ID</id>
+ <enabled>Y</enabled>
+ <name>CHANNEL_ID</name>
+ </field>
+ <field>
+ <id>LOG_DATE</id>
+ <enabled>Y</enabled>
+ <name>LOG_DATE</name>
+ </field>
+ <field>
+ <id>METRICS_DATE</id>
+ <enabled>Y</enabled>
+ <name>METRICS_DATE</name>
+ </field>
+ <field>
+ <id>METRICS_CODE</id>
+ <enabled>Y</enabled>
+ <name>METRICS_CODE</name>
+ </field>
+ <field>
+ <id>METRICS_DESCRIPTION</id>
+ <enabled>Y</enabled>
+ <name>METRICS_DESCRIPTION</name>
+ </field>
+ <field>
+ <id>METRICS_SUBJECT</id>
+ <enabled>Y</enabled>
+ <name>METRICS_SUBJECT</name>
+ </field>
+ <field>
+ <id>METRICS_TYPE</id>
+ <enabled>Y</enabled>
+ <name>METRICS_TYPE</name>
+ </field>
+ <field>
+ <id>METRICS_VALUE</id>
+ <enabled>Y</enabled>
+ <name>METRICS_VALUE</name>
+ </field>
+ </metrics-log-table>
+ </log>
+ <maxdate>
+ <connection/>
+ <table/>
+ <field/>
+ <offset>0.0</offset>
+ <maxdiff>0.0</maxdiff>
+ </maxdate>
+ <size_rowset>10000</size_rowset>
+ <sleep_time_empty>50</sleep_time_empty>
+ <sleep_time_full>50</sleep_time_full>
+ <unique_connections>N</unique_connections>
+ <feedback_shown>Y</feedback_shown>
+ <feedback_size>50000</feedback_size>
+ <using_thread_priorities>Y</using_thread_priorities>
+ <shared_objects_file/>
+ <capture_step_performance>N</capture_step_performance>
+ <step_performance_capturing_delay>1000</step_performance_capturing_delay>
+ <step_performance_capturing_size_limit>100</step_performance_capturing_size_limit>
+ <dependencies>
+ </dependencies>
+ <partitionschemas>
+ </partitionschemas>
+ <slaveservers>
+ </slaveservers>
+ <clusterschemas>
+ </clusterschemas>
+ <created_user>-</created_user>
+ <created_date>2024/11/09 07:41:25.978</created_date>
+ <modified_user>-</modified_user>
+ <modified_date>2024/11/09 07:41:25.978</modified_date>
+ <key_for_session_key/>
+ <is_key_private>N</is_key_private>
+ </info>
+ <notepads>
+ </notepads>
+ <connection>
+ <name>erp indoteknik production</name>
+ <server>localhost</server>
+ <type>POSTGRESQL</type>
+ <access>Native</access>
+ <database>erp_indoteknik</database>
+ <port>5901</port>
+ <username>odoo</username>
+ <password>Encrypted 2be98afc82bdfd8dd9a2ca45acc83f6c3</password>
+ <servername/>
+ <data_tablespace/>
+ <index_tablespace/>
+ <attributes>
+ <attribute>
+ <code>FORCE_IDENTIFIERS_TO_LOWERCASE</code>
+ <attribute>N</attribute>
+ </attribute>
+ <attribute>
+ <code>FORCE_IDENTIFIERS_TO_UPPERCASE</code>
+ <attribute>N</attribute>
+ </attribute>
+ <attribute>
+ <code>IS_CLUSTERED</code>
+ <attribute>N</attribute>
+ </attribute>
+ <attribute>
+ <code>PORT_NUMBER</code>
+ <attribute>5901</attribute>
+ </attribute>
+ <attribute>
+ <code>PRESERVE_RESERVED_WORD_CASE</code>
+ <attribute>Y</attribute>
+ </attribute>
+ <attribute>
+ <code>QUOTE_ALL_FIELDS</code>
+ <attribute>N</attribute>
+ </attribute>
+ <attribute>
+ <code>SUPPORTS_BOOLEAN_DATA_TYPE</code>
+ <attribute>Y</attribute>
+ </attribute>
+ <attribute>
+ <code>SUPPORTS_TIMESTAMP_DATA_TYPE</code>
+ <attribute>Y</attribute>
+ </attribute>
+ <attribute>
+ <code>USE_POOLING</code>
+ <attribute>N</attribute>
+ </attribute>
+ </attributes>
+ </connection>
+ <order>
+ <hop>
+ <from>Table input 2</from>
+ <to>Select values</to>
+ <enabled>Y</enabled>
+ </hop>
+ <hop>
+ <from>Table input</from>
+ <to>Select values 2</to>
+ <enabled>Y</enabled>
+ </hop>
+ <hop>
+ <from>Table input</from>
+ <to>Select values 3</to>
+ <enabled>Y</enabled>
+ </hop>
+ <hop>
+ <from>Select values 3</from>
+ <to>Table input 2</to>
+ <enabled>Y</enabled>
+ </hop>
+ <hop>
+ <from>Select values 2</from>
+ <to>Merge join</to>
+ <enabled>Y</enabled>
+ </hop>
+ <hop>
+ <from>Select values</from>
+ <to>Merge join</to>
+ <enabled>Y</enabled>
+ </hop>
+ <hop>
+ <from>Merge join</from>
+ <to>Select values 4</to>
+ <enabled>Y</enabled>
+ </hop>
+ </order>
+ <step>
+ <name>Table input</name>
+ <type>TableInput</type>
+ <description/>
+ <distribute>N</distribute>
+ <custom_distribution/>
+ <copies>1</copies>
+ <partitioning>
+ <method>none</method>
+ <schema_name/>
+ </partitioning>
+ <connection>erp indoteknik production</connection>
+ <sql>select id, name from sale_order where date_order between '2023-01-01' and '2023-12-31' order by id</sql>
+ <limit>0</limit>
+ <lookup/>
+ <execute_each_row>N</execute_each_row>
+ <variables_active>N</variables_active>
+ <lazy_conversion_active>N</lazy_conversion_active>
+ <cached_row_meta_active>N</cached_row_meta_active>
+ <row-meta>
+ <value-meta>
+ <type>Integer</type>
+ <storagetype>normal</storagetype>
+ <name>id</name>
+ <length>9</length>
+ <precision>0</precision>
+ <origin>Table input</origin>
+ <comments>id</comments>
+ <conversion_Mask>####0;-####0</conversion_Mask>
+ <decimal_symbol>.</decimal_symbol>
+ <grouping_symbol>,</grouping_symbol>
+ <currency_symbol/>
+ <trim_type>none</trim_type>
+ <case_insensitive>N</case_insensitive>
+ <collator_disabled>Y</collator_disabled>
+ <collator_strength>0</collator_strength>
+ <sort_descending>N</sort_descending>
+ <output_padding>N</output_padding>
+ <date_format_lenient>N</date_format_lenient>
+ <date_format_locale>en_US</date_format_locale>
+ <date_format_timezone>Asia/Bangkok</date_format_timezone>
+ <lenient_string_to_number>N</lenient_string_to_number>
+ </value-meta>
+ <value-meta>
+ <type>String</type>
+ <storagetype>normal</storagetype>
+ <name>name</name>
+ <length>2147483647</length>
+ <precision>-1</precision>
+ <origin>Table input</origin>
+ <comments>name</comments>
+ <conversion_Mask/>
+ <decimal_symbol>.</decimal_symbol>
+ <grouping_symbol>,</grouping_symbol>
+ <currency_symbol/>
+ <trim_type>none</trim_type>
+ <case_insensitive>N</case_insensitive>
+ <collator_disabled>Y</collator_disabled>
+ <collator_strength>0</collator_strength>
+ <sort_descending>N</sort_descending>
+ <output_padding>N</output_padding>
+ <date_format_lenient>N</date_format_lenient>
+ <date_format_locale>en_US</date_format_locale>
+ <date_format_timezone>Asia/Bangkok</date_format_timezone>
+ <lenient_string_to_number>N</lenient_string_to_number>
+ </value-meta>
+ </row-meta>
+ <attributes/>
+ <cluster_schema/>
+ <remotesteps>
+ <input>
+ </input>
+ <output>
+ </output>
+ </remotesteps>
+ <GUI>
+ <xloc>128</xloc>
+ <yloc>80</yloc>
+ <draw>Y</draw>
+ </GUI>
+ </step>
+ <step>
+ <name>Select values</name>
+ <type>SelectValues</type>
+ <description/>
+ <distribute>Y</distribute>
+ <custom_distribution/>
+ <copies>1</copies>
+ <partitioning>
+ <method>none</method>
+ <schema_name/>
+ </partitioning>
+ <fields>
+ <field>
+ <name>sale_order_id</name>
+ <rename/>
+ </field>
+ <field>
+ <name>po</name>
+ <rename/>
+ </field>
+ <select_unspecified>N</select_unspecified>
+ </fields>
+ <attributes/>
+ <cluster_schema/>
+ <remotesteps>
+ <input>
+ </input>
+ <output>
+ </output>
+ </remotesteps>
+ <GUI>
+ <xloc>544</xloc>
+ <yloc>80</yloc>
+ <draw>Y</draw>
+ </GUI>
+ </step>
+ <step>
+ <name>Table input 2</name>
+ <type>TableInput</type>
+ <description/>
+ <distribute>Y</distribute>
+ <custom_distribution/>
+ <copies>1</copies>
+ <partitioning>
+ <method>none</method>
+ <schema_name/>
+ </partitioning>
+ <connection>erp indoteknik production</connection>
+ <sql>select sale_order_id, name as po
+from purchase_order
+where sale_order_id = ?
+order by sale_order_id</sql>
+ <limit>0</limit>
+ <lookup>Select values 3</lookup>
+ <execute_each_row>Y</execute_each_row>
+ <variables_active>Y</variables_active>
+ <lazy_conversion_active>N</lazy_conversion_active>
+ <cached_row_meta_active>N</cached_row_meta_active>
+ <row-meta>
+ <value-meta>
+ <type>Integer</type>
+ <storagetype>normal</storagetype>
+ <name>id</name>
+ <length>9</length>
+ <precision>0</precision>
+ <origin>Table input</origin>
+ <comments>id</comments>
+ <conversion_Mask>####0;-####0</conversion_Mask>
+ <decimal_symbol>.</decimal_symbol>
+ <grouping_symbol>,</grouping_symbol>
+ <currency_symbol/>
+ <trim_type>none</trim_type>
+ <case_insensitive>N</case_insensitive>
+ <collator_disabled>Y</collator_disabled>
+ <collator_strength>0</collator_strength>
+ <sort_descending>N</sort_descending>
+ <output_padding>N</output_padding>
+ <date_format_lenient>N</date_format_lenient>
+ <date_format_locale>en_US</date_format_locale>
+ <date_format_timezone>Asia/Bangkok</date_format_timezone>
+ <lenient_string_to_number>N</lenient_string_to_number>
+ </value-meta>
+ <value-meta>
+ <type>Integer</type>
+ <storagetype>normal</storagetype>
+ <name>sale_order_id</name>
+ <length>9</length>
+ <precision>0</precision>
+ <origin>Table input 2</origin>
+ <comments>sale_order_id</comments>
+ <conversion_Mask>####0;-####0</conversion_Mask>
+ <decimal_symbol>.</decimal_symbol>
+ <grouping_symbol>,</grouping_symbol>
+ <currency_symbol/>
+ <trim_type>none</trim_type>
+ <case_insensitive>N</case_insensitive>
+ <collator_disabled>Y</collator_disabled>
+ <collator_strength>0</collator_strength>
+ <sort_descending>N</sort_descending>
+ <output_padding>N</output_padding>
+ <date_format_lenient>N</date_format_lenient>
+ <date_format_locale>en_US</date_format_locale>
+ <date_format_timezone>Asia/Bangkok</date_format_timezone>
+ <lenient_string_to_number>N</lenient_string_to_number>
+ </value-meta>
+ <value-meta>
+ <type>String</type>
+ <storagetype>normal</storagetype>
+ <name>po</name>
+ <length>2147483647</length>
+ <precision>-1</precision>
+ <origin>Table input 2</origin>
+ <comments>po</comments>
+ <conversion_Mask/>
+ <decimal_symbol>.</decimal_symbol>
+ <grouping_symbol>,</grouping_symbol>
+ <currency_symbol/>
+ <trim_type>none</trim_type>
+ <case_insensitive>N</case_insensitive>
+ <collator_disabled>Y</collator_disabled>
+ <collator_strength>0</collator_strength>
+ <sort_descending>N</sort_descending>
+ <output_padding>N</output_padding>
+ <date_format_lenient>N</date_format_lenient>
+ <date_format_locale>en_US</date_format_locale>
+ <date_format_timezone>Asia/Bangkok</date_format_timezone>
+ <lenient_string_to_number>N</lenient_string_to_number>
+ </value-meta>
+ </row-meta>
+ <attributes/>
+ <cluster_schema/>
+ <remotesteps>
+ <input>
+ </input>
+ <output>
+ </output>
+ </remotesteps>
+ <GUI>
+ <xloc>352</xloc>
+ <yloc>80</yloc>
+ <draw>Y</draw>
+ </GUI>
+ </step>
+ <step>
+ <name>Select values 2</name>
+ <type>SelectValues</type>
+ <description/>
+ <distribute>Y</distribute>
+ <custom_distribution/>
+ <copies>1</copies>
+ <partitioning>
+ <method>none</method>
+ <schema_name/>
+ </partitioning>
+ <fields>
+ <field>
+ <name>id</name>
+ <rename/>
+ </field>
+ <field>
+ <name>name</name>
+ <rename/>
+ </field>
+ <select_unspecified>N</select_unspecified>
+ </fields>
+ <attributes/>
+ <cluster_schema/>
+ <remotesteps>
+ <input>
+ </input>
+ <output>
+ </output>
+ </remotesteps>
+ <GUI>
+ <xloc>128</xloc>
+ <yloc>192</yloc>
+ <draw>Y</draw>
+ </GUI>
+ </step>
+ <step>
+ <name>Select values 3</name>
+ <type>SelectValues</type>
+ <description/>
+ <distribute>Y</distribute>
+ <custom_distribution/>
+ <copies>1</copies>
+ <partitioning>
+ <method>none</method>
+ <schema_name/>
+ </partitioning>
+ <fields>
+ <field>
+ <name>id</name>
+ <rename/>
+ </field>
+ <select_unspecified>N</select_unspecified>
+ </fields>
+ <attributes/>
+ <cluster_schema/>
+ <remotesteps>
+ <input>
+ </input>
+ <output>
+ </output>
+ </remotesteps>
+ <GUI>
+ <xloc>240</xloc>
+ <yloc>80</yloc>
+ <draw>Y</draw>
+ </GUI>
+ </step>
+ <step>
+ <name>Merge join</name>
+ <type>MergeJoin</type>
+ <description/>
+ <distribute>Y</distribute>
+ <custom_distribution/>
+ <copies>1</copies>
+ <partitioning>
+ <method>none</method>
+ <schema_name/>
+ </partitioning>
+ <join_type>INNER</join_type>
+ <step1>Select values 2</step1>
+ <step2>Select values</step2>
+ <keys_1>
+ <key>id</key>
+ </keys_1>
+ <keys_2>
+ <key>sale_order_id</key>
+ </keys_2>
+ <attributes/>
+ <cluster_schema/>
+ <remotesteps>
+ <input>
+ </input>
+ <output>
+ </output>
+ </remotesteps>
+ <GUI>
+ <xloc>352</xloc>
+ <yloc>192</yloc>
+ <draw>Y</draw>
+ </GUI>
+ </step>
+ <step>
+ <name>Select values 4</name>
+ <type>SelectValues</type>
+ <description/>
+ <distribute>Y</distribute>
+ <custom_distribution/>
+ <copies>1</copies>
+ <partitioning>
+ <method>none</method>
+ <schema_name/>
+ </partitioning>
+ <fields>
+ <field>
+ <name>id</name>
+ <rename/>
+ </field>
+ <field>
+ <name>name</name>
+ <rename/>
+ </field>
+ <field>
+ <name>sale_order_id</name>
+ <rename/>
+ </field>
+ <field>
+ <name>po</name>
+ <rename/>
+ </field>
+ <select_unspecified>N</select_unspecified>
+ </fields>
+ <attributes/>
+ <cluster_schema/>
+ <remotesteps>
+ <input>
+ </input>
+ <output>
+ </output>
+ </remotesteps>
+ <GUI>
+ <xloc>576</xloc>
+ <yloc>192</yloc>
+ <draw>Y</draw>
+ </GUI>
+ </step>
+ <step_error_handling>
+ </step_error_handling>
+ <slave-step-copy-partition-distribution>
+ </slave-step-copy-partition-distribution>
+ <slave_transformation>N</slave_transformation>
+ <attributes/>
+</transformation>
diff --git a/run_fulfillment_job.kjb b/run_fulfillment_job.kjb
new file mode 100644
index 0000000..93b36a3
--- /dev/null
+++ b/run_fulfillment_job.kjb
@@ -0,0 +1,413 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<job>
+ <name>run_fulfillment_job</name>
+ <description/>
+ <extended_description/>
+ <job_version/>
+ <directory>/</directory>
+ <created_user>-</created_user>
+ <created_date>2024/11/13 09:55:25.528</created_date>
+ <modified_user>-</modified_user>
+ <modified_date>2024/11/13 09:55:25.528</modified_date>
+ <parameters>
+ </parameters>
+ <slaveservers>
+ </slaveservers>
+ <job-log-table>
+ <connection/>
+ <schema/>
+ <table/>
+ <size_limit_lines/>
+ <interval/>
+ <timeout_days/>
+ <field>
+ <id>ID_JOB</id>
+ <enabled>Y</enabled>
+ <name>ID_JOB</name>
+ </field>
+ <field>
+ <id>CHANNEL_ID</id>
+ <enabled>Y</enabled>
+ <name>CHANNEL_ID</name>
+ </field>
+ <field>
+ <id>JOBNAME</id>
+ <enabled>Y</enabled>
+ <name>JOBNAME</name>
+ </field>
+ <field>
+ <id>STATUS</id>
+ <enabled>Y</enabled>
+ <name>STATUS</name>
+ </field>
+ <field>
+ <id>LINES_READ</id>
+ <enabled>Y</enabled>
+ <name>LINES_READ</name>
+ </field>
+ <field>
+ <id>LINES_WRITTEN</id>
+ <enabled>Y</enabled>
+ <name>LINES_WRITTEN</name>
+ </field>
+ <field>
+ <id>LINES_UPDATED</id>
+ <enabled>Y</enabled>
+ <name>LINES_UPDATED</name>
+ </field>
+ <field>
+ <id>LINES_INPUT</id>
+ <enabled>Y</enabled>
+ <name>LINES_INPUT</name>
+ </field>
+ <field>
+ <id>LINES_OUTPUT</id>
+ <enabled>Y</enabled>
+ <name>LINES_OUTPUT</name>
+ </field>
+ <field>
+ <id>LINES_REJECTED</id>
+ <enabled>Y</enabled>
+ <name>LINES_REJECTED</name>
+ </field>
+ <field>
+ <id>ERRORS</id>
+ <enabled>Y</enabled>
+ <name>ERRORS</name>
+ </field>
+ <field>
+ <id>STARTDATE</id>
+ <enabled>Y</enabled>
+ <name>STARTDATE</name>
+ </field>
+ <field>
+ <id>ENDDATE</id>
+ <enabled>Y</enabled>
+ <name>ENDDATE</name>
+ </field>
+ <field>
+ <id>LOGDATE</id>
+ <enabled>Y</enabled>
+ <name>LOGDATE</name>
+ </field>
+ <field>
+ <id>DEPDATE</id>
+ <enabled>Y</enabled>
+ <name>DEPDATE</name>
+ </field>
+ <field>
+ <id>REPLAYDATE</id>
+ <enabled>Y</enabled>
+ <name>REPLAYDATE</name>
+ </field>
+ <field>
+ <id>LOG_FIELD</id>
+ <enabled>Y</enabled>
+ <name>LOG_FIELD</name>
+ </field>
+ <field>
+ <id>EXECUTING_SERVER</id>
+ <enabled>N</enabled>
+ <name>EXECUTING_SERVER</name>
+ </field>
+ <field>
+ <id>EXECUTING_USER</id>
+ <enabled>N</enabled>
+ <name>EXECUTING_USER</name>
+ </field>
+ <field>
+ <id>START_JOB_ENTRY</id>
+ <enabled>N</enabled>
+ <name>START_JOB_ENTRY</name>
+ </field>
+ <field>
+ <id>CLIENT</id>
+ <enabled>N</enabled>
+ <name>CLIENT</name>
+ </field>
+ </job-log-table>
+ <jobentry-log-table>
+ <connection/>
+ <schema/>
+ <table/>
+ <timeout_days/>
+ <field>
+ <id>ID_BATCH</id>
+ <enabled>Y</enabled>
+ <name>ID_BATCH</name>
+ </field>
+ <field>
+ <id>CHANNEL_ID</id>
+ <enabled>Y</enabled>
+ <name>CHANNEL_ID</name>
+ </field>
+ <field>
+ <id>LOG_DATE</id>
+ <enabled>Y</enabled>
+ <name>LOG_DATE</name>
+ </field>
+ <field>
+ <id>JOBNAME</id>
+ <enabled>Y</enabled>
+ <name>TRANSNAME</name>
+ </field>
+ <field>
+ <id>JOBENTRYNAME</id>
+ <enabled>Y</enabled>
+ <name>STEPNAME</name>
+ </field>
+ <field>
+ <id>LINES_READ</id>
+ <enabled>Y</enabled>
+ <name>LINES_READ</name>
+ </field>
+ <field>
+ <id>LINES_WRITTEN</id>
+ <enabled>Y</enabled>
+ <name>LINES_WRITTEN</name>
+ </field>
+ <field>
+ <id>LINES_UPDATED</id>
+ <enabled>Y</enabled>
+ <name>LINES_UPDATED</name>
+ </field>
+ <field>
+ <id>LINES_INPUT</id>
+ <enabled>Y</enabled>
+ <name>LINES_INPUT</name>
+ </field>
+ <field>
+ <id>LINES_OUTPUT</id>
+ <enabled>Y</enabled>
+ <name>LINES_OUTPUT</name>
+ </field>
+ <field>
+ <id>LINES_REJECTED</id>
+ <enabled>Y</enabled>
+ <name>LINES_REJECTED</name>
+ </field>
+ <field>
+ <id>ERRORS</id>
+ <enabled>Y</enabled>
+ <name>ERRORS</name>
+ </field>
+ <field>
+ <id>RESULT</id>
+ <enabled>Y</enabled>
+ <name>RESULT</name>
+ </field>
+ <field>
+ <id>NR_RESULT_ROWS</id>
+ <enabled>Y</enabled>
+ <name>NR_RESULT_ROWS</name>
+ </field>
+ <field>
+ <id>NR_RESULT_FILES</id>
+ <enabled>Y</enabled>
+ <name>NR_RESULT_FILES</name>
+ </field>
+ <field>
+ <id>LOG_FIELD</id>
+ <enabled>N</enabled>
+ <name>LOG_FIELD</name>
+ </field>
+ <field>
+ <id>COPY_NR</id>
+ <enabled>N</enabled>
+ <name>COPY_NR</name>
+ </field>
+ </jobentry-log-table>
+ <channel-log-table>
+ <connection/>
+ <schema/>
+ <table/>
+ <timeout_days/>
+ <field>
+ <id>ID_BATCH</id>
+ <enabled>Y</enabled>
+ <name>ID_BATCH</name>
+ </field>
+ <field>
+ <id>CHANNEL_ID</id>
+ <enabled>Y</enabled>
+ <name>CHANNEL_ID</name>
+ </field>
+ <field>
+ <id>LOG_DATE</id>
+ <enabled>Y</enabled>
+ <name>LOG_DATE</name>
+ </field>
+ <field>
+ <id>LOGGING_OBJECT_TYPE</id>
+ <enabled>Y</enabled>
+ <name>LOGGING_OBJECT_TYPE</name>
+ </field>
+ <field>
+ <id>OBJECT_NAME</id>
+ <enabled>Y</enabled>
+ <name>OBJECT_NAME</name>
+ </field>
+ <field>
+ <id>OBJECT_COPY</id>
+ <enabled>Y</enabled>
+ <name>OBJECT_COPY</name>
+ </field>
+ <field>
+ <id>REPOSITORY_DIRECTORY</id>
+ <enabled>Y</enabled>
+ <name>REPOSITORY_DIRECTORY</name>
+ </field>
+ <field>
+ <id>FILENAME</id>
+ <enabled>Y</enabled>
+ <name>FILENAME</name>
+ </field>
+ <field>
+ <id>OBJECT_ID</id>
+ <enabled>Y</enabled>
+ <name>OBJECT_ID</name>
+ </field>
+ <field>
+ <id>OBJECT_REVISION</id>
+ <enabled>Y</enabled>
+ <name>OBJECT_REVISION</name>
+ </field>
+ <field>
+ <id>PARENT_CHANNEL_ID</id>
+ <enabled>Y</enabled>
+ <name>PARENT_CHANNEL_ID</name>
+ </field>
+ <field>
+ <id>ROOT_CHANNEL_ID</id>
+ <enabled>Y</enabled>
+ <name>ROOT_CHANNEL_ID</name>
+ </field>
+ </channel-log-table>
+ <pass_batchid>N</pass_batchid>
+ <shared_objects_file/>
+ <entries>
+ <entry>
+ <name>collect fulfillment</name>
+ <description/>
+ <type>TRANS</type>
+ <attributes/>
+ <specification_method>filename</specification_method>
+ <trans_object_id/>
+ <filename>/home/stephan/transformation-job-bi/collect_fulfillment.ktr</filename>
+ <transname/>
+ <arg_from_previous>N</arg_from_previous>
+ <params_from_previous>N</params_from_previous>
+ <exec_per_row>N</exec_per_row>
+ <clear_rows>N</clear_rows>
+ <clear_files>N</clear_files>
+ <set_logfile>N</set_logfile>
+ <logfile/>
+ <logext/>
+ <add_date>N</add_date>
+ <add_time>N</add_time>
+ <loglevel>Basic</loglevel>
+ <cluster>N</cluster>
+ <slave_server_name/>
+ <set_append_logfile>N</set_append_logfile>
+ <wait_until_finished>Y</wait_until_finished>
+ <follow_abort_remote>N</follow_abort_remote>
+ <create_parent_folder>N</create_parent_folder>
+ <logging_remote_work>N</logging_remote_work>
+ <run_configuration>Pentaho local</run_configuration>
+ <suppress_result_data>N</suppress_result_data>
+ <parameters>
+ <pass_all_parameters>Y</pass_all_parameters>
+ </parameters>
+ <parallel>N</parallel>
+ <draw>Y</draw>
+ <nr>0</nr>
+ <xloc>384</xloc>
+ <yloc>80</yloc>
+ <attributes_kjc/>
+ </entry>
+ <entry>
+ <name>Start</name>
+ <description/>
+ <type>SPECIAL</type>
+ <attributes/>
+ <start>Y</start>
+ <dummy>N</dummy>
+ <repeat>N</repeat>
+ <schedulerType>0</schedulerType>
+ <intervalSeconds>0</intervalSeconds>
+ <intervalMinutes>60</intervalMinutes>
+ <hour>12</hour>
+ <minutes>0</minutes>
+ <weekDay>1</weekDay>
+ <DayOfMonth>1</DayOfMonth>
+ <parallel>N</parallel>
+ <draw>Y</draw>
+ <nr>0</nr>
+ <xloc>176</xloc>
+ <yloc>80</yloc>
+ <attributes_kjc/>
+ </entry>
+ <entry>
+ <name>collect fulfillment po</name>
+ <description/>
+ <type>TRANS</type>
+ <attributes/>
+ <specification_method>filename</specification_method>
+ <trans_object_id/>
+ <filename>/home/stephan/transformation-job-bi/collect_fulfillment_po.ktr</filename>
+ <transname/>
+ <arg_from_previous>N</arg_from_previous>
+ <params_from_previous>N</params_from_previous>
+ <exec_per_row>N</exec_per_row>
+ <clear_rows>N</clear_rows>
+ <clear_files>N</clear_files>
+ <set_logfile>N</set_logfile>
+ <logfile/>
+ <logext/>
+ <add_date>N</add_date>
+ <add_time>N</add_time>
+ <loglevel>Basic</loglevel>
+ <cluster>N</cluster>
+ <slave_server_name/>
+ <set_append_logfile>N</set_append_logfile>
+ <wait_until_finished>Y</wait_until_finished>
+ <follow_abort_remote>N</follow_abort_remote>
+ <create_parent_folder>N</create_parent_folder>
+ <logging_remote_work>N</logging_remote_work>
+ <run_configuration>Pentaho local</run_configuration>
+ <suppress_result_data>N</suppress_result_data>
+ <parameters>
+ <pass_all_parameters>Y</pass_all_parameters>
+ </parameters>
+ <parallel>N</parallel>
+ <draw>Y</draw>
+ <nr>0</nr>
+ <xloc>576</xloc>
+ <yloc>80</yloc>
+ <attributes_kjc/>
+ </entry>
+ </entries>
+ <hops>
+ <hop>
+ <from>Start</from>
+ <to>collect fulfillment</to>
+ <from_nr>0</from_nr>
+ <to_nr>0</to_nr>
+ <enabled>Y</enabled>
+ <evaluation>Y</evaluation>
+ <unconditional>Y</unconditional>
+ </hop>
+ <hop>
+ <from>collect fulfillment</from>
+ <to>collect fulfillment po</to>
+ <from_nr>0</from_nr>
+ <to_nr>0</to_nr>
+ <enabled>Y</enabled>
+ <evaluation>Y</evaluation>
+ <unconditional>N</unconditional>
+ </hop>
+ </hops>
+ <notepads>
+ </notepads>
+ <attributes/>
+</job>
diff --git a/update_null_md_vendor.ktr b/update_null_md_vendor.ktr
new file mode 100644
index 0000000..ba50cef
--- /dev/null
+++ b/update_null_md_vendor.ktr
@@ -0,0 +1,937 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<transformation>
+ <info>
+ <name>update_null_md_vendor</name>
+ <description/>
+ <extended_description/>
+ <trans_version/>
+ <trans_type>Normal</trans_type>
+ <directory>/</directory>
+ <parameters>
+ </parameters>
+ <log>
+ <trans-log-table>
+ <connection/>
+ <schema/>
+ <table/>
+ <size_limit_lines/>
+ <interval/>
+ <timeout_days/>
+ <field>
+ <id>ID_BATCH</id>
+ <enabled>Y</enabled>
+ <name>ID_BATCH</name>
+ </field>
+ <field>
+ <id>CHANNEL_ID</id>
+ <enabled>Y</enabled>
+ <name>CHANNEL_ID</name>
+ </field>
+ <field>
+ <id>TRANSNAME</id>
+ <enabled>Y</enabled>
+ <name>TRANSNAME</name>
+ </field>
+ <field>
+ <id>STATUS</id>
+ <enabled>Y</enabled>
+ <name>STATUS</name>
+ </field>
+ <field>
+ <id>LINES_READ</id>
+ <enabled>Y</enabled>
+ <name>LINES_READ</name>
+ <subject/>
+ </field>
+ <field>
+ <id>LINES_WRITTEN</id>
+ <enabled>Y</enabled>
+ <name>LINES_WRITTEN</name>
+ <subject/>
+ </field>
+ <field>
+ <id>LINES_UPDATED</id>
+ <enabled>Y</enabled>
+ <name>LINES_UPDATED</name>
+ <subject/>
+ </field>
+ <field>
+ <id>LINES_INPUT</id>
+ <enabled>Y</enabled>
+ <name>LINES_INPUT</name>
+ <subject/>
+ </field>
+ <field>
+ <id>LINES_OUTPUT</id>
+ <enabled>Y</enabled>
+ <name>LINES_OUTPUT</name>
+ <subject/>
+ </field>
+ <field>
+ <id>LINES_REJECTED</id>
+ <enabled>Y</enabled>
+ <name>LINES_REJECTED</name>
+ <subject/>
+ </field>
+ <field>
+ <id>ERRORS</id>
+ <enabled>Y</enabled>
+ <name>ERRORS</name>
+ </field>
+ <field>
+ <id>STARTDATE</id>
+ <enabled>Y</enabled>
+ <name>STARTDATE</name>
+ </field>
+ <field>
+ <id>ENDDATE</id>
+ <enabled>Y</enabled>
+ <name>ENDDATE</name>
+ </field>
+ <field>
+ <id>LOGDATE</id>
+ <enabled>Y</enabled>
+ <name>LOGDATE</name>
+ </field>
+ <field>
+ <id>DEPDATE</id>
+ <enabled>Y</enabled>
+ <name>DEPDATE</name>
+ </field>
+ <field>
+ <id>REPLAYDATE</id>
+ <enabled>Y</enabled>
+ <name>REPLAYDATE</name>
+ </field>
+ <field>
+ <id>LOG_FIELD</id>
+ <enabled>Y</enabled>
+ <name>LOG_FIELD</name>
+ </field>
+ <field>
+ <id>EXECUTING_SERVER</id>
+ <enabled>N</enabled>
+ <name>EXECUTING_SERVER</name>
+ </field>
+ <field>
+ <id>EXECUTING_USER</id>
+ <enabled>N</enabled>
+ <name>EXECUTING_USER</name>
+ </field>
+ <field>
+ <id>CLIENT</id>
+ <enabled>N</enabled>
+ <name>CLIENT</name>
+ </field>
+ </trans-log-table>
+ <perf-log-table>
+ <connection/>
+ <schema/>
+ <table/>
+ <interval/>
+ <timeout_days/>
+ <field>
+ <id>ID_BATCH</id>
+ <enabled>Y</enabled>
+ <name>ID_BATCH</name>
+ </field>
+ <field>
+ <id>SEQ_NR</id>
+ <enabled>Y</enabled>
+ <name>SEQ_NR</name>
+ </field>
+ <field>
+ <id>LOGDATE</id>
+ <enabled>Y</enabled>
+ <name>LOGDATE</name>
+ </field>
+ <field>
+ <id>TRANSNAME</id>
+ <enabled>Y</enabled>
+ <name>TRANSNAME</name>
+ </field>
+ <field>
+ <id>STEPNAME</id>
+ <enabled>Y</enabled>
+ <name>STEPNAME</name>
+ </field>
+ <field>
+ <id>STEP_COPY</id>
+ <enabled>Y</enabled>
+ <name>STEP_COPY</name>
+ </field>
+ <field>
+ <id>LINES_READ</id>
+ <enabled>Y</enabled>
+ <name>LINES_READ</name>
+ </field>
+ <field>
+ <id>LINES_WRITTEN</id>
+ <enabled>Y</enabled>
+ <name>LINES_WRITTEN</name>
+ </field>
+ <field>
+ <id>LINES_UPDATED</id>
+ <enabled>Y</enabled>
+ <name>LINES_UPDATED</name>
+ </field>
+ <field>
+ <id>LINES_INPUT</id>
+ <enabled>Y</enabled>
+ <name>LINES_INPUT</name>
+ </field>
+ <field>
+ <id>LINES_OUTPUT</id>
+ <enabled>Y</enabled>
+ <name>LINES_OUTPUT</name>
+ </field>
+ <field>
+ <id>LINES_REJECTED</id>
+ <enabled>Y</enabled>
+ <name>LINES_REJECTED</name>
+ </field>
+ <field>
+ <id>ERRORS</id>
+ <enabled>Y</enabled>
+ <name>ERRORS</name>
+ </field>
+ <field>
+ <id>INPUT_BUFFER_ROWS</id>
+ <enabled>Y</enabled>
+ <name>INPUT_BUFFER_ROWS</name>
+ </field>
+ <field>
+ <id>OUTPUT_BUFFER_ROWS</id>
+ <enabled>Y</enabled>
+ <name>OUTPUT_BUFFER_ROWS</name>
+ </field>
+ </perf-log-table>
+ <channel-log-table>
+ <connection/>
+ <schema/>
+ <table/>
+ <timeout_days/>
+ <field>
+ <id>ID_BATCH</id>
+ <enabled>Y</enabled>
+ <name>ID_BATCH</name>
+ </field>
+ <field>
+ <id>CHANNEL_ID</id>
+ <enabled>Y</enabled>
+ <name>CHANNEL_ID</name>
+ </field>
+ <field>
+ <id>LOG_DATE</id>
+ <enabled>Y</enabled>
+ <name>LOG_DATE</name>
+ </field>
+ <field>
+ <id>LOGGING_OBJECT_TYPE</id>
+ <enabled>Y</enabled>
+ <name>LOGGING_OBJECT_TYPE</name>
+ </field>
+ <field>
+ <id>OBJECT_NAME</id>
+ <enabled>Y</enabled>
+ <name>OBJECT_NAME</name>
+ </field>
+ <field>
+ <id>OBJECT_COPY</id>
+ <enabled>Y</enabled>
+ <name>OBJECT_COPY</name>
+ </field>
+ <field>
+ <id>REPOSITORY_DIRECTORY</id>
+ <enabled>Y</enabled>
+ <name>REPOSITORY_DIRECTORY</name>
+ </field>
+ <field>
+ <id>FILENAME</id>
+ <enabled>Y</enabled>
+ <name>FILENAME</name>
+ </field>
+ <field>
+ <id>OBJECT_ID</id>
+ <enabled>Y</enabled>
+ <name>OBJECT_ID</name>
+ </field>
+ <field>
+ <id>OBJECT_REVISION</id>
+ <enabled>Y</enabled>
+ <name>OBJECT_REVISION</name>
+ </field>
+ <field>
+ <id>PARENT_CHANNEL_ID</id>
+ <enabled>Y</enabled>
+ <name>PARENT_CHANNEL_ID</name>
+ </field>
+ <field>
+ <id>ROOT_CHANNEL_ID</id>
+ <enabled>Y</enabled>
+ <name>ROOT_CHANNEL_ID</name>
+ </field>
+ </channel-log-table>
+ <step-log-table>
+ <connection/>
+ <schema/>
+ <table/>
+ <timeout_days/>
+ <field>
+ <id>ID_BATCH</id>
+ <enabled>Y</enabled>
+ <name>ID_BATCH</name>
+ </field>
+ <field>
+ <id>CHANNEL_ID</id>
+ <enabled>Y</enabled>
+ <name>CHANNEL_ID</name>
+ </field>
+ <field>
+ <id>LOG_DATE</id>
+ <enabled>Y</enabled>
+ <name>LOG_DATE</name>
+ </field>
+ <field>
+ <id>TRANSNAME</id>
+ <enabled>Y</enabled>
+ <name>TRANSNAME</name>
+ </field>
+ <field>
+ <id>STEPNAME</id>
+ <enabled>Y</enabled>
+ <name>STEPNAME</name>
+ </field>
+ <field>
+ <id>STEP_COPY</id>
+ <enabled>Y</enabled>
+ <name>STEP_COPY</name>
+ </field>
+ <field>
+ <id>LINES_READ</id>
+ <enabled>Y</enabled>
+ <name>LINES_READ</name>
+ </field>
+ <field>
+ <id>LINES_WRITTEN</id>
+ <enabled>Y</enabled>
+ <name>LINES_WRITTEN</name>
+ </field>
+ <field>
+ <id>LINES_UPDATED</id>
+ <enabled>Y</enabled>
+ <name>LINES_UPDATED</name>
+ </field>
+ <field>
+ <id>LINES_INPUT</id>
+ <enabled>Y</enabled>
+ <name>LINES_INPUT</name>
+ </field>
+ <field>
+ <id>LINES_OUTPUT</id>
+ <enabled>Y</enabled>
+ <name>LINES_OUTPUT</name>
+ </field>
+ <field>
+ <id>LINES_REJECTED</id>
+ <enabled>Y</enabled>
+ <name>LINES_REJECTED</name>
+ </field>
+ <field>
+ <id>ERRORS</id>
+ <enabled>Y</enabled>
+ <name>ERRORS</name>
+ </field>
+ <field>
+ <id>LOG_FIELD</id>
+ <enabled>N</enabled>
+ <name>LOG_FIELD</name>
+ </field>
+ </step-log-table>
+ <metrics-log-table>
+ <connection/>
+ <schema/>
+ <table/>
+ <timeout_days/>
+ <field>
+ <id>ID_BATCH</id>
+ <enabled>Y</enabled>
+ <name>ID_BATCH</name>
+ </field>
+ <field>
+ <id>CHANNEL_ID</id>
+ <enabled>Y</enabled>
+ <name>CHANNEL_ID</name>
+ </field>
+ <field>
+ <id>LOG_DATE</id>
+ <enabled>Y</enabled>
+ <name>LOG_DATE</name>
+ </field>
+ <field>
+ <id>METRICS_DATE</id>
+ <enabled>Y</enabled>
+ <name>METRICS_DATE</name>
+ </field>
+ <field>
+ <id>METRICS_CODE</id>
+ <enabled>Y</enabled>
+ <name>METRICS_CODE</name>
+ </field>
+ <field>
+ <id>METRICS_DESCRIPTION</id>
+ <enabled>Y</enabled>
+ <name>METRICS_DESCRIPTION</name>
+ </field>
+ <field>
+ <id>METRICS_SUBJECT</id>
+ <enabled>Y</enabled>
+ <name>METRICS_SUBJECT</name>
+ </field>
+ <field>
+ <id>METRICS_TYPE</id>
+ <enabled>Y</enabled>
+ <name>METRICS_TYPE</name>
+ </field>
+ <field>
+ <id>METRICS_VALUE</id>
+ <enabled>Y</enabled>
+ <name>METRICS_VALUE</name>
+ </field>
+ </metrics-log-table>
+ </log>
+ <maxdate>
+ <connection/>
+ <table/>
+ <field/>
+ <offset>0.0</offset>
+ <maxdiff>0.0</maxdiff>
+ </maxdate>
+ <size_rowset>10000</size_rowset>
+ <sleep_time_empty>50</sleep_time_empty>
+ <sleep_time_full>50</sleep_time_full>
+ <unique_connections>N</unique_connections>
+ <feedback_shown>Y</feedback_shown>
+ <feedback_size>50000</feedback_size>
+ <using_thread_priorities>Y</using_thread_priorities>
+ <shared_objects_file/>
+ <capture_step_performance>N</capture_step_performance>
+ <step_performance_capturing_delay>1000</step_performance_capturing_delay>
+ <step_performance_capturing_size_limit>100</step_performance_capturing_size_limit>
+ <dependencies>
+ </dependencies>
+ <partitionschemas>
+ </partitionschemas>
+ <slaveservers>
+ </slaveservers>
+ <clusterschemas>
+ </clusterschemas>
+ <created_user>-</created_user>
+ <created_date>2024/10/17 14:45:16.821</created_date>
+ <modified_user>-</modified_user>
+ <modified_date>2024/10/17 14:45:16.821</modified_date>
+ <key_for_session_key/>
+ <is_key_private>N</is_key_private>
+ </info>
+ <notepads>
+ </notepads>
+ <connection>
+ <name>erp indoteknik production</name>
+ <server>localhost</server>
+ <type>POSTGRESQL</type>
+ <access>Native</access>
+ <database>erp_indoteknik</database>
+ <port>5901</port>
+ <username>odoo</username>
+ <password>Encrypted 2be98afc82bdfd8dd9a2ca45acc83f6c3</password>
+ <servername/>
+ <data_tablespace/>
+ <index_tablespace/>
+ <attributes>
+ <attribute>
+ <code>FORCE_IDENTIFIERS_TO_LOWERCASE</code>
+ <attribute>N</attribute>
+ </attribute>
+ <attribute>
+ <code>FORCE_IDENTIFIERS_TO_UPPERCASE</code>
+ <attribute>N</attribute>
+ </attribute>
+ <attribute>
+ <code>IS_CLUSTERED</code>
+ <attribute>N</attribute>
+ </attribute>
+ <attribute>
+ <code>PORT_NUMBER</code>
+ <attribute>5901</attribute>
+ </attribute>
+ <attribute>
+ <code>PRESERVE_RESERVED_WORD_CASE</code>
+ <attribute>Y</attribute>
+ </attribute>
+ <attribute>
+ <code>QUOTE_ALL_FIELDS</code>
+ <attribute>N</attribute>
+ </attribute>
+ <attribute>
+ <code>SUPPORTS_BOOLEAN_DATA_TYPE</code>
+ <attribute>Y</attribute>
+ </attribute>
+ <attribute>
+ <code>SUPPORTS_TIMESTAMP_DATA_TYPE</code>
+ <attribute>Y</attribute>
+ </attribute>
+ <attribute>
+ <code>USE_POOLING</code>
+ <attribute>N</attribute>
+ </attribute>
+ </attributes>
+ </connection>
+ <order>
+ <hop>
+ <from>sale order line</from>
+ <to>Merge join</to>
+ <enabled>Y</enabled>
+ </hop>
+ <hop>
+ <from>pricelist_winner</from>
+ <to>Merge join</to>
+ <enabled>Y</enabled>
+ </hop>
+ <hop>
+ <from>Merge join</from>
+ <to>Filter rows</to>
+ <enabled>Y</enabled>
+ </hop>
+ <hop>
+ <from>Filter rows</from>
+ <to>Select values</to>
+ <enabled>Y</enabled>
+ </hop>
+ <hop>
+ <from>Filter rows</from>
+ <to>Write to log</to>
+ <enabled>Y</enabled>
+ </hop>
+ <hop>
+ <from>Select values</from>
+ <to>Update</to>
+ <enabled>Y</enabled>
+ </hop>
+ </order>
+ <step>
+ <name>pricelist_winner</name>
+ <type>TableInput</type>
+ <description/>
+ <distribute>Y</distribute>
+ <custom_distribution/>
+ <copies>1</copies>
+ <partitioning>
+ <method>none</method>
+ <schema_name/>
+ </partitioning>
+ <connection>erp indoteknik production</connection>
+ <sql>SELECT id as pricelist_id, product_id, vendor_id FROM purchase_pricelist
+where is_winner = true
+order by product_id</sql>
+ <limit>0</limit>
+ <lookup/>
+ <execute_each_row>N</execute_each_row>
+ <variables_active>N</variables_active>
+ <lazy_conversion_active>N</lazy_conversion_active>
+ <cached_row_meta_active>N</cached_row_meta_active>
+ <row-meta>
+ <value-meta>
+ <type>Integer</type>
+ <storagetype>normal</storagetype>
+ <name>pricelist_id</name>
+ <length>9</length>
+ <precision>0</precision>
+ <origin>pricelist_winner</origin>
+ <comments>pricelist_id</comments>
+ <conversion_Mask>####0;-####0</conversion_Mask>
+ <decimal_symbol>.</decimal_symbol>
+ <grouping_symbol>,</grouping_symbol>
+ <currency_symbol/>
+ <trim_type>none</trim_type>
+ <case_insensitive>N</case_insensitive>
+ <collator_disabled>Y</collator_disabled>
+ <collator_strength>0</collator_strength>
+ <sort_descending>N</sort_descending>
+ <output_padding>N</output_padding>
+ <date_format_lenient>N</date_format_lenient>
+ <date_format_locale>en_US</date_format_locale>
+ <date_format_timezone>Asia/Bangkok</date_format_timezone>
+ <lenient_string_to_number>N</lenient_string_to_number>
+ </value-meta>
+ <value-meta>
+ <type>Integer</type>
+ <storagetype>normal</storagetype>
+ <name>product_id</name>
+ <length>9</length>
+ <precision>0</precision>
+ <origin>pricelist_winner</origin>
+ <comments>product_id</comments>
+ <conversion_Mask>####0;-####0</conversion_Mask>
+ <decimal_symbol>.</decimal_symbol>
+ <grouping_symbol>,</grouping_symbol>
+ <currency_symbol/>
+ <trim_type>none</trim_type>
+ <case_insensitive>N</case_insensitive>
+ <collator_disabled>Y</collator_disabled>
+ <collator_strength>0</collator_strength>
+ <sort_descending>N</sort_descending>
+ <output_padding>N</output_padding>
+ <date_format_lenient>N</date_format_lenient>
+ <date_format_locale>en_US</date_format_locale>
+ <date_format_timezone>Asia/Bangkok</date_format_timezone>
+ <lenient_string_to_number>N</lenient_string_to_number>
+ </value-meta>
+ <value-meta>
+ <type>Integer</type>
+ <storagetype>normal</storagetype>
+ <name>vendor_id</name>
+ <length>9</length>
+ <precision>0</precision>
+ <origin>pricelist_winner</origin>
+ <comments>vendor_id</comments>
+ <conversion_Mask>####0;-####0</conversion_Mask>
+ <decimal_symbol>.</decimal_symbol>
+ <grouping_symbol>,</grouping_symbol>
+ <currency_symbol/>
+ <trim_type>none</trim_type>
+ <case_insensitive>N</case_insensitive>
+ <collator_disabled>Y</collator_disabled>
+ <collator_strength>0</collator_strength>
+ <sort_descending>N</sort_descending>
+ <output_padding>N</output_padding>
+ <date_format_lenient>N</date_format_lenient>
+ <date_format_locale>en_US</date_format_locale>
+ <date_format_timezone>Asia/Bangkok</date_format_timezone>
+ <lenient_string_to_number>N</lenient_string_to_number>
+ </value-meta>
+ </row-meta>
+ <attributes/>
+ <cluster_schema/>
+ <remotesteps>
+ <input>
+ </input>
+ <output>
+ </output>
+ </remotesteps>
+ <GUI>
+ <xloc>240</xloc>
+ <yloc>144</yloc>
+ <draw>Y</draw>
+ </GUI>
+ </step>
+ <step>
+ <name>Merge join</name>
+ <type>MergeJoin</type>
+ <description/>
+ <distribute>Y</distribute>
+ <custom_distribution/>
+ <copies>1</copies>
+ <partitioning>
+ <method>none</method>
+ <schema_name/>
+ </partitioning>
+ <join_type>LEFT OUTER</join_type>
+ <step1>sale order line</step1>
+ <step2>pricelist_winner</step2>
+ <keys_1>
+ <key>product_id</key>
+ </keys_1>
+ <keys_2>
+ <key>product_id</key>
+ </keys_2>
+ <attributes/>
+ <cluster_schema/>
+ <remotesteps>
+ <input>
+ </input>
+ <output>
+ </output>
+ </remotesteps>
+ <GUI>
+ <xloc>384</xloc>
+ <yloc>256</yloc>
+ <draw>Y</draw>
+ </GUI>
+ </step>
+ <step>
+ <name>sale order line</name>
+ <type>TableInput</type>
+ <description/>
+ <distribute>Y</distribute>
+ <custom_distribution/>
+ <copies>1</copies>
+ <partitioning>
+ <method>none</method>
+ <schema_name/>
+ </partitioning>
+ <connection>erp indoteknik production</connection>
+ <sql>select id as orderline_id, product_id, name from sale_order_line
+where vendor_md_id is null and order_id = 30881
+order by product_id</sql>
+ <limit>0</limit>
+ <lookup/>
+ <execute_each_row>N</execute_each_row>
+ <variables_active>N</variables_active>
+ <lazy_conversion_active>N</lazy_conversion_active>
+ <cached_row_meta_active>N</cached_row_meta_active>
+ <row-meta>
+ <value-meta>
+ <type>Integer</type>
+ <storagetype>normal</storagetype>
+ <name>orderline_id</name>
+ <length>9</length>
+ <precision>0</precision>
+ <origin>sale order line</origin>
+ <comments>orderline_id</comments>
+ <conversion_Mask>####0;-####0</conversion_Mask>
+ <decimal_symbol>.</decimal_symbol>
+ <grouping_symbol>,</grouping_symbol>
+ <currency_symbol/>
+ <trim_type>none</trim_type>
+ <case_insensitive>N</case_insensitive>
+ <collator_disabled>Y</collator_disabled>
+ <collator_strength>0</collator_strength>
+ <sort_descending>N</sort_descending>
+ <output_padding>N</output_padding>
+ <date_format_lenient>N</date_format_lenient>
+ <date_format_locale>en_US</date_format_locale>
+ <date_format_timezone>Asia/Bangkok</date_format_timezone>
+ <lenient_string_to_number>N</lenient_string_to_number>
+ </value-meta>
+ <value-meta>
+ <type>Integer</type>
+ <storagetype>normal</storagetype>
+ <name>product_id</name>
+ <length>9</length>
+ <precision>0</precision>
+ <origin>sale order line</origin>
+ <comments>product_id</comments>
+ <conversion_Mask>####0;-####0</conversion_Mask>
+ <decimal_symbol>.</decimal_symbol>
+ <grouping_symbol>,</grouping_symbol>
+ <currency_symbol/>
+ <trim_type>none</trim_type>
+ <case_insensitive>N</case_insensitive>
+ <collator_disabled>Y</collator_disabled>
+ <collator_strength>0</collator_strength>
+ <sort_descending>N</sort_descending>
+ <output_padding>N</output_padding>
+ <date_format_lenient>N</date_format_lenient>
+ <date_format_locale>en_US</date_format_locale>
+ <date_format_timezone>Asia/Bangkok</date_format_timezone>
+ <lenient_string_to_number>N</lenient_string_to_number>
+ </value-meta>
+ <value-meta>
+ <type>String</type>
+ <storagetype>normal</storagetype>
+ <name>name</name>
+ <length>2147483647</length>
+ <precision>-1</precision>
+ <origin>sale order line</origin>
+ <comments>name</comments>
+ <conversion_Mask/>
+ <decimal_symbol>.</decimal_symbol>
+ <grouping_symbol>,</grouping_symbol>
+ <currency_symbol/>
+ <trim_type>none</trim_type>
+ <case_insensitive>N</case_insensitive>
+ <collator_disabled>Y</collator_disabled>
+ <collator_strength>0</collator_strength>
+ <sort_descending>N</sort_descending>
+ <output_padding>N</output_padding>
+ <date_format_lenient>N</date_format_lenient>
+ <date_format_locale>en_US</date_format_locale>
+ <date_format_timezone>Asia/Bangkok</date_format_timezone>
+ <lenient_string_to_number>N</lenient_string_to_number>
+ </value-meta>
+ </row-meta>
+ <attributes/>
+ <cluster_schema/>
+ <remotesteps>
+ <input>
+ </input>
+ <output>
+ </output>
+ </remotesteps>
+ <GUI>
+ <xloc>240</xloc>
+ <yloc>336</yloc>
+ <draw>Y</draw>
+ </GUI>
+ </step>
+ <step>
+ <name>Filter rows</name>
+ <type>FilterRows</type>
+ <description/>
+ <distribute>Y</distribute>
+ <custom_distribution/>
+ <copies>1</copies>
+ <partitioning>
+ <method>none</method>
+ <schema_name/>
+ </partitioning>
+ <send_true_to>Select values</send_true_to>
+ <send_false_to>Write to log</send_false_to>
+ <compare>
+ <condition>
+ <negated>N</negated>
+ <leftvalue>vendor_id</leftvalue>
+ <function>IS NOT NULL</function>
+ <rightvalue/>
+ </condition>
+ </compare>
+ <attributes/>
+ <cluster_schema/>
+ <remotesteps>
+ <input>
+ </input>
+ <output>
+ </output>
+ </remotesteps>
+ <GUI>
+ <xloc>528</xloc>
+ <yloc>256</yloc>
+ <draw>Y</draw>
+ </GUI>
+ </step>
+ <step>
+ <name>Select values</name>
+ <type>SelectValues</type>
+ <description/>
+ <distribute>Y</distribute>
+ <custom_distribution/>
+ <copies>1</copies>
+ <partitioning>
+ <method>none</method>
+ <schema_name/>
+ </partitioning>
+ <fields>
+ <field>
+ <name>orderline_id</name>
+ <rename/>
+ </field>
+ <field>
+ <name>product_id</name>
+ <rename/>
+ </field>
+ <field>
+ <name>name</name>
+ <rename/>
+ </field>
+ <field>
+ <name>pricelist_id</name>
+ <rename/>
+ </field>
+ <field>
+ <name>product_id_1</name>
+ <rename/>
+ </field>
+ <field>
+ <name>vendor_id</name>
+ <rename/>
+ </field>
+ <select_unspecified>N</select_unspecified>
+ </fields>
+ <attributes/>
+ <cluster_schema/>
+ <remotesteps>
+ <input>
+ </input>
+ <output>
+ </output>
+ </remotesteps>
+ <GUI>
+ <xloc>672</xloc>
+ <yloc>256</yloc>
+ <draw>Y</draw>
+ </GUI>
+ </step>
+ <step>
+ <name>Write to log</name>
+ <type>WriteToLog</type>
+ <description/>
+ <distribute>Y</distribute>
+ <custom_distribution/>
+ <copies>1</copies>
+ <partitioning>
+ <method>none</method>
+ <schema_name/>
+ </partitioning>
+ <loglevel>log_level_basic</loglevel>
+ <displayHeader>Y</displayHeader>
+ <limitRows>N</limitRows>
+ <limitRowsNumber>0</limitRowsNumber>
+ <logmessage/>
+ <fields>
+ </fields>
+ <attributes/>
+ <cluster_schema/>
+ <remotesteps>
+ <input>
+ </input>
+ <output>
+ </output>
+ </remotesteps>
+ <GUI>
+ <xloc>528</xloc>
+ <yloc>336</yloc>
+ <draw>Y</draw>
+ </GUI>
+ </step>
+ <step>
+ <name>Update</name>
+ <type>Update</type>
+ <description/>
+ <distribute>Y</distribute>
+ <custom_distribution/>
+ <copies>1</copies>
+ <partitioning>
+ <method>none</method>
+ <schema_name/>
+ </partitioning>
+ <connection>erp indoteknik production</connection>
+ <skip_lookup>N</skip_lookup>
+ <commit>100</commit>
+ <use_batch>N</use_batch>
+ <error_ignored>N</error_ignored>
+ <ignore_flag_field/>
+ <lookup>
+ <schema>public</schema>
+ <table>sale_order_line</table>
+ <key>
+ <name>orderline_id</name>
+ <field>id</field>
+ <condition>=</condition>
+ <name2/>
+ </key>
+ <value>
+ <name>md_vendor_id</name>
+ <rename>vendor_id</rename>
+ </value>
+ </lookup>
+ <attributes/>
+ <cluster_schema/>
+ <remotesteps>
+ <input>
+ </input>
+ <output>
+ </output>
+ </remotesteps>
+ <GUI>
+ <xloc>816</xloc>
+ <yloc>256</yloc>
+ <draw>Y</draw>
+ </GUI>
+ </step>
+ <step_error_handling>
+ </step_error_handling>
+ <slave-step-copy-partition-distribution>
+ </slave-step-copy-partition-distribution>
+ <slave_transformation>N</slave_transformation>
+ <attributes/>
+</transformation>
diff --git a/update_state_reserve_picking.ktr b/update_state_reserve_picking.ktr
new file mode 100644
index 0000000..f7b17a9
--- /dev/null
+++ b/update_state_reserve_picking.ktr
@@ -0,0 +1,552 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<transformation>
+ <info>
+ <name>update_state_reserve_picking</name>
+ <description/>
+ <extended_description/>
+ <trans_version/>
+ <trans_type>Normal</trans_type>
+ <directory>/</directory>
+ <parameters>
+ </parameters>
+ <log>
+ <trans-log-table>
+ <connection/>
+ <schema/>
+ <table/>
+ <size_limit_lines/>
+ <interval/>
+ <timeout_days/>
+ <field>
+ <id>ID_BATCH</id>
+ <enabled>Y</enabled>
+ <name>ID_BATCH</name>
+ </field>
+ <field>
+ <id>CHANNEL_ID</id>
+ <enabled>Y</enabled>
+ <name>CHANNEL_ID</name>
+ </field>
+ <field>
+ <id>TRANSNAME</id>
+ <enabled>Y</enabled>
+ <name>TRANSNAME</name>
+ </field>
+ <field>
+ <id>STATUS</id>
+ <enabled>Y</enabled>
+ <name>STATUS</name>
+ </field>
+ <field>
+ <id>LINES_READ</id>
+ <enabled>Y</enabled>
+ <name>LINES_READ</name>
+ <subject/>
+ </field>
+ <field>
+ <id>LINES_WRITTEN</id>
+ <enabled>Y</enabled>
+ <name>LINES_WRITTEN</name>
+ <subject/>
+ </field>
+ <field>
+ <id>LINES_UPDATED</id>
+ <enabled>Y</enabled>
+ <name>LINES_UPDATED</name>
+ <subject/>
+ </field>
+ <field>
+ <id>LINES_INPUT</id>
+ <enabled>Y</enabled>
+ <name>LINES_INPUT</name>
+ <subject/>
+ </field>
+ <field>
+ <id>LINES_OUTPUT</id>
+ <enabled>Y</enabled>
+ <name>LINES_OUTPUT</name>
+ <subject/>
+ </field>
+ <field>
+ <id>LINES_REJECTED</id>
+ <enabled>Y</enabled>
+ <name>LINES_REJECTED</name>
+ <subject/>
+ </field>
+ <field>
+ <id>ERRORS</id>
+ <enabled>Y</enabled>
+ <name>ERRORS</name>
+ </field>
+ <field>
+ <id>STARTDATE</id>
+ <enabled>Y</enabled>
+ <name>STARTDATE</name>
+ </field>
+ <field>
+ <id>ENDDATE</id>
+ <enabled>Y</enabled>
+ <name>ENDDATE</name>
+ </field>
+ <field>
+ <id>LOGDATE</id>
+ <enabled>Y</enabled>
+ <name>LOGDATE</name>
+ </field>
+ <field>
+ <id>DEPDATE</id>
+ <enabled>Y</enabled>
+ <name>DEPDATE</name>
+ </field>
+ <field>
+ <id>REPLAYDATE</id>
+ <enabled>Y</enabled>
+ <name>REPLAYDATE</name>
+ </field>
+ <field>
+ <id>LOG_FIELD</id>
+ <enabled>Y</enabled>
+ <name>LOG_FIELD</name>
+ </field>
+ <field>
+ <id>EXECUTING_SERVER</id>
+ <enabled>N</enabled>
+ <name>EXECUTING_SERVER</name>
+ </field>
+ <field>
+ <id>EXECUTING_USER</id>
+ <enabled>N</enabled>
+ <name>EXECUTING_USER</name>
+ </field>
+ <field>
+ <id>CLIENT</id>
+ <enabled>N</enabled>
+ <name>CLIENT</name>
+ </field>
+ </trans-log-table>
+ <perf-log-table>
+ <connection/>
+ <schema/>
+ <table/>
+ <interval/>
+ <timeout_days/>
+ <field>
+ <id>ID_BATCH</id>
+ <enabled>Y</enabled>
+ <name>ID_BATCH</name>
+ </field>
+ <field>
+ <id>SEQ_NR</id>
+ <enabled>Y</enabled>
+ <name>SEQ_NR</name>
+ </field>
+ <field>
+ <id>LOGDATE</id>
+ <enabled>Y</enabled>
+ <name>LOGDATE</name>
+ </field>
+ <field>
+ <id>TRANSNAME</id>
+ <enabled>Y</enabled>
+ <name>TRANSNAME</name>
+ </field>
+ <field>
+ <id>STEPNAME</id>
+ <enabled>Y</enabled>
+ <name>STEPNAME</name>
+ </field>
+ <field>
+ <id>STEP_COPY</id>
+ <enabled>Y</enabled>
+ <name>STEP_COPY</name>
+ </field>
+ <field>
+ <id>LINES_READ</id>
+ <enabled>Y</enabled>
+ <name>LINES_READ</name>
+ </field>
+ <field>
+ <id>LINES_WRITTEN</id>
+ <enabled>Y</enabled>
+ <name>LINES_WRITTEN</name>
+ </field>
+ <field>
+ <id>LINES_UPDATED</id>
+ <enabled>Y</enabled>
+ <name>LINES_UPDATED</name>
+ </field>
+ <field>
+ <id>LINES_INPUT</id>
+ <enabled>Y</enabled>
+ <name>LINES_INPUT</name>
+ </field>
+ <field>
+ <id>LINES_OUTPUT</id>
+ <enabled>Y</enabled>
+ <name>LINES_OUTPUT</name>
+ </field>
+ <field>
+ <id>LINES_REJECTED</id>
+ <enabled>Y</enabled>
+ <name>LINES_REJECTED</name>
+ </field>
+ <field>
+ <id>ERRORS</id>
+ <enabled>Y</enabled>
+ <name>ERRORS</name>
+ </field>
+ <field>
+ <id>INPUT_BUFFER_ROWS</id>
+ <enabled>Y</enabled>
+ <name>INPUT_BUFFER_ROWS</name>
+ </field>
+ <field>
+ <id>OUTPUT_BUFFER_ROWS</id>
+ <enabled>Y</enabled>
+ <name>OUTPUT_BUFFER_ROWS</name>
+ </field>
+ </perf-log-table>
+ <channel-log-table>
+ <connection/>
+ <schema/>
+ <table/>
+ <timeout_days/>
+ <field>
+ <id>ID_BATCH</id>
+ <enabled>Y</enabled>
+ <name>ID_BATCH</name>
+ </field>
+ <field>
+ <id>CHANNEL_ID</id>
+ <enabled>Y</enabled>
+ <name>CHANNEL_ID</name>
+ </field>
+ <field>
+ <id>LOG_DATE</id>
+ <enabled>Y</enabled>
+ <name>LOG_DATE</name>
+ </field>
+ <field>
+ <id>LOGGING_OBJECT_TYPE</id>
+ <enabled>Y</enabled>
+ <name>LOGGING_OBJECT_TYPE</name>
+ </field>
+ <field>
+ <id>OBJECT_NAME</id>
+ <enabled>Y</enabled>
+ <name>OBJECT_NAME</name>
+ </field>
+ <field>
+ <id>OBJECT_COPY</id>
+ <enabled>Y</enabled>
+ <name>OBJECT_COPY</name>
+ </field>
+ <field>
+ <id>REPOSITORY_DIRECTORY</id>
+ <enabled>Y</enabled>
+ <name>REPOSITORY_DIRECTORY</name>
+ </field>
+ <field>
+ <id>FILENAME</id>
+ <enabled>Y</enabled>
+ <name>FILENAME</name>
+ </field>
+ <field>
+ <id>OBJECT_ID</id>
+ <enabled>Y</enabled>
+ <name>OBJECT_ID</name>
+ </field>
+ <field>
+ <id>OBJECT_REVISION</id>
+ <enabled>Y</enabled>
+ <name>OBJECT_REVISION</name>
+ </field>
+ <field>
+ <id>PARENT_CHANNEL_ID</id>
+ <enabled>Y</enabled>
+ <name>PARENT_CHANNEL_ID</name>
+ </field>
+ <field>
+ <id>ROOT_CHANNEL_ID</id>
+ <enabled>Y</enabled>
+ <name>ROOT_CHANNEL_ID</name>
+ </field>
+ </channel-log-table>
+ <step-log-table>
+ <connection/>
+ <schema/>
+ <table/>
+ <timeout_days/>
+ <field>
+ <id>ID_BATCH</id>
+ <enabled>Y</enabled>
+ <name>ID_BATCH</name>
+ </field>
+ <field>
+ <id>CHANNEL_ID</id>
+ <enabled>Y</enabled>
+ <name>CHANNEL_ID</name>
+ </field>
+ <field>
+ <id>LOG_DATE</id>
+ <enabled>Y</enabled>
+ <name>LOG_DATE</name>
+ </field>
+ <field>
+ <id>TRANSNAME</id>
+ <enabled>Y</enabled>
+ <name>TRANSNAME</name>
+ </field>
+ <field>
+ <id>STEPNAME</id>
+ <enabled>Y</enabled>
+ <name>STEPNAME</name>
+ </field>
+ <field>
+ <id>STEP_COPY</id>
+ <enabled>Y</enabled>
+ <name>STEP_COPY</name>
+ </field>
+ <field>
+ <id>LINES_READ</id>
+ <enabled>Y</enabled>
+ <name>LINES_READ</name>
+ </field>
+ <field>
+ <id>LINES_WRITTEN</id>
+ <enabled>Y</enabled>
+ <name>LINES_WRITTEN</name>
+ </field>
+ <field>
+ <id>LINES_UPDATED</id>
+ <enabled>Y</enabled>
+ <name>LINES_UPDATED</name>
+ </field>
+ <field>
+ <id>LINES_INPUT</id>
+ <enabled>Y</enabled>
+ <name>LINES_INPUT</name>
+ </field>
+ <field>
+ <id>LINES_OUTPUT</id>
+ <enabled>Y</enabled>
+ <name>LINES_OUTPUT</name>
+ </field>
+ <field>
+ <id>LINES_REJECTED</id>
+ <enabled>Y</enabled>
+ <name>LINES_REJECTED</name>
+ </field>
+ <field>
+ <id>ERRORS</id>
+ <enabled>Y</enabled>
+ <name>ERRORS</name>
+ </field>
+ <field>
+ <id>LOG_FIELD</id>
+ <enabled>N</enabled>
+ <name>LOG_FIELD</name>
+ </field>
+ </step-log-table>
+ <metrics-log-table>
+ <connection/>
+ <schema/>
+ <table/>
+ <timeout_days/>
+ <field>
+ <id>ID_BATCH</id>
+ <enabled>Y</enabled>
+ <name>ID_BATCH</name>
+ </field>
+ <field>
+ <id>CHANNEL_ID</id>
+ <enabled>Y</enabled>
+ <name>CHANNEL_ID</name>
+ </field>
+ <field>
+ <id>LOG_DATE</id>
+ <enabled>Y</enabled>
+ <name>LOG_DATE</name>
+ </field>
+ <field>
+ <id>METRICS_DATE</id>
+ <enabled>Y</enabled>
+ <name>METRICS_DATE</name>
+ </field>
+ <field>
+ <id>METRICS_CODE</id>
+ <enabled>Y</enabled>
+ <name>METRICS_CODE</name>
+ </field>
+ <field>
+ <id>METRICS_DESCRIPTION</id>
+ <enabled>Y</enabled>
+ <name>METRICS_DESCRIPTION</name>
+ </field>
+ <field>
+ <id>METRICS_SUBJECT</id>
+ <enabled>Y</enabled>
+ <name>METRICS_SUBJECT</name>
+ </field>
+ <field>
+ <id>METRICS_TYPE</id>
+ <enabled>Y</enabled>
+ <name>METRICS_TYPE</name>
+ </field>
+ <field>
+ <id>METRICS_VALUE</id>
+ <enabled>Y</enabled>
+ <name>METRICS_VALUE</name>
+ </field>
+ </metrics-log-table>
+ </log>
+ <maxdate>
+ <connection/>
+ <table/>
+ <field/>
+ <offset>0.0</offset>
+ <maxdiff>0.0</maxdiff>
+ </maxdate>
+ <size_rowset>10000</size_rowset>
+ <sleep_time_empty>50</sleep_time_empty>
+ <sleep_time_full>50</sleep_time_full>
+ <unique_connections>N</unique_connections>
+ <feedback_shown>Y</feedback_shown>
+ <feedback_size>50000</feedback_size>
+ <using_thread_priorities>Y</using_thread_priorities>
+ <shared_objects_file/>
+ <capture_step_performance>N</capture_step_performance>
+ <step_performance_capturing_delay>1000</step_performance_capturing_delay>
+ <step_performance_capturing_size_limit>100</step_performance_capturing_size_limit>
+ <dependencies>
+ </dependencies>
+ <partitionschemas>
+ </partitionschemas>
+ <slaveservers>
+ </slaveservers>
+ <clusterschemas>
+ </clusterschemas>
+ <created_user>-</created_user>
+ <created_date>2024/11/08 15:58:55.966</created_date>
+ <modified_user>-</modified_user>
+ <modified_date>2024/11/08 15:58:55.966</modified_date>
+ <key_for_session_key>H4sIAAAAAAAAAAMAAAAAAAAAAAA=</key_for_session_key>
+ <is_key_private>N</is_key_private>
+ </info>
+ <notepads>
+ </notepads>
+ <order>
+ </order>
+ <step>
+ <name>Table input</name>
+ <type>TableInput</type>
+ <description/>
+ <distribute>Y</distribute>
+ <custom_distribution/>
+ <copies>1</copies>
+ <partitioning>
+ <method>none</method>
+ <schema_name/>
+ </partitioning>
+ <connection/>
+ <sql>SELECT &lt;values> FROM &lt;table name> WHERE &lt;conditions></sql>
+ <limit>0</limit>
+ <lookup/>
+ <execute_each_row>N</execute_each_row>
+ <variables_active>N</variables_active>
+ <lazy_conversion_active>N</lazy_conversion_active>
+ <cached_row_meta_active>N</cached_row_meta_active>
+ <row-meta/>
+ <attributes/>
+ <cluster_schema/>
+ <remotesteps>
+ <input>
+ </input>
+ <output>
+ </output>
+ </remotesteps>
+ <GUI>
+ <xloc>112</xloc>
+ <yloc>96</yloc>
+ <draw>Y</draw>
+ </GUI>
+ </step>
+ <step>
+ <name>Execute row SQL script</name>
+ <type>ExecSQLRow</type>
+ <description/>
+ <distribute>Y</distribute>
+ <custom_distribution/>
+ <copies>1</copies>
+ <partitioning>
+ <method>none</method>
+ <schema_name/>
+ </partitioning>
+ <commit>1</commit>
+ <connection/>
+ <sql_field/>
+ <insert_field/>
+ <update_field/>
+ <delete_field/>
+ <read_field/>
+ <sqlFromfile>N</sqlFromfile>
+ <sendOneStatement>Y</sendOneStatement>
+ <attributes/>
+ <cluster_schema/>
+ <remotesteps>
+ <input>
+ </input>
+ <output>
+ </output>
+ </remotesteps>
+ <GUI>
+ <xloc>272</xloc>
+ <yloc>96</yloc>
+ <draw>Y</draw>
+ </GUI>
+ </step>
+ <step>
+ <name>Execute SQL script</name>
+ <type>ExecSQL</type>
+ <description/>
+ <distribute>Y</distribute>
+ <custom_distribution/>
+ <copies>1</copies>
+ <partitioning>
+ <method>none</method>
+ <schema_name/>
+ </partitioning>
+ <connection/>
+ <execute_each_row>N</execute_each_row>
+ <single_statement>N</single_statement>
+ <replace_variables>N</replace_variables>
+ <quoteString>N</quoteString>
+ <sql/>
+ <set_params>N</set_params>
+ <insert_field/>
+ <update_field/>
+ <delete_field/>
+ <read_field/>
+ <arguments>
+ </arguments>
+ <attributes/>
+ <cluster_schema/>
+ <remotesteps>
+ <input>
+ </input>
+ <output>
+ </output>
+ </remotesteps>
+ <GUI>
+ <xloc>304</xloc>
+ <yloc>256</yloc>
+ <draw>Y</draw>
+ </GUI>
+ </step>
+ <step_error_handling>
+ </step_error_handling>
+ <slave-step-copy-partition-distribution>
+ </slave-step-copy-partition-distribution>
+ <slave_transformation>N</slave_transformation>
+ <attributes/>
+</transformation>