details: https://code.openbravo.com/erp/devel/pi/rev/28b97db8b671 changeset: 27988:28b97db8b671 user: Nicola Cuomo <nikola.cuomo <at> cleardrop.biz> date: Wed Sep 02 10:19:42 2015 +0200 summary: Fixed issue 19789: Unmatch several lines in a batch
details: https://code.openbravo.com/erp/devel/pi/rev/01b4fb16de7b changeset: 27989:01b4fb16de7b user: Víctor Martínez Romanos <victor.martinez <at> openbravo.com> date: Mon Nov 23 11:18:00 2015 +0100 summary: Related to issue 19789: Code review improvements Unmatch Selected button is only shown when the user has selected at least 1 record already cleared. The display logic for the Unmatch Selected button is run after manually matching a transaction with the search or add transaction, and when manually unmatching an individual transaction Improved Unmatch Selected error/warning/sucess messages. Translated the message title. ob-aprm-findTransaction.js modified to avoid a regression after manually match a record using the search button. diffstat: modules/org.openbravo.advpaymentmngt/src-db/database/sourcedata/AD_MESSAGE.xml | 24 + modules/org.openbravo.advpaymentmngt/src-db/database/sourcedata/AD_REF_LIST.xml | 14 +- modules/org.openbravo.advpaymentmngt/src-db/database/sourcedata/AD_TAB.xml | 5 +- modules/org.openbravo.advpaymentmngt/src/org/openbravo/advpaymentmngt/actionHandler/UnMatchSelectedTransactionsActionHandler.java | 151 ++++++++++ modules/org.openbravo.advpaymentmngt/web/org.openbravo.advpaymentmngt/js/ob-aprm-findTransaction.js | 2 +- modules/org.openbravo.advpaymentmngt/web/org.openbravo.advpaymentmngt/js/ob-aprm-matchStatement.js | 53 +++- 6 files changed, 244 insertions(+), 5 deletions(-) diffs (truncated from 354 to 300 lines): diff -r 5f5ac0214dae -r 01b4fb16de7b modules/org.openbravo.advpaymentmngt/src-db/database/sourcedata/AD_MESSAGE.xml --- a/modules/org.openbravo.advpaymentmngt/src-db/database/sourcedata/AD_MESSAGE.xml Fri Nov 20 13:43:41 2015 +0100 +++ b/modules/org.openbravo.advpaymentmngt/src-db/database/sourcedata/AD_MESSAGE.xml Mon Nov 23 11:18:00 2015 +0100 @@ -649,6 +649,18 @@ <!--712C841E501642B881A998CCAC13E420--> <ISINCLUDEINI18N><![CDATA[N]]></ISINCLUDEINI18N> <!--712C841E501642B881A998CCAC13E420--></AD_MESSAGE> +<!--76D4A0740BAD4274B8718A0AF2A1C9B4--><AD_MESSAGE> +<!--76D4A0740BAD4274B8718A0AF2A1C9B4--> <AD_MESSAGE_ID><![CDATA[76D4A0740BAD4274B8718A0AF2A1C9B4]]></AD_MESSAGE_ID> +<!--76D4A0740BAD4274B8718A0AF2A1C9B4--> <AD_CLIENT_ID><![CDATA[0]]></AD_CLIENT_ID> +<!--76D4A0740BAD4274B8718A0AF2A1C9B4--> <AD_ORG_ID><![CDATA[0]]></AD_ORG_ID> +<!--76D4A0740BAD4274B8718A0AF2A1C9B4--> <ISACTIVE><![CDATA[Y]]></ISACTIVE> +<!--76D4A0740BAD4274B8718A0AF2A1C9B4--> <VALUE><![CDATA[APRM_ErrorOnUnmatchingRecords]]></VALUE> +<!--76D4A0740BAD4274B8718A0AF2A1C9B4--> <MSGTEXT><![CDATA[%0 record(s) failed. Reference No.: ]]></MSGTEXT> +<!--76D4A0740BAD4274B8718A0AF2A1C9B4--> <MSGTYPE><![CDATA[W]]></MSGTYPE> +<!--76D4A0740BAD4274B8718A0AF2A1C9B4--> <AD_MODULE_ID><![CDATA[A918E3331C404B889D69AA9BFAFB23AC]]></AD_MODULE_ID> +<!--76D4A0740BAD4274B8718A0AF2A1C9B4--> <ISINCLUDEINI18N><![CDATA[N]]></ISINCLUDEINI18N> +<!--76D4A0740BAD4274B8718A0AF2A1C9B4--></AD_MESSAGE> + <!--7918E1E75DF84F499AD21A51F53F9A9B--><AD_MESSAGE> <!--7918E1E75DF84F499AD21A51F53F9A9B--> <AD_MESSAGE_ID><![CDATA[7918E1E75DF84F499AD21A51F53F9A9B]]></AD_MESSAGE_ID> <!--7918E1E75DF84F499AD21A51F53F9A9B--> <AD_CLIENT_ID><![CDATA[0]]></AD_CLIENT_ID> @@ -1381,6 +1393,18 @@ <!--DF6BD33E986149C0ADE4D0CC45D7394C--> <ISINCLUDEINI18N><![CDATA[N]]></ISINCLUDEINI18N> <!--DF6BD33E986149C0ADE4D0CC45D7394C--></AD_MESSAGE> +<!--E103F874F07D44269B98F457EFCAF367--><AD_MESSAGE> +<!--E103F874F07D44269B98F457EFCAF367--> <AD_MESSAGE_ID><![CDATA[E103F874F07D44269B98F457EFCAF367]]></AD_MESSAGE_ID> +<!--E103F874F07D44269B98F457EFCAF367--> <AD_CLIENT_ID><![CDATA[0]]></AD_CLIENT_ID> +<!--E103F874F07D44269B98F457EFCAF367--> <AD_ORG_ID><![CDATA[0]]></AD_ORG_ID> +<!--E103F874F07D44269B98F457EFCAF367--> <ISACTIVE><![CDATA[Y]]></ISACTIVE> +<!--E103F874F07D44269B98F457EFCAF367--> <VALUE><![CDATA[APRM_UnmatchedRecords]]></VALUE> +<!--E103F874F07D44269B98F457EFCAF367--> <MSGTEXT><![CDATA[%0 record(s) were properly unmatched.]]></MSGTEXT> +<!--E103F874F07D44269B98F457EFCAF367--> <MSGTYPE><![CDATA[I]]></MSGTYPE> +<!--E103F874F07D44269B98F457EFCAF367--> <AD_MODULE_ID><![CDATA[A918E3331C404B889D69AA9BFAFB23AC]]></AD_MODULE_ID> +<!--E103F874F07D44269B98F457EFCAF367--> <ISINCLUDEINI18N><![CDATA[N]]></ISINCLUDEINI18N> +<!--E103F874F07D44269B98F457EFCAF367--></AD_MESSAGE> + <!--E217A4F4BDE84DC6A95ACB3F54549FDD--><AD_MESSAGE> <!--E217A4F4BDE84DC6A95ACB3F54549FDD--> <AD_MESSAGE_ID><![CDATA[E217A4F4BDE84DC6A95ACB3F54549FDD]]></AD_MESSAGE_ID> <!--E217A4F4BDE84DC6A95ACB3F54549FDD--> <AD_CLIENT_ID><![CDATA[0]]></AD_CLIENT_ID> diff -r 5f5ac0214dae -r 01b4fb16de7b modules/org.openbravo.advpaymentmngt/src-db/database/sourcedata/AD_REF_LIST.xml --- a/modules/org.openbravo.advpaymentmngt/src-db/database/sourcedata/AD_REF_LIST.xml Fri Nov 20 13:43:41 2015 +0100 +++ b/modules/org.openbravo.advpaymentmngt/src-db/database/sourcedata/AD_REF_LIST.xml Mon Nov 23 11:18:00 2015 +0100 @@ -343,6 +343,18 @@ <!--7AC4F4FF644247B7BD320BBF67C4F066--> <SEQNO><![CDATA[10]]></SEQNO> <!--7AC4F4FF644247B7BD320BBF67C4F066--></AD_REF_LIST> +<!--94334E10107D4F3C868191FF2C9AEAD0--><AD_REF_LIST> +<!--94334E10107D4F3C868191FF2C9AEAD0--> <AD_REF_LIST_ID><![CDATA[94334E10107D4F3C868191FF2C9AEAD0]]></AD_REF_LIST_ID> +<!--94334E10107D4F3C868191FF2C9AEAD0--> <AD_CLIENT_ID><![CDATA[0]]></AD_CLIENT_ID> +<!--94334E10107D4F3C868191FF2C9AEAD0--> <AD_ORG_ID><![CDATA[0]]></AD_ORG_ID> +<!--94334E10107D4F3C868191FF2C9AEAD0--> <ISACTIVE><![CDATA[Y]]></ISACTIVE> +<!--94334E10107D4F3C868191FF2C9AEAD0--> <VALUE><![CDATA[UN]]></VALUE> +<!--94334E10107D4F3C868191FF2C9AEAD0--> <NAME><![CDATA[Unmatch Selected]]></NAME> +<!--94334E10107D4F3C868191FF2C9AEAD0--> <AD_REFERENCE_ID><![CDATA[C20E5E22588E40E5B8CC6D80ED3015C5]]></AD_REFERENCE_ID> +<!--94334E10107D4F3C868191FF2C9AEAD0--> <AD_MODULE_ID><![CDATA[A918E3331C404B889D69AA9BFAFB23AC]]></AD_MODULE_ID> +<!--94334E10107D4F3C868191FF2C9AEAD0--> <SEQNO><![CDATA[30]]></SEQNO> +<!--94334E10107D4F3C868191FF2C9AEAD0--></AD_REF_LIST> + <!--9AE9EBD541F34CC7AC8830B9601C52CB--><AD_REF_LIST> <!--9AE9EBD541F34CC7AC8830B9601C52CB--> <AD_REF_LIST_ID><![CDATA[9AE9EBD541F34CC7AC8830B9601C52CB]]></AD_REF_LIST_ID> <!--9AE9EBD541F34CC7AC8830B9601C52CB--> <AD_CLIENT_ID><![CDATA[0]]></AD_CLIENT_ID> @@ -466,7 +478,7 @@ <!--C69982184F634AC79728338D1F327B76--> <AD_ORG_ID><![CDATA[0]]></AD_ORG_ID> <!--C69982184F634AC79728338D1F327B76--> <ISACTIVE><![CDATA[Y]]></ISACTIVE> <!--C69982184F634AC79728338D1F327B76--> <VALUE><![CDATA[RE]]></VALUE> -<!--C69982184F634AC79728338D1F327B76--> <NAME><![CDATA[Reconcile]]></NAME> +<!--C69982184F634AC79728338D1F327B76--> <NAME><![CDATA[Reconcile All]]></NAME> <!--C69982184F634AC79728338D1F327B76--> <AD_REFERENCE_ID><![CDATA[C20E5E22588E40E5B8CC6D80ED3015C5]]></AD_REFERENCE_ID> <!--C69982184F634AC79728338D1F327B76--> <AD_MODULE_ID><![CDATA[A918E3331C404B889D69AA9BFAFB23AC]]></AD_MODULE_ID> <!--C69982184F634AC79728338D1F327B76--> <SEQNO><![CDATA[20]]></SEQNO> diff -r 5f5ac0214dae -r 01b4fb16de7b modules/org.openbravo.advpaymentmngt/src-db/database/sourcedata/AD_TAB.xml --- a/modules/org.openbravo.advpaymentmngt/src-db/database/sourcedata/AD_TAB.xml Fri Nov 20 13:43:41 2015 +0100 +++ b/modules/org.openbravo.advpaymentmngt/src-db/database/sourcedata/AD_TAB.xml Mon Nov 23 11:18:00 2015 +0100 @@ -916,10 +916,11 @@ <!--ED54A4E24196476596955286D403461E--> <DISABLE_PARENT_KEY_PROPERTY><![CDATA[N]]></DISABLE_PARENT_KEY_PROPERTY> <!--ED54A4E24196476596955286D403461E--> <ISREADONLYTREE><![CDATA[N]]></ISREADONLYTREE> <!--ED54A4E24196476596955286D403461E--> <ISSHOWTREENODEICONS><![CDATA[Y]]></ISSHOWTREENODEICONS> +<!--ED54A4E24196476596955286D403461E--> <EM_OBUIAPP_SELECTION><![CDATA[OB.APRM.MatchStatement.selectionChanged]]></EM_OBUIAPP_SELECTION> <!--ED54A4E24196476596955286D403461E--> <EM_OBUIAPP_CAN_ADD><![CDATA[N]]></EM_OBUIAPP_CAN_ADD> <!--ED54A4E24196476596955286D403461E--> <EM_OBUIAPP_CAN_DELETE><![CDATA[N]]></EM_OBUIAPP_CAN_DELETE> -<!--ED54A4E24196476596955286D403461E--> <EM_OBUIAPP_SHOW_SELECT><![CDATA[N]]></EM_OBUIAPP_SHOW_SELECT> -<!--ED54A4E24196476596955286D403461E--> <EM_OBUIAPP_SELECTION_TYPE><![CDATA[S]]></EM_OBUIAPP_SELECTION_TYPE> +<!--ED54A4E24196476596955286D403461E--> <EM_OBUIAPP_SHOW_SELECT><![CDATA[Y]]></EM_OBUIAPP_SHOW_SELECT> +<!--ED54A4E24196476596955286D403461E--> <EM_OBUIAPP_SELECTION_TYPE><![CDATA[M]]></EM_OBUIAPP_SELECTION_TYPE> <!--ED54A4E24196476596955286D403461E--></AD_TAB> <!--F6C2283A21314407BBBB23FF14B85ED4--><AD_TAB> diff -r 5f5ac0214dae -r 01b4fb16de7b modules/org.openbravo.advpaymentmngt/src/org/openbravo/advpaymentmngt/actionHandler/UnMatchSelectedTransactionsActionHandler.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/modules/org.openbravo.advpaymentmngt/src/org/openbravo/advpaymentmngt/actionHandler/UnMatchSelectedTransactionsActionHandler.java Mon Nov 23 11:18:00 2015 +0100 @@ -0,0 +1,151 @@ +/* + ************************************************************************* + * The contents of this file are subject to the Openbravo Public License + * Version 1.1 (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): Cleardrop_____________________________. + ************************************************************************ + */ + +package org.openbravo.advpaymentmngt.actionHandler; + +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.Date; +import java.util.List; +import java.util.Map; + +import org.apache.commons.lang.StringUtils; +import org.codehaus.jettison.json.JSONArray; +import org.codehaus.jettison.json.JSONObject; +import org.openbravo.advpaymentmngt.utility.APRM_MatchingUtility; +import org.openbravo.client.kernel.BaseActionHandler; +import org.openbravo.dal.core.OBContext; +import org.openbravo.dal.service.OBDal; +import org.openbravo.erpCommon.utility.OBDateUtils; +import org.openbravo.erpCommon.utility.OBMessageUtils; +import org.openbravo.model.financialmgmt.payment.FIN_BankStatementLine; +import org.openbravo.model.financialmgmt.payment.FIN_FinaccTransaction; +import org.openbravo.service.db.DbUtility; +import org.openbravo.service.json.JsonUtils; +import org.openbravo.service.json.OBStaleObjectException; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class UnMatchSelectedTransactionsActionHandler extends BaseActionHandler { + private static final Logger log = LoggerFactory + .getLogger(UnMatchSelectedTransactionsActionHandler.class); + + @Override + protected JSONObject execute(Map<String, Object> parameters, String data) { + JSONObject result = new JSONObject(); + JSONObject errorMessage = new JSONObject(); + try { + OBContext.setAdminMode(true); + final JSONObject jsonData = new JSONObject(data); + SimpleDateFormat xmlDateTimeFormat = JsonUtils.createJSTimeFormat(); + + List<String> errorLines = new ArrayList<String>(); + + final JSONArray bankStatementLineIds = jsonData.getJSONArray("bankStatementLineIds"); + int bankStatementLineIdsLength = bankStatementLineIds != null ? bankStatementLineIds.length() + : 0; + int alreadyCleared = 0; + for (int i = 0; i < bankStatementLineIdsLength; i++) { + JSONObject bankStatementLine = bankStatementLineIds.getJSONObject(i); + if (!bankStatementLine.getBoolean("cleared")) { + log.info("Skipping " + bankStatementLine.getString("referenceNo") + + " line as it's not matched"); + alreadyCleared++; + } else { + try { + Date date = xmlDateTimeFormat.parse(bankStatementLine.getString("bslUpdated")); + final FIN_BankStatementLine bsline = OBDal.getInstance().get( + FIN_BankStatementLine.class, bankStatementLine.getString("id")); + Date bbddBSLUpdated = bsline.getUpdated(); + // Remove milis + Calendar calendar = Calendar.getInstance(); + calendar.setTime(OBDateUtils.convertDateToUTC(bbddBSLUpdated)); + calendar.setLenient(true); + calendar.set(Calendar.MILLISECOND, 0); + if (date.getTime() != calendar.getTimeInMillis()) { + log.error("The record " + bankStatementLine.getString("referenceNo") + + " is newer in the database. Avoid unmatching it"); + throw new OBStaleObjectException("@APRM_StaleDate@"); + } + final FIN_FinaccTransaction transaction = bsline.getFinancialAccountTransaction(); + if (transaction != null) { + APRM_MatchingUtility.unmatch(bsline); + } + } catch (Exception e) { + errorLines.add(bankStatementLine.getString("referenceNo")); + } + } + } + + /* Build Message */ + int totalSuccess = bankStatementLineIdsLength - errorLines.size() - alreadyCleared; + String severity = "error"; + String title = ""; + String msg = ""; + if (totalSuccess > 0) { + severity = "success"; + title = OBMessageUtils.messageBD("Success"); + msg = OBMessageUtils.getI18NMessage("APRM_UnmatchedRecords", + new String[] { String.valueOf(totalSuccess) }); + } + if (!errorLines.isEmpty()) { + if (totalSuccess > 0) { + severity = "warning"; + title = OBMessageUtils.messageBD("Warning"); + } else { + severity = "error"; + title = OBMessageUtils.messageBD("Error"); + } + + if (StringUtils.isNotBlank(msg)) { + msg += "<br/>"; + } + msg += OBMessageUtils.getI18NMessage("APRM_ErrorOnUnmatchingRecords", + new String[] { String.valueOf(errorLines.size()) }); + for (String string : errorLines) { + msg += string + ", "; + } + msg = msg.substring(0, msg.length() - 2); + } + errorMessage.put("severity", severity); + errorMessage.put("title", title); + errorMessage.put("text", msg); + result.put("message", errorMessage); + + } catch (Exception e) { + OBDal.getInstance().rollbackAndClose(); + log.error("Error Unmatching Transaction", e); + try { + Throwable ex = DbUtility.getUnderlyingSQLException(e); + String message = OBMessageUtils.translateError(ex.getMessage()).getMessage(); + errorMessage = new JSONObject(); + errorMessage.put("severity", "error"); + errorMessage.put("title", OBMessageUtils.messageBD("Error")); + errorMessage.put("text", message); + result.put("message", errorMessage); + } catch (Exception e2) { + log.error("Message could not be built", e2); + } + } finally { + OBContext.restorePreviousMode(); + } + return result; + } +} \ No newline at end of file diff -r 5f5ac0214dae -r 01b4fb16de7b modules/org.openbravo.advpaymentmngt/web/org.openbravo.advpaymentmngt/js/ob-aprm-findTransaction.js --- a/modules/org.openbravo.advpaymentmngt/web/org.openbravo.advpaymentmngt/js/ob-aprm-findTransaction.js Fri Nov 20 13:43:41 2015 +0100 +++ b/modules/org.openbravo.advpaymentmngt/web/org.openbravo.advpaymentmngt/js/ob-aprm-findTransaction.js Mon Nov 23 11:18:00 2015 +0100 @@ -36,7 +36,7 @@ if (trxSelection && trxSelection[0]) { var trxDepositAmt = trxSelection[0].depositAmount, trxPaymentAmt = trxSelection[0].paymentAmount, - blineAmt = view.callerField.view.getContextInfo().match_statement._selection[0].amount, + blineAmt = view.callerField.record.amount, trxAmt = trxDepositAmt - trxPaymentAmt, hideSplitConfirmation = OB.PropertyStore.get('APRM_MATCHSTATEMENT_HIDE_PARTIALMATCH_POPUP', view.windowId); diff -r 5f5ac0214dae -r 01b4fb16de7b modules/org.openbravo.advpaymentmngt/web/org.openbravo.advpaymentmngt/js/ob-aprm-matchStatement.js --- a/modules/org.openbravo.advpaymentmngt/web/org.openbravo.advpaymentmngt/js/ob-aprm-matchStatement.js Fri Nov 20 13:43:41 2015 +0100 +++ b/modules/org.openbravo.advpaymentmngt/web/org.openbravo.advpaymentmngt/js/ob-aprm-matchStatement.js Mon Nov 23 11:18:00 2015 +0100 @@ -26,10 +26,37 @@ }; OB.APRM.MatchStatement.onLoad = function (view) { - var execute, grid = view.theForm.getItem('match_statement').canvas.viewGrid; + var execute, grid = view.theForm.getItem('match_statement').canvas.viewGrid, + buttons = view.popupButtons.members[0].members, + i, button, propertyButtonValue = '_buttonValue'; view.cancelButton.hide(); view.parentElement.parentElement.closeButton.hide(); + for (i = 0; i < buttons.length; i++) { + button = buttons[i]; + if (button[propertyButtonValue] === 'UN') { + view.unmatchButton = button; + button.hide(); + break; + } + } + + button.action = function () { + var callback = function (response, data, request) { + view.onRefreshFunction(view); + if (data && data.message && data.message.severity === 'error') { + view.messageBar.setMessage(isc.OBMessageBar.TYPE_ERROR, data.message.title, data.message.text); + } else if (data && data.message && data.message.severity === 'success') { + view.messageBar.setMessage(isc.OBMessageBar.TYPE_SUCCESS, data.message.title, data.message.text); + } else if (data && data.message && data.message.severity === 'warning') { + view.messageBar.setMessage(isc.OBMessageBar.TYPE_WARNING, data.message.title, data.message.text); + } + }; + OB.RemoteCallManager.call('org.openbravo.advpaymentmngt.actionHandler.UnMatchSelectedTransactionsActionHandler', { + bankStatementLineIds: grid.getSelectedRecords() + }, {}, callback); + }; + grid.dataSourceOrig = grid.dataSource; grid.dataSource = null; execute = function (ok) { @@ -73,6 +100,24 @@ ------------------------------------------------------------------------------ Go from Idea to Many App Stores Faster with Intel(R) XDK Give your users amazing mobile app experiences with Intel(R) XDK. Use one codebase in this all-in-one HTML5 development environment. Design, debug & build mobile apps & 2D/3D high-impact games for multiple OSs. http://pubads.g.doubleclick.net/gampad/clk?id=254741551&iu=/4140 _______________________________________________ Openbravo-commits mailing list Openbravo-commits@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/openbravo-commits