diff --git a/modules/org.openbravo.advpaymentmngt/src-db/database/model/modifiedTables/FIN_FINANCIAL_ACCOUNT.xml b/modules/org.openbravo.advpaymentmngt/src-db/database/model/modifiedTables/FIN_FINANCIAL_ACCOUNT.xml
--- a/modules/org.openbravo.advpaymentmngt/src-db/database/model/modifiedTables/FIN_FINANCIAL_ACCOUNT.xml
+++ b/modules/org.openbravo.advpaymentmngt/src-db/database/model/modifiedTables/FIN_FINANCIAL_ACCOUNT.xml
@@ -33,5 +33,9 @@
         <default><![CDATA[N]]></default>
         <onCreateDefault/>
       </column>
+      <column name="EM_APRM_RECONCILEALL" primaryKey="false" required="false" type="CHAR" size="1" autoIncrement="false">
+        <default/>
+        <onCreateDefault/>
+      </column>
     </table>
   </database>
diff --git a/modules/org.openbravo.advpaymentmngt/src-db/database/sourcedata/AD_COLUMN.xml b/modules/org.openbravo.advpaymentmngt/src-db/database/sourcedata/AD_COLUMN.xml
--- a/modules/org.openbravo.advpaymentmngt/src-db/database/sourcedata/AD_COLUMN.xml
+++ b/modules/org.openbravo.advpaymentmngt/src-db/database/sourcedata/AD_COLUMN.xml
@@ -102,6 +102,40 @@
 <!--038E6E9140CB4924B22060672E2847A2-->  <ENTITY_ALIAS><![CDATA[bsl.id]]></ENTITY_ALIAS>
 <!--038E6E9140CB4924B22060672E2847A2--></AD_COLUMN>
 
+<!--04619F587B4E42318246E13274E2A815--><AD_COLUMN>
+<!--04619F587B4E42318246E13274E2A815-->  <AD_COLUMN_ID><![CDATA[04619F587B4E42318246E13274E2A815]]></AD_COLUMN_ID>
+<!--04619F587B4E42318246E13274E2A815-->  <AD_CLIENT_ID><![CDATA[0]]></AD_CLIENT_ID>
+<!--04619F587B4E42318246E13274E2A815-->  <AD_ORG_ID><![CDATA[0]]></AD_ORG_ID>
+<!--04619F587B4E42318246E13274E2A815-->  <ISACTIVE><![CDATA[Y]]></ISACTIVE>
+<!--04619F587B4E42318246E13274E2A815-->  <NAME><![CDATA[EM_Aprm_ReconcileAll]]></NAME>
+<!--04619F587B4E42318246E13274E2A815-->  <COLUMNNAME><![CDATA[EM_Aprm_ReconcileAll]]></COLUMNNAME>
+<!--04619F587B4E42318246E13274E2A815-->  <AD_TABLE_ID><![CDATA[B129E53BC0E747879F7BA17F0AECEC32]]></AD_TABLE_ID>
+<!--04619F587B4E42318246E13274E2A815-->  <AD_REFERENCE_ID><![CDATA[28]]></AD_REFERENCE_ID>
+<!--04619F587B4E42318246E13274E2A815-->  <FIELDLENGTH><![CDATA[1]]></FIELDLENGTH>
+<!--04619F587B4E42318246E13274E2A815-->  <ISKEY><![CDATA[N]]></ISKEY>
+<!--04619F587B4E42318246E13274E2A815-->  <ISPARENT><![CDATA[N]]></ISPARENT>
+<!--04619F587B4E42318246E13274E2A815-->  <ISMANDATORY><![CDATA[N]]></ISMANDATORY>
+<!--04619F587B4E42318246E13274E2A815-->  <ISUPDATEABLE><![CDATA[Y]]></ISUPDATEABLE>
+<!--04619F587B4E42318246E13274E2A815-->  <ISIDENTIFIER><![CDATA[N]]></ISIDENTIFIER>
+<!--04619F587B4E42318246E13274E2A815-->  <SEQNO><![CDATA[510]]></SEQNO>
+<!--04619F587B4E42318246E13274E2A815-->  <ISTRANSLATED><![CDATA[N]]></ISTRANSLATED>
+<!--04619F587B4E42318246E13274E2A815-->  <ISENCRYPTED><![CDATA[N]]></ISENCRYPTED>
+<!--04619F587B4E42318246E13274E2A815-->  <ISSELECTIONCOLUMN><![CDATA[N]]></ISSELECTIONCOLUMN>
+<!--04619F587B4E42318246E13274E2A815-->  <AD_ELEMENT_ID><![CDATA[3917C8CE8C524E31B632733251CBED1B]]></AD_ELEMENT_ID>
+<!--04619F587B4E42318246E13274E2A815-->  <ISSESSIONATTR><![CDATA[N]]></ISSESSIONATTR>
+<!--04619F587B4E42318246E13274E2A815-->  <ISSECONDARYKEY><![CDATA[N]]></ISSECONDARYKEY>
+<!--04619F587B4E42318246E13274E2A815-->  <ISDESENCRYPTABLE><![CDATA[N]]></ISDESENCRYPTABLE>
+<!--04619F587B4E42318246E13274E2A815-->  <DEVELOPMENTSTATUS><![CDATA[RE]]></DEVELOPMENTSTATUS>
+<!--04619F587B4E42318246E13274E2A815-->  <AD_MODULE_ID><![CDATA[A918E3331C404B889D69AA9BFAFB23AC]]></AD_MODULE_ID>
+<!--04619F587B4E42318246E13274E2A815-->  <POSITION><![CDATA[43]]></POSITION>
+<!--04619F587B4E42318246E13274E2A815-->  <ISTRANSIENT><![CDATA[N]]></ISTRANSIENT>
+<!--04619F587B4E42318246E13274E2A815-->  <ISAUTOSAVE><![CDATA[Y]]></ISAUTOSAVE>
+<!--04619F587B4E42318246E13274E2A815-->  <VALIDATEONNEW><![CDATA[Y]]></VALIDATEONNEW>
+<!--04619F587B4E42318246E13274E2A815-->  <IMAGESIZEVALUESACTION><![CDATA[N]]></IMAGESIZEVALUESACTION>
+<!--04619F587B4E42318246E13274E2A815-->  <ISUSEDSEQUENCE><![CDATA[N]]></ISUSEDSEQUENCE>
+<!--04619F587B4E42318246E13274E2A815-->  <EM_OBUIAPP_PROCESS_ID><![CDATA[C24B3119E17D4C0987A574EAEBD30ADB]]></EM_OBUIAPP_PROCESS_ID>
+<!--04619F587B4E42318246E13274E2A815--></AD_COLUMN>
+
 <!--046498C716474A6EAAEA0CA26E09C69D--><AD_COLUMN>
 <!--046498C716474A6EAAEA0CA26E09C69D-->  <AD_COLUMN_ID><![CDATA[046498C716474A6EAAEA0CA26E09C69D]]></AD_COLUMN_ID>
 <!--046498C716474A6EAAEA0CA26E09C69D-->  <AD_CLIENT_ID><![CDATA[0]]></AD_CLIENT_ID>
diff --git a/modules/org.openbravo.advpaymentmngt/src-db/database/sourcedata/AD_ELEMENT.xml b/modules/org.openbravo.advpaymentmngt/src-db/database/sourcedata/AD_ELEMENT.xml
--- a/modules/org.openbravo.advpaymentmngt/src-db/database/sourcedata/AD_ELEMENT.xml
+++ b/modules/org.openbravo.advpaymentmngt/src-db/database/sourcedata/AD_ELEMENT.xml
@@ -154,6 +154,18 @@
 <!--36C60E53F1274EDA827ED5146A2B13D1-->  <ISGLOSSARY><![CDATA[N]]></ISGLOSSARY>
 <!--36C60E53F1274EDA827ED5146A2B13D1--></AD_ELEMENT>
 
+<!--3917C8CE8C524E31B632733251CBED1B--><AD_ELEMENT>
+<!--3917C8CE8C524E31B632733251CBED1B-->  <AD_ELEMENT_ID><![CDATA[3917C8CE8C524E31B632733251CBED1B]]></AD_ELEMENT_ID>
+<!--3917C8CE8C524E31B632733251CBED1B-->  <AD_CLIENT_ID><![CDATA[0]]></AD_CLIENT_ID>
+<!--3917C8CE8C524E31B632733251CBED1B-->  <AD_ORG_ID><![CDATA[0]]></AD_ORG_ID>
+<!--3917C8CE8C524E31B632733251CBED1B-->  <ISACTIVE><![CDATA[Y]]></ISACTIVE>
+<!--3917C8CE8C524E31B632733251CBED1B-->  <COLUMNNAME><![CDATA[EM_Aprm_ReconcileAll]]></COLUMNNAME>
+<!--3917C8CE8C524E31B632733251CBED1B-->  <NAME><![CDATA[Reconcile All]]></NAME>
+<!--3917C8CE8C524E31B632733251CBED1B-->  <PRINTNAME><![CDATA[Reconcile All]]></PRINTNAME>
+<!--3917C8CE8C524E31B632733251CBED1B-->  <AD_MODULE_ID><![CDATA[A918E3331C404B889D69AA9BFAFB23AC]]></AD_MODULE_ID>
+<!--3917C8CE8C524E31B632733251CBED1B-->  <ISGLOSSARY><![CDATA[N]]></ISGLOSSARY>
+<!--3917C8CE8C524E31B632733251CBED1B--></AD_ELEMENT>
+
 <!--399FFABE15CF42CEB8629148E07D5403--><AD_ELEMENT>
 <!--399FFABE15CF42CEB8629148E07D5403-->  <AD_ELEMENT_ID><![CDATA[399FFABE15CF42CEB8629148E07D5403]]></AD_ELEMENT_ID>
 <!--399FFABE15CF42CEB8629148E07D5403-->  <AD_CLIENT_ID><![CDATA[0]]></AD_CLIENT_ID>
diff --git a/modules/org.openbravo.advpaymentmngt/src-db/database/sourcedata/AD_FIELD.xml b/modules/org.openbravo.advpaymentmngt/src-db/database/sourcedata/AD_FIELD.xml
--- a/modules/org.openbravo.advpaymentmngt/src-db/database/sourcedata/AD_FIELD.xml
+++ b/modules/org.openbravo.advpaymentmngt/src-db/database/sourcedata/AD_FIELD.xml
@@ -12720,6 +12720,34 @@
 <!--8E4434A6CBD54C3E8AC186D020003252-->  <EM_OBUIAPP_SHOWSUMMARY><![CDATA[N]]></EM_OBUIAPP_SHOWSUMMARY>
 <!--8E4434A6CBD54C3E8AC186D020003252--></AD_FIELD>
 
