package com.opentravelsoft.action.manage.product;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import com.opentravelsoft.util.LabelValueBean;
import org.springframework.beans.factory.annotation.Autowired;
import com.opensymphony.xwork2.ActionContext;
import com.opentravelsoft.action.ManageAction;
import com.opentravelsoft.common.KeyParams;
import com.opentravelsoft.common.SessionKeyParams;
import com.opentravelsoft.entity.Line;
import com.opentravelsoft.entity.LineDescription;
import com.opentravelsoft.entity.TblExpenseTmpl;
import com.opentravelsoft.service.product.ProductTmplService;
import com.opentravelsoft.service.product.LineTraitService;
/**
* 线路费用包含-不包含
*
* @author <a herf="mailto:zhangsitao@gmail.com">Steven Zhang</a>
* @version $Revision: 1.1 $ $Date: 2009/03/01 16:23:54 $
*/
public class LineExpenseAction extends ManageAction {
private static final long serialVersionUID = 7671898914387730451L;
@Autowired
private LineTraitService routeTraitService;
@Autowired
private ProductTmplService lineTmplService;
/** 线路包含 */
private List<LineDescription> expenseList = new ArrayList<LineDescription>();
private LineDescription routeTrait = new LineDescription();
private Line line;
private int refNo;
/** 线路费用包含(A:包含,B:不包含) */
private List<LabelValueBean> expenseTypes;
/** 同业自费 */
private String tyOwnExpense;
/** 直客自费 */
private String zkOwnExpense;
public String input() throws Exception {
Map<String, Object> session = ActionContext.getContext().getSession();
line = (Line) session.get(SessionKeyParams.EBIZ_CURRENT_ROUTE);
tyOwnExpense = line.getTyOwnExpense();
zkOwnExpense = line.getZkOwnExpense();
routeTrait.setRouteNo(line.getLineNo());
// 费用项目
expenseList = routeTraitService.roGetExpense(routeTrait.getRouteNo());
// 费用项目模板
List<TblExpenseTmpl> tmplList = lineTmplService.roGetExpenseTmpl();
expenseTypes = getCodeList("ebiz_expense_status");
int count = tmplList.size() - expenseList.size();
if (count > 0)
for (int i = 0; i < count; i++) {
expenseList.add(new LineDescription());
}
for (int i = 0; i < tmplList.size(); i++) {
expenseList.get(i).setItem(tmplList.get(i).getItem());
expenseList.get(i).setCanDel("N");
if (tmplList.get(i).getInclude().equals("Y"))
expenseList.get(i).setExpenseType(KeyParams.EBIZ_TYPE_EXPENSE_EXCEPT);
else
expenseList.get(i).setExpenseType(KeyParams.EBIZ_TYPE_EXPENSE_INC);
}
for (int i = 0; i < expenseList.size(); i++) {
expenseList.get(i).setRefNo(i + 1);
}
return INPUT;
}
public String add() throws Exception {
expenseList = sort(expenseList);
int reNo = 1;
for (LineDescription obj : expenseList) {
obj.setRefNo(reNo++);
}
LineDescription routeTrait = new LineDescription();
routeTrait.setRefNo(reNo++);
List<TblExpenseTmpl> tmplList = lineTmplService.roGetExpenseTmpl();
expenseList.add(routeTrait);
for (int i = 0; i < tmplList.size(); i++) {
expenseList.get(i).setItem(tmplList.get(i).getItem());
expenseList.get(i).setCanDel("N");
}
expenseTypes = getCodeList("ebiz_expense_status");
return SUCCESS;
}
public String delete() throws Exception {
List<TblExpenseTmpl> tmplList = lineTmplService.roGetExpenseTmpl();
expenseTypes = getCodeList("ebiz_expense_status");
expenseList = sort(expenseList);
for (LineDescription obj : expenseList) {
if (obj.getRefNo() == refNo) {
expenseList.remove(obj);
break;
}
}
for (int i = 0; i < tmplList.size(); i++) {
expenseList.get(i).setItem(tmplList.get(i).getItem());
expenseList.get(i).setCanDel("N");
}
return SUCCESS;
}
public String save() throws Exception {
line = (Line) ActionContext.getContext().getSession()
.get(SessionKeyParams.EBIZ_CURRENT_ROUTE);
line.setTyOwnExpense(tyOwnExpense);
line.setZkOwnExpense(zkOwnExpense);
routeTraitService.txSaveExpense(line, expenseList);
addActionMessage("费用包含/不包含保存成功.");
return SUCCESS;
}
@Override
public void validate() {
try {
for (int i = 0; i < expenseList.size(); i++) {
LineDescription trait = expenseList.get(i);
String value = trait.getTraitDetail();
if (value.getBytes(ENCODEING).length > 2000) {
addFieldError("描述", "第" + (i + 1) + "行 描述文字长度超过1000汉字或2000英数字.");
}
}
} catch (UnsupportedEncodingException e) {
}
}
private List<LineDescription> sort(List<LineDescription> expenseList) {
List<LineDescription> list = new ArrayList<LineDescription>();
for (int i = 0; i < expenseList.size(); i++) {
for (int j = 0; j < expenseList.size(); j++) {
LineDescription obj = expenseList.get(j);
if (obj.getRefNo() == i + 1) {
list.add(obj);
break;
}
}
}
return list;
}
public LineDescription getRouteTrait() {
return routeTrait;
}
public void setRouteTrait(LineDescription routeTrait) {
this.routeTrait = routeTrait;
}
public List<LineDescription> getExpenseList() {
return expenseList;
}
public void setExpenseList(List<LineDescription> expenseList) {
this.expenseList = expenseList;
}
public void setRefNo(int refNo) {
this.refNo = refNo;
}
public void setLine(Line line) {
this.line = line;
}
public List<LabelValueBean> getExpenseTypes() {
return expenseTypes;
}
public String getTyOwnExpense() {
return tyOwnExpense;
}
public void setTyOwnExpense(String tyOwnExpense) {
this.tyOwnExpense = tyOwnExpense;
}
public String getZkOwnExpense() {
return zkOwnExpense;
}
public void setZkOwnExpense(String zkOwnExpense) {
this.zkOwnExpense = zkOwnExpense;
}
}