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'
|
||||
|
|
@ -81,5 +82,309 @@ class account_invoice(models.Model):
|
|||
if inv.payment_term and 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
|
||||
|
||||
# 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:
|
||||
|
|
|
|||
|
|
@ -34,5 +34,17 @@ action_number()
|
|||
invoice_validate()
|
||||
action_skonto_faelligkeit_assign()</field>
|
||||
</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>
|
||||
|
|
|
|||
|
|
@ -40,7 +40,7 @@
|
|||
<group col="4">
|
||||
<field name="skonto_tage"/>
|
||||
<field name="netto_tage"/>
|
||||
<field name="skonto_prozent"/>
|
||||
<field name="skonto_prozent"/>
|
||||
</group>
|
||||
</xpath>
|
||||
</field>
|
||||
|
|
@ -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