Author: jaz
Date: Wed Apr 25 16:58:09 2007 New Revision: 532542 URL: http://svn.apache.org/viewvc?view=rev&rev=532542 Log: applied patch from Joe Eckard for JIRA Issue OFBIZ-928 (service credit implementation) Modified: ofbiz/trunk/applications/accounting/script/org/ofbiz/accounting/finaccount/FinAccountServices.xml ofbiz/trunk/applications/accounting/servicedef/services_finaccount.xml ofbiz/trunk/applications/accounting/src/org/ofbiz/accounting/finaccount/FinAccountServices.java Modified: ofbiz/trunk/applications/accounting/script/org/ofbiz/accounting/finaccount/FinAccountServices.xml URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/accounting/script/org/ofbiz/accounting/finaccount/FinAccountServices.xml?view=diff&rev=532542&r1=532541&r2=532542 ============================================================================== --- ofbiz/trunk/applications/accounting/script/org/ofbiz/accounting/finaccount/FinAccountServices.xml (original) +++ ofbiz/trunk/applications/accounting/script/org/ofbiz/accounting/finaccount/FinAccountServices.xml Wed Apr 25 16:58:09 2007 @@ -32,6 +32,13 @@ <set from-field="finAccountId" field="newEntity.finAccountId"/> </if-empty> + <!-- set the currency if none is already set --> + <if-empty field-name="newEntity.currencyUomId"> + + <property-to-field resource="general" property="currency.uom.id.default" field-name="defaultCurrency"/> + <set field="newEntity.currencyUomId" from-field="defaultCurrency"/> + </if-empty> + <!-- set the refundable flag from the type; if not set --> <if-empty field-name="newEntity.isRefundable"> <entity-one entity-name="FinAccountType" value-name="finAccountType"> Modified: ofbiz/trunk/applications/accounting/servicedef/services_finaccount.xml URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/accounting/servicedef/services_finaccount.xml?view=diff&rev=532542&r1=532541&r2=532542 ============================================================================== --- ofbiz/trunk/applications/accounting/servicedef/services_finaccount.xml (original) +++ ofbiz/trunk/applications/accounting/servicedef/services_finaccount.xml Wed Apr 25 16:58:09 2007 @@ -176,7 +176,17 @@ <attribute name="finAccountAuthId" type="String" mode="IN" optional="true"/> <attribute name="finAccountId" type="String" mode="IN" optional="true"/> </service> - + + <!-- service credit account w/ transaction --> + <service name="createServiceCredit" engine="java" + location="org.ofbiz.accounting.finaccount.FinAccountServices" invoke="createServiceCredit" auth="true"> + <attribute name="finAccountId" type="String" mode="INOUT" optional="true"/> + <attribute name="partyId" type="String" mode="IN" optional="false"/> + <attribute name="amount" type="Double" mode="IN" optional="false"/> + <attribute name="currencyUomId" type="String" mode="IN" optional="true"/> + <attribute name="productStoreId" type="String" mode="IN" optional="true"/> + </service> + <!-- balance account created from product purchase --> <service name="createPartyFinAccountFromPurchase" engine="java" location="org.ofbiz.accounting.finaccount.FinAccountProductServices" invoke="createPartyFinAccountFromPurchase" auth="true"> Modified: ofbiz/trunk/applications/accounting/src/org/ofbiz/accounting/finaccount/FinAccountServices.java URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/accounting/src/org/ofbiz/accounting/finaccount/FinAccountServices.java?view=diff&rev=532542&r1=532541&r2=532542 ============================================================================== --- ofbiz/trunk/applications/accounting/src/org/ofbiz/accounting/finaccount/FinAccountServices.java (original) +++ ofbiz/trunk/applications/accounting/src/org/ofbiz/accounting/finaccount/FinAccountServices.java Wed Apr 25 16:58:09 2007 @@ -32,6 +32,7 @@ import org.ofbiz.entity.condition.EntityOperator; import org.ofbiz.entity.condition.EntityCondition; import org.ofbiz.entity.util.EntityListIterator; +import org.ofbiz.entity.util.EntityUtil; import org.ofbiz.service.DispatchContext; import org.ofbiz.service.GenericServiceException; import org.ofbiz.service.LocalDispatcher; @@ -45,7 +46,89 @@ public class FinAccountServices { public static final String module = FinAccountServices.class.getName(); - + + public static Map createServiceCredit(DispatchContext dctx, Map context) { + GenericDelegator delegator = dctx.getDelegator(); + LocalDispatcher dispatcher = dctx.getDispatcher(); + String finAccountId = (String) context.get("finAccountId"); + + GenericValue userLogin = (GenericValue) context.get("userLogin"); + try { + // find the most recent (active) service credit account for the specified party + String partyId = (String) context.get("partyId"); + Map lookupMap = UtilMisc.toMap("finAccountTypeId", "SVCCRED_ACCOUNT", "ownerPartyId", partyId); + + // if a productStoreId is present, restrict the accounts returned using the store's payToPartyId + String productStoreId = (String) context.get("productStoreId"); + if (UtilValidate.isNotEmpty(productStoreId)) { + String payToPartyId = ProductStoreWorker.getProductStorePayToPartyId(productStoreId, delegator); + if (UtilValidate.isNotEmpty(payToPartyId)) { + lookupMap.put("organizationPartyId", payToPartyId); + } + } + + // if a currencyUomId is present, use it to restrict the accounts returned + String currencyUomId = (String) context.get("currencyUomId"); + if (UtilValidate.isNotEmpty(currencyUomId)) { + lookupMap.put("currencyUomId", currencyUomId); + } + + // check for an existing account + GenericValue creditAccount; + if (finAccountId != null) { + creditAccount = delegator.findByPrimaryKey("FinAccount", UtilMisc.toMap("finAccoutId", finAccountId)); + } else { + List creditAccounts = delegator.findByAnd("FinAccount", lookupMap, UtilMisc.toList("-fromDate")); + creditAccount = EntityUtil.getFirst(EntityUtil.filterByDate(creditAccounts)); + } + + if (creditAccount == null) { + // create a new service credit account + String createAccountServiceName = "createFinAccount"; + if (UtilValidate.isNotEmpty(productStoreId)) { + createAccountServiceName = "createFinAccountForStore"; + } + // automatically set the parameters + ModelService createAccountService = dctx.getModelService(createAccountServiceName); + Map createAccountContext = createAccountService.makeValid(context, ModelService.IN_PARAM); + createAccountContext.put("finAccountTypeId", "SVCCRED_ACCOUNT"); + createAccountContext.put("finAccountName", "Customer Service Credit Account"); + createAccountContext.put("ownerPartyId", partyId); + createAccountContext.put("userLogin", userLogin); + + Map createAccountResult = dispatcher.runSync(createAccountServiceName, createAccountContext); + if (ServiceUtil.isError(createAccountResult) || ServiceUtil.isFailure(createAccountResult)) { + return createAccountResult; + } + + if (createAccountResult != null) { + String creditAccountId = (String) createAccountResult.get("finAccountId"); + if (UtilValidate.isNotEmpty(creditAccountId)) { + creditAccount = delegator.findByPrimaryKey("FinAccount", UtilMisc.toMap("finAccountId", creditAccountId)); + + } + } + if (creditAccount == null) { + return ServiceUtil.returnError("Could not find or create a service credit account"); + } + } + + // create the credit transaction + Map creditTransResult = dispatcher.runSync("createFinAccountTrans", + UtilMisc.toMap("finAccountTransTypeId", "ADJUSTMENT", "finAccountId", creditAccount.getString("finAccountId"), + "partyId", partyId, "amount", context.get("amount"), "userLogin", userLogin)); + if (ServiceUtil.isError(creditTransResult) || ServiceUtil.isFailure(creditTransResult)) { + return creditTransResult; + } + } catch (GenericEntityException gee) { + return ServiceUtil.returnError(gee.getMessage()); + } catch (GenericServiceException gse) { + return ServiceUtil.returnError(gse.getMessage()); + } + + return ServiceUtil.returnSuccess(); + } + public static Map createFinAccountForStore(DispatchContext dctx, Map context) { GenericDelegator delegator = dctx.getDelegator(); LocalDispatcher dispatcher = dctx.getDispatcher(); |
Free forum by Nabble | Edit this page |