I put rev. 544442 in because it was a simple check for null on paymentPrefs.
While my knowledge of the billing account code is pretty limited, I think that billing accounts have been pretty throughly implemented in OFBiz to the point that the refactor is really just a big bugfix for all the problems in the previous implementation. The problem with a big refactor is that the new code can introduce new bugs which we don't want in a release branch, but I think in this case the refactor will probably fix a lot more problems than it could potentially cause. Perhaps for now the best approach is to sit and wait (possibly create a jira for it) until the code has been used for a while. Thanks Scott On 06/06/07, Jacopo Cappellato <[EMAIL PROTECTED]> wrote:
Scott, that is part of the refactoring of the processes related to billing accounts, that I have completed in the weekend (but needs more tests). That was a refactoring and a bug fix in the same time (that resolved several bugs reported in Jira); in fact the previous implementation of the billing account process was incomplete. If we commit this we should commit all the other revisions as well (I can provide a list, of course), but before we do this it would be great to have some feedback from others about this subject. However, I noticed that in rev. 544442 you already committed part of that work: I didn't look at the details of that commit but we should consider to revert it if we don't put in the other stuff of the billing accounts I did recently. Thanks for your great work, Jacopo Scott Gray wrote: > Hi Jacopo > > Do you know if this commit needs to be applied to the release branch? I > can't tell if it's an improvement or a bug fix, but when I merged it I > noticed it also relies on another commit which changed the > CheckOutHelper.availableAccountBalance method signature. > > Any info would be appreciated. > > Thanks > Scott > > On 25/05/07, [EMAIL PROTECTED] <[EMAIL PROTECTED]> wrote: >> >> Author: jacopoc >> Date: Thu May 24 09:26:42 2007 >> New Revision: 541349 >> >> URL: http://svn.apache.org/viewvc?view=rev&rev=541349 >> Log: >> Added code to always set the maxAmount in the OrderPaymentPreference. >> >> Modified: >> >> >> ofbiz/trunk/applications/order/src/org/ofbiz/order/shoppingcart/ShoppingCart.java >> >> >> Modified: >> ofbiz/trunk/applications/order/src/org/ofbiz/order/shoppingcart/ShoppingCart.java >> >> URL: >> http://svn.apache.org/viewvc/ofbiz/trunk/applications/order/src/org/ofbiz/order/shoppingcart/ShoppingCart.java?view=diff&rev=541349&r1=541348&r2=541349 >> >> >> ============================================================================== >> >> --- >> ofbiz/trunk/applications/order/src/org/ofbiz/order/shoppingcart/ShoppingCart.java >> >> (original) >> +++ >> ofbiz/trunk/applications/order/src/org/ofbiz/order/shoppingcart/ShoppingCart.java >> >> Thu May 24 09:26:42 2007 >> @@ -3385,14 +3385,17 @@ >> } >> >> /** make a list of all OrderPaymentPreferences and Billing info >> including all payment methods and types */ >> - public List makeAllOrderPaymentInfos() { >> + public List makeAllOrderPaymentInfos(LocalDispatcher dispatcher) { >> List allOpPrefs = new LinkedList(); >> - Iterator i = paymentInfo.iterator(); >> - while (i.hasNext()) { >> - CartPaymentInfo inf = (CartPaymentInfo) i.next(); >> - >> allOpPrefs.addAll(inf.makeOrderPaymentInfos(this.getDelegator >> ())); >> - } >> + double remainingAmount = this.getGrandTotal() - >> this.getPaymentTotal(); >> if (getBillingAccountId() != null) { >> + double billingAccountAvailableAmount = >> billingAccountAvailableAmount = >> CheckOutHelper.availableAccountBalance(getBillingAccountId(), >> dispatcher); >> + if (remainingAmount < getBillingAccountAmount()) { >> + this.billingAccountAmt = remainingAmount; >> + } >> + if (billingAccountAvailableAmount < >> getBillingAccountAmount()) { >> + this.billingAccountAmt = billingAccountAvailableAmount; >> + } >> GenericValue opp = >> delegator.makeValue("OrderPaymentPreference", >> new HashMap()); >> opp.set("paymentMethodTypeId", "EXT_BILLACT"); >> opp.set("presentFlag", "N"); >> @@ -3400,6 +3403,19 @@ >> opp.set("maxAmount", new Double(getBillingAccountAmount())); >> opp.set("statusId", "PAYMENT_NOT_RECEIVED"); >> allOpPrefs.add(opp); >> + remainingAmount = remainingAmount - >> getBillingAccountAmount(); >> + if (remainingAmount < 0) { >> + remainingAmount = 0; >> + } >> + } >> + Iterator i = paymentInfo.iterator(); >> + while (i.hasNext()) { >> + CartPaymentInfo inf = (CartPaymentInfo) i.next(); >> + if (inf.amount == null) { >> + inf.amount = new Double(remainingAmount); >> + remainingAmount = 0; >> + } >> + >> allOpPrefs.addAll(inf.makeOrderPaymentInfos(this.getDelegator >> ())); >> } >> return allOpPrefs; >> } >> @@ -3636,7 +3652,7 @@ >> result.put("orderItemAttributes", >> this.makeAllOrderItemAttributes >> ()); >> result.put("orderContactMechs", >> this.makeAllOrderContactMechs()); >> result.put("orderItemContactMechs", >> this.makeAllOrderItemContactMechs()); >> - result.put("orderPaymentInfo", this.makeAllOrderPaymentInfos ()); >> + result.put("orderPaymentInfo", this.makeAllOrderPaymentInfos >> (dispatcher)); >> result.put("orderItemShipGroupInfo", this.makeAllShipGroupInfos >> ()); >> result.put("orderItemSurveyResponses", >> this.makeAllOrderItemSurveyResponses()); >> result.put("orderAdditionalPartyRoleMap", >> this.getAdditionalPartyRoleMap()); >> >> >> >