+<!--8F70A34BCF8D41F697430673FC91A608--><AD_FIELD>
+<!--8F70A34BCF8D41F697430673FC91A608-->  <AD_FIELD_ID><![CDATA[8F70A34BCF8D41F697430673FC91A608]]></AD_FIELD_ID>
+<!--8F70A34BCF8D41F697430673FC91A608-->  <AD_CLIENT_ID><![CDATA[0]]></AD_CLIENT_ID>
+<!--8F70A34BCF8D41F697430673FC91A608-->  <AD_ORG_ID><![CDATA[0]]></AD_ORG_ID>
+<!--8F70A34BCF8D41F697430673FC91A608-->  <ISACTIVE><![CDATA[Y]]></ISACTIVE>
+<!--8F70A34BCF8D41F697430673FC91A608-->  <NAME><![CDATA[Reconcile All]]></NAME>
+<!--8F70A34BCF8D41F697430673FC91A608-->  <ISCENTRALLYMAINTAINED><![CDATA[Y]]></ISCENTRALLYMAINTAINED>
+<!--8F70A34BCF8D41F697430673FC91A608-->  <AD_TAB_ID><![CDATA[2845D761A8394468BD3BA4710AA888D4]]></AD_TAB_ID>
+<!--8F70A34BCF8D41F697430673FC91A608-->  <AD_COLUMN_ID><![CDATA[04619F587B4E42318246E13274E2A815]]></AD_COLUMN_ID>
+<!--8F70A34BCF8D41F697430673FC91A608-->  <IGNOREINWAD><![CDATA[N]]></IGNOREINWAD>
+<!--8F70A34BCF8D41F697430673FC91A608-->  <ISDISPLAYED><![CDATA[Y]]></ISDISPLAYED>
+<!--8F70A34BCF8D41F697430673FC91A608-->  <DISPLAYLOGIC><![CDATA[@Type@='C'|@FIN_Matching_Algorithm_ID@='']]></DISPLAYLOGIC>
+<!--8F70A34BCF8D41F697430673FC91A608-->  <DISPLAYLENGTH><![CDATA[1]]></DISPLAYLENGTH>
+<!--8F70A34BCF8D41F697430673FC91A608-->  <ISREADONLY><![CDATA[N]]></ISREADONLY>
+<!--8F70A34BCF8D41F697430673FC91A608-->  <SEQNO><![CDATA[440]]></SEQNO>
+<!--8F70A34BCF8D41F697430673FC91A608-->  <ISSAMELINE><![CDATA[N]]></ISSAMELINE>
+<!--8F70A34BCF8D41F697430673FC91A608-->  <ISFIELDONLY><![CDATA[N]]></ISFIELDONLY>
+<!--8F70A34BCF8D41F697430673FC91A608-->  <ISENCRYPTED><![CDATA[N]]></ISENCRYPTED>
+<!--8F70A34BCF8D41F697430673FC91A608-->  <SHOWINRELATION><![CDATA[N]]></SHOWINRELATION>
+<!--8F70A34BCF8D41F697430673FC91A608-->  <ISFIRSTFOCUSEDFIELD><![CDATA[N]]></ISFIRSTFOCUSEDFIELD>
+<!--8F70A34BCF8D41F697430673FC91A608-->  <AD_MODULE_ID><![CDATA[A918E3331C404B889D69AA9BFAFB23AC]]></AD_MODULE_ID>
+<!--8F70A34BCF8D41F697430673FC91A608-->  <GRID_SEQNO><![CDATA[100]]></GRID_SEQNO>
+<!--8F70A34BCF8D41F697430673FC91A608-->  <STARTINODDCOLUMN><![CDATA[N]]></STARTINODDCOLUMN>
+<!--8F70A34BCF8D41F697430673FC91A608-->  <STARTNEWLINE><![CDATA[N]]></STARTNEWLINE>
+<!--8F70A34BCF8D41F697430673FC91A608-->  <ISSHOWNINSTATUSBAR><![CDATA[N]]></ISSHOWNINSTATUSBAR>
+<!--8F70A34BCF8D41F697430673FC91A608-->  <EM_OBUIAPP_SHOWSUMMARY><![CDATA[N]]></EM_OBUIAPP_SHOWSUMMARY>
+<!--8F70A34BCF8D41F697430673FC91A608--></AD_FIELD>
+
 <!--9081ABC15835406BA6BEE3C8A8039CCE--><AD_FIELD>
 <!--9081ABC15835406BA6BEE3C8A8039CCE-->  <AD_FIELD_ID><![CDATA[9081ABC15835406BA6BEE3C8A8039CCE]]></AD_FIELD_ID>
 <!--9081ABC15835406BA6BEE3C8A8039CCE-->  <AD_CLIENT_ID><![CDATA[0]]></AD_CLIENT_ID>
diff --git a/modules/org.openbravo.advpaymentmngt/src-db/database/sourcedata/OBUIAPP_PARAMETER.xml b/modules/org.openbravo.advpaymentmngt/src-db/database/sourcedata/OBUIAPP_PARAMETER.xml
--- a/modules/org.openbravo.advpaymentmngt/src-db/database/sourcedata/OBUIAPP_PARAMETER.xml
+++ b/modules/org.openbravo.advpaymentmngt/src-db/database/sourcedata/OBUIAPP_PARAMETER.xml
@@ -852,6 +852,31 @@
 <!--74479AE073FF4FA5A527DC79EC0A1C82-->  <DISPLAYTITLE><![CDATA[N]]></DISPLAYTITLE>
 <!--74479AE073FF4FA5A527DC79EC0A1C82--></OBUIAPP_PARAMETER>
 
+<!--75C922B94EFE43848B0A16FA20761014--><OBUIAPP_PARAMETER>
+<!--75C922B94EFE43848B0A16FA20761014-->  <OBUIAPP_PARAMETER_ID><![CDATA[75C922B94EFE43848B0A16FA20761014]]></OBUIAPP_PARAMETER_ID>
+<!--75C922B94EFE43848B0A16FA20761014-->  <AD_CLIENT_ID><![CDATA[0]]></AD_CLIENT_ID>
+<!--75C922B94EFE43848B0A16FA20761014-->  <AD_ORG_ID><![CDATA[0]]></AD_ORG_ID>
+<!--75C922B94EFE43848B0A16FA20761014-->  <ISACTIVE><![CDATA[Y]]></ISACTIVE>
+<!--75C922B94EFE43848B0A16FA20761014-->  <AD_MODULE_ID><![CDATA[A918E3331C404B889D69AA9BFAFB23AC]]></AD_MODULE_ID>
+<!--75C922B94EFE43848B0A16FA20761014-->  <NAME><![CDATA[Transaction Date]]></NAME>
+<!--75C922B94EFE43848B0A16FA20761014-->  <DESCRIPTION><![CDATA[The date the transaction is carried out and registered in the cash journal.]]></DESCRIPTION>
+<!--75C922B94EFE43848B0A16FA20761014-->  <HELP><![CDATA[The Statement Date field defines the date of the statement being processed.]]></HELP>
+<!--75C922B94EFE43848B0A16FA20761014-->  <SEQNO><![CDATA[10]]></SEQNO>
+<!--75C922B94EFE43848B0A16FA20761014-->  <AD_REFERENCE_ID><![CDATA[15]]></AD_REFERENCE_ID>
+<!--75C922B94EFE43848B0A16FA20761014-->  <COLUMNNAME><![CDATA[statementDate]]></COLUMNNAME>
+<!--75C922B94EFE43848B0A16FA20761014-->  <ISCENTRALLYMAINTAINED><![CDATA[Y]]></ISCENTRALLYMAINTAINED>
+<!--75C922B94EFE43848B0A16FA20761014-->  <FIELDLENGTH><![CDATA[10]]></FIELDLENGTH>
+<!--75C922B94EFE43848B0A16FA20761014-->  <ISMANDATORY><![CDATA[Y]]></ISMANDATORY>
+<!--75C922B94EFE43848B0A16FA20761014-->  <DEFAULTVALUE><![CDATA[OB.getSession().getAttribute('#DATE')]]></DEFAULTVALUE>
+<!--75C922B94EFE43848B0A16FA20761014-->  <AD_ELEMENT_ID><![CDATA[1434]]></AD_ELEMENT_ID>
+<!--75C922B94EFE43848B0A16FA20761014-->  <ISFIXED><![CDATA[N]]></ISFIXED>
+<!--75C922B94EFE43848B0A16FA20761014-->  <EVALUATEFIXEDVALUE><![CDATA[N]]></EVALUATEFIXEDVALUE>
+<!--75C922B94EFE43848B0A16FA20761014-->  <OBUIAPP_PROCESS_ID><![CDATA[C24B3119E17D4C0987A574EAEBD30ADB]]></OBUIAPP_PROCESS_ID>
+<!--75C922B94EFE43848B0A16FA20761014-->  <STARTINNEWLINE><![CDATA[N]]></STARTINNEWLINE>
+<!--75C922B94EFE43848B0A16FA20761014-->  <DISPLAYEDROWS><![CDATA[5]]></DISPLAYEDROWS>
+<!--75C922B94EFE43848B0A16FA20761014-->  <DISPLAYTITLE><![CDATA[Y]]></DISPLAYTITLE>
+<!--75C922B94EFE43848B0A16FA20761014--></OBUIAPP_PARAMETER>
+
 <!--76E43D5C34244BBDA6FE6678F94C3B7C--><OBUIAPP_PARAMETER>
 <!--76E43D5C34244BBDA6FE6678F94C3B7C-->  <OBUIAPP_PARAMETER_ID><![CDATA[76E43D5C34244BBDA6FE6678F94C3B7C]]></OBUIAPP_PARAMETER_ID>
 <!--76E43D5C34244BBDA6FE6678F94C3B7C-->  <AD_CLIENT_ID><![CDATA[0]]></AD_CLIENT_ID>
@@ -1051,6 +1076,30 @@
 <!--8424D0FA373945708522DA3720F27BC4-->  <DISPLAYTITLE><![CDATA[N]]></DISPLAYTITLE>
 <!--8424D0FA373945708522DA3720F27BC4--></OBUIAPP_PARAMETER>
 
+<!--84CFEB97A7C8464C9D9B93BEEF7F610F--><OBUIAPP_PARAMETER>
+<!--84CFEB97A7C8464C9D9B93BEEF7F610F-->  <OBUIAPP_PARAMETER_ID><![CDATA[84CFEB97A7C8464C9D9B93BEEF7F610F]]></OBUIAPP_PARAMETER_ID>
+<!--84CFEB97A7C8464C9D9B93BEEF7F610F-->  <AD_CLIENT_ID><![CDATA[0]]></AD_CLIENT_ID>
+<!--84CFEB97A7C8464C9D9B93BEEF7F610F-->  <AD_ORG_ID><![CDATA[0]]></AD_ORG_ID>
+<!--84CFEB97A7C8464C9D9B93BEEF7F610F-->  <ISACTIVE><![CDATA[Y]]></ISACTIVE>
+<!--84CFEB97A7C8464C9D9B93BEEF7F610F-->  <AD_MODULE_ID><![CDATA[A918E3331C404B889D69AA9BFAFB23AC]]></AD_MODULE_ID>
+<!--84CFEB97A7C8464C9D9B93BEEF7F610F-->  <NAME><![CDATA[Ending Balance]]></NAME>
+<!--84CFEB97A7C8464C9D9B93BEEF7F610F-->  <DESCRIPTION><![CDATA[Ending  or closing balance]]></DESCRIPTION>
+<!--84CFEB97A7C8464C9D9B93BEEF7F610F-->  <HELP><![CDATA[The Ending Balance is the result of adjusting the Beginning Balance by any payments or disbursements.]]></HELP>
+<!--84CFEB97A7C8464C9D9B93BEEF7F610F-->  <SEQNO><![CDATA[20]]></SEQNO>
+<!--84CFEB97A7C8464C9D9B93BEEF7F610F-->  <AD_REFERENCE_ID><![CDATA[12]]></AD_REFERENCE_ID>
+<!--84CFEB97A7C8464C9D9B93BEEF7F610F-->  <COLUMNNAME><![CDATA[endingBalance]]></COLUMNNAME>
+<!--84CFEB97A7C8464C9D9B93BEEF7F610F-->  <ISCENTRALLYMAINTAINED><![CDATA[Y]]></ISCENTRALLYMAINTAINED>
+<!--84CFEB97A7C8464C9D9B93BEEF7F610F-->  <FIELDLENGTH><![CDATA[12]]></FIELDLENGTH>
+<!--84CFEB97A7C8464C9D9B93BEEF7F610F-->  <ISMANDATORY><![CDATA[Y]]></ISMANDATORY>
+<!--84CFEB97A7C8464C9D9B93BEEF7F610F-->  <AD_ELEMENT_ID><![CDATA[1396]]></AD_ELEMENT_ID>
+<!--84CFEB97A7C8464C9D9B93BEEF7F610F-->  <ISFIXED><![CDATA[N]]></ISFIXED>
+<!--84CFEB97A7C8464C9D9B93BEEF7F610F-->  <EVALUATEFIXEDVALUE><![CDATA[N]]></EVALUATEFIXEDVALUE>
+<!--84CFEB97A7C8464C9D9B93BEEF7F610F-->  <OBUIAPP_PROCESS_ID><![CDATA[C24B3119E17D4C0987A574EAEBD30ADB]]></OBUIAPP_PROCESS_ID>
+<!--84CFEB97A7C8464C9D9B93BEEF7F610F-->  <STARTINNEWLINE><![CDATA[N]]></STARTINNEWLINE>
+<!--84CFEB97A7C8464C9D9B93BEEF7F610F-->  <DISPLAYEDROWS><![CDATA[5]]></DISPLAYEDROWS>
+<!--84CFEB97A7C8464C9D9B93BEEF7F610F-->  <DISPLAYTITLE><![CDATA[Y]]></DISPLAYTITLE>
+<!--84CFEB97A7C8464C9D9B93BEEF7F610F--></OBUIAPP_PARAMETER>
+
 <!--854F44975FB84D20AE8E8DA02999747E--><OBUIAPP_PARAMETER>
 <!--854F44975FB84D20AE8E8DA02999747E-->  <OBUIAPP_PARAMETER_ID><![CDATA[854F44975FB84D20AE8E8DA02999747E]]></OBUIAPP_PARAMETER_ID>
 <!--854F44975FB84D20AE8E8DA02999747E-->  <AD_CLIENT_ID><![CDATA[0]]></AD_CLIENT_ID>
diff --git a/modules/org.openbravo.advpaymentmngt/src-db/database/sourcedata/OBUIAPP_PROCESS.xml b/modules/org.openbravo.advpaymentmngt/src-db/database/sourcedata/OBUIAPP_PROCESS.xml
--- a/modules/org.openbravo.advpaymentmngt/src-db/database/sourcedata/OBUIAPP_PROCESS.xml
+++ b/modules/org.openbravo.advpaymentmngt/src-db/database/sourcedata/OBUIAPP_PROCESS.xml
@@ -138,6 +138,24 @@
 <!--9BED7889E1034FE68BD85D5D16857320-->  <ISCANADDRECORDSTOSELECTOR><![CDATA[Y]]></ISCANADDRECORDSTOSELECTOR>
 <!--9BED7889E1034FE68BD85D5D16857320--></OBUIAPP_PROCESS>
 
+<!--C24B3119E17D4C0987A574EAEBD30ADB--><OBUIAPP_PROCESS>
+<!--C24B3119E17D4C0987A574EAEBD30ADB-->  <OBUIAPP_PROCESS_ID><![CDATA[C24B3119E17D4C0987A574EAEBD30ADB]]></OBUIAPP_PROCESS_ID>
+<!--C24B3119E17D4C0987A574EAEBD30ADB-->  <AD_CLIENT_ID><![CDATA[0]]></AD_CLIENT_ID>
+<!--C24B3119E17D4C0987A574EAEBD30ADB-->  <AD_ORG_ID><![CDATA[0]]></AD_ORG_ID>
+<!--C24B3119E17D4C0987A574EAEBD30ADB-->  <ISACTIVE><![CDATA[Y]]></ISACTIVE>
+<!--C24B3119E17D4C0987A574EAEBD30ADB-->  <VALUE><![CDATA[APRM_ReconcileAll]]></VALUE>
+<!--C24B3119E17D4C0987A574EAEBD30ADB-->  <NAME><![CDATA[Reconcile All]]></NAME>
+<!--C24B3119E17D4C0987A574EAEBD30ADB-->  <ACCESSLEVEL><![CDATA[7]]></ACCESSLEVEL>
+<!--C24B3119E17D4C0987A574EAEBD30ADB-->  <CLASSNAME><![CDATA[org.openbravo.advpaymentmngt.actionHandler.ReconcileAllHandler]]></CLASSNAME>
+<!--C24B3119E17D4C0987A574EAEBD30ADB-->  <ISBACKGROUND><![CDATA[N]]></ISBACKGROUND>
+<!--C24B3119E17D4C0987A574EAEBD30ADB-->  <AD_MODULE_ID><![CDATA[A918E3331C404B889D69AA9BFAFB23AC]]></AD_MODULE_ID>
+<!--C24B3119E17D4C0987A574EAEBD30ADB-->  <UIPATTERN><![CDATA[OBUIAPP_PickAndExecute]]></UIPATTERN>
+<!--C24B3119E17D4C0987A574EAEBD30ADB-->  <ISMULTIRECORD><![CDATA[N]]></ISMULTIRECORD>
+<!--C24B3119E17D4C0987A574EAEBD30ADB-->  <IS_EXPLICIT_ACCESS><![CDATA[N]]></IS_EXPLICIT_ACCESS>
+<!--C24B3119E17D4C0987A574EAEBD30ADB-->  <ISGRIDLEGACY><![CDATA[N]]></ISGRIDLEGACY>
+<!--C24B3119E17D4C0987A574EAEBD30ADB-->  <ISCANADDRECORDSTOSELECTOR><![CDATA[N]]></ISCANADDRECORDSTOSELECTOR>
+<!--C24B3119E17D4C0987A574EAEBD30ADB--></OBUIAPP_PROCESS>
+
 <!--E68790A7B65F4D45AB35E2BAE34C1F39--><OBUIAPP_PROCESS>
 <!--E68790A7B65F4D45AB35E2BAE34C1F39-->  <OBUIAPP_PROCESS_ID><![CDATA[E68790A7B65F4D45AB35E2BAE34C1F39]]></OBUIAPP_PROCESS_ID>
 <!--E68790A7B65F4D45AB35E2BAE34C1F39-->  <AD_CLIENT_ID><![CDATA[0]]></AD_CLIENT_ID>
