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 | ||||
| import openerp.addons.decimal_precision as dp | ||||
| from datetime import date, timedelta, datetime | ||||
| from openerp.tools.translate import _ | ||||
| 
 | ||||
| class account_payment_term(osv.osv): | ||||
|     _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)}) | ||||
|         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: | ||||
|  |  | |||
|  | @ -35,4 +35,16 @@ invoice_validate() | |||
| action_skonto_faelligkeit_assign()</field> | ||||
|         </record>		 | ||||
| 	</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> | ||||
|  |  | |||
|  | @ -56,10 +56,23 @@ | |||
|                     <field name="skonto_faelligkeit"/> | ||||
|                 </field> | ||||
|                 <field name="residual" position="before"> | ||||
| 					<field name="skonto_betrag_inkl"/>                     | ||||
| 					<field name="skonto_betrag_inkl" attrs="{'invisible': [('skonto_betrag_inkl','=',0)]}"/>                     | ||||
|                 </field>                 | ||||
|             </field> | ||||
|         </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> | ||||
| </openerp> | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue