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