📄 zipsalesservices.java
字号:
/* * $Id: ZipSalesServices.java 5462 2005-08-05 18:35:48Z jonesde $ * * Copyright (c) 2001-2003 The Open For Business Project - www.ofbiz.org * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), * to deal in the Software without restriction, including without limitation * the rights to use, copy, modify, merge, publish, distribute, sublicense, * and/or sell copies of the Software, and to permit persons to whom the * Software is furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included * in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT * OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * THE USE OR OTHER DEALINGS IN THE SOFTWARE. */package org.ofbiz.order.thirdparty.zipsales;import java.net.URL;import java.sql.Timestamp;import java.text.DecimalFormat;import java.text.ParseException;import java.text.SimpleDateFormat;import java.util.ArrayList;import java.util.Iterator;import java.util.List;import java.util.Locale;import java.util.Map;import org.ofbiz.base.util.Debug;import org.ofbiz.base.util.GeneralException;import org.ofbiz.base.util.StringUtil;import org.ofbiz.base.util.UtilHttp;import org.ofbiz.base.util.UtilMisc;import org.ofbiz.base.util.UtilProperties;import org.ofbiz.base.util.UtilURL;import org.ofbiz.datafile.DataFile;import org.ofbiz.datafile.DataFileException;import org.ofbiz.datafile.Record;import org.ofbiz.datafile.RecordIterator;import org.ofbiz.entity.GenericDelegator;import org.ofbiz.entity.GenericEntityException;import org.ofbiz.entity.GenericValue;import org.ofbiz.entity.util.EntityUtil;import org.ofbiz.security.Security;import org.ofbiz.service.DispatchContext;import org.ofbiz.service.ServiceUtil;/** * Zip-Sales Database Services * * @author <a href="mailto:jaz@ofbiz.org">Andy Zeneski</a> * @version $Rev: 5462 $ * @since 3.0 */public class ZipSalesServices { public static final String module = ZipSalesServices.class.getName(); public static final String dataFile = "org/ofbiz/order/thirdparty/zipsales/ZipSalesTaxTables.xml"; public static final String flatTable = "FlatTaxTable"; public static final String ruleTable = "FreightRuleTable"; public static final String resource_error = "OrderErrorUiLabels"; // number formatting private static String curFmtStr = UtilProperties.getPropertyValue("general.properties", "currency.decimal.format", "##0.00"); private static DecimalFormat curFormat = new DecimalFormat(curFmtStr); // date formatting private static SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMdd"); // import table service public static Map importFlatTable(DispatchContext dctx, Map context) { GenericDelegator delegator = dctx.getDelegator(); Security security = dctx.getSecurity(); GenericValue userLogin = (GenericValue) context.get("userLogin"); String taxFileLocation = (String) context.get("taxFileLocation"); String ruleFileLocation = (String) context.get("ruleFileLocation"); Locale locale = (Locale) context.get("locale"); // do security check if (!security.hasPermission("SERVICE_INVOKE_ANY", userLogin)) { return ServiceUtil.returnError(UtilProperties.getMessage(resource_error,"OrderYouDoNotHavePermissionToLoadTaxTables",locale)); } // get a now stamp (we'll use 2000-01-01) Timestamp now = parseDate("20000101", null); // load the data file DataFile tdf = null; try { tdf = DataFile.makeDataFile(UtilURL.fromResource(dataFile), flatTable); } catch (DataFileException e) { Debug.logError(e, module); return ServiceUtil.returnError(UtilProperties.getMessage(resource_error,"OrderUnableToReadZipSalesDataFile",locale)); } // locate the file to be imported URL tUrl = UtilURL.fromResource(taxFileLocation); if (tUrl == null) { return ServiceUtil.returnError(UtilProperties.getMessage(resource_error,"OrderUnableToLocateTaxFileAtLocation", UtilMisc.toMap("taxFileLocation",taxFileLocation), locale)); } RecordIterator tri = null; try { tri = tdf.makeRecordIterator(tUrl); } catch (DataFileException e) { Debug.logError(e, module); return ServiceUtil.returnError(UtilProperties.getMessage(resource_error,"OrderProblemGettingTheRecordIterator",locale)); } if (tri != null) { while (tri.hasNext()) { Record entry = null; try { entry = tri.next(); } catch (DataFileException e) { Debug.logError(e, module); } GenericValue newValue = delegator.makeValue("ZipSalesTaxLookup", null); // PK fields newValue.set("zipCode", entry.getString("zipCode").trim()); newValue.set("stateCode", entry.get("stateCode") != null ? entry.getString("stateCode").trim() : "_NA_"); newValue.set("city", entry.get("city") != null ? entry.getString("city").trim() : "_NA_"); newValue.set("county", entry.get("county") != null ? entry.getString("county").trim() : "_NA_"); newValue.set("fromDate", parseDate(entry.getString("effectiveDate"), now)); // non-PK fields newValue.set("countyFips", entry.get("countyFips")); newValue.set("countyDefault", entry.get("countyDefault")); newValue.set("generalDefault", entry.get("generalDefault")); newValue.set("insideCity", entry.get("insideCity")); newValue.set("geoCode", entry.get("geoCode")); newValue.set("stateSalesTax", entry.get("stateSalesTax")); newValue.set("citySalesTax", entry.get("citySalesTax")); newValue.set("cityLocalSalesTax", entry.get("cityLocalSalesTax")); newValue.set("countySalesTax", entry.get("countySalesTax")); newValue.set("countyLocalSalesTax", entry.get("countyLocalSalesTax")); newValue.set("comboSalesTax", entry.get("comboSalesTax")); newValue.set("stateUseTax", entry.get("stateUseTax")); newValue.set("cityUseTax", entry.get("cityUseTax")); newValue.set("cityLocalUseTax", entry.get("cityLocalUseTax")); newValue.set("countyUseTax", entry.get("countyUseTax")); newValue.set("countyLocalUseTax", entry.get("countyLocalUseTax")); newValue.set("comboUseTax", entry.get("comboUseTax")); try { delegator.createOrStore(newValue); } catch (GenericEntityException e) { Debug.logError(e, module); return ServiceUtil.returnError(UtilProperties.getMessage(resource_error,"OrderErrorWritingRecordsToTheDatabase",locale)); } // console log Debug.log(newValue.get("zipCode") + "/" + newValue.get("stateCode") + "/" + newValue.get("city") + "/" + newValue.get("county") + "/" + newValue.get("fromDate")); } } // load the data file DataFile rdf = null; try { rdf = DataFile.makeDataFile(UtilURL.fromResource(dataFile), ruleTable); } catch (DataFileException e) { Debug.logError(e, module); return ServiceUtil.returnError(UtilProperties.getMessage(resource_error,"OrderUnableToReadZipSalesDataFile",locale)); } // locate the file to be imported URL rUrl = UtilURL.fromResource(ruleFileLocation); if (rUrl == null) { return ServiceUtil.returnError(UtilProperties.getMessage(resource_error,"OrderUnableToLocateRuleFileFromLocation", UtilMisc.toMap("ruleFileLocation",ruleFileLocation), locale)); } RecordIterator rri = null; try { rri = rdf.makeRecordIterator(rUrl); } catch (DataFileException e) { Debug.logError(e, module); return ServiceUtil.returnError(UtilProperties.getMessage(resource_error,"OrderProblemGettingTheRecordIterator",locale)); } if (rri != null) { while (rri.hasNext()) { Record entry = null; try { entry = rri.next(); } catch (DataFileException e) { Debug.logError(e, module); } if (entry.get("stateCode") != null && entry.getString("stateCode").length() > 0) { GenericValue newValue = delegator.makeValue("ZipSalesRuleLookup", null); // PK fields newValue.set("stateCode", entry.get("stateCode") != null ? entry.getString("stateCode").trim() : "_NA_"); newValue.set("city", entry.get("city") != null ? entry.getString("city").trim() : "_NA_"); newValue.set("county", entry.get("county") != null ? entry.getString("county").trim() : "_NA_"); newValue.set("fromDate", parseDate(entry.getString("effectiveDate"), now)); // non-PK fields newValue.set("idCode", entry.get("idCode") != null ? entry.getString("idCode").trim() : null); newValue.set("taxable", entry.get("taxable") != null ? entry.getString("taxable").trim() : null); newValue.set("shipCond", entry.get("shipCond") != null ? entry.getString("shipCond").trim() : null); try { // using storeAll as an easy way to create/update delegator.storeAll(UtilMisc.toList(newValue)); } catch (GenericEntityException e) { Debug.logError(e, module); return ServiceUtil.returnError(UtilProperties.getMessage(resource_error,"OrderErrorWritingRecordsToTheDatabase",locale)); } // console log Debug.log(newValue.get("stateCode") + "/" + newValue.get("city") + "/" + newValue.get("county") + "/" + newValue.get("fromDate")); } } } return ServiceUtil.returnSuccess(); } // tax calc service public static Map flatTaxCalc(DispatchContext dctx, Map context) { GenericDelegator delegator = dctx.getDelegator(); List itemProductList = (List) context.get("itemProductList"); List itemAmountList = (List) context.get("itemAmountList"); List itemShippingList = (List) context.get("itemShippingList"); Double orderShippingAmount = (Double) context.get("orderShippingAmount"); GenericValue shippingAddress = (GenericValue) context.get("shippingAddress"); // flatTaxCalc only uses the Zip + City from the address String stateProvince = shippingAddress.getString("stateProvinceGeoId"); String postalCode = shippingAddress.getString("postalCode"); String city = shippingAddress.getString("city"); // setup the return lists. List orderAdjustments = new ArrayList(); List itemAdjustments = new ArrayList(); // check for a valid state/province geo String validStates = UtilProperties.getPropertyValue("zipsales.properties", "zipsales.valid.states"); if (validStates != null && validStates.length() > 0) { List stateSplit = StringUtil.split(validStates, "|"); if (!stateSplit.contains(stateProvince)) { Map result = ServiceUtil.returnSuccess(); result.put("orderAdjustments", orderAdjustments); result.put("itemAdjustments", itemAdjustments); return result; } } try { // loop through and get per item tax rates for (int i = 0; i < itemProductList.size(); i++) { GenericValue product = (GenericValue) itemProductList.get(i); Double itemAmount = (Double) itemAmountList.get(i); Double shippingAmount = (Double) itemShippingList.get(i); itemAdjustments.add(getItemTaxList(delegator, product, postalCode, city, itemAmount.doubleValue(), shippingAmount.doubleValue(), false)); }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -