dmi, skonto
							parent
							
								
									5f57eb3482
								
							
						
					
					
						commit
						7c3ba171a2
					
				
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							|  | @ -1,883 +0,0 @@ | ||||||
| <transformation> |  | ||||||
|   <info> |  | ||||||
|     <name>VAT-Lookup</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>2014/12/30 12:25:19.832</created_date> |  | ||||||
|   <modified_user>-</modified_user> |  | ||||||
|   <modified_date>2015/01/13 16:28:08.336</modified_date> |  | ||||||
|   </info> |  | ||||||
|   <notepads> |  | ||||||
|   </notepads> |  | ||||||
|   <order> |  | ||||||
|   <hop> <from>REST Client</from><to>Get data from XML</to><enabled>Y</enabled> </hop> |  | ||||||
|   <hop> <from>kunden_20150107.csv</from><to>Select values</to><enabled>Y</enabled> </hop> |  | ||||||
|   <hop> <from>ieferanten_20150107.csv</from><to>Select values 2</to><enabled>Y</enabled> </hop> |  | ||||||
|   <hop> <from>Select values</from><to>Create URL</to><enabled>Y</enabled> </hop> |  | ||||||
|   <hop> <from>Select values 2</from><to>Create URL</to><enabled>Y</enabled> </hop> |  | ||||||
|   <hop> <from>Create URL</from><to>REST Client</to><enabled>Y</enabled> </hop> |  | ||||||
|   <hop> <from>Get data from XML</from><to>Aufbereiten</to><enabled>Y</enabled> </hop> |  | ||||||
|   <hop> <from>Aufbereiten</from><to>vat_lookup.csv</to><enabled>Y</enabled> </hop> |  | ||||||
|   </order> |  | ||||||
|   <step> |  | ||||||
|     <name>Aufbereiten</name> |  | ||||||
|     <type>UserDefinedJavaClass</type> |  | ||||||
|     <description/> |  | ||||||
|     <distribute>N</distribute> |  | ||||||
|     <custom_distribution/> |  | ||||||
|     <copies>1</copies> |  | ||||||
|          <partitioning> |  | ||||||
|            <method>none</method> |  | ||||||
|            <schema_name/> |  | ||||||
|            </partitioning> |  | ||||||
| 
 |  | ||||||
|     <definitions> |  | ||||||
|         <definition> |  | ||||||
|         <class_type>TRANSFORM_CLASS</class_type> |  | ||||||
| 
 |  | ||||||
|         <class_name>Processor</class_name> |  | ||||||
| 
 |  | ||||||
|         <class_source><![CDATA[public boolean processRow(StepMetaInterface smi, StepDataInterface sdi) throws KettleException |  | ||||||
| { |  | ||||||
| 	Object[] r = getRow(); |  | ||||||
| 
 |  | ||||||
| 	if (r == null) { |  | ||||||
| 	  setOutputDone(); |  | ||||||
| 	  return false; |  | ||||||
| 	} |  | ||||||
|     Object[] out = createOutputRow(r, data.outputRowMeta.size()); |  | ||||||
| 	 |  | ||||||
| 	// Direct Mappings: |  | ||||||
| 
 |  | ||||||
| 	get(Fields.Out, "vat_old").setValue(out, get(Fields.In, "vat_old").getString(r)); |  | ||||||
| 
 |  | ||||||
| 	String cc = get(Fields.In, "country_code").getString(r); |  | ||||||
| 
 |  | ||||||
| 	String valid = get(Fields.In, "valid").getString(r); |  | ||||||
| 	String vatnr = get(Fields.In, "vatnr").getString(r); |  | ||||||
| 	String vat_new = ""; |  | ||||||
| 	if (valid.equals("true")) { |  | ||||||
| 		vat_new = cc + vatnr; |  | ||||||
| 	} |  | ||||||
| 	get(Fields.Out, "vat_new").setValue(out, vat_new); |  | ||||||
| 	// Send the row on to the next step. |  | ||||||
|    	putRow(data.outputRowMeta, out); |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| 	return true; |  | ||||||
| }]]></class_source> |  | ||||||
|         </definition> |  | ||||||
|     </definitions> |  | ||||||
|     <fields> |  | ||||||
|         <field> |  | ||||||
|         <field_name>vat_old</field_name> |  | ||||||
| 
 |  | ||||||
|         <field_type>String</field_type> |  | ||||||
| 
 |  | ||||||
|         <field_length>-1</field_length> |  | ||||||
| 
 |  | ||||||
|         <field_precision>-1</field_precision> |  | ||||||
| 
 |  | ||||||
|         </field> |  | ||||||
|         <field> |  | ||||||
|         <field_name>vat_new</field_name> |  | ||||||
| 
 |  | ||||||
|         <field_type>String</field_type> |  | ||||||
| 
 |  | ||||||
|         <field_length>-1</field_length> |  | ||||||
| 
 |  | ||||||
|         <field_precision>-1</field_precision> |  | ||||||
| 
 |  | ||||||
|         </field> |  | ||||||
|     </fields><clear_result_fields>Y</clear_result_fields> |  | ||||||
| <info_steps></info_steps><target_steps></target_steps><usage_parameters></usage_parameters>     <cluster_schema/> |  | ||||||
|  <remotesteps>   <input>   </input>   <output>   </output> </remotesteps>    <GUI> |  | ||||||
|       <xloc>211</xloc> |  | ||||||
|       <yloc>467</yloc> |  | ||||||
|       <draw>Y</draw> |  | ||||||
|       </GUI> |  | ||||||
|     </step> |  | ||||||
| 
 |  | ||||||
|   <step> |  | ||||||
|     <name>Create URL</name> |  | ||||||
|     <type>UserDefinedJavaClass</type> |  | ||||||
|     <description/> |  | ||||||
|     <distribute>N</distribute> |  | ||||||
|     <custom_distribution/> |  | ||||||
|     <copies>1</copies> |  | ||||||
|          <partitioning> |  | ||||||
|            <method>none</method> |  | ||||||
|            <schema_name/> |  | ||||||
|            </partitioning> |  | ||||||
| 
 |  | ||||||
|     <definitions> |  | ||||||
|         <definition> |  | ||||||
|         <class_type>TRANSFORM_CLASS</class_type> |  | ||||||
| 
 |  | ||||||
|         <class_name>Processor</class_name> |  | ||||||
| 
 |  | ||||||
