package com.jcommerce.gwt.client.panels.promote;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import com.extjs.gxt.ui.client.event.ButtonEvent;
import com.extjs.gxt.ui.client.event.SelectionListener;
import com.extjs.gxt.ui.client.widget.Label;
import com.extjs.gxt.ui.client.widget.MessageBox;
import com.extjs.gxt.ui.client.widget.button.Button;
import com.google.gwt.event.dom.client.ChangeEvent;
import com.google.gwt.event.dom.client.ChangeHandler;
import com.google.gwt.user.client.Element;
import com.google.gwt.user.client.ui.CheckBox;
import com.google.gwt.user.client.ui.FlexTable;
import com.google.gwt.user.client.ui.HasVerticalAlignment;
import com.google.gwt.user.client.ui.HorizontalPanel;
import com.google.gwt.user.client.ui.ListBox;
import com.google.gwt.user.client.ui.TextBox;
import com.google.gwt.user.client.ui.Widget;
import com.google.gwt.user.client.ui.FlexTable.FlexCellFormatter;
import com.jcommerce.gwt.client.ContentWidget;
import com.jcommerce.gwt.client.ModelNames;
import com.jcommerce.gwt.client.PageState;
import com.jcommerce.gwt.client.form.BeanObject;
import com.jcommerce.gwt.client.model.IBrand;
import com.jcommerce.gwt.client.model.ICategory;
import com.jcommerce.gwt.client.model.IFavourableActivity;
import com.jcommerce.gwt.client.model.IGoods;
import com.jcommerce.gwt.client.service.CreateService;
import com.jcommerce.gwt.client.service.ListService;
import com.jcommerce.gwt.client.service.UpdateService;
import com.jcommerce.gwt.client.widgets.ColumnPanel;
import com.jcommerce.gwt.client.widgets.DateWidget;
public class ModifyFavourableActivityListPanel extends ContentWidget {
private ColumnPanel contentPanel = new ColumnPanel();
private Button btnNew = new Button();
private Button btnCancel = new Button();
private List<CheckBox> rangeContentList = new ArrayList<CheckBox>();
private Map<CheckBox, TextBox> methodContentMap = new HashMap<CheckBox, TextBox>();
public static class State extends PageState {
private BeanObject favourableActivity = null;
public BeanObject getFavourableActivity() {
return favourableActivity;
}
public void setFavourableActivity(BeanObject favourableActivity) {
this.favourableActivity = favourableActivity;
setEditting(favourableActivity != null);
}
public String getPageClassName() {
return ModifyFavourableActivityListPanel.class.getName();
}
public String getMenuDisplayName() {
return "编辑优惠活动 ";
}
}
public State getCurState() {
if (curState == null ) {
curState = new State();
}
return (State)curState;
}
public String getDescription() {
return "cwBasicTextDescription";
}
public String getName() {
return "编辑优惠活动 ";
}
protected void onRender(Element parent, int index) {
super.onRender(parent, index);
add(contentPanel);
final TextBox nameTextBox = new TextBox();
final DateWidget startTime = new DateWidget();
final DateWidget endTime = new DateWidget();
String rangeExt = getCurState().getFavourableActivity().getString(IFavourableActivity.ACT_RANGE_EXT);
List<String> rangeExtList = getStrToStrList(rangeExt);
for(String str : rangeExtList) {
CheckBox c = new CheckBox(str);
c.setValue(true);
rangeContentList.add(c);
}
String typeExt = getCurState().getFavourableActivity().getString(IFavourableActivity.ACT_TYPE_EXT);
List<String> typeExtList = getStrToStrList(typeExt);
for(String str : typeExtList) {
CheckBox key = new CheckBox(str.substring(0, str.indexOf(",")));
TextBox value = new TextBox();
value.setText(str.substring(str.indexOf("," + 1), str.length()));
methodContentMap.put(key, value);
}
nameTextBox.setText(getCurState().getFavourableActivity().getString(IFavourableActivity.ACT_NAME));
startTime.setValue(new Date());
endTime.setValue(new Date());
contentPanel.createPanel(IFavourableActivity.ACT_NAME, "优惠活动名称:",
nameTextBox);
contentPanel.createPanel(IFavourableActivity.START_TIME, "优惠开始时间:",
startTime);
contentPanel.createPanel(IFavourableActivity.END_TIME, "优惠结束时间:",
endTime);
HorizontalPanel levelPanel = new HorizontalPanel();
final CheckBox noneCb = new CheckBox("非会员");
final CheckBox regCb = new CheckBox("注册用户");
final CheckBox priceCb = new CheckBox("代销价格");
levelPanel.add(noneCb);
levelPanel.add(regCb);
levelPanel.add(priceCb);
contentPanel.createPanel(IFavourableActivity.ACT_RANGE, "享受优惠的会员等级:",
levelPanel);
String editUserRank = getCurState().getFavourableActivity().getString(IFavourableActivity.ACT_RANGE) + ",";
List<String> editUserRankList = new ArrayList<String>();
while(editUserRank.contains(",")) {
String tmpStr = editUserRank.substring(0, editUserRank.indexOf(","));
editUserRankList.add(tmpStr);
editUserRank = editUserRank.substring(tmpStr.length() + 1, editUserRank.length());
}
if (editUserRankList.contains("非会员")) {
noneCb.setValue(true);
} else {
noneCb.setValue(false);
}
if (editUserRankList.contains("注册用户")) {
regCb.setValue(true);
} else {
regCb.setValue(false);
}
if (editUserRankList.contains("代销价格")) {
priceCb.setValue(true);
} else {
priceCb.setValue(false);
}
final ListBox listBoxRange = new ListBox();
String[] ranges = { "全部商品", "以下分类", "以下品牌", "以下商品" };
for (String str : ranges) {
listBoxRange.addItem(str);
}
contentPanel.createPanel("", "优惠范围:", listBoxRange);
final FlexTable rangeContentTable = new FlexTable();
FlexCellFormatter cellFormatterContent = rangeContentTable
.getFlexCellFormatter();
rangeContentTable.setWidth("32em");
rangeContentTable.setCellSpacing(5);
rangeContentTable.setCellPadding(3);
cellFormatterContent.setVerticalAlignment(0, 1,
HasVerticalAlignment.ALIGN_TOP);
contentPanel.createPanel("", "", rangeContentTable);
final FlexTable rangeTable = new FlexTable();
FlexCellFormatter cellFormatter = rangeTable.getFlexCellFormatter();
rangeTable.setWidth("32em");
rangeTable.setCellSpacing(5);
rangeTable.setCellPadding(3);
cellFormatter
.setVerticalAlignment(0, 1, HasVerticalAlignment.ALIGN_TOP);
contentPanel.createPanel("", "", rangeTable);
final Label ragLabel = new Label("搜索并加入优惠范围");
final TextBox ragTextBox = new TextBox();
final Button ragButton = new Button("搜索");
final ListBox ragListBox = new ListBox();
final Button ragAdd = new Button("添加");
listBoxRange.addChangeHandler(new ChangeHandler() {
public void onChange(ChangeEvent arg0) {
rangeContentList.clear();
rangeTable.clear();
rangeContentTable.clear();
String selectedRange = listBoxRange.getItemText(listBoxRange
.getSelectedIndex());
if (!selectedRange.equals("全部商品")) {
Widget[] widgets = { ragLabel, ragTextBox, ragButton,
ragListBox, ragAdd };
addRow(rangeTable, widgets);
}
}
});
ragButton.addSelectionListener(new SelectionListener<ButtonEvent>() {
public void componentSelected(ButtonEvent ce) {
ragListBox.clear();
String selectedRange = listBoxRange.getItemText(listBoxRange
.getSelectedIndex());
if (selectedRange.equals("以下分类")) {
new ListService().listBeans(ModelNames.CATEGORY,
new ListService.Listener() {
public void onSuccess(List<BeanObject> beans) {
for (BeanObject bean : beans) {
ragListBox.addItem(bean
.getString(ICategory.NAME));
}
}
});
} else if (selectedRange.equals("以下品牌")) {
new ListService().listBeans(ModelNames.BRAND,
new ListService.Listener() {
public void onSuccess(List<BeanObject> beans) {
for (BeanObject bean : beans) {
ragListBox.addItem(bean
.getString(IBrand.NAME));
}
}
});
} else if (selectedRange.equals("以下商品")) {
new ListService().listBeans(ModelNames.GOODS,
new ListService.Listener() {
public void onSuccess(List<BeanObject> beans) {
for (BeanObject bean : beans) {
ragListBox.addItem(bean
.getString(IGoods.NAME));
}
}
});
}
}
});
ragAdd.addSelectionListener(new SelectionListener<ButtonEvent>() {
public void componentSelected(ButtonEvent ce) {
String selectedContent = ragListBox.getItemText(ragListBox
.getSelectedIndex());
CheckBox entity = new CheckBox(selectedContent);
entity.setValue(true);
for (CheckBox c : rangeContentList) {
if (c.getText().equals(selectedContent)) {
MessageBox.alert("该项已经存在", "该项已经存在", null);
return;
}
}
rangeContentList.add(entity);
Widget[] widgets = { entity };
addRow(rangeContentTable, widgets);
}
});
final TextBox minBox = new TextBox();
minBox.setText(getCurState().getFavourableActivity().getString(IFavourableActivity.MIN_AMOUNT));
contentPanel.createPanel(IFavourableActivity.MIN_AMOUNT, "金额下限:",
minBox);
HorizontalPanel maxPanel = new HorizontalPanel();
final TextBox maxBox = new TextBox();
maxBox.setText(getCurState().getFavourableActivity().getString(IFavourableActivity.MAX_AMOUNT));
Label maxbel = new Label("0表示没有上限");
maxPanel.add(maxBox);
maxPanel.add(maxbel);
contentPanel.createPanel("", "金额上限:", maxPanel);
HorizontalPanel methodPanel = new HorizontalPanel();
final ListBox listBoxMethod = new ListBox();
String[] methods = { "享受赠品(特惠品)", "享受现金减免", "享受现金折扣" };
for (String str : methods) {
listBoxMethod.addItem(str);
}
methodPanel.add(listBoxMethod);
TextBox methodBox = new TextBox();
methodBox.setText("0");
methodPanel.add(methodBox);
contentPanel.createPanel("", "优惠方式:", methodPanel);
final FlexTable methodContentTable = new FlexTable();
FlexCellFormatter cellFormatterRangeContent = methodContentTable
.getFlexCellFormatter();
methodContentTable.setWidth("32em");
methodContentTable.setCellSpacing(5);
methodContentTable.setCellPadding(3);
cellFormatterRangeContent.setVerticalAlignment(0, 1,
HasVerticalAlignment.ALIGN_TOP);
contentPanel.createPanel("", "", methodContentTable);
final FlexTable methodTable = new FlexTable();
FlexCellFormatter cellFormatterRange = methodTable
.getFlexCellFormatter();
methodTable.setWidth("32em");
methodTable.setCellSpacing(5);
methodTable.setCellPadding(3);
cellFormatterRange.setVerticalAlignment(0, 1,
HasVerticalAlignment.ALIGN_TOP);
contentPanel.createPanel("", "", methodTable);
String selectedMethod = listBoxMethod.getItemText(listBoxMethod
.getSelectedIndex());
Label speLabel = new Label("搜索并加入优惠范围");
TextBox speTextBox = new TextBox();
Button speButton = new Button("搜索");
final ListBox speListBox = new ListBox();
Button speAdd = new Button("添加");
final Widget[] widgets = { speLabel, speTextBox, speButton, speListBox,
speAdd };
if (selectedMethod.equals("享受赠品(特惠品)")) {
addRow(methodTable, widgets);
}
listBoxMethod.addChangeHandler(new ChangeHandler() {
public void onChange(ChangeEvent arg0) {
methodContentMap.clear();
methodTable.clear();
methodContentTable.clear();
String selectedMethod = listBoxMethod.getItemText(listBoxMethod
.getSelectedIndex());
if (selectedMethod.equals("享受赠品(特惠品)")) {
addRow(methodTable, widgets);
}
}
});
speButton.addSelectionListener(new SelectionListener<ButtonEvent>() {
public void componentSelected(ButtonEvent ce) {
speListBox.clear();
new ListService().listBeans(ModelNames.GOODS,
new ListService.Listener() {
public void onSuccess(List<BeanObject> beans) {
for (BeanObject bean : beans) {
speListBox.addItem(bean
.getString(IGoods.NAME));
}
}
});
}
});
speAdd.addSelectionListener(new SelectionListener<ButtonEvent>() {
public void componentSelected(ButtonEvent ce) {
String selectedContent = speListBox.getItemText(speListBox
.getSelectedIndex());
CheckBox key = new CheckBox(selectedContent);
key.setValue(true);
TextBox value = new TextBox();
value.setText("0");
for (CheckBox checkBox : methodContentMap.keySet()) {
if (checkBox.getText().equals(selectedContent)) {
MessageBox.alert("该项已经存在", "该项已经存在", null);
return;
}
}
if (methodContentMap.size() == 0) {
Widget[] widegs = { new Label("赠品(特惠品)"), new Label("价格") };
addRow(methodContentTable, widegs);
}
Widget[] adds = { key, value };
methodContentMap.put(key, value);
addRow(methodContentTable, adds);
}
});
btnNew.addSelectionListener(new SelectionListener<ButtonEvent>() {
public void componentSelected(ButtonEvent ce) {
Map<String, Object> map = new HashMap<String, Object>();
map.put(IFavourableActivity.ACT_NAME, nameTextBox.getText());
map.put(IFavourableActivity.START_TIME, startTime.getValue().getTime());
map.put(IFavourableActivity.END_TIME, endTime.getValue().getTime());
map.put(IFavourableActivity.MAX_AMOUNT, maxBox.getText());
map.put(IFavourableActivity.MIN_AMOUNT, minBox.getText());
map.put(IFavourableActivity.SORT_ORDER, 0);
String userRank = "";
if (noneCb.getValue() && regCb.getValue() && priceCb.getValue()) {
userRank = "非会员" + "," + "注册用户" + "," + "代销价格";
} else if (!noneCb.getValue() && regCb.getValue()
&& priceCb.getValue()) {
userRank = "注册用户" + "," + "代销价格";
} else if (noneCb.getValue() && !regCb.getValue()
&& priceCb.getValue()) {
userRank = "非会员" + "," + "代销价格";
} else if (noneCb.getValue() && regCb.getValue()
&& !priceCb.getValue()) {
userRank = "非会员" + "," + "注册用户";
} else if (!noneCb.getValue() && !regCb.getValue()
&& priceCb.getValue()) {
userRank = "代销价格";
} else if (!noneCb.getValue() && regCb.getValue()
&& !priceCb.getValue()) {
userRank = "注册用户";
} else if (noneCb.getValue() && !regCb.getValue()
&& !priceCb.getValue()) {
userRank = "非会员";
}
map.put(IFavourableActivity.USER_RANK, userRank);
String actRangeExt = "";
for (CheckBox c : rangeContentList) {
if (c.getValue()) {
actRangeExt += c.getText() + "&=%";
}
}
map.put(IFavourableActivity.ACT_RANGE_EXT, actRangeExt);
String actTypeExt = "";
for (CheckBox c : methodContentMap.keySet()) {
if (c.getValue()) {
actTypeExt += c.getText() + ","
+ methodContentMap.get(c).getText() + "&=%";
}
}
map.put(IFavourableActivity.ACT_TYPE_EXT, actTypeExt);
BeanObject bean = new BeanObject(ModelNames.FAVOURABLEACTIVITY,
map);
new UpdateService().updateBean(getCurState().getFavourableActivity().getString(IFavourableActivity.ID), bean, null);
FavourableActivityListPanel.State state = new FavourableActivityListPanel.State();
state.execute();
}
});
btnCancel.addSelectionListener(new SelectionListener<ButtonEvent>() {
public void componentSelected(ButtonEvent ce) {
nameTextBox.setText("");
noneCb.setValue(false);
regCb.setValue(false);
priceCb.setValue(false);
rangeContentTable.clear();
methodContentTable.clear();
methodContentMap.clear();
rangeContentList.clear();
minBox.setText("0.0");
maxBox.setText("0.0");
}
});
HorizontalPanel panel = new HorizontalPanel();
panel.setSpacing(10);
btnNew.setText("确定");
btnCancel.setText("重置");
panel.add(btnNew);
panel.add(btnCancel);
contentPanel.createPanel(null, null, panel);
}
private List<String> getStrToStrList(String str) {
List<String> lists = new ArrayList<String>();
while(str.contains("&=%")) {
String tmp = str.substring(0, str.indexOf("&=%"));
lists.add(tmp);
str = str.substring(tmp.length() + 3, str.length());
}
return lists;
}
private void addRow(FlexTable flexTable, Widget[] wigdets) {
int numRows = flexTable.getRowCount();
for (int i = 0; i < wigdets.length; i++) {
flexTable.setWidget(numRows, i, wigdets[i]);
}
flexTable.getFlexCellFormatter().setRowSpan(0, 1, numRows + 1);
}
public void refresh() {
}
}