diff --git a/src/org/openbravo/advpaymentmngt/actionHandler/ReconcileAllHandler.java b/src/org/openbravo/advpaymentmngt/actionHandler/ReconcileAllHandler.java
new file mode 100644
--- /dev/null
+++ b/src/org/openbravo/advpaymentmngt/actionHandler/ReconcileAllHandler.java
@@ -0,0 +1,464 @@
+/*
+ *************************************************************************
+ * The contents of this file are subject to the Openbravo  Public  License
+ * Version  1.0  (the  "License"),  being   the  Mozilla   Public  License
+ * Version 1.1  with a permitted attribution clause; you may not  use this
+ * file except in compliance with the License. You  may  obtain  a copy of
+ * the License at http://www.openbravo.com/legal/license.html
+ * Software distributed under the License  is  distributed  on  an "AS IS"
+ * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
+ * License for the specific  language  governing  rights  and  limitations
+ * under the License.
+ * The Original Code is Openbravo ERP.
+ * The Initial Developer of the Original Code is Openbravo SLU
+ * All portions are Copyright (C) 2015 Openbravo SLU
+ * All Rights Reserved.
+ * Contributor(s):  ______________________________________.
+ *************************************************************************
+ */
+
+package org.openbravo.advpaymentmngt.actionHandler;
+
+import java.io.IOException;
+import java.math.BigDecimal;
+import java.text.SimpleDateFormat;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import javax.servlet.ServletException;
+
+import org.apache.commons.lang.time.DateUtils;
+import org.apache.log4j.Logger;
+import org.codehaus.jettison.json.JSONArray;
+import org.codehaus.jettison.json.JSONObject;
+import org.hibernate.criterion.Restrictions;
+import org.openbravo.advpaymentmngt.APRM_FinaccTransactionV;
+import org.openbravo.advpaymentmngt.dao.TransactionsDao;
+import org.openbravo.advpaymentmngt.utility.FIN_Utility;
+import org.openbravo.base.exception.OBException;
+import org.openbravo.client.application.process.BaseProcessActionHandler;
+import org.openbravo.dal.core.OBContext;
+import org.openbravo.dal.service.OBCriteria;
+import org.openbravo.dal.service.OBDal;
+import org.openbravo.dal.service.OBQuery;
+import org.openbravo.data.FieldProvider;
+import org.openbravo.erpCommon.ad_forms.AcctServer;
+import org.openbravo.erpCommon.utility.OBDateUtils;
+import org.openbravo.erpCommon.utility.OBError;
+import org.openbravo.erpCommon.utility.OBMessageUtils;
+import org.openbravo.model.financialmgmt.accounting.FIN_FinancialAccountAccounting;
+import org.openbravo.model.financialmgmt.payment.FIN_FinaccTransaction;
+import org.openbravo.model.financialmgmt.payment.FIN_FinancialAccount;
+import org.openbravo.model.financialmgmt.payment.FIN_Payment;
+import org.openbravo.model.financialmgmt.payment.FIN_PaymentDetail;
+import org.openbravo.model.financialmgmt.payment.FIN_PaymentScheduleDetail;
+import org.openbravo.model.financialmgmt.payment.FIN_Reconciliation;
+import org.openbravo.model.financialmgmt.payment.FIN_ReconciliationLine_v;
+import org.openbravo.model.financialmgmt.payment.FinAccPaymentMethod;
+import org.openbravo.service.db.DbUtility;
+import org.openbravo.service.json.JsonUtils;
+
+public class ReconcileAllHandler extends BaseProcessActionHandler {
+  private static final Logger log4j = Logger.getLogger(ReconcileAllHandler.class);
+  private static final SimpleDateFormat jsDateFormat = JsonUtils.createDateFormat();
+
+  Set<FIN_FinaccTransaction> transactionsToBePosted = new HashSet<FIN_FinaccTransaction>();
+
+  @Override
+  protected JSONObject doExecute(Map<String, Object> parameters, String data) {
+    try {
+      OBContext.setAdminMode(true);
+      final JSONObject jsonData = new JSONObject(data);
+      final JSONObject jsonparams = jsonData.getJSONObject("_params");
+
+      final Date statementDate = jsDateFormat.parse(jsonparams.getString("statementDate"));
+      final String strEndBalance = jsonparams.getString("endingBalance");
+      final String accountId = jsonData.getString("inpfinFinancialAccountId");
+
+      FieldProvider[] transactionFP = TransactionsDao.getTransactionsFiltered(OBDal.getInstance()
+          .get(FIN_FinancialAccount.class, accountId), DateUtils.addDays(statementDate, 1), true);
+
+      int i = 0;
+      for (FieldProvider fp : transactionFP) {
+        updateTransactionStatus(accountId, fp.getField("transactionId"), true);
+        i++;
+        if (i % 100 == 0) {
+          OBDal.getInstance().flush();
+          OBDal.getInstance().getSession().clear();
+          log4j.debug("flush");
+        }
+      }
+      OBDal.getInstance().flush();
+      OBDal.getInstance().getSession().clear();
+
+      processReconciliation(accountId, statementDate, strEndBalance, true);
+
+      // Success Message
+      return getSuccessMessage(OBMessageUtils.messageBD("Success"));
+
+    } catch (Exception e) {
+      OBDal.getInstance().rollbackAndClose();
+      log4j.error("Exception in reconcile all", e);
+
+      try {
+        Throwable ex = DbUtility.getUnderlyingSQLException(e);
+        String message = OBMessageUtils.translateError(ex.getMessage()).getMessage();
+        return getErrorMessage(message);
+      } catch (Exception ignore) {
+      }
+    } finally {
+      OBContext.restorePreviousMode();
+    }
+
+    return new JSONObject();
+  }
+
+  /**
+   * Returns a JSONObject with the success message to be printed
+   */
+  private static JSONObject getSuccessMessage(final String msgText) {
+    final JSONObject result = new JSONObject();
+    try {
+      final JSONArray actions = new JSONArray();
+      final JSONObject msgInBPTab = new JSONObject();
+      msgInBPTab.put("msgType", "success");
+      msgInBPTab.put("msgTitle", OBMessageUtils.messageBD("success"));
+      msgInBPTab.put("msgText", msgText);
+      final JSONObject msgInBPTabAction = new JSONObject();
+      msgInBPTabAction.put("showMsgInProcessView", msgInBPTab);
+      actions.put(msgInBPTabAction);
+      result.put("responseActions", actions);
+    } catch (Exception e) {
+      log4j.error(e);
+    }
+
+    return result;
+  }
+
+  /**
+   * Returns a JSONObject with the error message to be printed and retry execution
+   */
+  private static JSONObject getErrorMessage(final String msgText) {
+    final JSONObject result = new JSONObject();
+    try {
+      final JSONObject msg = new JSONObject();
+      msg.put("severity", "error");
+      msg.put("text", msgText);
+      result.put("message", msg);
+      result.put("retryExecution", true);
+    } catch (Exception e) {
+      log4j.error(e);
+    }
+    return result;
+  }
+
+  private void updateTransactionStatus(String strFinancialAccountId, String strSelectedTransId,
+      boolean isChecked) {
+    OBContext.setAdminMode();
+    try {
+      if (strSelectedTransId != "") {
+        FIN_FinaccTransaction trans = OBDal.getInstance().get(FIN_FinaccTransaction.class,
+            strSelectedTransId);
+        String newStatus = "RPPC";
+        if (!isChecked) {
+          newStatus = (trans.getPaymentAmount().compareTo(trans.getDepositAmount()) >= 0) ? "PWNC"
+              : "RDNC";
+          trans.setReconciliation(null);
+          if (trans.getFinPayment() != null) {
+            trans.getFinPayment().setStatus((trans.getFinPayment().isReceipt()) ? "RDNC" : "PWNC");
+          }
+        } else {
+          FIN_FinancialAccount account = OBDal.getInstance().get(FIN_FinancialAccount.class,
+              strFinancialAccountId);
+          FIN_Reconciliation reconciliation = TransactionsDao.getLastReconciliation(account, "N");
+          trans.setReconciliation(reconciliation);
+          if (trans.getFinPayment() != null) {
+            trans.getFinPayment().setStatus("RPPC");
+          }
+        }
+
+        trans.setStatus(newStatus);
+        OBDal.getInstance().save(trans);
+      }
+
+    } catch (Exception e) {
+      throw new OBException(e);
+    } finally {
+      OBContext.restorePreviousMode();
+    }
+  }
+
+  private void processReconciliation(String strFinancialAccountId, Date statementDate,
+      String strEndBalance, boolean process) throws IOException, ServletException {
+
+    log4j
+        .debug("Output: Process or Save button pressed on Financial Account || Transaction || Reconciliation manual window");
+
+    OBError msg = new OBError();
+    OBContext.setAdminMode();
+    try {
+
+      FIN_FinancialAccount account = OBDal.getInstance().get(FIN_FinancialAccount.class,
+          strFinancialAccountId);
+
+      FIN_Reconciliation reconciliation = TransactionsDao.getLastReconciliation(account, "N");
+
+      FIN_Reconciliation lastProcessedReconciliation = TransactionsDao.getLastReconciliation(
+          account, "Y");
+
+      reconciliation.setEndingBalance(new BigDecimal(strEndBalance));
+      reconciliation.setTransactionDate(statementDate);
+      reconciliation.setEndingDate(statementDate);
+      reconciliation.setDocumentStatus("DR");
+      reconciliation.setProcessed(false);
+      reconciliation.setAPRMProcessReconciliation("P");
+      reconciliation.setAprmProcessRec("P");
+      OBDal.getInstance().save(reconciliation);
+      OBDal.getInstance().flush();
+
+      if (process) { // Validations
+        String strMessage = "";
+        boolean raiseException = false;
+
+        Calendar calCurrent = Calendar.getInstance();
+        calCurrent.setTime(statementDate);
+
+        if (lastProcessedReconciliation != null) {
+          Calendar calLast = Calendar.getInstance();
+          calLast.setTime(lastProcessedReconciliation.getEndingDate());
+          if (calCurrent.before(calLast)) {
+            strMessage = "@APRM_ReconcileInFutureOrPast@";
+            raiseException = true;
+          }
+        }
+
+        Calendar tomorrow = Calendar.getInstance();
+        tomorrow.add(Calendar.DATE, 1);
+        tomorrow.setTime(DateUtils.truncate(tomorrow.getTime(), Calendar.DATE));
+        if (calCurrent.after(tomorrow)) {
+          strMessage = "@APRM_ReconcileInFutureOrPast@";
+          raiseException = true;
+        }
+        if (raiseException) {
+          msg.setType("Error");
+          msg.setTitle(OBMessageUtils.messageBD("Error"));
+          msg.setMessage(OBMessageUtils.translateError(strMessage).getMessage());
+          msg = null;
+          throw new OBException(msg.getMessage());
+        }
+
+        boolean orgLegalWithAccounting = FIN_Utility.periodControlOpened(
+            FIN_Reconciliation.TABLE_NAME, reconciliation.getId(), FIN_Reconciliation.TABLE_NAME
+                + "_ID", "LE");
+
+        boolean documentEnabled = getDocumentConfirmation(reconciliation.getId());
+        if (documentEnabled
+            && !FIN_Utility.isPeriodOpen(reconciliation.getClient().getId(),
+                AcctServer.DOCTYPE_Reconciliation, reconciliation.getOrganization().getId(),
+                OBDateUtils.formatDate(statementDate)) && orgLegalWithAccounting) {
+          msg.setType("Error");
+          msg.setTitle(OBMessageUtils.messageBD("Error"));
+          msg.setMessage(OBMessageUtils.translateError("@PeriodNotAvailable@").getMessage());
+          throw new OBException(msg.getMessage());
+        }
+
+        if (documentEnabled && orgLegalWithAccounting) {
+          String identifier = linesInNotAvailablePeriod(reconciliation.getId());
+          if (!identifier.equalsIgnoreCase("")) {
+            msg.setType("Error");
+            msg.setTitle(OBMessageUtils.messageBD("Error"));
+            msg.setMessage(String.format(
+                OBMessageUtils.messageBD("APRM_PeriodNotAvailableClearedItem"), identifier));
+            throw new OBException(msg.getMessage());
+
+          }
+        }
+
+        for (APRM_FinaccTransactionV finacctrxv : reconciliation.getAPRMFinaccTransactionVList()) {
+          if (reconciliation.getEndingDate().compareTo(
+              finacctrxv.getFinancialAccountTransaction().getTransactionDate()) < 0) {
+            FIN_FinaccTransaction trans = finacctrxv.getFinancialAccountTransaction();
+            // We set processed to false before changing dates to avoid trigger exception
+            boolean posted = "Y".equals(trans.getPosted());
+            if (posted) {
+              trans.setPosted("N");
+              OBDal.getInstance().save(trans);
+              OBDal.getInstance().flush();
+            }
+            trans.setProcessed(false);
+            OBDal.getInstance().save(trans);
+            OBDal.getInstance().flush();
+            trans.setTransactionDate(reconciliation.getEndingDate());
+            trans.setDateAcct(reconciliation.getEndingDate());
+            OBDal.getInstance().save(trans);
+            OBDal.getInstance().flush();
+            // We set processed to true afterwards
+            trans.setProcessed(true);
+            OBDal.getInstance().save(trans);
+            OBDal.getInstance().flush();
+            if (posted) {
+              trans.setPosted("Y");
+              OBDal.getInstance().save(trans);
+              OBDal.getInstance().flush();
+            }
+            // Changing dates for accounting entries as well
+            TransactionsDao.updateAccountingDate(trans);
+          }
+          Boolean invoicePaidold = false;
+          if (finacctrxv.getPayment() != null) {
+            for (FIN_PaymentDetail pd : finacctrxv.getPayment().getFINPaymentDetailList()) {
+              for (FIN_PaymentScheduleDetail psd : pd.getFINPaymentScheduleDetailList()) {
+                invoicePaidold = psd.isInvoicePaid();
+                if (!invoicePaidold) {
+                  if ((FIN_Utility.invoicePaymentStatus(finacctrxv.getPayment().getPaymentMethod(),
+                      reconciliation.getAccount(), finacctrxv.getPayment().isReceipt())
+                      .equals(finacctrxv.getPayment().getStatus()))) {
+                    psd.setInvoicePaid(true);
+                  }
+                  if (psd.isInvoicePaid()) {
+                    FIN_Utility.updatePaymentAmounts(psd);
+                  }
+                }
+              }
+              FIN_Utility.updateBusinessPartnerCredit(finacctrxv.getPayment());
+            }
+          }
+        }
+
+        reconciliation.setDocumentStatus("CO");
+        reconciliation.setProcessed(true);
+        reconciliation.setAPRMProcessReconciliation("R");
+        reconciliation.setAprmProcessRec("R");
+        OBDal.getInstance().save(reconciliation);
+        OBDal.getInstance().flush();
+
+      }
+    } catch (Exception e) {
+      throw new OBException(e);
+    } finally {
+      OBContext.restorePreviousMode();
+    }
+  }
+
+  public List<FIN_FinaccTransaction> getTransactionList(FIN_Reconciliation reconciliation) {
+    OBContext.setAdminMode();
+    List<FIN_FinaccTransaction> transactions = null;
+    try {
+      OBCriteria<FIN_FinaccTransaction> trans = OBDal.getInstance().createCriteria(
+          FIN_FinaccTransaction.class);
+      trans.add(Restrictions.eq(FIN_FinaccTransaction.PROPERTY_RECONCILIATION, reconciliation));
+      trans.setFilterOnReadableClients(false);
+      trans.setFilterOnReadableOrganization(false);
+      transactions = trans.list();
+    } finally {
+      OBContext.restorePreviousMode();
+    }
+    return transactions;
+  }
+
+  /*
+   * Checks if this step (Reconciliation) is configured to generate accounting for the selected
+   * financial account
+   */
+  public boolean getDocumentConfirmation(String strRecordId) {
+    OBContext.setAdminMode();
+    try {
+      FIN_Reconciliation reconciliation = OBDal.getInstance().get(FIN_Reconciliation.class,
+          strRecordId);
+      List<FIN_FinaccTransaction> transactions = getTransactionList(reconciliation);
+      List<FIN_FinancialAccountAccounting> accounts = reconciliation.getAccount()
+          .getFINFinancialAccountAcctList();
+      for (FIN_FinaccTransaction transaction : transactions) {
+        FIN_Payment payment = transaction.getFinPayment();
+        // If payment exists, check Payment Method + financial Account Configuration
+        if (payment != null) {
+          OBCriteria<FinAccPaymentMethod> obCriteria = OBDal.getInstance().createCriteria(
+              FinAccPaymentMethod.class);
+          obCriteria.add(Restrictions.eq(FinAccPaymentMethod.PROPERTY_ACCOUNT,
+              reconciliation.getAccount()));
+          obCriteria.add(Restrictions.eq(FinAccPaymentMethod.PROPERTY_PAYMENTMETHOD,
+              payment.getPaymentMethod()));
+          obCriteria.setFilterOnReadableClients(false);
+          obCriteria.setFilterOnReadableOrganization(false);
+          List<FinAccPaymentMethod> lines = obCriteria.list();
+          for (FIN_FinancialAccountAccounting account : accounts) {
+            if (payment.isReceipt()) {
+              if (("INT").equals(lines.get(0).getINUponClearingUse())
+                  && account.getInTransitPaymentAccountIN() != null) {
+                transactionsToBePosted.add(transaction);
+              } else if (("DEP").equals(lines.get(0).getINUponClearingUse())
+                  && account.getDepositAccount() != null) {
+                transactionsToBePosted.add(transaction);
+              } else if (("CLE").equals(lines.get(0).getINUponClearingUse())
+                  && account.getClearedPaymentAccount() != null) {
+                transactionsToBePosted.add(transaction);
+              }
+            } else {
+              if (("INT").equals(lines.get(0).getOUTUponClearingUse())
+                  && account.getFINOutIntransitAcct() != null) {
+                transactionsToBePosted.add(transaction);
+              } else if (("WIT").equals(lines.get(0).getOUTUponClearingUse())
+                  && account.getWithdrawalAccount() != null) {
+                transactionsToBePosted.add(transaction);
+              } else if (("CLE").equals(lines.get(0).getOUTUponClearingUse())
+                  && account.getClearedPaymentAccountOUT() != null) {
+                transactionsToBePosted.add(transaction);
+              }
+            }
+          }
+        } else if (transaction.getGLItem() != null) {
+          for (FIN_FinancialAccountAccounting account : accounts) {
+            if ("BPD".equals(transaction.getTransactionType())
+                && account.getClearedPaymentAccount() != null) {
+              transactionsToBePosted.add(transaction);
+            } else if ("BPW".equals(transaction.getTransactionType())
+                && account.getClearedPaymentAccountOUT() != null) {
+              transactionsToBePosted.add(transaction);
+            }
+          }
+        } else {
+          for (FIN_FinancialAccountAccounting account : accounts) {
+            if ("BF".equals(transaction.getTransactionType())
+                && account.getClearedPaymentAccountOUT() != null) {
+              transactionsToBePosted.add(transaction);
+            }
+          }
+        }
+      }
+    } catch (Exception e) {
+      return false;
+    } finally {
+      OBContext.restorePreviousMode();
+    }
+    if (transactionsToBePosted.size() == 0) {
+      return false;
+    }
+    return true;
+  }
+
+  private String linesInNotAvailablePeriod(String reconciliationId) {
+    final StringBuilder hql = new StringBuilder();
+
+    hql.append(" as rl ");
+    hql.append(" where rl.reconciliation.id = '").append(reconciliationId).append("' ");
+    hql.append("   and c_chk_open_period(rl.organization, rl.transactionDate, 'REC', null) = 0 ");
+    hql.append(" order by rl.transactionDate");
+
+    final OBQuery<FIN_ReconciliationLine_v> obqRL = OBDal.getInstance().createQuery(
+        FIN_ReconciliationLine_v.class, hql.toString());
+    obqRL.setMaxResult(1);
+
+    List<FIN_ReconciliationLine_v> obqRLlist = obqRL.list();
+
+    if (obqRLlist.size() == 0) {
+      return "";
+    } else {
+      return obqRLlist.get(0).getIdentifier();
+    }
+
+  }
+}