|         <class_source><![CDATA[public boolean processRow(StepMetaInterface smi, StepDataInterface sdi) throws KettleException |  | ||||||
| { |  | ||||||
| 	Object[] r = getRow(); |  | ||||||
| 
 |  | ||||||
| 	if (r == null) { |  | ||||||
| 	  setOutputDone(); |  | ||||||
| 	  return false; |  | ||||||
| 	} |  | ||||||
|     Object[] out = createOutputRow(r, data.outputRowMeta.size()); |  | ||||||
| 	 |  | ||||||
| 	// Direct Mappings: |  | ||||||
| 
 |  | ||||||
| 	 |  | ||||||
| 
 |  | ||||||
| 	// For every row |  | ||||||
| 	String vat = get(Fields.In, "vat").getString(r);	 |  | ||||||
| 	if (vat != null) { |  | ||||||
| 		vat = vat.replaceAll("\\s+",""); |  | ||||||
| 	 // http://vatid.eu/check/<country_code>/<vat_number> |  | ||||||
| 		String url = "http://vatid.eu/check/"; |  | ||||||
| 		String country = vat.substring(0,2); |  | ||||||
| 		String vat_nr = vat.substring(2,vat.length()); |  | ||||||
| 
 |  | ||||||
| 		get(Fields.Out, "help_url").setValue(out, url + "/" + country + "/" + vat_nr); |  | ||||||
| 		get(Fields.Out, "vat_old").setValue(out, get(Fields.In, "vat").getString(r)); |  | ||||||
| 		// Send the row on to the next step. |  | ||||||
|    		putRow(data.outputRowMeta, out); |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	return true; |  | ||||||
| }]]></class_source> |  | ||||||
|         </definition> |  | ||||||
|     </definitions> |  | ||||||
|     <fields> |  | ||||||
|         <field> |  | ||||||
|         <field_name>help_url</field_name> |  | ||||||
| 
 |  | ||||||
|         <field_type>String</field_type> |  | ||||||
| 
 |  | ||||||
|         <field_length>-1</field_length> |  | ||||||
| 
 |  | ||||||
|         <field_precision>-1</field_precision> |  | ||||||
| 
 |  | ||||||
|         </field> |  | ||||||
|         <field> |  | ||||||
|         <field_name>vat_old</field_name> |  | ||||||
| 
 |  | ||||||
|         <field_type>String</field_type> |  | ||||||
| 
 |  | ||||||
|         <field_length>-1</field_length> |  | ||||||
| 
 |  | ||||||
|         <field_precision>-1</field_precision> |  | ||||||
| 
 |  | ||||||
|         </field> |  | ||||||
|     </fields><clear_result_fields>Y</clear_result_fields> |  | ||||||
| <info_steps></info_steps><target_steps></target_steps><usage_parameters></usage_parameters>     <cluster_schema/> |  | ||||||
|  <remotesteps>   <input>   </input>   <output>   </output> </remotesteps>    <GUI> |  | ||||||
|       <xloc>214</xloc> |  | ||||||
|       <yloc>219</yloc> |  | ||||||
|       <draw>Y</draw> |  | ||||||
|       </GUI> |  | ||||||
|     </step> |  | ||||||
| 
 |  | ||||||
|   <step> |  | ||||||
|     <name>Get data from XML</name> |  | ||||||
|     <type>getXMLData</type> |  | ||||||
|     <description/> |  | ||||||
|     <distribute>Y</distribute> |  | ||||||
|     <custom_distribution/> |  | ||||||
|     <copies>1</copies> |  | ||||||
|          <partitioning> |  | ||||||
|            <method>none</method> |  | ||||||
|            <schema_name/> |  | ||||||
|            </partitioning> |  | ||||||
|     <include>N</include> |  | ||||||
|     <include_field/> |  | ||||||
|     <rownum>N</rownum> |  | ||||||
|     <addresultfile>N</addresultfile> |  | ||||||
|     <namespaceaware>N</namespaceaware> |  | ||||||
|     <ignorecomments>N</ignorecomments> |  | ||||||
|     <readurl>N</readurl> |  | ||||||
|     <validating>N</validating> |  | ||||||
|     <usetoken>N</usetoken> |  | ||||||
|     <IsIgnoreEmptyFile>N</IsIgnoreEmptyFile> |  | ||||||
|     <doNotFailIfNoFile>Y</doNotFailIfNoFile> |  | ||||||
|     <rownum_field/> |  | ||||||
|     <encoding>UTF-8</encoding> |  | ||||||
|     <file> |  | ||||||
|       <name/> |  | ||||||
|       <filemask/> |  | ||||||
|       <exclude_filemask/> |  | ||||||
|       <file_required>N</file_required> |  | ||||||
|       <include_subfolders>N</include_subfolders> |  | ||||||
|     </file> |  | ||||||
|     <fields> |  | ||||||
|       <field> |  | ||||||
|         <name>valid</name> |  | ||||||
|         <xpath>/response/valid</xpath> |  | ||||||
|         <element_type>node</element_type> |  | ||||||
|         <result_type>valueof</result_type> |  | ||||||
|         <type>None</type> |  | ||||||
|         <format/> |  | ||||||
|         <currency/> |  | ||||||
|         <decimal/> |  | ||||||
|         <group/> |  | ||||||
|         <length>-1</length> |  | ||||||
|         <precision>-1</precision> |  | ||||||
|         <trim_type>none</trim_type> |  | ||||||
|         <repeat>N</repeat> |  | ||||||
|       </field> |  | ||||||
|       <field> |  | ||||||
|         <name>vatnr</name> |  | ||||||
|         <xpath>/response/vat-number</xpath> |  | ||||||
|         <element_type>node</element_type> |  | ||||||
|         <result_type>valueof</result_type> |  | ||||||
|         <type>None</type> |  | ||||||
|         <format/> |  | ||||||
|         <currency/> |  | ||||||
|         <decimal/> |  | ||||||
|         <group/> |  | ||||||
|         <length>-1</length> |  | ||||||
|         <precision>-1</precision> |  | ||||||
|         <trim_type>none</trim_type> |  | ||||||
|         <repeat>N</repeat> |  | ||||||
|       </field> |  | ||||||
|       <field> |  | ||||||
|         <name>country_code</name> |  | ||||||
|         <xpath>/response/country-code</xpath> |  | ||||||
|         <element_type>node</element_type> |  | ||||||
|         <result_type>valueof</result_type> |  | ||||||
|         <type>None</type> |  | ||||||
|         <format/> |  | ||||||
|         <currency/> |  | ||||||
|         <decimal/> |  | ||||||
|         <group/> |  | ||||||
|         <length>-1</length> |  | ||||||
|         <precision>-1</precision> |  | ||||||
|         <trim_type>none</trim_type> |  | ||||||
|         <repeat>N</repeat> |  | ||||||
|       </field> |  | ||||||
|     </fields> |  | ||||||
|     <limit>0</limit> |  | ||||||
|     <loopxpath>/response/valid</loopxpath> |  | ||||||
|     <IsInFields>Y</IsInFields> |  | ||||||
|     <IsAFile>N</IsAFile> |  | ||||||
|     <XmlField>help_result</XmlField> |  | ||||||
|     <prunePath/> |  | ||||||
|     <shortFileFieldName/> |  | ||||||
|     <pathFieldName/> |  | ||||||
|     <hiddenFieldName/> |  | ||||||
|     <lastModificationTimeFieldName/> |  | ||||||
|     <uriNameFieldName/> |  | ||||||
|     <rootUriNameFieldName/> |  | ||||||
|     <extensionFieldName/> |  | ||||||
|     <sizeFieldName/> |  | ||||||
|      <cluster_schema/> |  | ||||||
|  <remotesteps>   <input>   </input>   <output>   </output> </remotesteps>    <GUI> |  | ||||||
|       <xloc>213</xloc> |  | ||||||
|       <yloc>380</yloc> |  | ||||||
|       <draw>Y</draw> |  | ||||||
|       </GUI> |  | ||||||
|     </step> |  | ||||||
| 
 |  | ||||||
|   <step> |  | ||||||
|     <name>REST Client</name> |  | ||||||
|     <type>Rest</type> |  | ||||||
|     <description/> |  | ||||||
|     <distribute>N</distribute> |  | ||||||
|     <custom_distribution/> |  | ||||||
|     <copies>1</copies> |  | ||||||
|          <partitioning> |  | ||||||
|            <method>none</method> |  | ||||||
|            <schema_name/> |  | ||||||
|            </partitioning> |  | ||||||
|     <applicationType>TEXT PLAIN</applicationType> |  | ||||||
|     <method>GET</method> |  | ||||||
|     <url/> |  | ||||||
|     <urlInField>Y</urlInField> |  | ||||||
|     <dynamicMethod>N</dynamicMethod> |  | ||||||
|     <methodFieldName/> |  | ||||||
|     <urlField>help_url</urlField> |  | ||||||
|     <bodyField/> |  | ||||||
|     <httpLogin/> |  | ||||||
|     <httpPassword>Encrypted </httpPassword> |  | ||||||
|     <proxyHost/> |  | ||||||
|     <proxyPort/> |  | ||||||
|     <preemptive>N</preemptive> |  | ||||||
|     <trustStoreFile/> |  | ||||||
|     <trustStorePassword>Encrypted </trustStorePassword> |  | ||||||
|     <headers> |  | ||||||
|       </headers> |  | ||||||
|     <parameters> |  | ||||||
|       </parameters> |  | ||||||
|     <result> |  | ||||||
|       <name>help_result</name> |  | ||||||
|       <code>help_resultcode</code> |  | ||||||
|       <response_time/> |  | ||||||
|       </result> |  | ||||||
|      <cluster_schema/> |  | ||||||
|  <remotesteps>   <input>   </input>   <output>   </output> </remotesteps>    <GUI> |  | ||||||
|       <xloc>212</xloc> |  | ||||||
|       <yloc>287</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>Steuernummer</name> |  | ||||||
|         <rename>vat</rename> |  | ||||||
|         <length>-2</length> |  | ||||||
|         <precision>-2</precision> |  | ||||||
|       </field>        <select_unspecified>N</select_unspecified> |  | ||||||
|     </fields>     <cluster_schema/> |  | ||||||
|  <remotesteps>   <input>   </input>   <output>   </output> </remotesteps>    <GUI> |  | ||||||
|       <xloc>124</xloc> |  | ||||||
|       <yloc>159</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>Steuer Nr.</name> |  | ||||||
|         <rename>vat</rename> |  | ||||||
|         <length>-2</length> |  | ||||||
|         <precision>-2</precision> |  | ||||||
|       </field>        <select_unspecified>N</select_unspecified> |  | ||||||
|     </fields>     <cluster_schema/> |  | ||||||
|  <remotesteps>   <input>   </input>   <output>   </output> </remotesteps>    <GUI> |  | ||||||
|       <xloc>290</xloc> |  | ||||||
|       <yloc>155</yloc> |  | ||||||
|       <draw>Y</draw> |  | ||||||
|       </GUI> |  | ||||||
|     </step> |  | ||||||
| 
 |  | ||||||
|   <step> |  | ||||||
|     <name>ieferanten_20150107.csv</name> |  | ||||||
|     <type>CsvInput</type> |  | ||||||
|     <description/> |  | ||||||
|     <distribute>N</distribute> |  | ||||||
|     <custom_distribution/> |  | ||||||
|     <copies>1</copies> |  | ||||||
|          <partitioning> |  | ||||||
|            <method>none</method> |  | ||||||
|            <schema_name/> |  | ||||||
|            </partitioning> |  | ||||||
|     <filename>${GITREPOS}/input/lieferanten_20150107.csv</filename> |  | ||||||
|     <filename_field/> |  | ||||||
|     <rownum_field/> |  | ||||||
|     <include_filename>N</include_filename> |  | ||||||
|     <separator>,</separator> |  | ||||||
|     <enclosure>"</enclosure> |  | ||||||
|     <header>Y</header> |  | ||||||
|     <buffer_size>50000</buffer_size> |  | ||||||
|     <lazy_conversion>Y</lazy_conversion> |  | ||||||
|     <add_filename_result>N</add_filename_result> |  | ||||||
|     <parallel>N</parallel> |  | ||||||
|     <newline_possible>N</newline_possible> |  | ||||||
|     <encoding/> |  | ||||||
|     <fields> |  | ||||||
|       <field> |  | ||||||
|         <name>Lieferanten Nr</name> |  | ||||||
|         <type>String</type> |  | ||||||
|         <format/> |  | ||||||
|         <currency/> |  | ||||||
|         <decimal/> |  | ||||||
|         <group/> |  | ||||||
|         <length>-1</length> |  | ||||||
|         <precision>-1</precision> |  | ||||||
|         <trim_type>none</trim_type> |  | ||||||
|       </field> |  | ||||||
|       <field> |  | ||||||
|         <name>Suchname</name> |  | ||||||
|         <type>String</type> |  | ||||||
|         <format/> |  | ||||||
|         <currency/> |  | ||||||
|         <decimal/> |  | ||||||
|         <group/> |  | ||||||
|         <length>-1</length> |  | ||||||
|         <precision>-1</precision> |  | ||||||
|         <trim_type>none</trim_type> |  | ||||||
|       </field> |  | ||||||
|       <field> |  | ||||||
|         <name>Bezeichnung</name> |  | ||||||
|         <type>String</type> |  | ||||||
|         <format/> |  | ||||||
|         <currency/> |  | ||||||
|         <decimal/> |  | ||||||
|         <group/> |  | ||||||
|         <length>-1</length> |  | ||||||
|         <precision>-1</precision> |  | ||||||
|         <trim_type>none</trim_type> |  | ||||||
|       </field> |  | ||||||
|       <field> |  | ||||||
|         <name>Firmenname</name> |  | ||||||
|         <type>String</type> |  | ||||||
|         <format/> |  | ||||||
|         <currency/> |  | ||||||
|         <decimal/> |  | ||||||
|         <group/> |  | ||||||
|         <length>-1</length> |  | ||||||
|         <precision>-1</precision> |  | ||||||
|         <trim_type>none</trim_type> |  | ||||||
|       </field> |  | ||||||
|       <field> |  | ||||||
|         <name>Ansprechpartner</name> |  | ||||||
|         <type>String</type> |  | ||||||
|         <format/> |  | ||||||
|         <currency/> |  | ||||||
|         <decimal/> |  | ||||||
|         <group/> |  | ||||||
|         <length>-1</length> |  | ||||||
|         <precision>-1</precision> |  | ||||||
|         <trim_type>none</trim_type> |  | ||||||
|       </field> |  | ||||||
|       <field> |  | ||||||
|         <name>Strasse</name> |  | ||||||
|         <type>String</type> |  | ||||||
|         <format/> |  | ||||||
|         <currency/> |  | ||||||
|         <decimal/> |  | ||||||
|         <group/> |  | ||||||
|         <length>-1</length> |  | ||||||
|         <precision>-1</precision> |  | ||||||
|         <trim_type>none</trim_type> |  | ||||||
|       </field> |  | ||||||
|       <field> |  | ||||||
|         <name>PLZ</name> |  | ||||||
|         <type>String</type> |  | ||||||
|         <format/> |  | ||||||
|         <currency/> |  | ||||||
|         <decimal/> |  | ||||||
|         <group/> |  | ||||||
|         <length>-1</length> |  | ||||||
|         <precision>-1</precision> |  | ||||||
|         <trim_type>none</trim_type> |  | ||||||
|       </field> |  | ||||||
|       <field> |  | ||||||
|         <name>Stadt</name> |  | ||||||
|         <type>String</type> |  | ||||||
|         <format/> |  | ||||||
|         <currency/> |  | ||||||
|         <decimal/> |  | ||||||
|         <group/> |  | ||||||
|         <length>-1</length> |  | ||||||
|         <precision>-1</precision> |  | ||||||
|         <trim_type>none</trim_type> |  | ||||||
|       </field> |  | ||||||
|       <field> |  | ||||||
|         <name>Land</name> |  | ||||||
|         <type>String</type> |  | ||||||
|         <format/> |  | ||||||
|         <currency/> |  | ||||||
|         <decimal/> |  | ||||||
|         <group/> |  | ||||||
|         <length>-1</length> |  | ||||||
|         <precision>-1</precision> |  | ||||||
|         <trim_type>none</trim_type> |  | ||||||
|       </field> |  | ||||||
|       <field> |  | ||||||
|         <name>Code</name> |  | ||||||
|         <type>String</type> |  | ||||||
|         <format/> |  | ||||||
|         <currency/> |  | ||||||
|         <decimal/> |  | ||||||
|         <group/> |  | ||||||
|         <length>-1</length> |  | ||||||
|         <precision>-1</precision> |  | ||||||
|         <trim_type>none</trim_type> |  | ||||||
|       </field> |  | ||||||
|       <field> |  | ||||||
|         <name>Steuer Nr.</name> |  | ||||||
|         <type>String</type> |  | ||||||
|         <format/> |  | ||||||
|         <currency/> |  | ||||||
|         <decimal/> |  | ||||||
|         <group/> |  | ||||||
|         <length>-1</length> |  | ||||||
|         <precision>-1</precision> |  | ||||||
|         <trim_type>none</trim_type> |  | ||||||
|       </field> |  | ||||||
|       <field> |  | ||||||
|         <name>Mail</name> |  | ||||||
|         <type>String</type> |  | ||||||
|         <format/> |  | ||||||
|         <currency/> |  | ||||||
|         <decimal/> |  | ||||||
|         <group/> |  | ||||||
|         <length>-1</length> |  | ||||||
|         <precision>-1</precision> |  | ||||||
|         <trim_type>none</trim_type> |  | ||||||
|       </field> |  | ||||||
|     </fields> |  | ||||||
|      <cluster_schema/> |  | ||||||
|  <remotesteps>   <input>   </input>   <output>   </output> </remotesteps>    <GUI> |  | ||||||
|       <xloc>282</xloc> |  | ||||||
|       <yloc>68</yloc> |  | ||||||
|       <draw>Y</draw> |  | ||||||
|       </GUI> |  | ||||||
|     </step> |  | ||||||
| 
 |  | ||||||
|   <step> |  | ||||||
|     <name>kunden_20150107.csv</name> |  | ||||||
|     <type>CsvInput</type> |  | ||||||
|     <description/> |  | ||||||
|     <distribute>Y</distribute> |  | ||||||
|     <custom_distribution/> |  | ||||||
|     <copies>1</copies> |  | ||||||
|          <partitioning> |  | ||||||
|            <method>none</method> |  | ||||||
|            <schema_name/> |  | ||||||
|            </partitioning> |  | ||||||
|     <filename>${GITREPOS}/input/kunden_20150107.csv</filename> |  | ||||||
|     <filename_field/> |  | ||||||
|     <rownum_field/> |  | ||||||
|     <include_filename>N</include_filename> |  | ||||||
|     <separator>,</separator> |  | ||||||
|     <enclosure>"</enclosure> |  | ||||||
|     <header>Y</header> |  | ||||||
|     <buffer_size>50000</buffer_size> |  | ||||||
|     <lazy_conversion>Y</lazy_conversion> |  | ||||||
|     <add_filename_result>N</add_filename_result> |  | ||||||
|     <parallel>N</parallel> |  | ||||||
|     <newline_possible>N</newline_possible> |  | ||||||
|     <encoding/> |  | ||||||
|     <fields> |  | ||||||
|       <field> |  | ||||||
|         <name>Kundennr</name> |  | ||||||
|         <type>String</type> |  | ||||||
|         <format/> |  | ||||||
|         <currency/> |  | ||||||
|         <decimal/> |  | ||||||
|         <group/> |  | ||||||
|         <length>-1</length> |  | ||||||
|         <precision>-1</precision> |  | ||||||
|         <trim_type>none</trim_type> |  | ||||||
|       </field> |  | ||||||
|       <field> |  | ||||||
|         <name>Suchname</name> |  | ||||||
|         <type>String</type> |  | ||||||
|         <format/> |  | ||||||
|         <currency/> |  | ||||||
|         <decimal/> |  | ||||||
|         <group/> |  | ||||||
|         <length>-1</length> |  | ||||||
|         <precision>-1</precision> |  | ||||||
|         <trim_type>none</trim_type> |  | ||||||
|       </field> |  | ||||||
|       <field> |  | ||||||
|         <name>Type</name> |  | ||||||
|         <type>String</type> |  | ||||||
|         <format/> |  | ||||||
|         <currency/> |  | ||||||
|         <decimal/> |  | ||||||
|         <group/> |  | ||||||
|         <length>-1</length> |  | ||||||
|         <precision>-1</precision> |  | ||||||
|         <trim_type>none</trim_type> |  | ||||||
|       </field> |  | ||||||
|       <field> |  | ||||||
|         <name>Name</name> |  | ||||||
|         <type>String</type> |  | ||||||
|         <format/> |  | ||||||
|         <currency/> |  | ||||||
|         <decimal/> |  | ||||||
|         <group/> |  | ||||||
|         <length>-1</length> |  | ||||||
|         <precision>-1</precision> |  | ||||||
|         <trim_type>none</trim_type> |  | ||||||
|       </field> |  | ||||||
|       <field> |  | ||||||
|         <name>Ansprechpartner</name> |  | ||||||
|         <type>String</type> |  | ||||||
|         <format/> |  | ||||||
|         <currency/> |  | ||||||
|         <decimal/> |  | ||||||
|         <group/> |  | ||||||
|         <length>-1</length> |  | ||||||
|         <precision>-1</precision> |  | ||||||
|         <trim_type>none</trim_type> |  | ||||||
|       </field> |  | ||||||
|       <field> |  | ||||||
|         <name>Adresse</name> |  | ||||||
|         <type>String</type> |  | ||||||
|         <format/> |  | ||||||
|         <currency/> |  | ||||||
|         <decimal/> |  | ||||||
|         <group/> |  | ||||||
|         <length>-1</length> |  | ||||||
|         <precision>-1</precision> |  | ||||||
|         <trim_type>none</trim_type> |  | ||||||
|       </field> |  | ||||||
|       <field> |  | ||||||
|         <name>PLZ</name> |  | ||||||
|         <type>String</type> |  | ||||||
|         <format/> |  | ||||||
|         <currency/> |  | ||||||
|         <decimal/> |  | ||||||
|         <group/> |  | ||||||
|         <length>-1</length> |  | ||||||
|         <precision>-1</precision> |  | ||||||
|         <trim_type>none</trim_type> |  | ||||||
|       </field> |  | ||||||
|       <field> |  | ||||||
|         <name>Ort</name> |  | ||||||
|         <type>String</type> |  | ||||||
|         <format/> |  | ||||||
|         <currency/> |  | ||||||
|         <decimal/> |  | ||||||
|         <group/> |  | ||||||
|         <length>-1</length> |  | ||||||
|         <precision>-1</precision> |  | ||||||
|         <trim_type>none</trim_type> |  | ||||||
|       </field> |  | ||||||
|       <field> |  | ||||||
|         <name>Land</name> |  | ||||||
|         <type>String</type> |  | ||||||
|         <format/> |  | ||||||
|         <currency/> |  | ||||||
|         <decimal/> |  | ||||||
|         <group/> |  | ||||||
|         <length>-1</length> |  | ||||||
|         <precision>-1</precision> |  | ||||||
|         <trim_type>none</trim_type> |  | ||||||
|       </field> |  | ||||||
|       <field> |  | ||||||
|         <name>Telefon</name> |  | ||||||
|         <type>String</type> |  | ||||||
|         <format/> |  | ||||||
|         <currency/> |  | ||||||
|         <decimal/> |  | ||||||
|         <group/> |  | ||||||
|         <length>-1</length> |  | ||||||
|         <precision>-1</precision> |  | ||||||
|         <trim_type>none</trim_type> |  | ||||||
|       </field> |  | ||||||
|       <field> |  | ||||||
|         <name>Fax</name> |  | ||||||
|         <type>String</type> |  | ||||||
|         <format/> |  | ||||||
|         <currency/> |  | ||||||
|         <decimal/> |  | ||||||
|         <group/> |  | ||||||
|         <length>-1</length> |  | ||||||
|         <precision>-1</precision> |  | ||||||
|         <trim_type>none</trim_type> |  | ||||||
|       </field> |  | ||||||
|       <field> |  | ||||||
|         <name>mail</name> |  | ||||||
|         <type>String</type> |  | ||||||
|         <format/> |  | ||||||
|         <currency/> |  | ||||||
|         <decimal/> |  | ||||||
|         <group/> |  | ||||||
|         <length>-1</length> |  | ||||||
|         <precision>-1</precision> |  | ||||||
|         <trim_type>none</trim_type> |  | ||||||
|       </field> |  | ||||||
|       <field> |  | ||||||
|         <name>Steuernummer</name> |  | ||||||
|         <type>String</type> |  | ||||||
|         <format/> |  | ||||||
|         <currency/> |  | ||||||
|         <decimal/> |  | ||||||
|         <group/> |  | ||||||
|         <length>-1</length> |  | ||||||
|         <precision>-1</precision> |  | ||||||
|         <trim_type>none</trim_type> |  | ||||||
|       </field> |  | ||||||
|       <field> |  | ||||||
|         <name>Rechnung per Mail</name> |  | ||||||
|         <type>String</type> |  | ||||||
|         <format/> |  | ||||||
|         <currency/> |  | ||||||
|         <decimal/> |  | ||||||
|         <group/> |  | ||||||
|         <length>-1</length> |  | ||||||
|         <precision>-1</precision> |  | ||||||
|         <trim_type>none</trim_type> |  | ||||||
|       </field> |  | ||||||
|       <field> |  | ||||||
|         <name>Zahlungsziel</name> |  | ||||||
|         <type>String</type> |  | ||||||
|         <format/> |  | ||||||
|         <currency/> |  | ||||||
|         <decimal/> |  | ||||||
|         <group/> |  | ||||||
|         <length>-1</length> |  | ||||||
|         <precision>-1</precision> |  | ||||||
|         <trim_type>none</trim_type> |  | ||||||
|       </field> |  | ||||||
|     </fields> |  | ||||||
|      <cluster_schema/> |  | ||||||
|  <remotesteps>   <input>   </input>   <output>   </output> </remotesteps>    <GUI> |  | ||||||
|       <xloc>127</xloc> |  | ||||||
|       <yloc>69</yloc> |  | ||||||
|       <draw>Y</draw> |  | ||||||
|       </GUI> |  | ||||||
|     </step> |  | ||||||
| 
 |  | ||||||
|   <step> |  | ||||||
|     <name>vat_lookup.csv</name> |  | ||||||
|     <type>TextFileOutput</type> |  | ||||||
|     <description/> |  | ||||||
|     <distribute>Y</distribute> |  | ||||||
|     <custom_distribution/> |  | ||||||
|     <copies>1</copies> |  | ||||||
|          <partitioning> |  | ||||||
|            <method>none</method> |  | ||||||
|            <schema_name/> |  | ||||||
|            </partitioning> |  | ||||||
|     <separator>,</separator> |  | ||||||
|     <enclosure>"</enclosure> |  | ||||||
|     <enclosure_forced>N</enclosure_forced> |  | ||||||
|     <enclosure_fix_disabled>N</enclosure_fix_disabled> |  | ||||||
|     <header>Y</header> |  | ||||||
|     <footer>N</footer> |  | ||||||
|     <format>DOS</format> |  | ||||||
|     <compression>None</compression> |  | ||||||
|     <encoding>UTF-8</encoding> |  | ||||||
|     <endedLine/> |  | ||||||
|     <fileNameInField>N</fileNameInField> |  | ||||||
|     <fileNameField/> |  | ||||||
|     <create_parent_folder>Y</create_parent_folder> |  | ||||||
|     <file> |  | ||||||
|       <name>${GITREPOS}/cam_dmi/vat_lookup</name> |  | ||||||
|       <is_command>N</is_command> |  | ||||||
|       <servlet_output>N</servlet_output> |  | ||||||
|       <do_not_open_new_file_init>N</do_not_open_new_file_init> |  | ||||||
|       <extention>csv</extention> |  | ||||||
|       <append>N</append> |  | ||||||
|       <split>N</split> |  | ||||||
|       <haspartno>N</haspartno> |  | ||||||
|       <add_date>N</add_date> |  | ||||||
|       <add_time>N</add_time> |  | ||||||
|       <SpecifyFormat>N</SpecifyFormat> |  | ||||||
|       <date_time_format/> |  | ||||||
|       <add_to_result_filenames>Y</add_to_result_filenames> |  | ||||||
|       <pad>N</pad> |  | ||||||
|       <fast_dump>N</fast_dump> |  | ||||||
|       <splitevery>0</splitevery> |  | ||||||
|     </file> |  | ||||||
|     <fields> |  | ||||||
|       <field> |  | ||||||
|         <name>vat_old</name> |  | ||||||
|         <type>String</type> |  | ||||||
|         <format/> |  | ||||||
|         <currency/> |  | ||||||
|         <decimal/> |  | ||||||
|         <group/> |  | ||||||
|         <nullif/> |  | ||||||
|         <trim_type>none</trim_type> |  | ||||||
|         <length>-1</length> |  | ||||||
|         <precision>-1</precision> |  | ||||||
|       </field> |  | ||||||
|       <field> |  | ||||||
|         <name>vat_new</name> |  | ||||||
|         <type>String</type> |  | ||||||
|         <format/> |  | ||||||
|         <currency/> |  | ||||||
|         <decimal/> |  | ||||||
|         <group/> |  | ||||||
|         <nullif/> |  | ||||||
|         <trim_type>none</trim_type> |  | ||||||
|         <length>-1</length> |  | ||||||
|         <precision>-1</precision> |  | ||||||
|       </field> |  | ||||||
|     </fields> |  | ||||||
|      <cluster_schema/> |  | ||||||
|  <remotesteps>   <input>   </input>   <output>   </output> </remotesteps>    <GUI> |  | ||||||
|       <xloc>208</xloc> |  | ||||||
|       <yloc>587</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> |  | ||||||
| 
 |  | ||||||
| </transformation> |  | ||||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							| Before Width: | Height: | Size: 2.8 KiB After Width: | Height: | Size: 2.8 KiB | 
|  | @ -26,6 +26,7 @@ from openerp.osv import fields, osv | ||||||
| from openerp import models, fields as f, api | from openerp import models, fields as f, api | ||||||
| import openerp.addons.decimal_precision as dp | import openerp.addons.decimal_precision as dp | ||||||
| from datetime import date, timedelta, datetime | from datetime import date, timedelta, datetime | ||||||
|  | from openerp.tools.translate import _ | ||||||
| 
 | 
 | ||||||
| class account_payment_term(osv.osv): | class account_payment_term(osv.osv): | ||||||
|     _inherit = 'account.payment.term' |     _inherit = 'account.payment.term' | ||||||
|  | @ -82,4 +83,308 @@ class account_invoice(models.Model): | ||||||
|                 inv.write({'skonto_faelligkeit': datetime.strptime(inv.date_invoice, '%Y-%m-%d') + timedelta(days=inv.payment_term.skonto_tage)}) |                 inv.write({'skonto_faelligkeit': datetime.strptime(inv.date_invoice, '%Y-%m-%d') + timedelta(days=inv.payment_term.skonto_tage)}) | ||||||
|         return True        |         return True        | ||||||
| 
 | 
 | ||||||
|  |     # Add context 'click_register_payment' | ||||||
|  |     def invoice_pay_customer(self, cr, uid, ids, context=None): | ||||||
|  |         if not ids: return [] | ||||||
|  |         dummy, view_id = self.pool.get('ir.model.data').get_object_reference(cr, uid, 'account_voucher', 'view_vendor_receipt_dialog_form') | ||||||
|  | 
 | ||||||
|  |         inv = self.browse(cr, uid, ids[0], context=context) | ||||||
|  |         return { | ||||||
|  |             'name':_("Pay Invoice"), | ||||||
|  |             'view_mode': 'form', | ||||||
|  |             'view_id': view_id, | ||||||
|  |             'view_type': 'form', | ||||||
|  |             'res_model': 'account.voucher', | ||||||
|  |             'type': 'ir.actions.act_window', | ||||||
|  |             'nodestroy': True, | ||||||
|  |             'target': 'new', | ||||||
|  |             'domain': '[]', | ||||||
|  |             'context': { | ||||||
|  |                 'payment_expected_currency': inv.currency_id.id, | ||||||
|  |                 'default_partner_id': self.pool.get('res.partner')._find_accounting_partner(inv.partner_id).id, | ||||||
|  |                 'default_amount': inv.type in ('out_refund', 'in_refund') and -inv.residual or inv.residual, | ||||||
|  |                 'default_reference': inv.name, | ||||||
|  |                 'close_after_process': True, | ||||||
|  |                 'invoice_type': inv.type, | ||||||
|  |                 'invoice_id': inv.id, | ||||||
|  |                 'default_type': inv.type in ('out_invoice','out_refund') and 'receipt' or 'payment', | ||||||
|  |                 'type': inv.type in ('out_invoice','out_refund') and 'receipt' or 'payment', | ||||||
|  |                 'click_register_payment':True, | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |      | ||||||
|  | class account_voucher(osv.osv): | ||||||
|  |     _inherit = 'account.voucher' | ||||||
|  | 
 | ||||||
|  |     #Workaround to send context in _compute_writeoff_amount() | ||||||
|  |     def onchange_line_ids(self, cr, uid, ids, line_dr_ids, line_cr_ids, amount, voucher_currency, type, context=None):         | ||||||
|  |         context = context or {} | ||||||
|  |         if not line_dr_ids and not line_cr_ids: | ||||||
|  |             return {'value':{'writeoff_amount': 0.0}} | ||||||
|  |         line_osv = self.pool.get("account.voucher.line") | ||||||
|  |         line_dr_ids = resolve_o2m_operations(cr, uid, line_osv, line_dr_ids, ['amount'], context) | ||||||
|  |         line_cr_ids = resolve_o2m_operations(cr, uid, line_osv, line_cr_ids, ['amount'], context) | ||||||
|  |         #compute the field is_multi_currency that is used to hide/display options linked to secondary currency on the voucher | ||||||
|  |         is_multi_currency = False | ||||||
|  |         #loop on the voucher lines to see if one of these has a secondary currency. If yes, we need to see the options | ||||||
|  |         for voucher_line in line_dr_ids+line_cr_ids: | ||||||
|  |             line_id = voucher_line.get('id') and self.pool.get('account.voucher.line').browse(cr, uid, voucher_line['id'], context=context).move_line_id.id or voucher_line.get('move_line_id') | ||||||
|  |             if line_id and self.pool.get('account.move.line').browse(cr, uid, line_id, context=context).currency_id: | ||||||
|  |                 is_multi_currency = True | ||||||
|  |                 break | ||||||
|  |         return {'value': {'writeoff_amount': self._compute_writeoff_amount(cr, uid, line_dr_ids, line_cr_ids, amount, type, context=context), 'is_multi_currency': is_multi_currency}} | ||||||
|  | 
 | ||||||
|  |       | ||||||
|  |     def get_default_acc_id(self, cr, uid, args): | ||||||
|  |         konto = self.pool.get('account.account').search(cr,uid,[('code','=','99999999')],limit=1) | ||||||
|  |         if konto: | ||||||
|  |             return konto[0] | ||||||
|  |         else: | ||||||
|  |             raise osv.except_osv(_('Konfigurationsfehler!'),_("Es ist kein Konto für den Ausgleich der Rechnungen definiert (Skonto). Bitte wenden Sie sich an den Support.")) | ||||||
|  |           | ||||||
|  |         return False | ||||||
|  |       | ||||||
|  |     _defaults = { | ||||||
|  |                 'comment': 'Skonto', | ||||||
|  |                 'writeoff_acc_id': get_default_acc_id, | ||||||
|  |                 } | ||||||
|  | 
 | ||||||
|  |     def _get_writeoff_amount(self, cr, uid, ids, name, args, context={}): | ||||||
|  |         if not ids: return {} | ||||||
|  |         currency_obj = self.pool.get('res.currency') | ||||||
|  |         res = {}; diff_amount = 0.0 | ||||||
|  |         debit = credit = total_inv_residual = 0.0 | ||||||
|  |         for voucher in self.browse(cr, uid, ids, context=context): | ||||||
|  |             sign = voucher.type == 'payment' and -1 or 1 | ||||||
|  |             for l in voucher.line_dr_ids: | ||||||
|  |                 debit += l.amount | ||||||
|  |                 if context.has_key('click_register_payment'): | ||||||
|  |                     if voucher.payment_option == 'with_writeoff': | ||||||
|  |                         # There can be several open lines => we only want to reconcile the line related to the invoice | ||||||
|  |                         if l.move_line_id and l.move_line_id.invoice and l.move_line_id.invoice.id == context.get('invoice_id',-1): | ||||||
|  |                             l.write({'reconcile': True, 'amount': l.amount_unreconciled}) | ||||||
|  |                     total_inv_residual += (l.amount > 0  and l.amount_unreconciled - l.amount) | ||||||
|  |             for l in voucher.line_cr_ids: | ||||||
|  |                 credit += l.amount  | ||||||
|  |                 if context.has_key('click_register_payment'): | ||||||
|  |                     if voucher.payment_option == 'with_writeoff': | ||||||
|  |                         # There can be several open lines => we only want to reconcile the line related to the invoice | ||||||
|  |                         if l.move_line_id and l.move_line_id.invoice and l.move_line_id.invoice.id == context.get('invoice_id',-1): | ||||||
|  |                             l.write({'reconcile': True, 'amount': l.amount_unreconciled}) | ||||||
|  |                     total_inv_residual += (l.amount > 0  and l.amount_unreconciled - l.amount) | ||||||
|  |             currency = voucher.currency_id or voucher.company_id.currency_id | ||||||
|  |             write_off_amount = voucher.amount - sign * (credit - debit) | ||||||
|  |             if context.has_key('click_register_payment'): | ||||||
|  |                 write_off_amount = total_inv_residual * sign | ||||||
|  |                  | ||||||
|  |             res[voucher.id] =  currency_obj.round(cr, uid, currency, write_off_amount) | ||||||
|  |         return res | ||||||
|  |      | ||||||
|  |     _columns = { | ||||||
|  |         'writeoff_amount': fields.function(_get_writeoff_amount, string='Difference Amount', type='float', readonly=True, help="Computed as the difference between the amount stated in the voucher and the sum of allocation on the voucher lines."),         | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |     #working on context to differentiate the button clicks without affecting the present code | ||||||
|  |     #Workaround to send context in _compute_writeoff_amount() | ||||||
|  |     def _compute_writeoff_amount(self, cr, uid, line_dr_ids, line_cr_ids, amount, type, context={}): | ||||||
|  |         debit = credit = total_inv_residual = 0.0 | ||||||
|  |         sign = type == 'payment' and -1 or 1 | ||||||
|  |         for l in line_dr_ids: | ||||||
|  |             debit += l['amount'] | ||||||
|  |             #total_inv_residual += (l['amount'] > 0 and l['amount_unreconciled'] - l['amount']) | ||||||
|  |             total_inv_residual += l['amount_unreconciled'] | ||||||
|  |         for l in line_cr_ids: | ||||||
|  |             credit += l['amount'] | ||||||
|  |             #total_inv_residual += (l['amount'] > 0 and  l['amount_unreconciled'] - l['amount']) | ||||||
|  |             total_inv_residual += l['amount_unreconciled'] | ||||||
|  |         writeoff_amount = amount - sign * (credit - debit) | ||||||
|  |         if context.has_key('click_register_payment'): | ||||||
|  |             writeoff_amount = amount - (total_inv_residual) | ||||||
|  |         return writeoff_amount | ||||||
|  | 
 | ||||||
|  |     #Workaround to send context in _compute_writeoff_amount() | ||||||
|  |     def recompute_voucher_lines(self, cr, uid, ids, partner_id, journal_id, price, currency_id, ttype, date, context=None): | ||||||
|  |         """ | ||||||
|  |         Returns a dict that contains new values and context | ||||||
|  | 
 | ||||||
|  |         @param partner_id: latest value from user input for field partner_id | ||||||
|  |         @param args: other arguments | ||||||
|  |         @param context: context arguments, like lang, time zone | ||||||
|  | 
 | ||||||
|  |         @return: Returns a dict which contains new values, and context | ||||||
|  |         """ | ||||||
|  |         def _remove_noise_in_o2m(): | ||||||
|  |             """if the line is partially reconciled, then we must pay attention to display it only once and | ||||||
|  |                 in the good o2m. | ||||||
|  |                 This function returns True if the line is considered as noise and should not be displayed | ||||||
|  |             """ | ||||||
|  |             if line.reconcile_partial_id: | ||||||
|  |                 if currency_id == line.currency_id.id: | ||||||
|  |                     if line.amount_residual_currency <= 0: | ||||||
|  |                         return True | ||||||
|  |                 else: | ||||||
|  |                     if line.amount_residual <= 0: | ||||||
|  |                         return True | ||||||
|  |             return False | ||||||
|  | 
 | ||||||
|  |         if context is None: | ||||||
|  |             context = {} | ||||||
|  |         context_multi_currency = context.copy() | ||||||
|  | 
 | ||||||
|  |         currency_pool = self.pool.get('res.currency') | ||||||
|  |         move_line_pool = self.pool.get('account.move.line') | ||||||
|  |         partner_pool = self.pool.get('res.partner') | ||||||
|  |         journal_pool = self.pool.get('account.journal') | ||||||
|  |         line_pool = self.pool.get('account.voucher.line') | ||||||
|  | 
 | ||||||
|  |         #set default values | ||||||
|  |         default = { | ||||||
|  |             'value': {'line_dr_ids': [], 'line_cr_ids': [], 'pre_line': False}, | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         # drop existing lines | ||||||
|  |         line_ids = ids and line_pool.search(cr, uid, [('voucher_id', '=', ids[0])]) | ||||||
|  |         for line in line_pool.browse(cr, uid, line_ids, context=context): | ||||||
|  |             if line.type == 'cr': | ||||||
|  |                 default['value']['line_cr_ids'].append((2, line.id)) | ||||||
|  |             else: | ||||||
|  |                 default['value']['line_dr_ids'].append((2, line.id)) | ||||||
|  | 
 | ||||||
|  |         if not partner_id or not journal_id: | ||||||
|  |             return default | ||||||
|  | 
 | ||||||
|  |         journal = journal_pool.browse(cr, uid, journal_id, context=context) | ||||||
|  |         partner = partner_pool.browse(cr, uid, partner_id, context=context) | ||||||
|  |         currency_id = currency_id or journal.company_id.currency_id.id | ||||||
|  | 
 | ||||||
|  |         total_credit = 0.0 | ||||||
|  |         total_debit = 0.0 | ||||||
|  |         account_type = None | ||||||
|  |         if context.get('account_id'): | ||||||
|  |             account_type = self.pool['account.account'].browse(cr, uid, context['account_id'], context=context).type | ||||||
|  |         if ttype == 'payment': | ||||||
|  |             if not account_type: | ||||||
|  |                 account_type = 'payable' | ||||||
|  |             total_debit = price or 0.0 | ||||||
|  |         else: | ||||||
|  |             total_credit = price or 0.0 | ||||||
|  |             if not account_type: | ||||||
|  |                 account_type = 'receivable' | ||||||
|  | 
 | ||||||
|  |         if not context.get('move_line_ids', False): | ||||||
|  |             if context.get('click_register_payment', False) and context.get('invoice_id', False): | ||||||
|  |                 ids = move_line_pool.search(cr, uid, [('state','=','valid'), ('account_id.type', '=', account_type), ('reconcile_id', '=', False), ('partner_id', '=', partner_id),('invoice','=',context.get('invoice_id'))], context=context) | ||||||
|  |             else: | ||||||
|  |                 ids = move_line_pool.search(cr, uid, [('state','=','valid'), ('account_id.type', '=', account_type), ('reconcile_id', '=', False), ('partner_id', '=', partner_id)], context=context) | ||||||
|  |         else: | ||||||
|  |             ids = context['move_line_ids'] | ||||||
|  |         invoice_id = context.get('invoice_id', False) | ||||||
|  |         company_currency = journal.company_id.currency_id.id | ||||||
|  |         move_lines_found = [] | ||||||
|  | 
 | ||||||
|  |         #order the lines by most old first | ||||||
|  |         ids.reverse() | ||||||
|  |         account_move_lines = move_line_pool.browse(cr, uid, ids, context=context) | ||||||
|  | 
 | ||||||
|  |         #compute the total debit/credit and look for a matching open amount or invoice | ||||||
|  |         for line in account_move_lines: | ||||||
|  |             if _remove_noise_in_o2m(): | ||||||
|  |                 continue | ||||||
|  | 
 | ||||||
|  |             if invoice_id: | ||||||
|  |                 if line.invoice.id == invoice_id: | ||||||
|  |                     #if the invoice linked to the voucher line is equal to the invoice_id in context | ||||||
|  |                     #then we assign the amount on that line, whatever the other voucher lines | ||||||
|  |                     move_lines_found.append(line.id) | ||||||
|  |             elif currency_id == company_currency: | ||||||
|  |                 #otherwise treatments is the same but with other field names | ||||||
|  |                 if line.amount_residual == price: | ||||||
|  |                     #if the amount residual is equal the amount voucher, we assign it to that voucher | ||||||
|  |                     #line, whatever the other voucher lines | ||||||
|  |                     move_lines_found.append(line.id) | ||||||
|  |                     break | ||||||
|  |                 #otherwise we will split the voucher amount on each line (by most old first) | ||||||
|  |                 total_credit += line.credit or 0.0 | ||||||
|  |                 total_debit += line.debit or 0.0 | ||||||
|  |             elif currency_id == line.currency_id.id: | ||||||
|  |                 if line.amount_residual_currency == price: | ||||||
|  |                     move_lines_found.append(line.id) | ||||||
|  |                     break | ||||||
|  |                 total_credit += line.credit and line.amount_currency or 0.0 | ||||||
|  |                 total_debit += line.debit and line.amount_currency or 0.0 | ||||||
|  | 
 | ||||||
|  |         remaining_amount = price | ||||||
|  |         #voucher line creation | ||||||
|  |         for line in account_move_lines: | ||||||
|  | 
 | ||||||
|  |             if _remove_noise_in_o2m(): | ||||||
|  |                 continue | ||||||
|  | 
 | ||||||
|  |             if line.currency_id and currency_id == line.currency_id.id: | ||||||
|  |                 amount_original = abs(line.amount_currency) | ||||||
|  |                 amount_unreconciled = abs(line.amount_residual_currency) | ||||||
|  |             else: | ||||||
|  |                 #always use the amount booked in the company currency as the basis of the conversion into the voucher currency | ||||||
|  |                 amount_original = currency_pool.compute(cr, uid, company_currency, currency_id, line.credit or line.debit or 0.0, context=context_multi_currency) | ||||||
|  |                 amount_unreconciled = currency_pool.compute(cr, uid, company_currency, currency_id, abs(line.amount_residual), context=context_multi_currency) | ||||||
|  |             line_currency_id = line.currency_id and line.currency_id.id or company_currency | ||||||
|  |             rs = { | ||||||
|  |                 'name':line.move_id.name, | ||||||
|  |                 'type': line.credit and 'dr' or 'cr', | ||||||
|  |                 'move_line_id':line.id, | ||||||
|  |                 'account_id':line.account_id.id, | ||||||
|  |                 'amount_original': amount_original, | ||||||
|  |                 'amount': (line.id in move_lines_found) and min(abs(remaining_amount), amount_unreconciled) or 0.0, | ||||||
|  |                 'date_original':line.date, | ||||||
|  |                 'date_due':line.date_maturity, | ||||||
|  |                 'amount_unreconciled': amount_unreconciled, | ||||||
|  |                 'currency_id': line_currency_id, | ||||||
|  |             } | ||||||
|  |             remaining_amount -= rs['amount'] | ||||||
|  |             #in case a corresponding move_line hasn't been found, we now try to assign the voucher amount | ||||||
|  |             #on existing invoices: we split voucher amount by most old first, but only for lines in the same currency | ||||||
|  |             if not move_lines_found: | ||||||
|  |                 if currency_id == line_currency_id: | ||||||
|  |                     if line.credit: | ||||||
|  |                         amount = min(amount_unreconciled, abs(total_debit)) | ||||||
|  |                         rs['amount'] = amount | ||||||
|  |                         total_debit -= amount | ||||||
|  |                     else: | ||||||
|  |                         amount = min(amount_unreconciled, abs(total_credit)) | ||||||
|  |                         rs['amount'] = amount | ||||||
|  |                         total_credit -= amount | ||||||
|  | 
 | ||||||
|  |             if rs['amount_unreconciled'] == rs['amount']: | ||||||
|  |                 rs['reconcile'] = True | ||||||
|  | 
 | ||||||
|  |             if rs['type'] == 'cr': | ||||||
|  |                 default['value']['line_cr_ids'].append(rs) | ||||||
|  |             else: | ||||||
|  |                 default['value']['line_dr_ids'].append(rs) | ||||||
|  | 
 | ||||||
|  |             if len(default['value']['line_cr_ids']) > 0: | ||||||
|  |                 default['value']['pre_line'] = 1 | ||||||
|  |             elif len(default['value']['line_dr_ids']) > 0: | ||||||
|  |                 default['value']['pre_line'] = 1 | ||||||
|  |             default['value']['writeoff_amount'] = self._compute_writeoff_amount(cr, uid, default['value']['line_dr_ids'], default['value']['line_cr_ids'], price, ttype, context=context) | ||||||
|  |         return default | ||||||
|  | 
 | ||||||
|  | def resolve_o2m_operations(cr, uid, target_osv, operations, fields, context): | ||||||
|  |     results = [] | ||||||
|  |     for operation in operations: | ||||||
|  |         result = None | ||||||
|  |         if not isinstance(operation, (list, tuple)): | ||||||
|  |             result = target_osv.read(cr, uid, operation, fields, context=context) | ||||||
|  |         elif operation[0] == 0: | ||||||
|  |             # may be necessary to check if all the fields are here and get the default values? | ||||||
|  |             result = operation[2] | ||||||
|  |         elif operation[0] == 1: | ||||||
|  |             result = target_osv.read(cr, uid, operation[1], fields, context=context) | ||||||
|  |             if not result: result = {} | ||||||
|  |             result.update(operation[2]) | ||||||
|  |         elif operation[0] == 4: | ||||||
|  |             result = target_osv.read(cr, uid, operation[1], fields, context=context) | ||||||
|  |         if result != None: | ||||||
|  |             results.append(result) | ||||||
|  |     return results      | ||||||
| # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: | # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: | ||||||
|  |  | ||||||
|  | @ -35,4 +35,16 @@ invoice_validate() | ||||||
| action_skonto_faelligkeit_assign()</field> | action_skonto_faelligkeit_assign()</field> | ||||||
|         </record>		 |         </record>		 | ||||||
| 	</data> | 	</data> | ||||||
|  | 
 | ||||||
|  |     <data noupdate="1"> | ||||||
|  | 
 | ||||||
|  |         <record id="account_account_skonto" model="account.account"> | ||||||
|  |             <field name="name">Skonto</field> | ||||||
|  |             <field name="code">99999999</field> | ||||||
|  |             <field name="type">other</field> | ||||||
|  |             <field name="user_type" search="[('code','=','other')]"/> | ||||||
|  |         </record> | ||||||
|  | 
 | ||||||
|  |     </data> | ||||||
|  | 
 | ||||||
| </openerp> | </openerp> | ||||||
|  |  | ||||||
|  | @ -56,10 +56,23 @@ | ||||||
|                     <field name="skonto_faelligkeit"/> |                     <field name="skonto_faelligkeit"/> | ||||||
|                 </field> |                 </field> | ||||||
|                 <field name="residual" position="before"> |                 <field name="residual" position="before"> | ||||||
| 					<field name="skonto_betrag_inkl"/>                     | 					<field name="skonto_betrag_inkl" attrs="{'invisible': [('skonto_betrag_inkl','=',0)]}"/>                     | ||||||
|                 </field>                 |                 </field>                 | ||||||
|             </field> |             </field> | ||||||
|         </record> |         </record> | ||||||
| 
 | 
 | ||||||
|  |         <!-- account.voucher --> | ||||||
|  |         <record id="account_voucher_form" model="ir.ui.view"> | ||||||
|  |             <field name="name">cam_invoice_skonto.account_voucher.form</field> | ||||||
|  |             <field name="model">account.voucher</field> | ||||||
|  |             <field name="inherit_id" ref="account_voucher.view_vendor_receipt_dialog_form"/> | ||||||
|  |             <field name="arch" type="xml"> | ||||||
|  |                 <field name="writeoff_acc_id" position="attributes"> | ||||||
|  |                     <attribute name="invisible">1</attribute> | ||||||
|  |                 </field> | ||||||
|  | 
 | ||||||
|  |             </field> | ||||||
|  |         </record> | ||||||
|  | 
 | ||||||
|     </data> |     </data> | ||||||
| </openerp> | </openerp> | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue