/*
* Provided by CSTI Consulting
* Following GNU LESSER GENERAL PUBLIC LICENSE
* You may obtain more details at
*
* http://www.csticonsulting.com
* Copyright (c) 2006-2010 Consultation CS-TI inc.
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package com.salesmanager.central.shipping;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.StringTokenizer;
import java.util.TreeMap;
import org.apache.commons.lang.StringUtils;
import org.apache.log4j.Logger;
import com.opensymphony.xwork2.Preparable;
import com.salesmanager.central.BaseAction;
import com.salesmanager.central.profile.Context;
import com.salesmanager.central.profile.ProfileConstants;
import com.salesmanager.core.constants.ShippingConstants;
import com.salesmanager.core.entity.merchant.MerchantConfiguration;
import com.salesmanager.core.entity.shipping.ShippingPricePound;
import com.salesmanager.core.entity.shipping.ShippingPriceRegion;
import com.salesmanager.core.service.ServiceFactory;
import com.salesmanager.core.service.merchant.ConfigurationRequest;
import com.salesmanager.core.service.merchant.ConfigurationResponse;
import com.salesmanager.core.service.merchant.MerchantService;
import com.salesmanager.core.util.CurrencyUtil;
import com.salesmanager.core.util.LabelUtil;
import com.salesmanager.core.util.MessageUtil;
/**
* Manager custom shipping rates for domestic and international or international
* shipping
*
* @author Carl Samson
*
*/
public class ShippingCustomRatesAction extends BaseAction implements Preparable {
private Logger log = Logger.getLogger(ShippingCustomRatesAction.class);
private MerchantConfiguration indiczonescosts;// shipping zones costs
private MerchantConfiguration zonesskipped;// shipping zones skiped
private MerchantConfiguration shippingEstimate;// shipping estimate
private String country;
private String priceregion;
private Integer zonepriceid;
private String zone;
private String maxprice;
private String maxweight;
public final static int MAX_PRICE_SIZE = 5;
private Map zonesmap = new HashMap();
private String enablezonequote = null;
public String display() throws Exception {
return SUCCESS;
}
public String save() throws Exception {
return SUCCESS;
}
public String modifyPriceLine() throws Exception {
MerchantService mservice = (MerchantService) ServiceFactory
.getService(ServiceFactory.MerchantService);
if (indiczonescosts != null
&& (indiczonescosts.getConfigurationValue2() != null && !indiczonescosts
.getConfigurationValue2().equals(""))
&& maxweight != null && maxprice != null) {
try {
Context ctx = (Context) super.getServletRequest().getSession()
.getAttribute(ProfileConstants.context);
Integer merchantid = ctx.getMerchantid();
java.util.Date dt = new java.util.Date();
BigDecimal _maxprice;
try {
_maxprice = CurrencyUtil.validateCurrency(this
.getMaxprice(), ctx.getCurrency());
} catch (Exception e) {
// super.addActionError(getText("message.error.invalidfreeshippingamount"));
MessageUtil.addErrorMessage(super.getServletRequest(),
LabelUtil.getInstance().getText(
"errors.price.format"));
return "error";
}
int _maxweight;
try {
_maxweight = Integer.parseInt(this.getMaxweight());
} catch (Exception e) {
log.error("Invalid maxweight value " + this.getMaxweight());
MessageUtil.addErrorMessage(super.getServletRequest(),
LabelUtil.getInstance().getText(
"errors.weight.format"));
return "error";
}
String costline = this.modifyCostLine(2, indiczonescosts,
_maxprice, _maxweight);
indiczonescosts
.setLastModified(new java.util.Date(dt.getTime()));
indiczonescosts.setMerchantId(ctx.getMerchantid());
indiczonescosts.setConfigurationValue2(costline.toString());
mservice.saveOrUpdateMerchantConfiguration(indiczonescosts);
// session.update(indiczonescosts);
// tx.commit();
MessageUtil.addMessage(super.getServletRequest(), LabelUtil
.getInstance().getText("message.confirmation.success"));
} catch (Exception e) {
// tx.rollback();
MessageUtil.addMessage(super.getServletRequest(), LabelUtil
.getInstance().getText("errors.technical"));
}
}
return SUCCESS;
}
private String modifyCostLine(int action, MerchantConfiguration costs,
BigDecimal price, int weight) throws Exception {
if (costs == null)
throw new Exception(" MerchantConfiguration costs is null");
Map costsmap = buildPriceRegionWithPrice(new HashMap(), costs
.getConfigurationValue2());
Set keys = costsmap.keySet();
Iterator it = keys.iterator();
StringBuffer costline = new StringBuffer();
// int i = 1;
for (int i = 1; i <= ShippingConstants.MAX_PRICE_RANGE_COUNT; i++) {
// while(it.hasNext()) {
// int key = (Integer)it.next();
ShippingPriceRegion spr = (ShippingPriceRegion) costsmap.get(i);
if (i == zonepriceid) {// price need to be deleted from that id
// @todo if only one country to be delete, also remove the
// price-weight
if (spr != null && spr.getPriceLine() != null) {
String ln = spr.getPriceLine();
StringTokenizer st = new StringTokenizer(ln, "|");
while (st.hasMoreTokens()) {
String tk = (String) st.nextToken();
StringTokenizer prtk = new StringTokenizer(tk, ";");
int countsemic = prtk.countTokens();
int j = 1;
while (prtk.hasMoreTokens()) {
String wpr = (String) prtk.nextToken();
int indxof = wpr.indexOf(":");
boolean found = false;
if (indxof != -1) {// got something
if (action == 1) {// delete price
String pr = wpr.substring(0, indxof);
if (!pr.equals(String.valueOf(weight))) {// if
// dealing
// with
// delete
costline.append(wpr);// 5:3
} else {// the one we want to delete or
// modify
if (j == countsemic && countsemic == 1) {
costline.append("*");
}
found = true;
}
} else {// modify price
String pr = wpr.substring(0, indxof);
if (!pr.equals(String.valueOf(weight))) {// if
// dealing
// with
// delete
costline.append(wpr);// 5:3
} else {// the one we want to delete or
// modify
costline.append(
wpr.substring(0, indxof))
.append(":").append(price);
}
}
} else {
costline.append(wpr);
}
if (j < countsemic && !found) {
costline.append(";");
}
j++;
}
}
} else {
costline.append("*");
}
} else {
if (spr != null && spr.getPriceLine() != null) {
costline.append(spr.getPriceLine());
} else {
costline.append("*");
}
}
if (i < costsmap.size()) {
costline.append("|");
}
}
return costline.toString();
}
public String removePriceLine() throws Exception {
MerchantService mservice = (MerchantService) ServiceFactory
.getService(ServiceFactory.MerchantService);
if (indiczonescosts != null
&& (indiczonescosts.getConfigurationValue2() != null && !indiczonescosts
.getConfigurationValue2().equals(""))
&& maxweight != null) {
try {
Context ctx = (Context) super.getServletRequest().getSession()
.getAttribute(ProfileConstants.context);
Integer merchantid = ctx.getMerchantid();
java.util.Date dt = new java.util.Date();
int _maxweight;
try {
_maxweight = Integer.parseInt(this.getMaxweight());
} catch (Exception e) {
log.error("Invalid maxweight value " + this.getMaxweight());
MessageUtil.addErrorMessage(super.getServletRequest(),
LabelUtil.getInstance().getText(
"errors.weight.format"));
return "error";
}
String costline = this.modifyCostLine(1, indiczonescosts,
new BigDecimal(0), _maxweight);
indiczonescosts
.setLastModified(new java.util.Date(dt.getTime()));
indiczonescosts.setMerchantId(ctx.getMerchantid());
indiczonescosts.setConfigurationValue2(costline.toString());
mservice.saveOrUpdateMerchantConfiguration(indiczonescosts);
MessageUtil.addMessage(super.getServletRequest(), LabelUtil
.getInstance().getText("message.confirmation.success"));
} catch (Exception e) {
// tx.rollback();
MessageUtil.addMessage(super.getServletRequest(), LabelUtil
.getInstance().getText("errors.technical"));
}
}
return SUCCESS;
}
public String addMaxPrice() throws Exception {
MerchantService mservice = (MerchantService) ServiceFactory
.getService(ServiceFactory.MerchantService);
if (zonepriceid == null || maxprice == null || maxweight == null) {
MessageUtil.addErrorMessage(super.getServletRequest(), LabelUtil
.getInstance().getText("errors.generic"));
log
.error("Missing zonepriceid or maxprice or maxweight in addMaxPrice request");
return "error";
}
int regioncount = 0;
int _maxweignt = 0;
Context ctx = (Context) super.getServletRequest().getSession()
.getAttribute(ProfileConstants.context);
Integer merchantid = ctx.getMerchantid();
try {
regioncount = new Integer(zonepriceid);
} catch (Exception e) {
log.error("Invalid region count value " + this.getPriceregion());
MessageUtil.addErrorMessage(super.getServletRequest(), LabelUtil
.getInstance().getText("errors.generic"));
return "error";
}
try {
_maxweignt = Integer.parseInt(this.getMaxweight());
} catch (Exception e) {
log.error("Invalid maxweight value " + this.getMaxweight());
MessageUtil.addErrorMessage(super.getServletRequest(), LabelUtil
.getInstance().getText("errors.weight.format"));
return "error";
}
BigDecimal _maxprice;
try {
_maxprice = CurrencyUtil.validateCurrency(this.getMaxprice(), ctx
.getCurrency());
} catch (Exception e) {
MessageUtil.addErrorMessage(super.getServletRequest(), LabelUtil
.getInstance().getText("errors.price.format"));
return "error";
}
try {
java.util.Date dt = new java.util.Date();
if (indiczonescosts.getConfigurationValue2() == null) {// first
// entry
StringBuffer costline = new StringBuffer();
for (int i = 1; i <= ShippingConstants.MAX_PRICE_REGION_COUNT; i++) {
if (i == regioncount) {
costline.append(_maxprice).append(":").append(
_maxweignt);
} else {
costline.append("*");
}
if (i < ShippingConstants.MAX_PRICE_REGION_COUNT) {
costline.append("|");
}
indiczonescosts.setConfigurationValue2(costline.toString());
}
indiczonescosts
.setLastModified(new java.util.Date(dt.getTime()));
indiczonescosts.setMerchantId(merchantid);
mservice.saveOrUpdateMerchantConfiguration(indiczonescosts);
} else {// entries already exist
Map regionmap = buildPriceRegionWithPrice(new HashMap(),
indiczonescosts.getConfigurationValue2());
ShippingPriceRegion spr = (ShippingPriceRegion) regionmap
.get(regioncount);
ShippingPricePound spp = new ShippingPricePound();
if (spr == null) {
spr = new ShippingPriceRegion();
}
spp.setMaxpound(_maxweignt);
spp.setPrice(_maxprice);
spr.addPrice(spp);
regionmap.put(regioncount, spr);
// Get the line now
StringBuffer costsline = new StringBuffer();
for (int i = 1; i <= ShippingConstants.MAX_PRICE_REGION_COUNT; i++) {
if (regionmap.containsKey(i)) {
ShippingPriceRegion priceregion = (ShippingPriceRegion) regionmap
.get(i);
List prices = priceregion.getPrices();
Collections.sort(prices);
Iterator prit = prices.iterator();
int j = 1;
StringBuffer pricesbuffer = new StringBuffer();
while (prit.hasNext()) {
ShippingPricePound pp = (ShippingPricePound) prit
.next();
pricesbuffer.append(pp.getMaxpound());
pricesbuffer.append(":");
pricesbuffer.append(pp.getPrice());
if (j < prices.size()) {
pricesbuffer.append(";");
}
j++;
}
if (prices.size() == 0) {
pricesbuffer.append("*");
}
costsline.append(pricesbuffer.toString());
} else {// empty line
costsline.append("*");
}
if (i < ShippingConstants.MAX_PRICE_REGION_COUNT) {
costsline.append("|");
}
}
indiczonescosts.setConfigurationValue2(costsline.toString());
indiczonescosts
.setLastModified(new java.util.Date(dt.getTime()));
indiczonescosts.setMerchantId(merchantid);
mservice.saveOrUpdateMerchantConfiguration(indiczonescosts);
}
MessageUtil.addMessage(super.getServletRequest(), LabelUtil
.getInstance().getText("message.confirmation.success"));
} catch (Exception e) {
log.error(e);
return "error";
}
return SUCCESS;
}
/**
* Removes a zone from the configuration
*
* @return
* @throws Exception
*/
public String removeZonePrice() throws Exception {
try {
Context ctx = (Context) super.getServletRequest().getSession()
.getAttribute(ProfileConstants.context);
Integer merchantid = ctx.getMerchantid();
java.util.Date dt = new java.util.Date();
List configurations = new ArrayList();
if (indiczonescosts != null
&& !StringUtils.isBlank(indiczonescosts
.getConfigurationValue1())) {
configurations.add(this.deleteLine(indiczonescosts,
zonepriceid, 1));
}
if (indiczonescosts != null
&& !StringUtils.isBlank(indiczonescosts
.getConfigurationValue2())) {
configurations.add(this.deleteLine(indiczonescosts,
zonepriceid, 2));
}
if (shippingEstimate != null
&& !StringUtils.isBlank(shippingEstimate
.getConfigurationValue1())) {
configurations.add(this.deleteShippingEstimate(
shippingEstimate, zonepriceid));
}
MerchantService mservice = (MerchantService) ServiceFactory
.getService(ServiceFactory.MerchantService);
mservice.saveOrUpdateMerchantConfigurations(configurations);
super.setSuccessMessage();
} catch (Exception e) {
log.error(e);
super.setTechnicalMessage();
}
return SUCCESS;
}
/**
* Removes a custom shipping zone
*
* @return
* @throws Exception
*/
public String removeCountry() throws Exception {
MerchantService mservice = (MerchantService) ServiceFactory
.getService(ServiceFactory.MerchantService);
if (indiczonescosts != null
&& (indiczonescosts.getConfigurationValue1() != null && !indiczonescosts
.getConfigurationValue1().equals(""))) {
try {
Context ctx = (Context) super.getServletRequest().getSession()
.getAttribute(ProfileConstants.context);
Integer merchantid = ctx.getMerchantid();
java.util.Date dt = new java.util.Date();
Map countriesmap = buildPriceRegionWithRegion(new HashMap(),
indiczonescosts.getConfigurationValue1());
Set keys = countriesmap.keySet();
Iterator it = keys.iterator();
StringBuffer countryline = new StringBuffer();
for (int i = 1; i <= ShippingConstants.MAX_PRICE_RANGE_COUNT; i++) {
ShippingPriceRegion spr = (ShippingPriceRegion) countriesmap
.get(i);
if (i == zonepriceid) {
// @todo if only one country to be delete, also remove
// the price-weight
String ln = spr.getCountryline();
String newline = "";
if (ln != null && ln.length() == 2 && ln.contains(zone)) {// only
// one
// country
// remove country line
// remove price line
this.deleteLine(indiczonescosts, zonepriceid, 2);
newline = "*";
} else {// must strip the country from the line received
int idxof = ln.indexOf(zone);
if (idxof != -1) {// not found
if (idxof == 0) {
newline = ln.substring(idxof + 3, ln
.length());// first item
} else if (idxof == ln.length() - 2) {// should
// be -1
// end
// item
newline = ln.substring(0, ln.length() - 3);
} else {// middle item
newline = ln.substring(0, idxof - 1)
+ ln.substring(idxof + 2, ln
.length());
}
}
}
countryline.append(newline);
} else {
if (spr != null && spr.getCountryline() != null) {
countryline.append(spr.getCountryline());
} else {
countryline.append("*");
}
}
if (i < countriesmap.size()) {
countryline.append("|");
}
}
indiczonescosts
.setLastModified(new java.util.Date(dt.getTime()));
indiczonescosts.setMerchantId(ctx.getMerchantid());
indiczonescosts.setConfigurationValue1(countryline.toString());
mservice.saveOrUpdateMerchantConfiguration(indiczonescosts);
MessageUtil.addMessage(super.getServletRequest(), LabelUtil
.getInstance().getText("message.confirmation.success"));
} catch (Exception e) {
MessageUtil.addMessage(super.getServletRequest(), LabelUtil
.getInstance().getText("errors.technical"));
}
}
return SUCCESS;
}
/**
* Will add a Custom Shipping Zone
*
* @return
* @throws Exception
*/
public String add() throws Exception {
MerchantService mservice = (MerchantService) ServiceFactory
.getService(ServiceFactory.MerchantService);
if (this.getCountry() == null || this.getPriceregion() == null) {
MessageUtil.addMessage(super.getServletRequest(), LabelUtil
.getInstance().getText("errors.generic"));
log.error("Missing country or priceregion fromadd request");
return SUCCESS;
}
int regioncount = 0;
try {
regioncount = Integer.parseInt(this.getPriceregion());
} catch (Exception e) {
log.error("Invalid region count value " + this.getPriceregion());
MessageUtil.addMessage(super.getServletRequest(), LabelUtil
.getInstance().getText("errors.generic"));
return SUCCESS;
}
try {
Context ctx = (Context) super.getServletRequest().getSession()
.getAttribute(ProfileConstants.context);
Integer merchantid = ctx.getMerchantid();
java.util.Date dt = new java.util.Date();
if (indiczonescosts == null
|| indiczonescosts.getConfigurationValue1() == null
|| indiczonescosts.getConfigurationValue1().equals("")) {// first
// entry
indiczonescosts = new MerchantConfiguration();
indiczonescosts
.setConfigurationKey(ShippingConstants.MODULE_SHIPPING_INDIC_COUNTRIES_COSTS);
indiczonescosts.setConfigurationValue("");
indiczonescosts.setConfigurationValue1("");
indiczonescosts.setConfigurationValue2("");
indiczonescosts.setDateAdded(new java.util.Date(dt.getTime()));
indiczonescosts
.setLastModified(new java.util.Date(dt.getTime()));
StringBuffer countriesline = new StringBuffer();
for (int i = 1; i <= ShippingConstants.MAX_PRICE_REGION_COUNT; i++) {
if (i == regioncount) {
countriesline.append(this.getCountry());
} else {
countriesline.append("*");
}
if (i < ShippingConstants.MAX_PRICE_REGION_COUNT) {
countriesline.append("|");
}
}
indiczonescosts
.setConfigurationValue1(countriesline.toString());
indiczonescosts
.setLastModified(new java.util.Date(dt.getTime()));
indiczonescosts.setMerchantId(merchantid);
mservice.saveOrUpdateMerchantConfiguration(indiczonescosts);
} else {// entries already exist
Map countriesmap = buildPriceRegionWithRegion(new HashMap(),
indiczonescosts.getConfigurationValue1());
ShippingPriceRegion spr = (ShippingPriceRegion) countriesmap
.get(regioncount);
if (spr == null) {
spr = new ShippingPriceRegion();
}
spr.addCountry(this.getCountry());
countriesmap.put(regioncount, spr);
// Get the line now
StringBuffer costsline = new StringBuffer();
for (int i = 1; i <= ShippingConstants.MAX_PRICE_REGION_COUNT; i++) {
if (countriesmap.containsKey(i)) {
ShippingPriceRegion priceregion = (ShippingPriceRegion) countriesmap
.get(i);
List prl = priceregion.getCountries();
Iterator prlit = prl.iterator();
int j = 1;
StringBuffer countriesbuffer = new StringBuffer();
while (prlit.hasNext()) {
countriesbuffer.append((String) prlit.next());
if (j < prl.size()) {
countriesbuffer.append(";");
}
j++;
}
if (prl.size() == 0) {
countriesbuffer.append("*");
}
costsline.append(countriesbuffer.toString());
} else {// empty line
costsline.append("*");
}
if (i < ShippingConstants.MAX_PRICE_REGION_COUNT) {
costsline.append("|");
}
}
indiczonescosts.setConfigurationValue1(costsline.toString());
indiczonescosts
.setLastModified(new java.util.Date(dt.getTime()));
indiczonescosts.setMerchantId(merchantid);
mservice.saveOrUpdateMerchantConfiguration(indiczonescosts);
}
MessageUtil.addMessage(super.getServletRequest(), LabelUtil
.getInstance().getText("message.confirmation.success"));
} catch (Exception e) {
log.error(e);
}
return SUCCESS;
}
public String editTableRate() throws Exception {
MerchantService mservice = (MerchantService) ServiceFactory
.getService(ServiceFactory.MerchantService);
try {
Context ctx = (Context) super.getServletRequest().getSession()
.getAttribute(ProfileConstants.context);
Integer merchantid = ctx.getMerchantid();
java.util.Date dt = new java.util.Date();
if (indiczonescosts != null) {
indiczonescosts
.setLastModified(new java.util.Date(dt.getTime()));
indiczonescosts.setMerchantId(ctx.getMerchantid());
if (this.getEnablezonequote() != null) {
indiczonescosts.setConfigurationValue("true");
} else {
indiczonescosts.setConfigurationValue("false");
}
mservice.saveOrUpdateMerchantConfiguration(indiczonescosts);
} else {
MerchantConfiguration conf = new MerchantConfiguration();
indiczonescosts = new MerchantConfiguration();
indiczonescosts
.setConfigurationKey(ShippingConstants.MODULE_SHIPPING_INDIC_COUNTRIES_COSTS);
indiczonescosts.setConfigurationValue("");
indiczonescosts.setConfigurationValue1("");
indiczonescosts.setConfigurationValue2("");
indiczonescosts.setDateAdded(new java.util.Date(dt.getTime()));
indiczonescosts
.setLastModified(new java.util.Date(dt.getTime()));
if (this.getEnablezonequote() != null) {
conf.setConfigurationValue("true");
} else {
conf.setConfigurationValue("false");
}
conf.setMerchantId(ctx.getMerchantid());
mservice.saveOrUpdateMerchantConfiguration(conf);
}
MessageUtil.addMessage(super.getServletRequest(), LabelUtil
.getInstance().getText("message.confirmation.success"));
} catch (Exception e) {
// tx.rollback();
log.error(e);
}
return SUCCESS;
}
public void prepare() throws Exception {
try {
super.setPageTitle("label.shipping.customrates");
Context ctx = (Context) super.getServletRequest().getSession()
.getAttribute(ProfileConstants.context);
Integer merchantid = ctx.getMerchantid();
ConfigurationRequest req = new ConfigurationRequest(merchantid,
true, "SHP_");
MerchantService mservice = (MerchantService) ServiceFactory
.getService(ServiceFactory.MerchantService);
ConfigurationResponse res = mservice.getConfiguration(req);
List config = res.getMerchantConfigurationList();
Map priceregionmap = null;
String calculateEstimateTime = null;
if (config != null) {
Iterator it = config.iterator();
while (it.hasNext()) {
MerchantConfiguration c = (MerchantConfiguration) it.next();
String key = c.getConfigurationKey();
if (key
.equals(ShippingConstants.MODULE_SHIPPING_ZONES_SKIPPED)) {
// determine if it is domestic or international
Map szones = new HashMap();
zonesskipped = c;
String skipped = c.getConfigurationValue();
StringTokenizer st = new StringTokenizer(skipped, ";");
while (st.hasMoreTokens()) {
String token = st.nextToken();
szones.put(token, token);
}
super.getServletRequest().setAttribute("zonesskipped",
szones);
}
if (key
.equals(ShippingConstants.MODULE_SHIPPING_INDIC_COUNTRIES_COSTS)) {
indiczonescosts = c;
if (c.getConfigurationValue1() != null) {
if (priceregionmap == null) {
priceregionmap = new TreeMap();
}
priceregionmap = buildPriceRegionWithRegion(
priceregionmap, c.getConfigurationValue1());
}
if (c.getConfigurationValue2() != null) {
if (priceregionmap == null) {
priceregionmap = new TreeMap();
}
priceregionmap = buildPriceRegionWithPrice(
priceregionmap, c.getConfigurationValue2());
}
if (c.getConfigurationValue() != null) {
super.getServletRequest().setAttribute(
"shippingzonesindicator",
c.getConfigurationValue());
}
}
if (key
.equals(ShippingConstants.MODULE_SHIPPING_ESTIMATE_BYCOUNTRY)) {
shippingEstimate = c;
calculateEstimateTime = c.getConfigurationValue1();
}
if (key
.equals(ShippingConstants.MODULE_SHIPPING_ZONES_SHIPPING)) {
super.getServletRequest().setAttribute("zonesshipping",
c.getConfigurationValue());
}
}
}
if (calculateEstimateTime != null) {
priceregionmap = buildPriceRegionWithEstimatedCosts(
priceregionmap, calculateEstimateTime);
}
if (priceregionmap == null) {
priceregionmap = new HashMap();
priceregionmap.put(1, new ShippingPriceRegion());
priceregionmap.put(2, new ShippingPriceRegion());
priceregionmap.put(3, new ShippingPriceRegion());
priceregionmap.put(4, new ShippingPriceRegion());
priceregionmap.put(5, new ShippingPriceRegion());
}
super.getServletRequest().setAttribute("zonesmap", zonesmap);
super.getServletRequest()
.setAttribute("pricezones", priceregionmap);
} catch (Exception e) {
log.error(e);
}
}
private MerchantConfiguration deleteLine(MerchantConfiguration conf,
int index, int value) throws Exception {
StringTokenizer cvtk = null;
String confValue = "";
if (value == 1) {// country
confValue = conf.getConfigurationValue1();
} else {// price
confValue = conf.getConfigurationValue2();
}
cvtk = new StringTokenizer(confValue, "|");
StringBuffer linebuffer = new StringBuffer();
int i = 1;
int count = cvtk.countTokens();
while (cvtk.hasMoreTokens()) {
String line = (String) cvtk.nextToken();
if (i != index) {
linebuffer.append(line);
} else {
linebuffer.append("*");// replace the line
}
if (i < count) {
linebuffer.append("|");
}
i++;
}
if (value == 1) {
conf.setConfigurationValue1(linebuffer.toString());
} else {
conf.setConfigurationValue2(linebuffer.toString());
}
java.util.Date dt = new java.util.Date();
conf.setLastModified(dt);
return conf;
}
private MerchantConfiguration deleteShippingEstimate(
MerchantConfiguration conf, int index) throws Exception {
StringTokenizer cvtk = null;
String confValue = "";
confValue = conf.getConfigurationValue1();
cvtk = new StringTokenizer(confValue, "|");
StringBuffer linebuffer = new StringBuffer();
int i = 1;
int count = cvtk.countTokens();
while (cvtk.hasMoreTokens()) {
String line = (String) cvtk.nextToken();
if (!line.equals("*")) {
String newLine = line.substring(0, 2);
if (newLine.equals(new StringBuffer().append(index).append(":")
.toString())) {
linebuffer.append("*");// replace the line
} else {
linebuffer.append(line);
}
} else {
linebuffer.append(line);
}
if (i < count) {
linebuffer.append("|");
}
i++;
}
conf.setConfigurationValue1(linebuffer.toString());
java.util.Date dt = new java.util.Date();
conf.setLastModified(dt);
return conf;
}
private Map buildPriceRegionWithPrice(Map map, String s) throws Exception {
/**
* contains a map prices - List 0 --- ShippingPriceRegion
* -------------ShippingPricePound -------------ShippingPricePound 1 ---
* ShippingPriceRegion -------------ShippingPricePound
* -------------ShippingPricePound
*/
if (map == null) {
map = new TreeMap();
}
Map returnmap = map;
StringTokenizer cvtk = new StringTokenizer(s, "|");
String costline = null;
int i = 1;
while (cvtk.hasMoreTokens()) {
ShippingPriceRegion spr = null;
if (returnmap.containsKey(i)) {
spr = (ShippingPriceRegion) returnmap.get(i);
} else {
spr = new ShippingPriceRegion();
}
costline = cvtk.nextToken();// maxpound:price,maxpound:price...|
StringTokenizer pricestk = new StringTokenizer(costline, ";");
String poundpriceline = null;
while (pricestk.hasMoreTokens()) {
poundpriceline = pricestk.nextToken();// maxpound:price
if (!poundpriceline.equals("*")) {
// now get maxpound and price
int j = 1;
StringTokenizer poundprice = new StringTokenizer(
poundpriceline, ":");
ShippingPricePound spp = new ShippingPricePound();
while (poundprice.hasMoreTokens()) {
String val = poundprice.nextToken();
if (j == 1) {
spp.setMaxpound(Integer.parseInt(val));
}
if (j == 2) {
spp.setPrice(new BigDecimal(val));
}
j++;
}
spr.addPrice(spp);
}
}
spr.setPriceLine(costline);
returnmap.put(i, spr);
i++;
}
return returnmap;
}
private Map buildPriceRegionWithRegion(Map map, String s) throws Exception {
/**
* contains a map countries - List 0 --- ShippingPriceRegion
* -------------String -------------String 1 --- ShippingPriceRegion
* -------------String -------------String
*/
if (map == null) {
map = new TreeMap();
}
Map returnmap = map;
StringTokenizer cvtk = new StringTokenizer(s, "|");
String countryline = null;
int i = 1;
while (cvtk.hasMoreTokens()) {
ShippingPriceRegion spr = null;
if (returnmap.containsKey(i)) {
spr = (ShippingPriceRegion) returnmap.get(i);
} else {
spr = new ShippingPriceRegion();
}
countryline = cvtk.nextToken();// maxpound:price,maxpound:price...|
if (!countryline.equals("*")) {
StringTokenizer countrystk = new StringTokenizer(countryline,
";");
String country = null;
StringBuffer countrline = new StringBuffer();
while (countrystk.hasMoreTokens()) {
country = countrystk.nextToken();
// now get maxpound and price
spr.addCountry(country);
zonesmap.put(country, country);
countrline.append(country).append(";");
}
String line = countrline.toString();
spr.setCountryline(line.substring(0, line.length() - 1));
}
returnmap.put(i, spr);
i++;
}
return returnmap;
}
private Map buildPriceRegionWithEstimatedCosts(Map map, String s)
throws Exception {
/**
* contains a map countries - List 0 --- ShippingPriceRegion (0 is
* index) -------------String -------------String 1 ---
* ShippingPriceRegion -------------String -------------String
*/
if (map == null) {
map = new TreeMap();
}
Map returnmap = map;
StringTokenizer cvtk = new StringTokenizer(s, "|");// index:<MINCOST>;<MAXCOST>|
String countryline = null;
int i = 1;
while (cvtk.hasMoreTokens()) {
countryline = cvtk.nextToken();// index:<MINCOST>;<MAXCOST>
StringTokenizer indextk = new StringTokenizer(countryline, ":");// index
String configLine = null;
// StringBuffer countrline = new StringBuffer();
int indexCount = 1;
ShippingPriceRegion spr = null;
while (indextk != null && indextk.hasMoreTokens()) {
configLine = indextk.nextToken();
if (indexCount == 1) {// countries
try {
int index = Integer.parseInt(configLine);
spr = (ShippingPriceRegion) returnmap.get(index);
if (spr != null) {
spr.setEstimatedTimeEnabled(true);
}
} catch (Exception e) {
log.error("Cannot parse to an integer " + configLine);
}
}
if (indexCount == 2) {// days
// parse dates <mindate>;<maxdate>
StringTokenizer datetk = new StringTokenizer(configLine,
";");// date
int dateCount = 1;
while (datetk != null && datetk.hasMoreTokens()) {
String date = (String) datetk.nextToken();
try {
if (spr != null) {
if (dateCount == 1) {
spr.setMinDays(Integer.parseInt(date));
}
if (dateCount == 2) {
spr.setMaxDays(Integer.parseInt(date));
}
}
} catch (Exception e) {
log.error("Cannot parse integer " + date);
}
dateCount++;
}
}
indexCount++;
}
i++;
}
return returnmap;
}
public String getCountry() {
return country;
}
public void setCountry(String country) {
this.country = country;
}
public String getPriceregion() {
return priceregion;
}
public void setPriceregion(String priceregion) {
this.priceregion = priceregion;
}
public String getEnablezonequote() {
return enablezonequote;
}
public void setEnablezonequote(String enablezonequote) {
this.enablezonequote = enablezonequote;
}
public Integer getZonepriceid() {
return zonepriceid;
}
public void setZonepriceid(Integer zonepriceid) {
this.zonepriceid = zonepriceid;
}
public String getZone() {
return zone;
}
public void setZone(String zone) {
this.zone = zone;
}
public String getMaxprice() {
return maxprice;
}
public void setMaxprice(String maxprice) {
this.maxprice = maxprice;
}
public String getMaxweight() {
return maxweight;
}
public void setMaxweight(String maxweight) {
this.maxweight = maxweight;
}
}