/*
* 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.tax;
import java.math.BigDecimal;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import org.apache.commons.lang.StringUtils;
import org.apache.log4j.Logger;
import com.salesmanager.central.profile.Context;
import com.salesmanager.central.profile.ProfileConstants;
import com.salesmanager.core.constants.TaxConstants;
import com.salesmanager.core.entity.merchant.MerchantConfiguration;
import com.salesmanager.core.entity.tax.TaxClass;
import com.salesmanager.core.entity.tax.TaxRate;
import com.salesmanager.core.entity.tax.TaxRateDescription;
import com.salesmanager.core.entity.tax.TaxRateDescriptionId;
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.service.tax.TaxService;
import com.salesmanager.core.util.CurrencyUtil;
import com.salesmanager.core.util.LabelUtil;
import com.salesmanager.core.util.MessageUtil;
public class EditTaxAction extends TaxAction {
private int taxlineaction = 0;
private long taxlineid = 0;// geozoneid
private String taxlineorder = "0";
private long taxlineclassid = -1;
private String taxlinerate = null;
private int taxclassaction = -1;
private long taxclassid = 1;
private int choosecountry;
private int choosezone;
private boolean piggyback = false;
private Logger log = Logger.getLogger(EditTaxAction.class);
public void setup() throws Exception {
}
/**
* Edit tax basis option
*
* @return
* @throws Exception
*/
public String editTaxBasis() throws Exception {
super.setPageTitle("label.tax.taxbasis.setup");
Map p = this.gatherParameters();
if (super.getLanguages() == null || super.getLanguages().size() == 0) {
MessageUtil.addErrorMessage(super.getServletRequest(), LabelUtil
.getInstance().getText("errors.profile.storenotcreated"));
return SUCCESS;
}
String taxbasis = (String) p.get(super.TAX_BASIS);
try {
Context ctx = (Context) super.getServletRequest().getSession()
.getAttribute(ProfileConstants.context);
Integer merchantid = ctx.getMerchantid();
MerchantService mservice = (MerchantService) ServiceFactory
.getService(ServiceFactory.MerchantService);
ConfigurationRequest request = new ConfigurationRequest(merchantid,
TaxConstants.MODULE_TAX_BASIS);
ConfigurationResponse response = mservice.getConfiguration(request);
MerchantConfiguration config = response
.getMerchantConfiguration(TaxConstants.MODULE_TAX_BASIS);
if (config != null && taxbasis != null) {// tax configured
// if the user is 'shipping' or 'billing' and is asked for
// store, clean the tax
config.setConfigurationValue(taxbasis);
mservice.saveOrUpdateMerchantConfiguration(config);
}
super.getServletRequest().setAttribute("taxbasis", taxbasis);
this.setupTax();
MessageUtil.addMessage(super.getServletRequest(), LabelUtil
.getInstance().getText("message.confirmation.success"));
} catch (Exception e) {
log.error(e);
MessageUtil.addErrorMessage(super.getServletRequest(), LabelUtil
.getInstance().getText("errors.technical"));
}
return SUCCESS;
}
/**
* Add, Modify and Remove a TaxClass
*
* @return
* @throws Exception
*/
public String editTaxClass() throws Exception {
super.setPageTitle("label.tax.taxclass");
if (super.getLanguages() == null || super.getLanguages().size() == 0) {
MessageUtil.addErrorMessage(super.getServletRequest(), LabelUtil
.getInstance().getText("errors.profile.storenotcreated"));
return SUCCESS;
}
try {
if (super.getTaxclass() == null || super.getTaxclass().equals("")) {
MessageUtil.addErrorMessage(super.getServletRequest(),
LabelUtil.getInstance().getText(super.getLocale(),
"message.error.taxclass.title"));
setupTax();
return SUCCESS;
}
Context ctx = (Context) super.getServletRequest().getSession()
.getAttribute(ProfileConstants.context);
Integer merchantid = ctx.getMerchantid();
TaxService tservice = (TaxService) ServiceFactory
.getService(ServiceFactory.TaxService);
List txscl = tservice.getTaxClasses(merchantid);
java.util.Date dt = new java.util.Date();
if (taxclassaction == -1 || taxclassaction == 0) {// create
if (txscl != null) {
Iterator it = txscl.iterator();
while (it.hasNext()) {
TaxClass x = (TaxClass) it.next();
if (x.getTaxClassTitle().equals(super.getTaxclass())) {
MessageUtil
.addErrorMessage(
super.getServletRequest(),
LabelUtil
.getInstance()
.getText(
"message.error.taxclass.alreadyexist"));
this.setupTax();
return SUCCESS;
}
}
}
}
if (taxclassaction == -1) {// create
if (StringUtils.isBlank(super.getTaxclass())) {
super.addFieldError("taxclasstitle",
getText("errors.profile.storenotcreated"));
return SUCCESS;
}
TaxClass tc = new TaxClass();
tc.setDateAdded(new java.util.Date(dt.getTime()));
tc.setMerchantId(merchantid);
tc.setTaxClassDescription(super.getTaxclass());
tc.setTaxClassTitle(super.getTaxclass());
tservice.saveOrUpdateTaxClass(tc);
} else if (taxclassaction == 0) {// update
if (StringUtils.isBlank(super.getTaxclass())) {
super.addFieldError("taxclasstitle",
getText("errors.profile.storenotcreated"));
return SUCCESS;
}
TaxClass tc = tservice.getTaxClass(this.getTaxclassid());
if (tc == null) {
log.error("TaxClass does not exist for id "
+ this.getTaxclassid());
MessageUtil
.addErrorMessage(super.getServletRequest(),
LabelUtil.getInstance().getText(super.getLocale(),
"errors.technical"));
}
tc.setTaxClassTitle(super.getTaxclass());
tservice.saveOrUpdateTaxClass(tc);
} else {// delete
TaxClass tc = tservice.getTaxClass(this.getTaxclassid());
tservice.deleteTaxClass(tc);
}
this.setupTax();
MessageUtil.addMessage(super.getServletRequest(), LabelUtil
.getInstance().getText("message.confirmation.success"));
} catch (Exception e) {
log.error(e);
MessageUtil.addErrorMessage(super.getServletRequest(), LabelUtil
.getInstance().getText("errors.technical"));
}
return SUCCESS;
}
public String addTaxRate() throws Exception {
if (super.getLanguages() == null || super.getLanguages().size() == 0) {
MessageUtil.addErrorMessage(super.getServletRequest(), LabelUtil
.getInstance().getText("errors.profile.storenotcreated"));
return SUCCESS;
}
BigDecimal amount = null;
try {
super.gatherParameters();
// int schemeid = schemeid;
Context ctx = (Context) super.getServletRequest().getSession()
.getAttribute(ProfileConstants.context);
TaxService tservice = (TaxService) ServiceFactory
.getService(ServiceFactory.TaxService);
HashSet descriptionsset = new HashSet();
Integer priority = 0;
// validate amount
try {
amount = CurrencyUtil.validateCurrency(this.getTaxlinerate(),
ctx.getCurrency());
} catch (Exception e) {
MessageUtil.addErrorMessage(super.getServletRequest(),
LabelUtil.getInstance().getText(super.getLocale(),
"message.error.rate.format"));
this.setupTax();
return SUCCESS;
}
// descriptions
Iterator i = super.reflanguages.keySet().iterator();
while (i.hasNext()) {
int langcount = (Integer) i.next();
String description = (String) this.getDescriptions().get(
langcount);
if (StringUtils.isBlank(description)) {
MessageUtil.addErrorMessage(super.getServletRequest(),
LabelUtil.getInstance().getText(super.getLocale(),
"message.error.description.required"));
return SUCCESS;
}
int submitedlangid = (Integer) reflanguages.get(langcount);
TaxRateDescription desc = new TaxRateDescription();
TaxRateDescriptionId id = new TaxRateDescriptionId();
id.setLanguageId(submitedlangid);
desc.setTaxDescription(description);
desc.setId(id);
descriptionsset.add(desc);
}
TaxRate taxRate = new TaxRate();
taxRate.setMerchantId(ctx.getMerchantid());
taxRate.setDescriptions(descriptionsset);
taxRate.setTaxClassId(TaxConstants.DEFAULT_TAX_CLASS_ID);
taxRate.setTaxRate(amount);
taxRate.setPiggyback(this.isPiggyback());
tservice.saveOrUpdateTaxRate(taxRate, this.getChoosecountry(), this
.getChoosezone(), ctx.getMerchantid());
setupTax();
MessageUtil.addMessage(super.getServletRequest(), LabelUtil
.getInstance().getText("message.confirmation.success"));
return SUCCESS;
} catch (Exception e) {
log.error(e);
MessageUtil.addErrorMessage(super.getServletRequest(), LabelUtil
.getInstance().getText("errors.technical"));
return SUCCESS;
}
}
/**
* Edit an existing tax rate line
*
* @return
* @throws Exception
*/
public String editTaxRate() throws Exception {
if (super.getLanguages() == null || super.getLanguages().size() == 0) {
MessageUtil.addErrorMessage(super.getServletRequest(), LabelUtil
.getInstance().getText("errors.profile.storenotcreated"));
return SUCCESS;
}
BigDecimal amount = null;
try {
super.gatherParameters();
Context ctx = (Context) super.getServletRequest().getSession()
.getAttribute(ProfileConstants.context);
TaxService tservice = (TaxService) ServiceFactory
.getService(ServiceFactory.TaxService);
HashSet descriptionsset = new HashSet();
Integer priority = 0;
if (taxlineaction == 0) {// edit
// validate amunt
try {
amount = CurrencyUtil.validateCurrency(this
.getTaxlinerate(), ctx.getCurrency());
} catch (Exception e) {
MessageUtil.addErrorMessage(super.getServletRequest(),
LabelUtil.getInstance().getText(super.getLocale(),
"message.error.rate.format"));
this.setupTax();
return SUCCESS;
}
// validate priority
try {
priority = new Integer(this.getTaxlineorder());
} catch (Exception e) {
MessageUtil.addErrorMessage(super.getServletRequest(),
LabelUtil.getInstance().getText(super.getLocale(),
"message.error.priority.title"));
this.setupTax();
return SUCCESS;
}
// descriptions
Iterator i = super.reflanguages.keySet().iterator();
while (i.hasNext()) {
int langcount = (Integer) i.next();
String description = (String) this.getDescriptions().get(
langcount);
if (StringUtils.isBlank(description)) {
MessageUtil.addErrorMessage(super.getServletRequest(),
LabelUtil.getInstance().getText(super.getLocale(),
"message.error.description.required"));
return SUCCESS;
}
int submitedlangid = (Integer) reflanguages.get(langcount);
TaxRateDescription desc = new TaxRateDescription();
TaxRateDescriptionId id = new TaxRateDescriptionId();
id.setLanguageId(submitedlangid);
id.setTaxRateId(this.getTaxlineid());
desc.setTaxDescription(description);
desc.setId(id);
descriptionsset.add(desc);
}
}
long taxRateId = this.getTaxlineid();
TaxRate taxRate = null;
if (taxRateId > 0) {// modify
taxRate = tservice.getTaxRate(taxRateId);
}
if (taxRate == null) {// throw a tech difficulties
log.error("No tax rate id defined for this tax rate edition");
MessageUtil.addErrorMessage(super.getServletRequest(),
LabelUtil.getInstance().getText(super.getLocale(),"errors.technical"));
return SUCCESS;
}
if (this.getTaxlineaction() == 1) {
tservice.deleteTaxRate(taxRate);
} else {
taxRate.setDescriptions(descriptionsset);
taxRate.setTaxClassId(this.getTaxlineclassid());
taxRate.setTaxRate(amount);
taxRate.setTaxPriority(priority);
taxRate.setPiggyback(this.isPiggyback());
tservice.saveOrUpdateTaxRate(taxRate, this.getChoosecountry(),
this.getChoosezone(), ctx.getMerchantid());
}
setupTax();
MessageUtil.addMessage(super.getServletRequest(), LabelUtil
.getInstance().getText("message.confirmation.success"));
return SUCCESS;
} catch (Exception e) {
log.error(e);
MessageUtil.addErrorMessage(super.getServletRequest(), LabelUtil
.getInstance().getText("errors.technical"));
return SUCCESS;
}
}
public int getTaxlineaction() {
return taxlineaction;
}
public void setTaxlineaction(int taxlineaction) {
this.taxlineaction = taxlineaction;
}
public long getTaxlineid() {
return taxlineid;
}
public void setTaxlineid(long taxlineid) {
this.taxlineid = taxlineid;
}
public long getTaxlineclassid() {
return taxlineclassid;
}
public void setTaxlineclassid(long taxlineclassid) {
this.taxlineclassid = taxlineclassid;
}
public String getTaxlinerate() {
return taxlinerate;
}
public void setTaxlinerate(String taxlinerate) {
this.taxlinerate = taxlinerate;
}
public String getTaxlineorder() {
return taxlineorder;
}
public void setTaxlineorder(String taxlineorder) {
this.taxlineorder = taxlineorder;
}
public int getTaxclassaction() {
return taxclassaction;
}
public void setTaxclassaction(int taxclassaction) {
this.taxclassaction = taxclassaction;
}
public long getTaxclassid() {
return taxclassid;
}
public void setTaxclassid(long taxclassid) {
this.taxclassid = taxclassid;
}
public int getChoosecountry() {
return choosecountry;
}
public void setChoosecountry(int choosecountry) {
this.choosecountry = choosecountry;
}
public int getChoosezone() {
return choosezone;
}
public void setChoosezone(int choosezone) {
this.choosezone = choosezone;
}
public boolean isPiggyback() {
return piggyback;
}
public void setPiggyback(boolean piggyback) {
this.piggyback = piggyback;
}
}