Commit 21087f3c by 宁斌

新增餐台服务费

parent 2229211e
......@@ -85,8 +85,8 @@ public class TableBean {
private String createBy;
private String qrCodeImg;
private int posTableId;
private int serviceCharge;
private int memberId;
private float serviceCharge;
private long memberId;
/**
* 未開檯 0
* 已開檯 1
......@@ -228,19 +228,19 @@ public class TableBean {
this.posTableId = posTableId;
}
public int getServiceCharge() {
public float getServiceCharge() {
return serviceCharge;
}
public void setServiceCharge(int serviceCharge) {
public void setServiceCharge(float serviceCharge) {
this.serviceCharge = serviceCharge;
}
public int getMemberId() {
public long getMemberId() {
return memberId;
}
public void setMemberId(int memberId) {
public void setMemberId(long memberId) {
this.memberId = memberId;
}
......
......@@ -9,7 +9,7 @@ public class HttpsConstans {
public static final String ROOT_SERVER_ADDRESS_FORMAL_SZ = "http://gingersoft.tpddns.cn:58201/ricepon-cloud-gsa/api/";//深圳服务器
public static final String ROOT_SERVER_ADDRESS_FORMAL_HK = "http://a.ricepon.com:58201/ricepon-cloud-gsa/api/";//香港服务器
public static String ROOT_SERVER_YOU_CHANG_HK = "http://192.168.1.142:9012/api/"; //友常本地
public static String ROOT_SERVER_SHI_WEI_HK = "http://192.168.1.154:9012/api/"; //世維本地
public static String ROOT_SERVER_SHI_WEI_HK = "http://192.168.1.156:9012/api/"; //世維本地
public static String ROOT_SETTLEMENT_REPORT_SERVER_ADDRESS_FORMAL = "http://a.ricepon.com:58201/";//清機接口地址
......
......@@ -124,6 +124,17 @@ public class ComboItem {
/*** 是否备注细项*/
@Transient
private boolean isModifier;
/**
* 0=顯示, 1=隱藏, 2=暫停,3=只显示,不操作
*/
@Transient
private long invisible;
@Transient
/**最大選中數*/
private String maxNumber = "";
/**動態的最大選中數*/
@Transient
private String currentMaxNumber= "";
/*** 背景顏色*/
@Transient
private int bgColor = Color.parseColor("#067878");
......@@ -174,6 +185,30 @@ public class ComboItem {
return fid;
}
public long getInvisible() {
return invisible;
}
public void setInvisible(long invisible) {
this.invisible = invisible;
}
public String getMaxNumber() {
return maxNumber;
}
public void setMaxNumber(String maxNumber) {
this.maxNumber = maxNumber;
}
public String getCurrentMaxNumber() {
return currentMaxNumber;
}
public void setCurrentMaxNumber(String currentMaxNumber) {
this.currentMaxNumber = currentMaxNumber;
}
public Long getQty() {
return qty;
}
......
......@@ -162,7 +162,7 @@ public class ComboItemDaoUtils {
ArrayList<ComboItem> comboItems = new ArrayList<>();
// String sql = "SELECT c.*,f.FOOD_NAME,f.FOOD_NAME1,f.FOOD_NAME2,f.PRICE,f.AUTO_MOD FROM COMBO_ITEM c join FOOD f on c.FID=f.FID and f.INVISIBLE=0 join FOOD_COMBO r on r.COM_ID=c.COM_ID ";
String sql = "SELECT c.*,f.FOOD_NAME,f.FOOD_NAME1,f.FOOD_NAME2,f.PRICE,f.AUTO_MOD,DEF_MODIFIER,SELECT_QTY FROM COMBO_ITEM c join FOOD f on c.FID=f.FID and f.INVISIBLE=0 join FOOD_COMBO r on r.COM_ID=c.COM_ID ";
String sql = "SELECT c.*,f.FOOD_NAME,f.FOOD_NAME1,f.FOOD_NAME2,f.PRICE,f.AUTO_MOD,DEF_MODIFIER,SELECT_QTY,INVISIBLE FROM COMBO_ITEM c join FOOD f on c.FID=f.FID and f.INVISIBLE!=1 join FOOD_COMBO r on r.COM_ID=c.COM_ID ";
if (fid > 0) {
sql = sql + " where r.FID='" + fid + "'";
......@@ -181,6 +181,7 @@ public class ComboItemDaoUtils {
order.setVisible(c.getLong(c.getColumnIndex("VISIBLE")));
order.setAutoMode(c.getInt(c.getColumnIndex("AUTO_MOD")));
order.setSelectQty(c.getInt(c.getColumnIndex("SELECT_QTY")));
order.setInvisible(c.getLong(c.getColumnIndex("INVISIBLE")));
String defmodifier = c.getString(c.getColumnIndex("DEF_MODIFIER"));
if (!TextUtils.isEmpty(defmodifier) && !", ".equals(defmodifier)) {
order.setDefmodifier(defmodifier);
......
......@@ -200,10 +200,12 @@ public class ModifierDaoUtils {
ArrayList<Modifier> fms = new ArrayList<>();
// QueryBuilder<Modifier> queryBuilder = mManager.getDaoSession().queryBuilder(Modifier.class);
String parentSql = "SELECT * FROM MODIFIER WHERE MOD_MSG=1 and VISIBLE=0 and IS_PARENT=1";
// String parentSql = "SELECT * FROM MODIFIER WHERE MOD_MSG=1 and VISIBLE=0 and IS_PARENT=1";
String parentSql = "SELECT * FROM MODIFIER WHERE MOD_MSG=1 and IS_PARENT=1";
List<Modifier> parentModifiers = query_modifier_Child_new(parentSql, 0);
String childSql = "SELECT * FROM MODIFIER WHERE MOD_MSG=1 and VISIBLE=0 and IS_PARENT=0";
// String childSql = "SELECT * FROM MODIFIER WHERE MOD_MSG=1 and VISIBLE=0 and IS_PARENT=0";
String childSql = "SELECT * FROM MODIFIER WHERE MOD_MSG=1 and IS_PARENT=0";
List<Modifier> childModifiers = query_modifier_Child_new(childSql, 0);
fms.addAll(parentModifiers);
......@@ -233,10 +235,12 @@ public class ModifierDaoUtils {
// ModifierDao.Properties.Visible.eq(visible),
// ModifierDao.Properties.IsParent.eq(0))).orderAsc(ModifierDao.Properties.SeqNo).list();
String parentSql = "SELECT * FROM MODIFIER WHERE MOD_TASTE=1 and VISIBLE=0 and IS_PARENT=1";
// String parentSql = "SELECT * FROM MODIFIER WHERE MOD_TASTE=1 and VISIBLE=0 and IS_PARENT=1";
String parentSql = "SELECT * FROM MODIFIER WHERE MOD_TASTE=1 and IS_PARENT=1";
List<Modifier> parentModifiers = query_modifier_Child_new(parentSql, 0);
String childSql = "SELECT * FROM MODIFIER WHERE MOD_TASTE=1 and VISIBLE=0 and IS_PARENT=0";
// String childSql = "SELECT * FROM MODIFIER WHERE MOD_TASTE=1 and VISIBLE=0 and IS_PARENT=0";
String childSql = "SELECT * FROM MODIFIER WHERE MOD_TASTE=1 and IS_PARENT=0";
List<Modifier> childModifiers = query_modifier_Child_new(childSql, 0);
fms.addAll(parentModifiers);
......@@ -266,10 +270,12 @@ public class ModifierDaoUtils {
// ModifierDao.Properties.Visible.eq(visible),
// ModifierDao.Properties.IsParent.eq(0))).orderAsc(ModifierDao.Properties.SeqNo).list();
String parentSql = "SELECT * FROM MODIFIER WHERE MOD_COMM=1 and VISIBLE=0 and IS_PARENT=1";
// String parentSql = "SELECT * FROM MODIFIER WHERE MOD_COMM=1 and VISIBLE=0 and IS_PARENT=1";
String parentSql = "SELECT * FROM MODIFIER WHERE MOD_COMM=1 and IS_PARENT=1";
List<Modifier> parentModifiers = query_modifier_Child_new(parentSql, 0);
String childSql = "SELECT * FROM MODIFIER WHERE MOD_COMM=1 and VISIBLE=0 and IS_PARENT=0";
// String childSql = "SELECT * FROM MODIFIER WHERE MOD_COMM=1 and VISIBLE=0 and IS_PARENT=0";
String childSql = "SELECT * FROM MODIFIER WHERE MOD_COMM=1 and IS_PARENT=0";
List<Modifier> childModifiers = query_modifier_Child_new(childSql, 0);
fms.addAll(parentModifiers);
......@@ -318,8 +324,8 @@ public class ModifierDaoUtils {
// String sql = " SELECT MODIFIER.mid,MODIFIER_NAME,MODIFIER_NAME1,MODIFIER_NAME2,TOP_ID,PRICE,MOD_COMM,MOD_TASTE,MOD_MSG,VISIBLE,MULTIPLE,IS_PARENT" +
// " FROM MODIFIER join FOOD_MODIFIER on MODIFIER.MID=FOOD_MODIFIER.MID where MODIFIER.VISIBLE=0 and FOOD_MODIFIER.FID='" + fid + "' order by FOOD_MODIFIER.seq,MODIFIER.SEQ_NO";
String sql = " SELECT MODIFIER.MID,MODIFIER_NAME,MODIFIER_NAME1,MODIFIER_NAME2,TOP_ID,PRICE,MOD_COMM,MOD_TASTE,MOD_MSG,VISIBLE,MULTIPLE,IS_PARENT,MAX_QTY,MIN_QTY" +
" FROM MODIFIER join FOOD_MODIFIER fm on MODIFIER.MID=FOOD_MODIFIER.MID where MODIFIER.INVISIBLE=0 and FOOD_MODIFIER.FID='" + fid + "' order by FOOD_MODIFIER.SEQ_NO,MODIFIER.SEQ_NO";
String sql = " SELECT MODIFIER.MID,MODIFIER_NAME,MODIFIER_NAME1,MODIFIER_NAME2,TOP_ID,PRICE,MOD_COMM,MOD_TASTE,MOD_MSG,INVISIBLE,VISIBLE,MULTIPLE,IS_PARENT,MAX_QTY,MIN_QTY" +
" FROM MODIFIER join FOOD_MODIFIER fm on MODIFIER.MID=FOOD_MODIFIER.MID where MODIFIER.INVISIBLE!=1 and FOOD_MODIFIER.FID='" + fid + "' order by FOOD_MODIFIER.SEQ_NO,MODIFIER.SEQ_NO";
List<Modifier> mfs_child = new ArrayList<>();
......@@ -331,15 +337,15 @@ public class ModifierDaoUtils {
switch (mode) {
case modifierMode_All:
sqlstr = " SELECT m.MID,MODIFIER_NAME,MODIFIER_NAME1,MODIFIER_NAME2,TOP_ID,PRICE,MOD_COMM,MOD_TASTE,MOD_MSG,VISIBLE,MULTIPLE,IS_PARENT,DEFMODIFIER,MAX_QTY,MIN_QTY" +
" FROM MODIFIER m join FOOD_MODIFIER fm on m.TOP_ID=fm.MID where m.INVISIBLE=0 and m.IS_PARENT=1 and fm.FID='" + fid + "' order by fm.SEQ_NO,m.SEQ_NO";
sqlstr = " SELECT m.MID,MODIFIER_NAME,MODIFIER_NAME1,MODIFIER_NAME2,TOP_ID,PRICE,MOD_COMM,MOD_TASTE,MOD_MSG,INVISIBLE,VISIBLE,MULTIPLE,IS_PARENT,DEFMODIFIER,MAX_QTY,MIN_QTY" +
" FROM MODIFIER m join FOOD_MODIFIER fm on m.TOP_ID=fm.MID where m.INVISIBLE!=1 and m.IS_PARENT=1 and fm.FID='" + fid + "' order by fm.SEQ_NO,m.SEQ_NO";
mfs_child1 = query_modifier_Child_new(sqlstr, fid);
List<Modifier> mfs_child2 = new ArrayList<>();
sqlstr = " SELECT m.MID,MODIFIER_NAME,MODIFIER_NAME1,MODIFIER_NAME2,TOP_ID,PRICE,MOD_COMM,MOD_TASTE,MOD_MSG,VISIBLE,MULTIPLE,IS_PARENT,DEFMODIFIER,MAX_QTY,MIN_QTY" +
" FROM MODIFIER m join FOOD_MODIFIER fm on m.TOP_ID=fm.MID where m.INVISIBLE=0 and m.IS_PARENT=0 and fm.FID='" + fid + "' order by fm.SEQ_NO,m.SEQ_NO";
sqlstr = " SELECT m.MID,MODIFIER_NAME,MODIFIER_NAME1,MODIFIER_NAME2,TOP_ID,PRICE,MOD_COMM,MOD_TASTE,MOD_MSG,INVISIBLE,VISIBLE,MULTIPLE,IS_PARENT,DEFMODIFIER,MAX_QTY,MIN_QTY" +
" FROM MODIFIER m join FOOD_MODIFIER fm on m.TOP_ID=fm.MID where m.INVISIBLE!=1 and m.IS_PARENT=0 and fm.FID='" + fid + "' order by fm.SEQ_NO,m.SEQ_NO";
mfs_child2 = query_modifier_Child_new(sqlstr, fid);
mfs_child1.addAll(mfs_child2);
......@@ -391,6 +397,7 @@ public class ModifierDaoUtils {
order.setModMsg(c.getLong(c.getColumnIndex("MOD_MSG")));
order.setModTaste(c.getLong(c.getColumnIndex("MOD_TASTE")));
order.setMultiple(c.getDouble(c.getColumnIndex("MULTIPLE")));
order.setInvisible(c.getLong(c.getColumnIndex("INVISIBLE")));
if (fid != 0) {
//非公共細項
order.setMaxNumber(String.valueOf(c.getInt(c.getColumnIndex("MAX_QTY"))));
......
......@@ -13,6 +13,7 @@ import com.gingersoft.gsa.cloud.base.common.bean.mealManage.MyOrderManage;
import com.gingersoft.gsa.cloud.base.common.bean.mealManage.OpenTableManage;
import com.gingersoft.gsa.cloud.base.utils.log.LogUtil;
import com.gingersoft.gsa.cloud.base.utils.toast.ToastUtils;
import com.gingersoft.gsa.cloud.ui.widget.dialog.CommonTipDialog;
import com.google.gson.JsonIOException;
import com.google.gson.JsonParseException;
import com.jess.arms.utils.ArmsUtils;
......@@ -73,7 +74,7 @@ public class MyResponseErrorListener implements ResponseErrorListener {
Activity activity = GsaCloudApplication.getAppContext().getCurrentActivity();
if (!showloggedDialog && activity != null) {
showloggedDialog = true;
showloggedDialog(activity, ArmsUtils.getString(context, R.string.response_error_request_logged));
showloggedDialog(activity,ArmsUtils.getString(context, R.string.response_error_request_logged));
}
} else {
msg = httpException.message();
......@@ -81,12 +82,13 @@ public class MyResponseErrorListener implements ResponseErrorListener {
return msg;
}
private void showloggedDialog(Activity context, String msg) {
private void showloggedDialog(Activity context,String msg) {
QMUIDialog.MessageDialogBuilder dialogBuilder = new QMUIDialog.MessageDialogBuilder(context);
dialogBuilder.setTitle("溫馨提示");
dialogBuilder.setMessage(msg);
dialogBuilder.setTitleIcon(R.drawable.qmui_icon_dialog_warn);
dialogBuilder.addAction(0, "確認", QMUIDialogAction.ACTION_PROP_NEGATIVE, (dialog, index) -> {
//清空用戶信息
GsaCloudApplication.clearMemberInfo();
//清空賬單數據
MyOrderManage.getInstance().clear();
//清空開檯數據
......
......@@ -136,4 +136,14 @@ public class SectionTextItem3 {
return sectionTextItem3List;
}
public static SectionTextItem3 roundingTransSectionTextItem3(double amuout) {
SectionTextItem3 sectionTextItem3 = new SectionTextItem3();
sectionTextItem3.setLeftText("賬單小數");
sectionTextItem3.setCenterText(String.valueOf(0));
sectionTextItem3.setRightText(String.valueOf(amuout));
sectionTextItem3.setLeftTextStyle(R.style.order_paymethod_text_style);
sectionTextItem3.setRightTextStyle(R.style.order_paymethod_text_style);
return sectionTextItem3;
}
}
......@@ -49,9 +49,9 @@ public class QDSectionHeaderView extends LinearLayout {
setOrientation(LinearLayout.HORIZONTAL);
setGravity(Gravity.CENTER_VERTICAL);
setBackgroundColor(Color.WHITE);
int paddingHor = QMUIDisplayHelper.dp2px(context, 24);
int paddingHor = QMUIDisplayHelper.dp2px(context, 20);
mTitleTv = new TextView(getContext());
mTitleTv.setTextSize(20);
mTitleTv.setTextSize(16);
mTitleTv.setTextColor(Color.BLACK);
mTitleTv.setPadding(paddingHor, 0, paddingHor, 0);
addView(mTitleTv, new LinearLayout.LayoutParams(
......
......@@ -35,9 +35,9 @@ public class CommonTipDialog {
dialogBuilder.setTitleIcon(R.drawable.qmui_icon_dialog_doubt);
dialogBuilder.setMessage(msg);
if(!TextUtils.isEmpty(methodName)) {
dialogBuilder.addAction("取消", (dialog, index) -> dialog.dismiss());
dialogBuilder.addAction(R.drawable.shape_3c_cancel_btn_bg,"取消", (dialog, index) -> dialog.dismiss());
}
dialogBuilder.addAction(0, "確認", QMUIDialogAction.ACTION_PROP_NEGATIVE, (dialog, index) -> {
dialogBuilder.addAction(R.drawable.shape_red_five_radius_bg, "確認", QMUIDialogAction.ACTION_PROP_NEGATIVE, (dialog, index) -> {
dialog.dismiss();
if(TextUtils.isEmpty(methodName)){
return;
......
......@@ -27,6 +27,9 @@ dependencies {
if (project.name != 'qm-skin-maker' && project.name != 'qm-arch' && project.name != 'qm-qmui') {
api project(':qm-skin-maker')
}
// if (project.name == 'main-module') {
// api project(':updateApk')
// }
// if (project.name == 'arms') {
// api project(':fragmentation_core')
// }
......
......@@ -49,7 +49,7 @@ public interface DownloadContract {
List<Food> queryDB_FoodList(Context context, int parentId);
Observable<FunctionRespone> downFunctionList();
Observable<FunctionRespone> downFunctionList(long userId);
Observable<FoodBean> downFoodList(int restaurantId);
......
......@@ -72,9 +72,9 @@ public class DownloadModel extends BaseModel implements DownloadContract.Model {
}
@Override
public Observable<FunctionRespone> downFunctionList() {
public Observable<FunctionRespone> downFunctionList(long userId) {
return mRepositoryManager.obtainRetrofitService(DownloadService.class)
.downFunctionList();
.downFunctionList(userId);
}
@Override
......
......@@ -20,7 +20,7 @@ import retrofit2.http.Query;
public interface DownloadService {
@GET("user/resource/list" + RetrofitUrlManager.IDENTIFICATION_PATH_SIZE + 2)
Observable<FunctionRespone> downFunctionList();
Observable<FunctionRespone> downFunctionList(@Query("userId") long userId);
@GET(Api.food_list + RetrofitUrlManager.IDENTIFICATION_PATH_SIZE + 2)
Observable<FoodBean> downFoodList(@Query("restaurantId") int restaurantId);
......
......@@ -271,7 +271,9 @@ public class DownloadPresenter extends BasePresenter<DownloadContract.Model, Dow
List<Function> functions = getFunctions();
mModel.downFunctionList()
long userId = GsaCloudApplication.getMemberId(mApplication);
mModel.downFunctionList(userId)
.subscribeOn(Schedulers.io())
.subscribeOn(AndroidSchedulers.mainThread())
.observeOn(AndroidSchedulers.mainThread())
......
<resources>
<string name="user_login_name" translatable="false">GSA-Cloud</string>
<string name="user_login_name" translatable="false">Ricepon POS</string>
<string name="user_login_welcome_login" translatable="false">歡迎登陸商戶端</string>
</resources>
......@@ -24,6 +24,7 @@ public class ComponentMain implements IComponent {
/**首頁- 管理*/
public static final FModule [] manager = {
new FModule("main/manager", 0,0) ,
new FModule("main/manager/takeaway", R.drawable.ic_meals_menu_management, R.drawable.ic_meals_menu_management_close) ,
new FModule("main/manager/bill", R.drawable.ic_meals_menu_management, R.drawable.ic_meals_menu_management_close) ,
new FModule("main/manager/table", R.drawable.ic_dining_table_management,R.drawable.ic_dining_table_management_close) ,
new FModule("main/manager/printer",R.drawable.ic_print_management,R.drawable.ic_print_management_close),
......
......@@ -235,13 +235,13 @@ public class NewMainActivity extends BaseFragmentActivity<NewMainPresenter> impl
// functions.addAll(FunctionManager.getDefault().getFunctionByResModule(this, ComponentMain.Function.class, ComponentMain.Function.manager,"manager"));
functions.add(new Function((long) 151, 0, 5, "管理", 0, 0));
// functions.add(new Function((long) 142, 151, 5, "賬單管理", R.drawable.ic_meals_menu_management, 0));
functions.add(new Function((long) 142, 151, 5, "賬單管理", R.drawable.ic_meals_menu_management, 0));
functions.add(new Function((long) 142, 151, 5, "外賣接單", R.drawable.ic_takeaway_orders, 0));
// functions.add(new Function((long) 143, 151, 5, "餐臺管理", R.drawable.ic_dining_table_management, 0));
functions.add(new Function((long) 143, 151, 5, "餐臺管理", R.drawable.ic_dining_table_management, 0));
functions.add(new Function((long) 144, 151, 5, "打印管理", R.drawable.ic_print_management, 0));
// functions.add(new Function((long) 145, 151, 5, "支付管理", R.drawable.ic_pay_management_close, 1));
// functions.add(new Function((long) 146, 151, 5, "折扣管理", R.drawable.ic_discount_management_close, 1));
// functions.add(new Function((long) 147, 151, 5, "沽清管理", R.drawable.ic_sell_off_manger, 0));
functions.add(new Function((long) 147, 151, 5, "沽清管理", R.drawable.ic_sell_off_manger, 0));
// functions.addAll(FunctionManager.getDefault().getFunctionByResModule(this, ComponentMain.Function.class, ComponentMain.Function.employee,"employee"));
functions.add(new Function((long) 152, 0, 5, "員工", 0, 0));
......
......@@ -71,7 +71,7 @@ public class SettlementActivity extends BaseActivity<SettlementPresenter> implem
@Override
public void initData(@Nullable Bundle savedInstanceState) {
tv_settlement_time.setVisibility(View.GONE);
mPresenter.getSettlementReport();
}
......
......@@ -116,6 +116,8 @@ public class SettlementReportActivity extends BaseActivity<SettlementReportPrese
@Override
public void initData(@Nullable Bundle savedInstanceState) {
tv_last_time.setVisibility(View.GONE);
}
@Override
......@@ -145,7 +147,7 @@ public class SettlementReportActivity extends BaseActivity<SettlementReportPrese
String settlementReportJson = (String) SPUtils.get(mContext, PrintConstans.SETTLEMENT_REPORT, "");
if (!TextUtils.isEmpty(settlementReportJson)) {
SettlementReport.DataBean datasBean = JsonUtils.parseObject(settlementReportJson, SettlementReport.DataBean.class);
if(datasBean != null){
if (datasBean != null) {
returnSettlementData(datasBean);
printRepore();
}
......@@ -250,7 +252,13 @@ public class SettlementReportActivity extends BaseActivity<SettlementReportPrese
String toBusinessDateText = LanguageUtils.get_language_system(this, "", "到營業日期:");
String headcountOrAverageConsumptionText = LanguageUtils.get_language_system(this, "", "統計:");
String totalText = LanguageUtils.get_language_system(this, "", "總計");
String canteenText = LanguageUtils.get_language_system(this, "", "堂食");
String takewayText = LanguageUtils.get_language_system(this, "", "外賣");
String selfFetchingText = LanguageUtils.get_language_system(this, "", "自取");
String projectTotalSalesText = LanguageUtils.get_language_system(this, "total.project.sales", "項目銷售總額");
String discountText = LanguageUtils.get_language_system(this, "", "折扣");
String serviceFeeText = LanguageUtils.get_language_system(this, "", "服務費");
String orderCountallText = LanguageUtils.get_language_system(this, "order.countall_litter", "賬單小數");
String netTurnoverText = LanguageUtils.get_language_system(this, "net.turnover", "營業金額淨值");
String cashAuditText = LanguageUtils.get_language_system(this, "cash.audit", "現金核數");
......@@ -262,8 +270,8 @@ public class SettlementReportActivity extends BaseActivity<SettlementReportPrese
String billStatusText = LanguageUtils.get_language_system(this, "", "賬單現況");
// String outstandingBillText = LanguageUtils.get_language_system(this, "", "未完成賬單");
// String billsReceivedText = LanguageUtils.get_language_system(this, "", "已完成賬單");
String outstandingBillText = LanguageUtils.get_language_system(this, "", "未完成單");
String billsReceivedText = LanguageUtils.get_language_system(this, "", "已完成單");
String outstandingBillText = LanguageUtils.get_language_system(this, "", "未完成單");
String billsReceivedText = LanguageUtils.get_language_system(this, "", "已完成單");
String cumulativeTurnoverMonthText = LanguageUtils.get_language_system(this, "", "本月累計營業額");
......@@ -280,14 +288,17 @@ public class SettlementReportActivity extends BaseActivity<SettlementReportPrese
SettlementReport.DataBean.VoBean voBean = datasBean.getVo();
if (voBean != null) {
settlementReportItem5s.add(new SectionTextItem5(projectTotalSalesText, null, null, null, cashStr + df.format(voBean.getPrices())));
settlementReportItem5s.add(new SectionTextItem5(netTurnoverText, null, null, null, cashStr + df.format(voBean.getTotamount())));
settlementReportItem5s.add(new SectionTextItem5(projectTotalSalesText, null, null, null, cashStr + df.format(voBean.getTotamount())));
settlementReportItem5s.add(new SectionTextItem5(discountText, null, null, null, cashStr + df.format(voBean.getDisamount())));
settlementReportItem5s.add(new SectionTextItem5(serviceFeeText, null, null, null, cashStr + df.format(voBean.getScamount())));
settlementReportItem5s.add(new SectionTextItem5(netTurnoverText, null, null, null, cashStr + df.format(voBean.getPrices())));
// if (voBean.getPayNum() > 0) {
// String creditCardText = LanguageUtils.get_language_system(this, "credit.card", "信用卡");
// SectionTextItem5 printItem = new SectionTextItem5(creditCardText, String.valueOf(voBean.getPayNum()), null,null,"$" + df.format(voBean.getPayamount()));
// settlementReportItem5s.add(printItem);
// }
settlementReportItem5s.add(new SectionTextItem5(null, null, null, null, null));
settlementReportItem5s.add(new SectionTextItem5(null, null, " ", null, null));
settlementReportItem5s.add(new SectionTextItem5(cashAuditText, null, null, null, null));
settlementReportItem5s.add(new SectionTextItem5(netTurnoverText, null, null, null, cashStr + df.format(voBean.getPrices())));
List<SettlementReport.DataBean.CashBean> cashList = datasBean.getCash();
......@@ -312,6 +323,12 @@ public class SettlementReportActivity extends BaseActivity<SettlementReportPrese
settlementReportItem5s.add(new SectionTextItem5(headcountOrAverageConsumptionText, null, null, null, cashStr + df.format(cashBean.getPayAmount())));
}
List<SettlementReport.DataBean.AnalysisBean> analysisBeanList = datasBean.getAnalysis();
Map<String, SettlementReport.DataBean.AnalysisBean> analysisBeanMap = null;
if (analysisBeanList != null && analysisBeanList.size() > 0) {
analysisBeanMap = getAnalysisBeanMap(analysisBeanList);
}
if (voBean != null) {
/**分析統計*/
settlementReportItem5s.add(new SectionTextItem5("==============================================================", null, null, null, null));
......@@ -350,19 +367,75 @@ public class SettlementReportActivity extends BaseActivity<SettlementReportPrese
percentage = (int) (MoneyUtil.divide(voBean.getTotamount(), voBean.getPrices(), 2) * 100);
}
// settlementReportItem5s.add(new SectionTextItem5(totalText, String.valueOf(voBean.getNum()), "$" + df.format(voBean.getTotamount()), "$" + averagePrice2, percentage + "%"));
//new "外賣"
settlementReportItem5s.add(new SectionTextItem5("類別", null, null, null, totalText));
settlementReportItem5s.add(new SectionTextItem5("賬單", null, null, null, String.valueOf(voBean.getNum())));
settlementReportItem5s.add(new SectionTextItem5("金額", null, null, null, cashStr + df.format(voBean.getTotamount())));
settlementReportItem5s.add(new SectionTextItem5("平均", null, null, null, cashStr + averagePrice2));
settlementReportItem5s.add(new SectionTextItem5("金額%", null, null, null, percentage + "%"));
//堂食
String canteenNum = "";
String canteenTotamout = "";
String canteenAveragePrice = "";
String canteenPercentage = "";
if (analysisBeanMap != null && analysisBeanMap.containsKey(canteenText)) {
double amount = analysisBeanMap.get(canteenText).getAmount();
int num = analysisBeanMap.get(canteenText).getNum();
canteenNum = num + "";
canteenTotamout = cashStr + df.format(amount);
if (voBean.getNum() != 0) {
double number = amount / num;
canteenAveragePrice = cashStr + df.format(Double.isNaN(number) ? 0 : number);
}
if (amount > 0) {
canteenPercentage = (int) (MoneyUtil.divide(amount, amount, 2) * 100) + "";
}
} else {
takewayText = "";
}
//外賣
String takewayNum = "";
String takewayTotamout = "";
String takewayAveragePrice = "";
String takewayPercentage = "";
if (analysisBeanMap != null && analysisBeanMap.containsKey(takewayText)) {
double amount = analysisBeanMap.get(takewayText).getAmount();
int num = analysisBeanMap.get(takewayText).getNum();
takewayNum = num + "";
takewayTotamout = cashStr + df.format(amount);
if (voBean.getNum() != 0) {
double number = amount / num;
takewayAveragePrice = cashStr + df.format(Double.isNaN(number) ? 0 : number);
}
if (amount > 0) {
takewayPercentage = (int) (MoneyUtil.divide(amount, amount, 2) * 100) + "";
}
} else {
takewayText = "";
}
//自取
String selfFetchingNum = "";
String selfFetchingTotamout = "";
String selfFetchingAveragePrice = "";
String selfFetchingPercentage = "";
if (analysisBeanMap != null && analysisBeanMap.containsKey(selfFetchingText)) {
double amount = analysisBeanMap.get(selfFetchingText).getAmount();
int num = analysisBeanMap.get(selfFetchingText).getNum();
selfFetchingNum = num + "";
selfFetchingTotamout = cashStr + df.format(amount);
if (voBean.getNum() != 0) {
double number = amount / num;
selfFetchingAveragePrice = cashStr + df.format(Double.isNaN(number) ? 0 : number);
}
if (amount > 0) {
selfFetchingPercentage = (int) (MoneyUtil.divide(amount, amount, 2) * 100) + "";
}
} else {
selfFetchingText = "";
}
settlementReportItem5s.add(new SectionTextItem5("類別", canteenText, takewayText, selfFetchingText, null));
settlementReportItem5s.add(new SectionTextItem5("賬單", canteenNum, takewayNum, selfFetchingNum, null));
settlementReportItem5s.add(new SectionTextItem5("金額", canteenTotamout, takewayTotamout, selfFetchingTotamout, null));
settlementReportItem5s.add(new SectionTextItem5("平均", canteenAveragePrice, takewayAveragePrice, selfFetchingAveragePrice, null));
settlementReportItem5s.add(new SectionTextItem5("金額%", canteenPercentage, takewayPercentage, selfFetchingPercentage,null));
}
List<SettlementReport.DataBean.AnalysisBean> analysisBeanList = datasBean.getAnalysis();
if (analysisBeanList != null && analysisBeanList.size() > 0) {
Map<String, SettlementReport.DataBean.AnalysisBean> analysisBeanMap = getAnalysisBeanMap(analysisBeanList);
if (analysisBeanMap != null && analysisBeanMap.size() > 0) {
/**賬單現況*/
settlementReportItem5s.add(new SectionTextItem5(null, null, null, null, null));
......
......@@ -58,7 +58,7 @@
android:layout_marginTop="@dimen/dp_20"
android:layout_marginBottom="@dimen/dp_20"
android:layout_weight="1"
android:visibility="invisible" />
android:visibility="visible" />
<LinearLayout
android:id="@+id/layout_login_out"
......@@ -202,7 +202,7 @@
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/dp_15"
android:layout_marginTop="@dimen/dp_20"
android:visibility="gone"
android:visibility="visible"
android:textColor="#181818"
android:textSize="@dimen/dp_14" />
......@@ -210,7 +210,7 @@
android:id="@+id/rv_staff_management"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:visibility="gone"
android:visibility="visible"
android:layout_marginLeft="@dimen/main_recyclerview_marginLeft"
android:layout_marginTop="@dimen/dp_10"
android:layout_marginRight="@dimen/main_recyclerview_marginRight" />
......@@ -226,7 +226,7 @@
android:layout_marginRight="@dimen/dp_10"
app:hl_cornerRadius="@dimen/dp_4"
app:hl_dy="@dimen/main_shadow_dy"
android:visibility="gone"
android:visibility="visible"
app:hl_shadowBackColor="@color/white"
app:hl_shadowColor="@color/shadow_color"
app:hl_shadowLimit="@dimen/main_shadow_limit">
......
......@@ -42,7 +42,7 @@
android:id="@+id/tv_business_area_title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="店鋪名稱:gingersoft"
android:text=""
android:textColor="@color/black"
android:textSize="@dimen/dp_18" />
......
......@@ -23,6 +23,8 @@ public interface AreaListContract {
//对于经常使用的关于UI的方法可以定义到IView中,如显示隐藏进度条,和显示文字消息
interface View extends IView {
void showEmptyView(boolean isSuccess, int size, Throwable t);
void setAdapter(DefaultAdapter adapter);
}
......
......@@ -19,7 +19,7 @@ import com.jess.arms.mvp.IModel;
public interface TableListContract {
//对于经常使用的关于UI的方法可以定义到IView中,如显示隐藏进度条,和显示文字消息
interface View extends IView {
void showEmptyView(boolean isSuccess, int size, Throwable t);
}
//Model层定义接口,外部只需关心Model返回的数据,无需关心内部细节,即是否使用缓存
......
......@@ -32,6 +32,8 @@ public interface TableManageContract {
void queryAreasSuccess(List<TableArea> areas, int type);
void queryTablesSuccess(List<TableItem> tables, int type);
void showEmptyView(boolean isSuccess, int size, Throwable t);
}
//Model层定义接口,外部只需关心Model返回的数据,无需关心内部细节,即是否使用缓存
......
......@@ -13,7 +13,7 @@ public class TableRequest {
private int restaurantId;
/**區域ID*/
private int areaId;
private int regionId;
/**餐檯名*/
private String tableName;
/**座位数*/
......@@ -32,12 +32,12 @@ public class TableRequest {
this.restaurantId = restaurantId;
}
public int getAreaId() {
return areaId;
public int getRegionId() {
return regionId;
}
public void setAreaId(int areaId) {
this.areaId = areaId;
public void setRegionId(int regionId) {
this.regionId = regionId;
}
public String getTableName() {
......@@ -75,6 +75,76 @@ public class TableRequest {
public static class Update {
private int id;
private int restaurantId;
/**區域ID*/
private int regionId;
/**餐檯名*/
private String tableName;
/**座位数*/
private int seatCount;
/**服务费*/
private Double serviceCharge;
/**排序*/
private int sort;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public int getRestaurantId() {
return restaurantId;
}
public void setRestaurantId(int restaurantId) {
this.restaurantId = restaurantId;
}
public int getRegionId() {
return regionId;
}
public void setRegionId(int regionId) {
this.regionId = regionId;
}
public String getTableName() {
return tableName;
}
public void setTableName(String tableName) {
this.tableName = tableName;
}
public int getSeatCount() {
return seatCount;
}
public void setSeatCount(int seatCount) {
this.seatCount = seatCount;
}
public Double getServiceCharge() {
return serviceCharge;
}
public void setServiceCharge(Double serviceCharge) {
this.serviceCharge = serviceCharge;
}
public int getSort() {
return sort;
}
public void setSort(int sort) {
this.sort = sort;
}
}
}
......@@ -91,15 +91,27 @@ public class TableListPresenter extends BasePresenter<TableListContract.Model, T
* 組合區域集合
*/
public List<TableArea> assembleAreaList(List<TableItem> tableList) {
boolean addOther = false;
List<TableArea> areaList = new ArrayList<>();
for (TableItem table : tableList) {
if (table.getRegionId() != 0 && !equalsAreaId(areaList, table.getRegionId())) {
TableArea newArea = new TableArea();
newArea.setId(table.getRegionId());
newArea.setRegionName("大廳");
areaList.add(newArea);
if (table.getRegionId() != -1) {
if (!equalsAreaId(areaList, table.getRegionId())) {
TableArea newArea = new TableArea();
newArea.setId(table.getRegionId());
newArea.setRegionName(table.getRegionName());
areaList.add(newArea);
}
} else {
addOther = true;
}
}
if (addOther) {
//將沒有區域的檯 放到其他下面
TableArea newArea = new TableArea();
newArea.setId(-1);
newArea.setRegionName("其他");
areaList.add(newArea);
}
return areaList;
}
......
......@@ -174,9 +174,16 @@ public class TableManagePresenter extends BasePresenter<TableManageContract.Mode
if (info != null && info.isSuccess()) {
if (info.getData() != null) {
List<TableArea> tableAreas = JsonUtils.parseArray(info.getData(), TableArea.class);
mRootView.queryAreasSuccess(tableAreas, TableManageActivity.QUERY_AREA_SUCCESS);
if (tableAreas.size() > 0) {
mRootView.queryAreasSuccess(tableAreas, TableManageActivity.QUERY_AREA_SUCCESS);
} else {
mRootView.showEmptyView(true, 0, null);
}
} else {
mRootView.showEmptyView(true, 0, null);
}
} else {
mRootView.showEmptyView(false, 0, null);
mRootView.showMessage("查詢失敗");
}
}
......@@ -190,6 +197,7 @@ public class TableManagePresenter extends BasePresenter<TableManageContract.Mode
@Override
public void onError(Throwable t) {
super.onError(t);
mRootView.showEmptyView(false, 0, t);
resetRefreshLayout();
}
......@@ -256,7 +264,7 @@ public class TableManagePresenter extends BasePresenter<TableManageContract.Mode
});
}
public void updateTable(TableRequest.Add request) {
public void updateTable(TableRequest.Update request) {
RequestBody requestBody = RequestBody.create(MediaType.parse("application/json"), GsonUtils.GsonString(request));
String json = GsonUtils.GsonString(request);
mModel.updateTable(requestBody)
......@@ -273,12 +281,22 @@ public class TableManagePresenter extends BasePresenter<TableManageContract.Mode
if (info != null && info.isSuccess()) {
if (info.getData() != null) {
List<TableItem> tableItems = JsonUtils.parseArray(info.getData(), TableItem.class);
mRootView.queryTablesSuccess(tableItems, TableManageActivity.UPDATE_TABLE_SUCCESS);
if (tableItems.size() > 0) {
mRootView.queryTablesSuccess(tableItems, TableManageActivity.UPDATE_TABLE_SUCCESS);
} else {
}
} else {
}
} else {
mRootView.showMessage("更新失敗");
}
}
@Override
public void onError(Throwable t) {
super.onError(t);
}
});
}
......@@ -301,9 +319,16 @@ public class TableManagePresenter extends BasePresenter<TableManageContract.Mode
if (info != null && info.isSuccess()) {
if (info.getData() != null) {
List<TableItem> tableItems = JsonUtils.parseArray(info.getData(), TableItem.class);
mRootView.queryTablesSuccess(tableItems, TableManageActivity.QUERY_TABLE_SUCCESS);
if (tableItems.size() > 0) {
mRootView.queryTablesSuccess(tableItems, TableManageActivity.QUERY_TABLE_SUCCESS);
} else {
mRootView.showEmptyView(true, 0, null);
}
} else {
mRootView.showEmptyView(true, 0, null);
}
} else {
mRootView.showEmptyView(false, 0, null);
mRootView.showMessage("查詢失敗");
}
}
......@@ -317,6 +342,7 @@ public class TableManagePresenter extends BasePresenter<TableManageContract.Mode
@Override
public void onError(Throwable t) {
super.onError(t);
mRootView.showEmptyView(false, 0, t);
resetRefreshLayout();
}
......
......@@ -2,6 +2,7 @@ package com.gingersoft.gsa.cloud.manager.mvp.ui.activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.animation.AnimationUtils;
import android.widget.Button;
import android.widget.FrameLayout;
......@@ -34,6 +35,7 @@ import com.gingersoft.gsa.cloud.manager.R;
import com.jess.arms.utils.RxLifecycleUtils;
import com.qmuiteam.qmui.alpha.QMUIAlphaTextView;
import com.qmuiteam.qmui.widget.QMUITopBar;
import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet;
import com.qmuiteam.qmui.widget.section.QMUIStickySectionLayout;
import com.scwang.smartrefresh.layout.api.RefreshLayout;
......@@ -151,7 +153,7 @@ public class TableManageActivity extends BaseFragmentActivity<TableManagePresent
mPresenter.deleteTable(ids);
}
public void updateTable(TableRequest.Add request) {
public void updateTable(TableRequest.Update request) {
mPresenter.updateTable(request);
}
......@@ -159,7 +161,6 @@ public class TableManageActivity extends BaseFragmentActivity<TableManagePresent
mPresenter.queryTables(refreshLayout);
}
@Override
public void initIntent() {
}
......@@ -253,15 +254,16 @@ public class TableManageActivity extends BaseFragmentActivity<TableManagePresent
public void queryTablesSuccess(List<TableItem> tables, int type) {
ISupportFragment fragment = getTopFragment();
if (fragment != null) {
fragment = getTopFragment();
TableListFragment tableListFragment = (TableListFragment) fragment;
tableListFragment.updateTableData(tables);
if (fragment instanceof TableListFragment) {
TableListFragment tableListFragment = (TableListFragment) fragment;
tableListFragment.updateTableData(tables);
}
switch (type) {
case ADD_TABLE_SUCCESS:
case UPDATE_TABLE_SUCCESS:
AddTableFragment addTableFragment = (AddTableFragment) fragment;
addTableFragment.pop();
tableListFragment = findFragment(TableListFragment.class);
TableListFragment tableListFragment = findFragment(TableListFragment.class);
if (tableListFragment != null) {
tableListFragment.updateTableData(tables);
}
......@@ -277,14 +279,14 @@ public class TableManageActivity extends BaseFragmentActivity<TableManagePresent
}
@Override
public void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == ADD_TABLE_RESULT_SUCCESS && resultCode == 200) {
//更新餐檯列表數據
} else if (requestCode == ADD_AREA_RESULT_SUCCESS && resultCode == 200) {
//更新區域數據
public void showEmptyView(boolean isSuccess, int size, Throwable t) {
ISupportFragment fragment = getTopFragment();
if (fragment instanceof TableListFragment) {
TableListFragment tableListFragment = (TableListFragment) fragment;
tableListFragment.showEmptyView(isSuccess, size, t);
} else if (fragment instanceof AreaListFragment) {
AreaListFragment areaListFragment = (AreaListFragment) fragment;
areaListFragment.showEmptyView(isSuccess, size, t);
}
}
......
......@@ -78,7 +78,7 @@ public class TableManageSectiontAdapter extends QMUIDefaultStickySectionAdapter<
viewHolder.tv_name.setText(tableItem.getTableName());
if (tableItem.getServiceCharge() > 0) {
viewHolder.tv_service_fee.setText("$" + tableItem.getServiceCharge());
viewHolder.tv_service_fee.setText(tableItem.getServiceCharge() + "%");
viewHolder.tv_service_fee.setVisibility(View.VISIBLE);
} else {
viewHolder.tv_service_fee.setVisibility(View.INVISIBLE);
......
......@@ -136,8 +136,8 @@ public class AddAreaFragment extends BaseFragment<AddAreaPresenter> implements A
if (mTableArea != null) {
ed_area_name.setText(mTableArea.getRegionName());
}
ed_area_name.setWidth(QMUIDisplayHelper.dp2px(mActivity,65));
ed_area_name.setTextSize(QMUIDisplayHelper.dpToPx(8));
ed_area_name.setWidth(QMUIDisplayHelper.dp2px(mActivity,75));
ed_area_name.setTextSize(16);
ed_area_name.setBackgroundColor(ContextCompat.getColor(mContext, R.color.trans));
areaNameItemView.addAccessoryCustomView(ed_area_name);
......@@ -149,12 +149,12 @@ public class AddAreaFragment extends BaseFragment<AddAreaPresenter> implements A
if (mTableArea != null) {
ed_area_sort.setText(mTableArea.getSort() + "");
}
ed_area_sort.setWidth(QMUIDisplayHelper.dp2px(mActivity,65));
ed_area_sort.setTextSize(QMUIDisplayHelper.dpToPx(8));
ed_area_sort.setWidth(QMUIDisplayHelper.dp2px(mActivity,75));
ed_area_sort.setTextSize(16);
ed_area_sort.setBackgroundColor(ContextCompat.getColor(mContext, R.color.trans));
areaSortItemView.addAccessoryCustomView(ed_area_sort);
areaSortItemView.showNewTip(true);
areaSortItemView.setNewTipImage(R.drawable.ic_delete_bill_method);
areaSortItemView.setNewTipImage(R.drawable.question_prompt);
areaSortItemView.setNewTipClick(new View.OnClickListener() {
@Override
public void onClick(View v) {
......
......@@ -121,7 +121,7 @@ public class AddTableFragment extends BaseFragment<AddTablePresenter> implements
rightButton.setOnClickListener(v -> {
if (mTableItem != null) {
//修改
mActivity.updateTable(createAddTableRequest());
mActivity.updateTable(createUpdateTableRequest(mTableItem.getId()));
} else {
if (addCondition()) {
mActivity.addTable(createAddTableRequest());
......@@ -155,8 +155,8 @@ public class AddTableFragment extends BaseFragment<AddTablePresenter> implements
if (mTableItem != null) {
tableNameEditText.setText(mTableItem.getTableName());
}
tableNameEditText.setWidth(QMUIDisplayHelper.dp2px(mActivity,65));
tableNameEditText.setTextSize(QMUIDisplayHelper.dpToPx(8));
tableNameEditText.setWidth(QMUIDisplayHelper.dp2px(mActivity, 75));
tableNameEditText.setTextSize(16);
tableNameEditText.setBackgroundColor(ContextCompat.getColor(mContext, R.color.trans));
tableNameItemView.addAccessoryCustomView(tableNameEditText);
......@@ -167,22 +167,22 @@ public class AddTableFragment extends BaseFragment<AddTablePresenter> implements
if (mTableItem != null) {
peopleNumberEditText.setText(mTableItem.getSeatCount() + "");
}
peopleNumberEditText.setWidth(QMUIDisplayHelper.dp2px(mActivity,65));
peopleNumberEditText.setTextSize(QMUIDisplayHelper.dpToPx(8));
peopleNumberEditText.setWidth(QMUIDisplayHelper.dp2px(mActivity, 75));
peopleNumberEditText.setTextSize(16);
peopleNumberEditText.setBackgroundColor(ContextCompat.getColor(mContext, R.color.trans));
peopleNumberEditText.setInputType(EditorInfo.TYPE_CLASS_NUMBER);
peopleNumberItemView.addAccessoryCustomView(peopleNumberEditText);
QMUICommonListItemView serverchargeItemView = mGroupListView.createItemView("服務費");
QMUICommonListItemView serverchargeItemView = mGroupListView.createItemView("服務費%");
serverchargeItemView.setAccessoryType(QMUICommonListItemView.ACCESSORY_TYPE_CUSTOM);
serverchargeEditText = new EditText(mContext);
serverchargeEditText.setHint("0");
if (mTableItem != null) {
serverchargeEditText.setText(mTableItem.getServiceCharge() + "");
}
serverchargeEditText.setWidth(QMUIDisplayHelper.dp2px(mActivity,65));
serverchargeEditText.setTextSize(QMUIDisplayHelper.dpToPx(8));
serverchargeEditText.setWidth(QMUIDisplayHelper.dp2px(mActivity, 75));
serverchargeEditText.setTextSize(16);
serverchargeEditText.setBackgroundColor(ContextCompat.getColor(mContext, R.color.trans));
serverchargeEditText.setInputType(EditorInfo.TYPE_CLASS_NUMBER);
serverchargeItemView.addAccessoryCustomView(serverchargeEditText);
......@@ -191,17 +191,19 @@ public class AddTableFragment extends BaseFragment<AddTablePresenter> implements
QMUICommonListItemView tableSortItemView = mGroupListView.createItemView("餐桌排序");
tableSortItemView.setAccessoryType(QMUICommonListItemView.ACCESSORY_TYPE_CUSTOM);
tableSortEditText = new EditText(mContext);
tableSortEditText.setHint("100");
// tableSortEditText.setHint("100");
if (mTableItem != null) {
tableSortEditText.setText(mTableItem.getSort() + "");
}else {
tableSortEditText.setText("100");
}
tableSortEditText.setWidth(QMUIDisplayHelper.dp2px(mActivity,65));
tableSortEditText.setTextSize(QMUIDisplayHelper.dpToPx(8));
tableSortEditText.setWidth(QMUIDisplayHelper.dp2px(mActivity, 75));
tableSortEditText.setTextSize(16);
tableSortEditText.setBackgroundColor(ContextCompat.getColor(mContext, R.color.trans));
tableSortEditText.setInputType(EditorInfo.TYPE_CLASS_NUMBER);
tableSortItemView.addAccessoryCustomView(tableSortEditText);
tableSortItemView.showNewTip(true);
tableSortItemView.setNewTipImage(R.drawable.ic_delete_bill_method);
tableSortItemView.setNewTipImage(R.drawable.question_prompt);
tableSortItemView.setNewTipClick(new View.OnClickListener() {
@Override
public void onClick(View v) {
......@@ -235,7 +237,7 @@ public class AddTableFragment extends BaseFragment<AddTablePresenter> implements
List<TableArea> areaList,
boolean allowDragDismiss,
boolean withMark) {
QMUIBottomSheet.BottomListSheetBuilder builder = new QMUIBottomSheet.BottomListSheetBuilder(mContext);
QMUIBottomSheet.BottomListSheetBuilder builder = new QMUIBottomSheet.BottomListSheetBuilder(getActivity());
builder.setGravityCenter(gravityCenter)
.setTitle(title)
.setAddCancelBtn(addCancelBtn)
......@@ -244,9 +246,9 @@ public class AddTableFragment extends BaseFragment<AddTablePresenter> implements
.setOnSheetItemClickListener(new QMUIBottomSheet.BottomListSheetBuilder.OnSheetItemClickListener() {
@Override
public void onClick(QMUIBottomSheet dialog, View itemView, int position, String tag) {
dialog.cancel();
currentAreaId = areaList.get(position).getId();
areaItemView.setDetailText(tag);
dialog.dismiss();
}
});
if (withMark) {
......@@ -289,14 +291,15 @@ public class AddTableFragment extends BaseFragment<AddTablePresenter> implements
String areaName = "";
if (mTableItem != null) {
//修改操作
mTableItem.getRegionName();
currentAreaId = mTableItem.getId();
areaName = mTableItem.getRegionName();
currentAreaId = mTableItem.getRegionId();
} else {
//添加操作
if (mActivity.getTableAreaList().size() > 0) {
areaName = mActivity.getTableAreaList().get(0).getRegionName();
currentAreaId = mActivity.getTableAreaList().get(0).getId();
} else {
areaName = "大廳";
areaName = "其他";
}
}
return areaName;
......@@ -339,7 +342,7 @@ public class AddTableFragment extends BaseFragment<AddTablePresenter> implements
public TableRequest.Add createAddTableRequest() {
TableRequest.Add addTableRequest = new TableRequest.Add();
addTableRequest.setAreaId(currentAreaId);
addTableRequest.setRegionId(currentAreaId);
addTableRequest.setRestaurantId(GsaCloudApplication.getRestaurantId(mActivity));
addTableRequest.setTableName(tableNameEditText.getText().toString());
if (!TextUtils.isEmpty(serverchargeEditText.getText().toString())) {
......@@ -354,6 +357,24 @@ public class AddTableFragment extends BaseFragment<AddTablePresenter> implements
return addTableRequest;
}
public TableRequest.Update createUpdateTableRequest(int id) {
TableRequest.Update update = new TableRequest.Update();
update.setId(id);
update.setRegionId(currentAreaId);
update.setRestaurantId(GsaCloudApplication.getRestaurantId(mActivity));
update.setTableName(tableNameEditText.getText().toString());
if (!TextUtils.isEmpty(serverchargeEditText.getText().toString())) {
update.setServiceCharge(Double.parseDouble(serverchargeEditText.getText().toString()));
}
if (!TextUtils.isEmpty(peopleNumberEditText.getText().toString())) {
update.setSeatCount(Integer.parseInt(peopleNumberEditText.getText().toString()));
}
if (!TextUtils.isEmpty(tableSortEditText.getText().toString())) {
update.setSort(Integer.parseInt(tableSortEditText.getText().toString()));
}
return update;
}
public boolean addCondition() {
if (TextUtils.isEmpty(tableNameEditText.getText().toString())) {
showMessage("請輸入餐檯名稱");
......
......@@ -2,6 +2,7 @@ package com.gingersoft.gsa.cloud.manager.mvp.ui.fragment;
import android.content.Intent;
import android.graphics.Color;
import android.net.ParseException;
import android.os.Bundle;
import android.os.Message;
import android.text.TextUtils;
......@@ -23,6 +24,8 @@ import com.gingersoft.gsa.cloud.manager.mvp.ui.adapter.AreaManageAdapter;
import com.gingersoft.gsa.cloud.ui.recylcler.decorator.DividerItemDecoration;
import com.gingersoft.gsa.cloud.ui.widget.dialog.CommonTipDialog;
import com.gingersoft.gsa.cloud.ui.widget.dialog.LoadingDialog;
import com.google.gson.JsonIOException;
import com.google.gson.JsonParseException;
import com.jess.arms.base.BaseFragment;
import com.jess.arms.base.DefaultAdapter;
import com.jess.arms.di.component.AppComponent;
......@@ -33,6 +36,7 @@ import com.gingersoft.gsa.cloud.manager.mvp.contract.AreaListContract;
import com.gingersoft.gsa.cloud.manager.mvp.presenter.AreaListPresenter;
import com.gingersoft.gsa.cloud.manager.R;
import com.qmuiteam.qmui.alpha.QMUIAlphaFrameLayout;
import com.qmuiteam.qmui.alpha.QMUIAlphaTextView;
import com.qmuiteam.qmui.widget.QMUIEmptyView;
import com.qmuiteam.qmui.widget.QMUITopBarLayout;
......@@ -47,6 +51,10 @@ import com.yanzhenjie.recyclerview.touch.OnItemMoveListener;
import com.yanzhenjie.recyclerview.touch.OnItemStateChangedListener;
import com.yanzhenjie.recyclerview.widget.DefaultItemDecoration;
import org.json.JSONException;
import java.net.SocketTimeoutException;
import java.net.UnknownHostException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
......@@ -87,8 +95,8 @@ public class AreaListFragment extends BaseFragment<AreaListPresenter> implements
@BindView(R2.id.emptyView)
QMUIEmptyView mEmptyView;
@BindView(R2.id.tv_add_area)
QMUIAlphaTextView tv_add_area;
@BindView(R2.id.fl_add_area)
QMUIAlphaFrameLayout fl_add_area;
@BindView(R2.id.ll_bottom_operat)
LinearLayout ll_bottom_operat;
......@@ -144,6 +152,7 @@ public class AreaListFragment extends BaseFragment<AreaListPresenter> implements
rightButton.setOnClickListener(v -> {
isRadioEdit = !isRadioEdit;
if (isRadioEdit) {
initCheckedStatus();
rightButton.setText("取消");
} else {
rightButton.setText("編輯");
......@@ -176,7 +185,13 @@ public class AreaListFragment extends BaseFragment<AreaListPresenter> implements
mAreaManageAdapter.setOnItemClickListener(new DefaultAdapter.OnRecyclerViewItemClickListener() {
@Override
public void onItemClick(View view, int viewType, Object data, int position) {
start(AddAreaFragment.newInstance((TableArea) data));
if (isRadioEdit) {
TableArea tableArea = (TableArea) data;
tableArea.setChecked(!tableArea.isChecked());
mAreaManageAdapter.notifyDataSetChanged();
} else {
start(AddAreaFragment.newInstance((TableArea) data));
}
}
});
}
......@@ -187,17 +202,23 @@ public class AreaListFragment extends BaseFragment<AreaListPresenter> implements
}
mTableAreaList.addAll(tableAreaList);
mAreaManageAdapter.notifyDataSetChanged();
}
public void deleteSuccess(){
mEmptyView.hide();
recycler_area.setVisibility(View.VISIBLE);
}
@Override
public void setData(@Nullable Object data) {
}
@OnClick(R2.id.tv_add_area)
private void initCheckedStatus(){
for (int i = 0; i < mTableAreaList.size(); i++) {
mTableAreaList.get(i).setChecked(false);
}
mAreaManageAdapter.notifyDataSetChanged();
}
@OnClick(R2.id.fl_add_area)
void onClickAddArea() {
startForResult(AddAreaFragment.newInstance(null), ADD_AREA_RESULT_SUCCESS);
}
......@@ -228,7 +249,7 @@ public class AreaListFragment extends BaseFragment<AreaListPresenter> implements
}
Class[] parameterTypes = {String.class};
Object[] parameters = {ids};
CommonTipDialog.showDoubtDialog(mActivity, "是否刪除所選區域", TableManageActivity.class, mActivity, "deleteArea", parameterTypes, parameters);
CommonTipDialog.showSurpisedDialog(mActivity, "是否刪除所選區域", TableManageActivity.class, mActivity, "deleteArea", parameterTypes, parameters);
}
private String getDeleteIds() {
......@@ -277,6 +298,47 @@ public class AreaListFragment extends BaseFragment<AreaListPresenter> implements
_mActivity.onBackPressed();
}
private View.OnClickListener onRetryClickListener = new View.OnClickListener() {
@Override
public void onClick(View v) {
//重新加載
mActivity.queryAreas(null);
}
};
@Override
public void showEmptyView(boolean isSuccess, int size, Throwable t) {
if (t != null) {
if (t instanceof UnknownHostException) {
//沒有網絡
mEmptyView.show(false, getResources().getString(R.string.emptyView_mode_desc_fail_title), getResources().getString(R.string.emptyView_mode_desc_fail_desc), getResources().getString(R.string.emptyView_mode_desc_retry), onRetryClickListener);
} else if (t instanceof SocketTimeoutException) {
//請求超時
mEmptyView.show(false, getResources().getString(R.string.emptyView_mode_desc_fail_title), getResources().getString(R.string.emptyView_mode_desc_fail_desc), getResources().getString(R.string.emptyView_mode_desc_retry), onRetryClickListener);
} else if (t instanceof JsonParseException || t instanceof ParseException || t instanceof JSONException || t instanceof JsonIOException) {
//數據解析錯誤
mEmptyView.show(false, getResources().getString(R.string.response_error_data_parsing_error), null, getResources().getString(R.string.emptyView_mode_desc_retry), onRetryClickListener);
} else {
//其他error
mEmptyView.show(false, getResources().getString(R.string.emptyView_mode_desc_fail_title), null, getResources().getString(R.string.emptyView_mode_desc_retry), onRetryClickListener);
}
recycler_area.setVisibility(View.INVISIBLE);
return;
}
if (!isSuccess) {
mEmptyView.show(false, getResources().getString(R.string.emptyView_mode_desc_fail_title), null, getResources().getString(R.string.emptyView_mode_desc_retry), onRetryClickListener);
recycler_area.setVisibility(View.INVISIBLE);
return;
}
if (size == 0) {
mEmptyView.show(getResources().getString(R.string.emptyView_mode_desc_double), null);
recycler_area.setVisibility(View.INVISIBLE);
return;
}
mEmptyView.hide();
recycler_area.setVisibility(View.VISIBLE);
}
@Override
public void setAdapter(DefaultAdapter adapter) {
recycler_area.setAdapter(adapter);
......@@ -285,10 +347,10 @@ public class AreaListFragment extends BaseFragment<AreaListPresenter> implements
private void showRadioEdit() {
if (isRadioEdit) {
tv_add_area.setVisibility(View.GONE);
fl_add_area.setVisibility(View.GONE);
ll_bottom_operat.setVisibility(View.VISIBLE);
} else {
tv_add_area.setVisibility(View.VISIBLE);
fl_add_area.setVisibility(View.VISIBLE);
ll_bottom_operat.setVisibility(View.GONE);
}
}
......
......@@ -2,6 +2,7 @@ package com.gingersoft.gsa.cloud.manager.mvp.ui.fragment;
import android.content.Intent;
import android.graphics.Rect;
import android.net.ParseException;
import android.os.Bundle;
import android.os.Message;
import android.text.TextUtils;
......@@ -28,6 +29,8 @@ import com.gingersoft.gsa.cloud.ui.bean.view.SectionHeader;
import com.gingersoft.gsa.cloud.ui.utils.AnimateUtils;
import com.gingersoft.gsa.cloud.ui.widget.dialog.CommonTipDialog;
import com.gingersoft.gsa.cloud.ui.widget.dialog.LoadingDialog;
import com.google.gson.JsonIOException;
import com.google.gson.JsonParseException;
import com.jess.arms.base.BaseFragment;
import com.jess.arms.di.component.AppComponent;
import com.jess.arms.utils.ArmsUtils;
......@@ -35,6 +38,7 @@ import com.gingersoft.gsa.cloud.manager.mvp.contract.TableListContract;
import com.gingersoft.gsa.cloud.manager.mvp.presenter.TableListPresenter;
import com.gingersoft.gsa.cloud.manager.R;
import com.qmuiteam.qmui.alpha.QMUIAlphaFrameLayout;
import com.qmuiteam.qmui.alpha.QMUIAlphaTextView;
import com.qmuiteam.qmui.util.QMUIDisplayHelper;
import com.qmuiteam.qmui.widget.QMUIEmptyView;
......@@ -46,6 +50,10 @@ import com.scwang.smartrefresh.layout.api.RefreshLayout;
import com.scwang.smartrefresh.layout.listener.OnLoadMoreListener;
import com.scwang.smartrefresh.layout.listener.OnRefreshListener;
import org.json.JSONException;
import java.net.SocketTimeoutException;
import java.net.UnknownHostException;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
......@@ -88,8 +96,8 @@ public class TableListFragment extends BaseFragment<TableListPresenter> implemen
@BindView(R2.id.emptyView)
QMUIEmptyView mEmptyView;
@BindView(R2.id.tv_add_table)
QMUIAlphaTextView tv_add_table;
@BindView(R2.id.fl_add_table)
QMUIAlphaFrameLayout fl_add_table;
@BindView(R2.id.tv_area)
QMUIAlphaTextView tv_area;
......@@ -102,7 +110,7 @@ public class TableListFragment extends BaseFragment<TableListPresenter> implemen
private List<TableArea> mAreaList = new ArrayList<>();
private TableManageSectiontAdapter mAdapter;
private List<QMUISection<SectionHeader, TableItem>> mTableAreaSectionList;
private List<QMUISection<SectionHeader, TableItem>> mTableAreaSectionList = new ArrayList<>();
/**
* 是否編輯
......@@ -168,6 +176,7 @@ public class TableListFragment extends BaseFragment<TableListPresenter> implemen
rightButton.setOnClickListener(v -> {
isRadioEdit = !isRadioEdit;
if (isRadioEdit) {
initCheckedStatus();
rightButton.setText("取消");
} else {
rightButton.setText("編輯");
......@@ -209,7 +218,12 @@ public class TableListFragment extends BaseFragment<TableListPresenter> implemen
TableManageSectiontAdapter.ViewHolder viewHolder = (TableManageSectiontAdapter.ViewHolder) holder;
if (viewHolder.getTvName().getText() != null) {
TableItem item = viewHolder.getTableItem(position);
start(AddTableFragment.newInstance(item));
if(isRadioEdit){
item.setChecked(!item.isChecked());
mAdapter.notifyDataSetChanged();
}else {
start(AddTableFragment.newInstance(item));
}
}
} else {
//點擊的頭部,折疊
......@@ -233,7 +247,6 @@ public class TableListFragment extends BaseFragment<TableListPresenter> implemen
}
});
mSectionLayout.setAdapter(mAdapter, true);
mAdapter.setData(mTableAreaSectionList);
}
private RecyclerView.LayoutManager createLayoutManager() {
......@@ -265,8 +278,11 @@ public class TableListFragment extends BaseFragment<TableListPresenter> implemen
item.setRegionId(-1);
}
}
mTableAreaSectionList = mPresenter.tableAreaTransformToSection(mPresenter.assembleTableArea(mPresenter.assembleAreaList(mTableList), mTableList));
mTableAreaSectionList.addAll(mPresenter.tableAreaTransformToSection(mPresenter.assembleTableArea(mPresenter.assembleAreaList(mTableList), mTableList)));
mAdapter.setData(mTableAreaSectionList);
mEmptyView.hide();
mSectionLayout.setVisibility(View.VISIBLE);
}
private void initParms() {
......@@ -281,22 +297,26 @@ public class TableListFragment extends BaseFragment<TableListPresenter> implemen
}
}
public void deleteSuccess(){
}
@Override
public void setData(@Nullable Object data) {
}
private void initCheckedStatus(){
for (int i = 0; i < mTableAreaSectionList.size(); i++) {
for (int j = 0; j < mTableAreaSectionList.get(i).getItemCount(); j++) {
mTableAreaSectionList.get(i).getItemAt(j).setChecked(false);
}
}
mAdapter.setData(mTableAreaSectionList);
}
@OnClick(R2.id.tv_area)
void onClickToArea() {
startForResult(AreaListFragment.newInstance(), ADD_AREA_RESULT_SUCCESS);
}
@OnClick(R2.id.tv_add_table)
@OnClick(R2.id.fl_add_table)
void onClickAddTable() {
startForResult(AddTableFragment.newInstance(null), ADD_TABLE_RESULT_SUCCESS);
}
......@@ -331,7 +351,7 @@ public class TableListFragment extends BaseFragment<TableListPresenter> implemen
}
Class[] parameterTypes = {String.class};
Object[] parameters = {ids};
CommonTipDialog.showDoubtDialog(mActivity, "是否刪除所選餐檯", TableManageActivity.class, mActivity, "deleteTable", parameterTypes, parameters);
CommonTipDialog.showSurpisedDialog(mActivity, "是否刪除所選餐檯", TableManageActivity.class, mActivity, "deleteTable", parameterTypes, parameters);
}
......@@ -384,13 +404,55 @@ public class TableListFragment extends BaseFragment<TableListPresenter> implemen
_mActivity.finish();
}
private View.OnClickListener onRetryClickListener = new View.OnClickListener() {
@Override
public void onClick(View v) {
//重新加載
mActivity.queryAreas(null);
mActivity.queryTables(null);
}
};
@Override
public void showEmptyView(boolean isSuccess, int size, Throwable t) {
if (t != null) {
if (t instanceof UnknownHostException) {
//沒有網絡
mEmptyView.show(false, getResources().getString(R.string.emptyView_mode_desc_fail_title), getResources().getString(R.string.emptyView_mode_desc_fail_desc), getResources().getString(R.string.emptyView_mode_desc_retry), onRetryClickListener);
} else if (t instanceof SocketTimeoutException) {
//請求超時
mEmptyView.show(false, getResources().getString(R.string.emptyView_mode_desc_fail_title), getResources().getString(R.string.emptyView_mode_desc_fail_desc), getResources().getString(R.string.emptyView_mode_desc_retry), onRetryClickListener);
} else if (t instanceof JsonParseException || t instanceof ParseException || t instanceof JSONException || t instanceof JsonIOException) {
//數據解析錯誤
mEmptyView.show(false, getResources().getString(R.string.response_error_data_parsing_error), null, getResources().getString(R.string.emptyView_mode_desc_retry), onRetryClickListener);
} else {
//其他error
mEmptyView.show(false, getResources().getString(R.string.emptyView_mode_desc_fail_title), null, getResources().getString(R.string.emptyView_mode_desc_retry), onRetryClickListener);
}
mSectionLayout.setVisibility(View.INVISIBLE);
return;
}
if (!isSuccess) {
mEmptyView.show(false, getResources().getString(R.string.emptyView_mode_desc_fail_title), null, getResources().getString(R.string.emptyView_mode_desc_retry), onRetryClickListener);
mSectionLayout.setVisibility(View.INVISIBLE);
return;
}
if (size == 0) {
mEmptyView.show(getResources().getString(R.string.emptyView_mode_desc_double), null);
mSectionLayout.setVisibility(View.INVISIBLE);
return;
}
mEmptyView.hide();
mSectionLayout.setVisibility(View.VISIBLE);
}
private void showRadioEdit() {
if (isRadioEdit) {
tv_add_table.setVisibility(View.GONE);
fl_add_table.setVisibility(View.GONE);
tv_area.setVisibility(View.GONE);
ll_bottom_operat.setVisibility(View.VISIBLE);
} else {
tv_add_table.setVisibility(View.VISIBLE);
fl_add_table.setVisibility(View.VISIBLE);
tv_area.setVisibility(View.VISIBLE);
ll_bottom_operat.setVisibility(View.GONE);
}
......
......@@ -67,24 +67,40 @@
android:layout_height="match_parent"
android:layout_marginLeft="@dimen/dp_1"
android:layout_weight="1"
android:background="@color/green_400"
android:text="確認"
android:background="@color/theme_red_color"
android:text="刪除"
android:textColor="@color/theme_white_color"
android:textSize="@dimen/sp_14" />
</LinearLayout>
<com.qmuiteam.qmui.alpha.QMUIAlphaTextView
android:id="@+id/tv_add_area"
<!-- <com.qmuiteam.qmui.alpha.QMUIAlphaTextView-->
<!-- android:id="@+id/tv_add_area"-->
<!-- android:layout_width="@dimen/dp_65"-->
<!-- android:layout_height="@dimen/dp_65"-->
<!-- android:layout_gravity="bottom|right"-->
<!-- android:layout_marginBottom="@dimen/dp_20"-->
<!-- android:layout_marginRight="@dimen/dp_20"-->
<!-- android:background="@drawable/manage_shape_add_btn_oval"-->
<!-- android:gravity="center"-->
<!-- android:text="+"-->
<!-- android:textColor="@color/theme_white_color"-->
<!-- android:textSize="@dimen/sp_14" />-->
<com.qmuiteam.qmui.alpha.QMUIAlphaFrameLayout
android:id="@+id/fl_add_area"
android:layout_width="@dimen/dp_65"
android:layout_height="@dimen/dp_65"
android:layout_gravity="bottom|right"
android:layout_marginBottom="@dimen/dp_20"
android:layout_marginRight="@dimen/dp_20"
android:background="@drawable/manage_shape_add_btn_oval"
android:gravity="center"
android:text="+"
android:textColor="@color/theme_white_color"
android:textSize="@dimen/sp_14" />
android:background="@drawable/manage_shape_add_btn_oval">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:src="@drawable/add_white" />
</com.qmuiteam.qmui.alpha.QMUIAlphaFrameLayout>
<com.qmuiteam.qmui.widget.QMUITopBarLayout
android:id="@+id/topbar"
......
......@@ -16,52 +16,53 @@
android:id="@+id/frameLayout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_above="@+id/ll_bottom_operat"/>
android:layout_marginBottom="@dimen/dp_40">
<com.scwang.smartrefresh.layout.SmartRefreshLayout
android:id="@+id/refreshLayout"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:srlEnableLoadMore="false"
android:layout_above="@+id/tv_add_table"
android:layout_marginBottom="@dimen/dp_10">
<com.qmuiteam.qmui.widget.section.QMUIStickySectionLayout
android:id="@+id/section_table"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_above="@+id/tv_add_table"
android:layout_marginBottom="@dimen/dp_10"/>
</com.scwang.smartrefresh.layout.SmartRefreshLayout>
</FrameLayout>
<com.qmuiteam.qmui.widget.QMUIEmptyView
android:id="@+id/emptyView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true" />
<com.qmuiteam.qmui.widget.QMUIEmptyView
android:id="@+id/emptyView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true" />
<com.qmuiteam.qmui.alpha.QMUIAlphaTextView
android:id="@+id/tv_add_table"
<com.qmuiteam.qmui.alpha.QMUIAlphaFrameLayout
android:id="@+id/fl_add_table"
android:layout_width="@dimen/dp_65"
android:layout_height="@dimen/dp_65"
android:layout_alignParentBottom="true"
android:layout_alignParentRight="true"
android:layout_marginBottom="@dimen/dp_20"
android:layout_marginBottom="@dimen/dp_15"
android:layout_marginRight="@dimen/dp_20"
android:background="@drawable/manage_shape_add_btn_oval"
android:gravity="center"
android:text="+"
android:textColor="@color/theme_white_color"
android:textSize="@dimen/sp_14" />
android:background="@drawable/manage_shape_add_btn_oval">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:src="@drawable/add_white" />
</com.qmuiteam.qmui.alpha.QMUIAlphaFrameLayout>
<com.qmuiteam.qmui.alpha.QMUIAlphaTextView
android:id="@+id/tv_area"
android:layout_width="@dimen/dp_65"
android:layout_height="@dimen/dp_65"
android:layout_alignParentBottom="true"
android:layout_marginBottom="@dimen/dp_20"
android:layout_marginBottom="@dimen/dp_15"
android:layout_marginRight="@dimen/dp_15"
android:layout_toLeftOf="@+id/tv_add_table"
android:layout_toLeftOf="@+id/fl_add_table"
android:background="@drawable/ui_shape_theme_oval"
android:gravity="center"
android:text="@string/manager_area"
......@@ -106,8 +107,8 @@
android:layout_marginLeft="@dimen/dp_1"
android:textColor="@color/theme_white_color"
android:textSize="@dimen/sp_14"
android:background="@color/green_400"
android:text="確認"/>
android:background="@color/theme_red_color"
android:text="刪除"/>
</LinearLayout>
</RelativeLayout>
......
......@@ -19,7 +19,7 @@
android:layout_height="wrap_content"
android:ellipsize="end"
android:maxLines="1"
android:text="餐檯1"
android:text=""
android:textColor="@color/theme_black"
android:textSize="@dimen/sp_16" />
......@@ -28,8 +28,8 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_2"
android:text="$2"
android:textColor="@color/theme_grey_color"
android:text=""
android:textColor="@color/theme_text_pice_color"
android:textSize="@dimen/sp_16" />
<CheckBox
......
......@@ -41,7 +41,7 @@ public class PrintPrjKitchen extends PrinterRoot {
public Map<String, List<Bitmap>> getPrintBitmap(Context mContext) {
Map<String, List<Bitmap>> bitmapMaps = new HashMap<>();
//通過打印位置生成多張用於打印的bitmap
for (Map.Entry<String, List<PrjBean.DataBean.Bean>> entry : prjMap.entrySet()) {
for (Map.Entry<String, List<PrjBean.DataBean.Bean>> entry : getPrjMap().entrySet()) {
String key = entry.getKey();
List<Bitmap> bitmaps = new ArrayList<>();
......
......@@ -165,22 +165,24 @@ public class QMUIBottomSheet extends QMUIBaseDialog {
public void cancel() {
if (mBehavior.getState() == BottomSheetBehavior.STATE_HIDDEN) {
mAnimateToCancel = false;
super.cancel();
// super.cancel();
} else {
mAnimateToCancel = true;
mBehavior.setState(BottomSheetBehavior.STATE_HIDDEN);
}
super.cancel();
}
@Override
public void dismiss() {
if (mBehavior.getState() == BottomSheetBehavior.STATE_HIDDEN) {
mAnimateToDismiss = false;
super.dismiss();
// super.dismiss();
} else {
mAnimateToDismiss = true;
mBehavior.setState(BottomSheetBehavior.STATE_HIDDEN);
}
super.dismiss();
}
public void setOnBottomSheetShowListener(OnBottomSheetShowListener onBottomSheetShowListener) {
......
......@@ -151,12 +151,10 @@ public class QMUIDialog extends QMUIBaseDialog {
assignMessageTvWithAttr(tv, hasTitle(), R.attr.qmui_dialog_message_content_style);
tv.setText(mMessage);
tv.setMovementMethodDefault();
QMUISkinValueBuilder valueBuilder = QMUISkinValueBuilder.acquire();
valueBuilder.textColor(R.attr.qmui_skin_support_dialog_message_text_color);
QMUISkinHelper.setSkinValue(tv, valueBuilder);
QMUISkinValueBuilder.release(valueBuilder);
return wrapWithScroll(tv);
}
return null;
......
......@@ -9,6 +9,7 @@ include 'cc-register',
'qm-arch-annotation',
'qm-skin-maker',
'fragmentation_core',
'updateApk',
'base-module',
'login-module',
......@@ -18,6 +19,6 @@ include 'cc-register',
'print-module',
'manager-module',
'manager-module',
'other_order_mode', ':fragmentation_core'
'other_order_mode'
......@@ -28,10 +28,10 @@
android:value="ConfigModule" />
<meta-data
android:name="design_width_in_dp"
android:value="380"/>
android:value="360"/>
<meta-data
android:name="design_height_in_dp"
android:value="680"/>
android:value="640"/>
</application>
<uses-permission android:name="android.permission.RECEIVE_USER_PRESENT" />
<uses-permission android:name="android.permission.INTERNET" />
......
......@@ -3,13 +3,13 @@ package com.gingersoft.gsa.cloud.table.di.component;
import dagger.BindsInstance;
import dagger.Component;
import com.gingersoft.gsa.cloud.table.mvp.contract.FineItemOneselfContract;
import com.gingersoft.gsa.cloud.table.mvp.ui.fragment.FineItemOneselfFragment;
import com.jess.arms.di.component.AppComponent;
import com.gingersoft.gsa.cloud.table.di.module.FineItemKindModule;
import com.gingersoft.gsa.cloud.table.mvp.contract.FineItemKindContract;
import com.gingersoft.gsa.cloud.table.di.module.FineItemOneselfModule;
import com.jess.arms.di.scope.FragmentScope;
import com.gingersoft.gsa.cloud.table.mvp.ui.fragment.FineItemKindFragment;
/**
......@@ -25,17 +25,17 @@ import com.gingersoft.gsa.cloud.table.mvp.ui.fragment.FineItemKindFragment;
* ================================================
*/
@FragmentScope
@Component(modules = FineItemKindModule.class, dependencies = AppComponent.class)
public interface FineItemKindComponent {
void inject(FineItemKindFragment fragment);
@Component(modules = FineItemOneselfModule.class, dependencies = AppComponent.class)
public interface FineItemOneselfComponent {
void inject(FineItemOneselfFragment fragment);
@Component.Builder
interface Builder {
@BindsInstance
FineItemKindComponent.Builder view(FineItemKindContract.View view);
FineItemOneselfComponent.Builder view(FineItemOneselfContract.View view);
FineItemKindComponent.Builder appComponent(AppComponent appComponent);
FineItemOneselfComponent.Builder appComponent(AppComponent appComponent);
FineItemKindComponent build();
FineItemOneselfComponent build();
}
}
\ No newline at end of file
......@@ -3,8 +3,8 @@ package com.gingersoft.gsa.cloud.table.di.module;
import dagger.Binds;
import dagger.Module;
import com.gingersoft.gsa.cloud.table.mvp.contract.FineItemKindContract;
import com.gingersoft.gsa.cloud.table.mvp.model.FineItemKindModel;
import com.gingersoft.gsa.cloud.table.mvp.contract.FineItemOneselfContract;
import com.gingersoft.gsa.cloud.table.mvp.model.FineItemOneselfModel;
/**
......@@ -20,8 +20,8 @@ import com.gingersoft.gsa.cloud.table.mvp.model.FineItemKindModel;
* ================================================
*/
@Module
public abstract class FineItemKindModule {
public abstract class FineItemOneselfModule {
@Binds
abstract FineItemKindContract.Model bindFineItemKindModel(FineItemKindModel model);
abstract FineItemOneselfContract.Model bindFineItemOneselfModel(FineItemOneselfModel model);
}
\ No newline at end of file
......@@ -2,10 +2,14 @@ package com.gingersoft.gsa.cloud.table.mvp.contract;
import android.app.Activity;
import com.gingersoft.gsa.cloud.database.bean.ComboItem;
import com.gingersoft.gsa.cloud.database.bean.Modifier;
import com.jess.arms.base.DefaultAdapter;
import com.jess.arms.mvp.IView;
import com.jess.arms.mvp.IModel;
import java.util.List;
import androidx.recyclerview.widget.RecyclerView;
......@@ -21,27 +25,25 @@ import androidx.recyclerview.widget.RecyclerView;
* <a href="https://github.com/JessYanCoding/MVPArmsTemplate">模版请保持更新</a>
* ================================================
*/
public interface FineItemKindContract {
public interface FineItemOneselfContract {
//对于经常使用的关于UI的方法可以定义到IView中,如显示隐藏进度条,和显示文字消息
interface View extends IView {
Activity getCurrentActivity();
void setFineItemKindAdapter(DefaultAdapter adapter);
void setFineItemKindItemAdapter(DefaultAdapter adapter);
void setComboAdapter(DefaultAdapter adapter);
void setFineItemKindRecycleSpanCount(int size);
void setModifierAdapter(DefaultAdapter adapter);
void setFineItemKindItemRecycleSpanCount(int size);
void setModifierTop(int margins);
RecyclerView getRecycle_fine_item_kind();
RecyclerView getRecycle_fine_item_kind_item();
}
//Model层定义接口,外部只需关心Model返回的数据,无需关心内部细节,即是否使用缓存
interface Model extends IModel {
List<Modifier> queryDB_ModifierList(long fid, int mode);
List<ComboItem> queryDB_ComboList(long fid);
}
}
......@@ -4,6 +4,7 @@ import com.gingersoft.gsa.cloud.base.common.bean.BaseResult;
import com.gingersoft.gsa.cloud.base.common.bean.FoodBean;
import com.gingersoft.gsa.cloud.database.bean.ComboItem;
import com.gingersoft.gsa.cloud.database.bean.Food;
import com.gingersoft.gsa.cloud.database.bean.Modifier;
import com.gingersoft.gsa.cloud.table.mvp.model.bean.SoldoutCtrFood;
import com.jess.arms.base.DefaultAdapter;
import com.jess.arms.mvp.IModel;
......@@ -75,14 +76,14 @@ public interface SoldoutCtrlContract {
List<Food> queryDB_FoodList(long parentId);
List<ComboItem> queryDB_ComboList(long fid);
Observable<BaseResult> getCurrentSoldoutFood(RequestBody requestBody);
Observable<BaseResult> insertSoldoutCtrl(RequestBody requestBody, int operatTtpe, int type);
Observable<BaseResult> restoreSoldoutCtrl( RequestBody requestBody);
Observable<BaseResult> updateInvisible( RequestBody requestBody);
Observable<FoodBean> downFoodList(int restaurantId);
Observable<BaseResult> downFoodModifier(int restaurantId);
......
package com.gingersoft.gsa.cloud.table.mvp.contract;
import com.gingersoft.gsa.cloud.base.common.bean.BaseResult;
import com.gingersoft.gsa.cloud.database.bean.Modifier;
import com.gingersoft.gsa.cloud.table.mvp.model.bean.BaseRespose;
import com.gingersoft.gsa.cloud.base.common.bean.TableBean;
import com.gingersoft.gsa.cloud.table.mvp.model.bean.TableDetail;
......@@ -63,6 +64,8 @@ public interface TableContract {
//Model层定义接口,外部只需关心Model返回的数据,无需关心内部细节,即是否使用缓存
interface Model extends IModel {
List<Modifier> queryDB_ModifierList(long fid, int mode);
Observable<TableBean> getTables(int restaurantId);
Observable<TableDetail> getTable(int tableId);
......
......@@ -2,15 +2,20 @@ package com.gingersoft.gsa.cloud.table.mvp.model;
import android.app.Application;
import com.gingersoft.gsa.cloud.database.bean.ComboItem;
import com.gingersoft.gsa.cloud.database.bean.Modifier;
import com.gingersoft.gsa.cloud.database.utils.ComboItemDaoUtils;
import com.gingersoft.gsa.cloud.database.utils.ModifierDaoUtils;
import com.gingersoft.gsa.cloud.table.mvp.contract.FineItemOneselfContract;
import com.google.gson.Gson;
import com.jess.arms.integration.IRepositoryManager;
import com.jess.arms.mvp.BaseModel;
import com.jess.arms.di.scope.FragmentScope;
import javax.inject.Inject;
import java.util.List;
import com.gingersoft.gsa.cloud.table.mvp.contract.FineItemKindContract;
import javax.inject.Inject;
/**
......@@ -26,14 +31,14 @@ import com.gingersoft.gsa.cloud.table.mvp.contract.FineItemKindContract;
* ================================================
*/
@FragmentScope
public class FineItemKindModel extends BaseModel implements FineItemKindContract.Model {
public class FineItemOneselfModel extends BaseModel implements FineItemOneselfContract.Model {
@Inject
Gson mGson;
@Inject
Application mApplication;
@Inject
public FineItemKindModel(IRepositoryManager repositoryManager) {
public FineItemOneselfModel(IRepositoryManager repositoryManager) {
super(repositoryManager);
}
......@@ -43,4 +48,17 @@ public class FineItemKindModel extends BaseModel implements FineItemKindContract
this.mGson = null;
this.mApplication = null;
}
@Override
public List<Modifier> queryDB_ModifierList(long fid, int mode) {
ModifierDaoUtils daoUtils = new ModifierDaoUtils(mApplication);
return daoUtils.queryModifiersByFid(fid, mode);
}
@Override
public List<ComboItem> queryDB_ComboList(long fid) {
ComboItemDaoUtils comboItemDao = new ComboItemDaoUtils(mApplication);
List<ComboItem> foodCombo = comboItemDao.queryComboItemsByFidQueryBuilder(fid);
return foodCombo;
}
}
\ No newline at end of file
......@@ -7,8 +7,10 @@ import com.gingersoft.gsa.cloud.base.common.bean.BaseResult;
import com.gingersoft.gsa.cloud.base.common.bean.FoodBean;
import com.gingersoft.gsa.cloud.database.bean.ComboItem;
import com.gingersoft.gsa.cloud.database.bean.Food;
import com.gingersoft.gsa.cloud.database.bean.Modifier;
import com.gingersoft.gsa.cloud.database.utils.ComboItemDaoUtils;
import com.gingersoft.gsa.cloud.database.utils.FoodDaoUtils;
import com.gingersoft.gsa.cloud.database.utils.ModifierDaoUtils;
import com.gingersoft.gsa.cloud.table.mvp.contract.SoldoutCtrlContract;
import com.gingersoft.gsa.cloud.table.mvp.model.service.MealService;
import com.google.gson.Gson;
......@@ -78,13 +80,6 @@ public class SoldoutCtrlModel extends BaseModel implements SoldoutCtrlContract.M
}
@Override
public List<ComboItem> queryDB_ComboList(long fid) {
ComboItemDaoUtils comboItemDao = new ComboItemDaoUtils(mApplication);
List<ComboItem> foodCombo = comboItemDao.queryComboItemsByFidQueryBuilder(fid);
return foodCombo;
}
@Override
public Observable<BaseResult> getCurrentSoldoutFood(RequestBody requestBody) {
return mRepositoryManager.obtainRetrofitService(MealService.class)
.getCurrentSoldoutFood(requestBody);
......@@ -123,6 +118,12 @@ public class SoldoutCtrlModel extends BaseModel implements SoldoutCtrlContract.M
}
@Override
public Observable<BaseResult> updateInvisible(RequestBody requestBody) {
return mRepositoryManager.obtainRetrofitService(MealService.class)
.updateInvisible(requestBody);
}
@Override
public Observable<FoodBean> downFoodList(int restaurantId) {
return mRepositoryManager.obtainRetrofitService(MealService.class)
.downFoodList(restaurantId);
......
......@@ -2,6 +2,10 @@ package com.gingersoft.gsa.cloud.table.mvp.model;
import android.app.Application;
import com.gingersoft.gsa.cloud.database.bean.ComboItem;
import com.gingersoft.gsa.cloud.database.bean.Modifier;
import com.gingersoft.gsa.cloud.database.utils.ComboItemDaoUtils;
import com.gingersoft.gsa.cloud.database.utils.ModifierDaoUtils;
import com.gingersoft.gsa.cloud.table.mvp.model.bean.BaseRespose;
import com.gingersoft.gsa.cloud.base.common.bean.TableBean;
import com.gingersoft.gsa.cloud.table.mvp.model.bean.TableDetail;
......@@ -17,6 +21,8 @@ import javax.inject.Inject;
import com.gingersoft.gsa.cloud.table.mvp.contract.TableContract;
import java.util.List;
import io.reactivex.Observable;
import okhttp3.RequestBody;
......@@ -53,6 +59,12 @@ public class TableModel extends BaseModel implements TableContract.Model {
}
@Override
public List<Modifier> queryDB_ModifierList(long fid, int mode) {
ModifierDaoUtils daoUtils = new ModifierDaoUtils(mApplication);
return daoUtils.queryModifiersByFid(fid, mode);
}
@Override
public Observable<TableBean> getTables(int restaurantId) {
return mRepositoryManager.obtainRetrofitService(TableService.class)
.getTables(restaurantId);
......
......@@ -54,6 +54,8 @@ public class OrderDetailItem implements Serializable {
private int totalPoints;
/**支付金額*/
private double amount;
/**賬單小數*/
private Double rounding;
private String payName;
private String orderPayType;
private double tipsPrice;
......@@ -126,6 +128,14 @@ public class OrderDetailItem implements Serializable {
this.orderPayType = orderPayType;
}
public Double getRounding() {
return rounding;
}
public void setRounding(Double rounding) {
this.rounding = rounding;
}
public double getTipsPrice() {
return tipsPrice;
}
......
......@@ -60,6 +60,25 @@ public class SoldoutCtrFood {
return "";
}
public SoldoutCtrFood() {
}
public SoldoutCtrFood(SoldoutCtrFood ctrFood) {
this.id = ctrFood.id;
this.restaurantId = ctrFood.restaurantId;
this.brandId = ctrFood.brandId;
this.foodId = ctrFood.foodId;
this.modifierId = ctrFood.modifierId;
this.type = ctrFood.type;
this.remainingNumber = ctrFood.remainingNumber;
this.useNumber = ctrFood.useNumber;
this.foodName = ctrFood.foodName;
this.foodName1 = ctrFood.foodName1;
this.foodName2 = ctrFood.foodName2;
this.isStop = ctrFood.isStop;
this.selected = ctrFood.selected;
}
public long getId() {
return id;
}
......
......@@ -19,6 +19,8 @@ public class DeleteOrderRequest {
private List<Map<Byte, DeleteOrderRequest.DeleteBean>> mapsDelete;
private long orderId ;
private byte type;
/**賬單小數*/
private Double rounding;
private long reasonId;
public List<Map<Byte, DeleteOrderRequest.DeleteBean>> getMapsDelete() {
......@@ -45,6 +47,14 @@ public class DeleteOrderRequest {
this.type = type;
}
public Double getRounding() {
return rounding;
}
public void setRounding(Double rounding) {
this.rounding = rounding;
}
public long getReasonId() {
return reasonId;
}
......
......@@ -42,6 +42,9 @@ public interface MealService {
@POST("foodChecklist/updatePrg" + RetrofitUrlManager.IDENTIFICATION_PATH_SIZE + 2)
Observable<BaseResult> restoreSoldoutCtrl(@Body RequestBody requestBody);
@POST("food/updateInvisible" + RetrofitUrlManager.IDENTIFICATION_PATH_SIZE + 2)
Observable<BaseResult> updateInvisible(@Body RequestBody requestBody);
@POST("order/send" + RetrofitUrlManager.IDENTIFICATION_PATH_SIZE + 2)
Observable<BaseResult> createOrder(@Body RequestBody requestBody);
......@@ -75,7 +78,4 @@ public interface MealService {
@GET(Api.food_modifiere_relation + RetrofitUrlManager.IDENTIFICATION_PATH_SIZE + 2)
Observable<BaseResult> downFoodModifier(@Query("restaurantId") int restaurantId);
@POST("food/updateInvisible" + RetrofitUrlManager.IDENTIFICATION_PATH_SIZE + 2)
Observable<BaseResult> updateInvisible(@Query("restaurantId") int restaurantId);
}
......@@ -95,7 +95,7 @@ public class BaseOrderPresenter<M extends BaseOrderContract.Model, V extends Bas
//币種
public String cashStr = "$";
public String serviceChargeStr = "服務費";
private final String noFoodDeliveryTip = "賬單沒有食品,是否開台?";
void saveCreateTime(long createTime) {
......@@ -115,29 +115,45 @@ public class BaseOrderPresenter<M extends BaseOrderContract.Model, V extends Bas
this.mOrderFoodList = myOrderManage.getOrderFoodList();
this.mOrderMoneyList = myOrderManage.getOrderMoneyList();
resetSelected();
initOrderAdapter();
initItemClickListener();
if (IActivity instanceof OrderContentActivity) {
mOrderContentActivity = (OrderContentActivity) IActivity;
}
if (this instanceof MealStandPresenter) {
mMealStandPresenter = (MealStandPresenter) this;
addTableServiceAmount();
addSentOrderMoney();
addOrderRounding();
} else if (this instanceof OrderContentPresenter) {
mOrderContentPresenter = (OrderContentPresenter) this;
} else if (this instanceof OrderPayPresenter) {
mOrderPayPresenter = (OrderPayPresenter) this;
}
resetSelected();
initOrderAdapter();
initItemClickListener();
addSentOrderMoney();
removeOrderRouding();
addOrderRounding();
// removeOrderMoney();
// addTableServiceAmount();
// addSentOrderMoney();
// addOrderRounding();
//設置賬單總金額
myOrderManage.setTotalAmount(getTotalAmount());
}
private void removeOrderMoney() {
for (int i = mOrderMoneyList.size() - 1; i >= 0; i--) {
BillOrderMoney billOrderMoney = mOrderMoneyList.get(i);
if (billOrderMoney.getType() == BillOrderMoney.DISCOUNT_TYPE && billOrderMoney.getStatus() == 0) {
//未送單折扣這裡不刪除
} else {
mOrderMoneyList.remove(i);
}
}
}
@Override
public void onDestroy() {
super.onDestroy();
......@@ -274,6 +290,15 @@ public class BaseOrderPresenter<M extends BaseOrderContract.Model, V extends Bas
}
/**
* 更新賬單金額
*/
protected void updateOrderMoneyItem() {
updateTableServiceAmount();
updateOrderDiscount();
updateOrderRounding();
}
/**
* 添加已送單折扣,服務費
*/
private void addSentOrderMoney() {
......@@ -286,31 +311,63 @@ public class BaseOrderPresenter<M extends BaseOrderContract.Model, V extends Bas
if (orderBean.getDiscountValue() != 0) {
//百分比折扣
discount.setDiscount_value(orderBean.getDiscountValue());
addOrderDiscount(discount, 1, true);
addOrderDiscount(discount, 1);
}
if (orderBean.getDiscountAmount() != 0) {
//金額折扣
discount.setAmount(orderBean.getDiscountAmount());
addOrderDiscount(discount, 1, true);
addOrderDiscount(discount, 1);
}
}
}
/**
* 更新賬單金額
* 添加餐檯服務費
*/
protected void updateOrderMoneyItem() {
updateOrderDiscount();
updateOrderRounding();
private void addTableServiceAmount() {
TableBean.DataBean dataBean = OpenTableManage.getDefault().getTableBean();
if (dataBean.getServiceCharge() > 0) {
BillOrderMoney orderMoney = new BillOrderMoney();
orderMoney.setMoney(getTotalAmountFilterRounding() * dataBean.getServiceCharge() / 100);
orderMoney.setTitle(dataBean.getServiceCharge() + "%" + serviceChargeStr);
orderMoney.setStatus(1);
orderMoney.setType(BillOrderMoney.SERVERCHARGE_TYPE);
orderMoney.setTextColor(ArmsUtils.getColor(IActivity, R.color.theme_black));
mOrderMoneyList.add(orderMoney);
mOrderMoneyAdapter.notifyDataSetChanged();
}
}
private void removeTableServiceAmount(){
for (BillOrderMoney item : mOrderMoneyList) {
if (item.getType() == BillOrderMoney.SERVERCHARGE_TYPE) {
mOrderMoneyList.remove(item);
mOrderMoneyAdapter.notifyDataSetChanged();
break;
}
}
}
/**
* 更新账单折扣
*/
private void updateTableServiceAmount(){
removeTableServiceAmount();
addTableServiceAmount();
}
/**
* 添加賬單折扣
*
* @param discount
*/
protected void addOrderDiscount(Discount discount, int status, boolean sentOrder) {
double totalMoney = getFoodTotal();
protected void addOrderDiscount(Discount discount, int status) {
double totalMoney = getFoodTotal(); for (BillOrderMoney item : mOrderMoneyList) {
if (item.getType() == BillOrderMoney.ROUNDING_TYPE) {
mOrderMoneyList.remove(item);
mOrderMoneyAdapter.notifyDataSetChanged();
break;
}
}
double discountPrice = Discount.calculationDiscount(discount, totalMoney);
BillOrderMoney orderMoney = new BillOrderMoney();
orderMoney.setMoney(discountPrice);
......@@ -323,13 +380,10 @@ public class BaseOrderPresenter<M extends BaseOrderContract.Model, V extends Bas
}
orderMoney.setStatus(status);
orderMoney.setDiscount(discount);
if (sentOrder) {
mOrderMoneyList.clear();
}
mOrderMoneyList.add(orderMoney);
mOrderMoneyAdapter.notifyDataSetChanged();
//更新總金額
if (!sentOrder && mOrderContentActivity != null) {
if (mOrderContentActivity != null) {
//先更新下賬單小數,再計算總金額才不會錯
updateOrderRounding();
//更新合計 總金額信息
......@@ -403,7 +457,7 @@ public class BaseOrderPresenter<M extends BaseOrderContract.Model, V extends Bas
double m2 = MoneyUtil.getOrderRounding(m1);
double roundingMoney = 0.0;
if (m2 != 0) {
roundingMoney = MoneyUtil.sub(m2,MoneyUtil.get_ItemDecimals_money(m1));
roundingMoney = MoneyUtil.sub(m2, MoneyUtil.get_ItemDecimals_money(m1));
}
if (roundingMoney != 0.00) {
BillOrderMoney roundingItem = new BillOrderMoney();
......@@ -480,7 +534,7 @@ public class BaseOrderPresenter<M extends BaseOrderContract.Model, V extends Bas
double foodTotal = getFoodTotal();
for (BillOrderMoney item : mOrderMoneyList) {
//排除賬單小數
if(item.getType() != BillOrderMoney.ROUNDING_TYPE){
if (item.getType() != BillOrderMoney.ROUNDING_TYPE) {
foodTotal = MoneyUtil.sum(foodTotal, item.getMoney());
if (0 > foodTotal) {
//折扣金額不能超出總額
......@@ -513,7 +567,7 @@ public class BaseOrderPresenter<M extends BaseOrderContract.Model, V extends Bas
*
* @return
*/
private Double getRounding() {
protected Double getRounding() {
for (BillOrderMoney item : mOrderMoneyList) {
if (item.getType() == BillOrderMoney.ROUNDING_TYPE) {
return item.getMoney();
......@@ -552,7 +606,7 @@ public class BaseOrderPresenter<M extends BaseOrderContract.Model, V extends Bas
*
* @return
*/
protected String getSelectOldFoodIds() {
protected String getSelectedOldFoodIds() {
StringBuilder builder = new StringBuilder();
List<OrderDetail> orderDetails = getOldOrderFoodLists();
int start_position = mSelectMealAdapter.getSelect_full_start_position();
......@@ -573,26 +627,40 @@ public class BaseOrderPresenter<M extends BaseOrderContract.Model, V extends Bas
return str;
}
/**
* 獲取當前套餐子食品數量
*
* @return
* 删除已选中的食品
*/
protected int getSelectComboNumber() {
int comboNumber = 0;
protected void removeSelectedFoods() {
List<OrderDetail> orderDetails = getOrderFoodLists();
int start_position = mSelectMealAdapter.getSelect_full_start_position();
int end_position = mSelectMealAdapter.getSelect_full_end_position();
for (int i = orderDetails.size() - 1; i >= 0; i--) {
if (start_position <= i && i <= end_position) {
OrderDetail orderDetail1 = orderDetails.get(i);
if (orderDetail1.getProp() == OrderDetail.COMBO_PROP) {
comboNumber++;
if (orderDetail1.getType() != DISCOUNT_TYPE) {
orderDetails.remove(i);
}
}
}
return comboNumber;
}
/**
* 返回未选中的食品
*
* @return
*/
protected List<OrderDetail> getUnselectedFoods() {
List<OrderDetail> nomalFoodList = new ArrayList<>();
List<OrderDetail> orderDetails = getOldOrderFoodLists();
int start_position = mSelectMealAdapter.getSelect_full_start_position();
int end_position = mSelectMealAdapter.getSelect_full_end_position();
for (int i = orderDetails.size() - 1; i >= 0; i--) {
if (start_position <= i && i <= end_position) {
} else {
nomalFoodList.add(orderDetails.get(i));
}
}
return nomalFoodList;
}
protected CreateOrderRequest getCreateOrderRequest(List<OrderDetail> foodList) {
......@@ -615,7 +683,8 @@ public class BaseOrderPresenter<M extends BaseOrderContract.Model, V extends Bas
AddOrderRequest request = new AddOrderRequest();
request.setMaps(orderDetailBeanToAddFoodRequest(foodList));
request.setOrderId(MyOrderManage.getInstance().getOrderId());
request.setRounding(getRounding());
Double rounding = getRounding();
request.setRounding(rounding != null ? rounding : 0);
Discount orderDiscount = getNesOrderDiscount();
if (orderDiscount != null) {
request.setDiscountId(orderDiscount.getId());
......
......@@ -13,8 +13,10 @@ import com.gingersoft.gsa.cloud.base.utils.VibratorUtils;
import com.gingersoft.gsa.cloud.database.bean.Modifier;
import com.gingersoft.gsa.cloud.database.utils.ModifierDaoUtils;
import com.gingersoft.gsa.cloud.constans.MealConstant;
import com.gingersoft.gsa.cloud.table.R;
import com.gingersoft.gsa.cloud.table.mvp.model.bean.SoldoutCtrFood;
import com.gingersoft.gsa.cloud.table.mvp.ui.activity.MealStandActivity;
import com.gingersoft.gsa.cloud.table.mvp.ui.activity.SoldoutCtrlActivity;
import com.gingersoft.gsa.cloud.table.mvp.ui.adapter.FineItemOneAdapter;
import com.gingersoft.gsa.cloud.table.mvp.ui.adapter.FineItemTwoAdapter;
import com.gingersoft.gsa.cloud.table.mvp.ui.widget.ChooseNumberDialog;
......@@ -29,12 +31,17 @@ import me.jessyan.rxerrorhandler.core.RxErrorHandler;
import javax.inject.Inject;
import com.gingersoft.gsa.cloud.table.mvp.contract.FineItemAllContract;
import com.jess.arms.utils.ArmsUtils;
import com.qmuiteam.qmui.util.QMUIDisplayHelper;
import com.qmuiteam.qmui.util.QMUIResHelper;
import org.simple.eventbus.EventBus;
import java.util.ArrayList;
import java.util.List;
import static com.gingersoft.gsa.cloud.table.mvp.ui.activity.SoldoutCtrlActivity.FOOD_GROUP_TYPE;
import static com.gingersoft.gsa.cloud.table.mvp.ui.activity.SoldoutCtrlActivity.FOOD_TYPE;
import static com.gingersoft.gsa.cloud.table.mvp.ui.activity.SoldoutCtrlActivity.MODIFIER_TYPE;
......@@ -68,7 +75,7 @@ public class FineItemAllPresenter extends BasePresenter<FineItemAllContract.Mode
private List<Modifier> mFineItemTwoList = new ArrayList<>();
//所有沽清数据
private List<SoldoutCtrFood> mCurrentSlodoutFoodList_Full = null;
private List<SoldoutCtrFood> mCurrentSoldoutFoodList_Full = null;
//记录第一层细项上次选中的食品种类
private int mFineItemOneLastPosition = -1;
......@@ -115,8 +122,6 @@ public class FineItemAllPresenter extends BasePresenter<FineItemAllContract.Mode
operartPage = 2;
MealStandActivity mealStandActivity = (MealStandActivity) context;
if (datasBean.isParent()) {
initChildFineItemItemData(datasBean.getMid());
} else {
......@@ -172,15 +177,15 @@ public class FineItemAllPresenter extends BasePresenter<FineItemAllContract.Mode
private void soldoutCtrlModifierItem(Context context, Modifier datasBean) {
//有子细项
if (datasBean.isParent()) {
initChildFineItemItemData(datasBean.getMid());
} else {
// if (datasBean.isParent()) {
// initChildFineItemItemData(datasBean.getMid());
// } else {
// //操作類型(暂停操作、恢复操作)
// if (!isStopOpeart(datasBean)) {
// showInputNumberDialog(datasBean, context);
// }
EventBus.getDefault().post(datasBean, MealConstant.SOLDOUT_MODIFIER);
}
// }
}
public void initModMsgFineItemData(long fid) {
......@@ -263,7 +268,7 @@ public class FineItemAllPresenter extends BasePresenter<FineItemAllContract.Mode
Modifier datasBean = new Modifier();
datasBean.setModifierName("返回");
datasBean.setReturn(true);
datasBean.setBgColor(android.graphics.Color.parseColor("#FFFF0000"));
datasBean.setBgColor(ArmsUtils.getColor(mApplication, R.color.theme_red_color));
modifierList.add(0, datasBean);
setFid(modifierList, fid);
......@@ -281,39 +286,79 @@ public class FineItemAllPresenter extends BasePresenter<FineItemAllContract.Mode
}
/**
* 更新細項組獲細項沽清數據
* 設置細項沽清數據
*
* @param soldoutCtrList
*/
public void updateParentModifierSlodoutFoodList_Full(List<SoldoutCtrFood> soldoutCtrList) {
this.mCurrentSlodoutFoodList_Full = soldoutCtrList;
public void setModifierSoldoutFoodList_Full(List<SoldoutCtrFood> soldoutCtrList) {
this.mCurrentSoldoutFoodList_Full = soldoutCtrList;
}
/**
* 更新細項組沽清數據
*/
public void updateParentModifierSoldoutFoodList_Full() {
clearParentModifierSoldoutCtrData();
setParentModifierSoldoutCtrData(soldoutCtrList);
addStopSoldoutCtrItem(mCurrentSoldoutFoodList_Full);
setSoldoutCtrItem(mCurrentSoldoutFoodList_Full);
mFineItemAllAdapter.setCurrentSlodoutFoodList_Full(soldoutCtrList);
mFineItemAllAdapter.setCurrentSlodoutFoodList_Full(mCurrentSoldoutFoodList_Full);
mFineItemAllAdapter.notifyDataSetChanged();
}
private void addStopSoldoutCtrItem(List<SoldoutCtrFood> soldoutCtrFoods) {
for (Modifier modifier : mFineItemOneList) {
if (modifier.getInvisible() == 2) {
SoldoutCtrFood soldoutCtrFood = new SoldoutCtrFood();
soldoutCtrFood.setType((byte) MODIFIER_TYPE);
soldoutCtrFood.setStop(true);
soldoutCtrFood.setFoodName(modifier.getModifierName());
soldoutCtrFood.setFoodName1(modifier.getModifierName1());
soldoutCtrFood.setFoodName2(modifier.getModifierName2());
soldoutCtrFood.setModifierId(modifier.getMid());
if (!isContainsModifier(soldoutCtrFoods, modifier)) {
soldoutCtrFoods.add(soldoutCtrFood);
}
}
}
for (Modifier modifier : mFineItemTwoList) {
if (modifier.getInvisible() == 2) {
SoldoutCtrFood soldoutCtrFood = new SoldoutCtrFood();
soldoutCtrFood.setType((byte) MODIFIER_TYPE);
soldoutCtrFood.setStop(true);
soldoutCtrFood.setFoodName(modifier.getModifierName());
soldoutCtrFood.setFoodName1(modifier.getModifierName1());
soldoutCtrFood.setFoodName2(modifier.getModifierName2());
soldoutCtrFood.setModifierId(modifier.getMid());
if (!isContainsModifier(soldoutCtrFoods, modifier)) {
soldoutCtrFoods.add(soldoutCtrFood);
}
}
}
}
/**
* 更新細項組下具體細項數據
*/
public void updateChildModifierSlodoutFoodList_Full() {
clearChildModifierSoldoutCtrData();
setChildModifierSoldoutCtrData(mCurrentSlodoutFoodList_Full);
setChildModifierSoldoutCtrData(mCurrentSoldoutFoodList_Full);
}
private void setParentModifierSoldoutCtrData(List<SoldoutCtrFood> soldoutCtrList) {
private void setChildModifierSoldoutCtrData(List<SoldoutCtrFood> soldoutCtrList) {
for (SoldoutCtrFood scc : soldoutCtrList) {
for (Modifier modifier : mFineItemOneList) {
for (Modifier modifier : mFineItemTwoList) {
if (scc.getType() == MODIFIER_TYPE && scc.getModifierId() != null && modifier.getMid() == scc.getModifierId()) {
String qtyName;
if (modifier.getInvisible() == 2) {
qtyName = "暫停";
scc.setStop(true);
modifier.setMaxNumber(qtyName);
modifier.setCurrentMaxNumber(qtyName);
} else {
qtyName = scc.getQtyName();
scc.setStop(false);
modifier.setMaxNumber(qtyName);
modifier.setCurrentMaxNumber(qtyName);
}
......@@ -323,17 +368,36 @@ public class FineItemAllPresenter extends BasePresenter<FineItemAllContract.Mode
}
}
private void setChildModifierSoldoutCtrData(List<SoldoutCtrFood> soldoutCtrList) {
private void setSoldoutCtrItem(List<SoldoutCtrFood> soldoutCtrList) {
for (SoldoutCtrFood scc : soldoutCtrList) {
for (Modifier modifier : mFineItemOneList) {
if (scc.getType() == MODIFIER_TYPE && scc.getModifierId() != null && modifier.getMid() == scc.getModifierId()) {
String qtyName;
if (modifier.getInvisible() == 2) {
qtyName = "暫停";
scc.setStop(true);
modifier.setMaxNumber(qtyName);
modifier.setCurrentMaxNumber(qtyName);
} else {
qtyName = scc.getQtyName();
scc.setStop(false);
modifier.setMaxNumber(qtyName);
modifier.setCurrentMaxNumber(qtyName);
}
setModifierMaxQty(modifier);
}
}
for (Modifier modifier : mFineItemTwoList) {
if (scc.getType() == MODIFIER_TYPE && scc.getModifierId() != null && modifier.getMid() == scc.getModifierId()) {
String qtyName;
if (modifier.getInvisible() == 2) {
qtyName = "暫停";
scc.setStop(true);
modifier.setMaxNumber(qtyName);
modifier.setCurrentMaxNumber(qtyName);
} else {
qtyName = scc.getQtyName();
scc.setStop(false);
modifier.setMaxNumber(qtyName);
modifier.setCurrentMaxNumber(qtyName);
}
......@@ -343,6 +407,15 @@ public class FineItemAllPresenter extends BasePresenter<FineItemAllContract.Mode
}
}
private boolean isContainsModifier(List<SoldoutCtrFood> soldoutCtrFoods, Modifier modifier) {
for (SoldoutCtrFood soldoutCtrFood : soldoutCtrFoods) {
if (soldoutCtrFood.getType() == MODIFIER_TYPE && soldoutCtrFood.getModifierId() == modifier.getMid()) {
return true;
}
}
return false;
}
private void clearParentModifierSoldoutCtrData() {
for (Modifier modifier : mFineItemOneList) {
modifier.setMaxNumber("");
......@@ -418,9 +491,9 @@ public class FineItemAllPresenter extends BasePresenter<FineItemAllContract.Mode
mFineItemOneList.clear();
mFineItemOneList = null;
}
// if (mCurrentSlodoutFoodList_Full != null) {
// mCurrentSlodoutFoodList_Full.clear();
// mCurrentSlodoutFoodList_Full = null;
// if (mCurrentSoldoutFoodList_Full != null) {
// mCurrentSoldoutFoodList_Full.clear();
// mCurrentSoldoutFoodList_Full = null;
// }
}
......
package com.gingersoft.gsa.cloud.table.mvp.presenter;
import android.app.Activity;
import android.app.Application;
import android.content.Context;
import android.view.View;
import com.gingersoft.gsa.cloud.base.utils.VibratorUtils;
import com.gingersoft.gsa.cloud.database.bean.Modifier;
import com.gingersoft.gsa.cloud.database.utils.ModifierDaoUtils;
import com.gingersoft.gsa.cloud.constans.MealConstant;
import com.gingersoft.gsa.cloud.table.mvp.ui.activity.MealStandActivity;
import com.gingersoft.gsa.cloud.table.mvp.ui.adapter.FineItemOneAdapter;
import com.gingersoft.gsa.cloud.table.mvp.ui.adapter.FineItemTwoAdapter;
import com.gingersoft.gsa.cloud.table.mvp.ui.widget.ChooseNumberDialog;
import com.jess.arms.integration.AppManager;
import com.jess.arms.di.scope.FragmentScope;
import com.jess.arms.mvp.BasePresenter;
import com.jess.arms.http.imageloader.ImageLoader;
import me.jessyan.rxerrorhandler.core.RxErrorHandler;
import javax.inject.Inject;
import com.gingersoft.gsa.cloud.table.mvp.contract.FineItemKindContract;
import org.simple.eventbus.EventBus;
import java.util.ArrayList;
import java.util.List;
/**
* ================================================
* Description:
* <p>
* Created by MVPArmsTemplate on 02/19/2020 22:16
* <a href="mailto:jess.yan.effort@gmail.com">Contact me</a>
* <a href="https://github.com/JessYanCoding">Follow me</a>
* <a href="https://github.com/JessYanCoding/MVPArms">Star me</a>
* <a href="https://github.com/JessYanCoding/MVPArms/wiki">See me</a>
* <a href="https://github.com/JessYanCoding/MVPArmsTemplate">模版请保持更新</a>
* ================================================
*/
@FragmentScope
public class FineItemKindPresenter extends BasePresenter<FineItemKindContract.Model, FineItemKindContract.View> {
@Inject
RxErrorHandler mErrorHandler;
@Inject
Application mApplication;
@Inject
ImageLoader mImageLoader;
@Inject
AppManager mAppManager;
private FineItemOneAdapter mFineItemOneAdapter;
private FineItemTwoAdapter mFineItemTwoAdapter;
//所有沽清数据
// private List<SoldoutCtrFood.DatasBean> mCurrentSlodoutFoodList_Full = null;
private List<Modifier> mFineItemOneList = new ArrayList<>();
private List<Modifier> mFineItemTwoList = new ArrayList<>();
//记录第一层细项上次选中的食品种类
private int mFineItemOneLastPosition = -1;
//记录第二层细项上次选中的食品种类
private int mFineItemTwoLastPosition = -1;
//操作頁面:1=沽清頁、2=餐牌頁
private int operartPage = 1;
private Activity IActivity;
@Inject
public FineItemKindPresenter(FineItemKindContract.Model model, FineItemKindContract.View rootView) {
super(model, rootView);
this.IActivity = (Activity) rootView.getCurrentActivity();
}
@Override
public void onDestroy() {
super.onDestroy();
this.mErrorHandler = null;
this.mAppManager = null;
this.mImageLoader = null;
this.mApplication = null;
destroyRecler();
}
public void initAdapter() {
if (mFineItemOneAdapter == null) {
mFineItemOneAdapter = new FineItemOneAdapter(mApplication, mFineItemOneList);
mRootView.setFineItemKindAdapter(mFineItemOneAdapter);
}
if (mFineItemTwoAdapter == null) {
mFineItemTwoAdapter = new FineItemTwoAdapter(mApplication, mFineItemTwoList);
mRootView.setFineItemKindItemAdapter(mFineItemTwoAdapter);
}
}
public void initItemListener(Context context) {
mFineItemOneAdapter.setOnItemClickListener(new FineItemOneAdapter.OnItemClickListener() {
@Override
public void onItemClick(Modifier datasBean, int position) {
VibratorUtils.pressButtonSound(mApplication);
if (context instanceof MealStandActivity) {
operartPage = 2;
MealStandActivity mealStandActivity = (MealStandActivity) context;
//有子细项
if (datasBean.isParent()) {
// if (datasBean.isModKeyboard()) {
// //获取细项备注数据,这里为了拿到最大最小数
//// List<Modifier> modifierList = mealStandActivity.getMealStandModel().queryDB_ComboSelfDetailList(datasBean.getFid(), MealStandModel.modifierMode_Add);
//// for (int i = 0; i < modifierList.size(); i++) {
//// String fid1 = modifierList.get(i).getFid();
//// String fid2 = datasBean.getFid();
//// if (fid1.equals(fid2)) {
// mealStandActivity.getMealStandPresenter().addModalKeyBoardModfier(datasBean);
// mealStandActivity.getMealStandPresenter().displayModalKeyBoardDialog();
//// break;
//// }
//// }
// } else {
initFineItemKindItemData(datasBean.getMid());
// }
} else {
addModifierItem(datasBean);
}
} else {
operartPage = 1;
soldoutCtrlModifierItem(context, datasBean);
}
}
});
mFineItemTwoAdapter.setOnItemClickListener(new FineItemTwoAdapter.OnItemClickListener() {
@Override
public void onItemClick(Modifier datasBean, int position) {
VibratorUtils.pressButtonSound(mApplication);
if (operartPage == 2) {
addModifierItem(datasBean);
} else {
soldoutOpeart(context, datasBean);
}
}
@Override
public void onClickReturnFineItemOne() {
mRootView.getRecycle_fine_item_kind_item().setVisibility(View.INVISIBLE);
mRootView.getRecycle_fine_item_kind().setVisibility(View.VISIBLE);
}
});
}
private void soldoutCtrlModifierItem(Context context, Modifier datasBean) {
//有子细项
if (datasBean.isParent()) {
initFineItemKindItemData(datasBean.getMid());
} else {
soldoutOpeart(context, datasBean);
}
}
private void addModifierItem(Modifier datasBean) {
String OR_Qty = datasBean.getMaxNumber();
int Qty = datasBean.getNumber();
boolean isSoldout = false;
// if (datasBean.isSoldout() || OR_Qty.equalsIgnoreCase("售罄") || OR_Qty.equalsIgnoreCase("暫停")) {
// isSoldout = true;
// } else if (!TextUtils.isEmpty(OR_Qty)) {
// isSoldout = Integer.parseInt(OR_Qty) <= Qty;
// }
// if (isSoldout) {
// String Showtile = LanguageUtils.get_language_system(mApplication, "meal.Qty.short", "%s數量不足(meal.Qty.short)");
// Showtile = Showtile.format(Showtile, AndroidSettingUtils.getDataLanguage(datasBean.getDesc1(), datasBean.getDesc2(), datasBean.getDesc3()));
// TitleDialog.showTitledialog(IActivity, Showtile,
// LanguageUtils.get_language_system(mApplication, "comm.title", "qmui_icon_dialog_surprised"),
// LanguageUtils.get_language_system(mApplication, "comm.BtnOk", "ok"),
// "", null);
// } else {
EventBus.getDefault().post(datasBean, MealConstant.ADD_FOOD_MODIFIER);
// }
}
private void soldoutOpeart(Context context, Modifier datasBean) {
//操作類型(暂停操作、恢复操作)
if (!isStopOpeart(datasBean)) {
//选择沽清的数量
ChooseNumberDialog inputNumberDialog = new ChooseNumberDialog(context);
inputNumberDialog.builder();
inputNumberDialog.setOnClickListener(new ChooseNumberDialog.OnClickListener() {
@Override
public void onComfirmClick(String number) {
// EventBus.getDefault().post(new InsertSoldoutCtrlEvent(datasBean.getMID(), number), "InsertSoldoutCtrlEvent");
}
@Override
public void onBackPage() {
}
});
inputNumberDialog.setType(2);
inputNumberDialog.setCancelable(true);
inputNumberDialog.show();
}
}
private boolean isStopOpeart(Modifier datasBean) {
boolean isStopOpeart = false;
// if (mCurrentSlodoutFoodList_Full != null && mCurrentSlodoutFoodList_Full.size() > 0) {
// for (SoldoutCtrFood.DatasBean csf : mCurrentSlodoutFoodList_Full) {
// if (csf.getItemID().equals(datasBean.getMID()) && csf.getType().equals("M")) {
// if (!TextUtils.isEmpty(csf.get_QtyName())) {
// isStopOpeart = true;
// //暂停或者售罄直接提示恢复
// EventBus.getDefault().post(csf, "toRestoreBeforeEvent");
// }
// }
// }
// }
return isStopOpeart;
}
public void initFineItemKindData(long fid) {
mFineItemOneLastPosition = -1;
//获取数据
ModifierDaoUtils modifierDaoUtils = new ModifierDaoUtils(mApplication);
List<Modifier> modifierList = modifierDaoUtils.queryModifierByModModTasteVisibleQueryBuilder();
if (modifierList == null || modifierList.size() == 0) {
mFineItemOneList.clear();
mFineItemOneAdapter.notifyDataSetChanged();
return;
}
setFid(modifierList, fid);
mFineItemOneList.clear();
mFineItemOneList.addAll(modifierList);
mRootView.setFineItemKindRecycleSpanCount(mFineItemOneList.size());
mFineItemOneAdapter.notifyDataSetChanged();
}
public void initFineItemKindItemData(long fid) {
mFineItemTwoLastPosition = -1;
//获取数据
ModifierDaoUtils modifierDaoUtils = new ModifierDaoUtils(mApplication);
List<Modifier> modifierList = modifierDaoUtils.queryModifierByTopidAndVisibleQueryBuilder(fid);
if (modifierList == null || modifierList.size() == 0) {
return;
}
setFid(modifierList, fid);
//添加返回按鈕
Modifier datasBean = new Modifier();
datasBean.setModifierName("返回");
datasBean.setReturn(true);
datasBean.setBgColor(android.graphics.Color.parseColor("#FFFF0000"));
modifierList.add(0, datasBean);
mFineItemTwoList.clear();
mFineItemTwoList.addAll(modifierList);
mRootView.setFineItemKindItemRecycleSpanCount(mFineItemTwoList.size());
mFineItemTwoAdapter.notifyDataSetChanged();
mRootView.getRecycle_fine_item_kind_item().setVisibility(View.VISIBLE);
mRootView.getRecycle_fine_item_kind().setVisibility(View.INVISIBLE);
}
private void setFid(List<Modifier> fineItemList, long fid) {
if (fineItemList == null)
return;
for (int i = 0; i < fineItemList.size(); i++) {
Modifier modifier = fineItemList.get(i);
modifier.setFid(fid);
}
}
// public void updateCurrentSlodoutFoodList_Full1(List<SoldoutCtrFood.DatasBean> event) {
// this.mCurrentSlodoutFoodList_Full = event;
// mFineItemOneAdapter.setmCurrentSlodoutFoodList_Full(event);
// mFineItemOneAdapter.notifyDataSetChanged();
// }
//
// public void updateCurrentSlodoutFoodList_Full2(List<SoldoutCtrFood.DatasBean> event) {
// mFineItemTwoAdapter.setmCurrentSlodoutFoodList_Full(event);
// mFineItemTwoAdapter.notifyDataSetChanged();
// }
public void changeLanguageNotifyChanged() {
mFineItemOneAdapter.notifyDataSetChanged();
mFineItemTwoAdapter.notifyDataSetChanged();
}
private void destroyRecler() {
if (mFineItemOneAdapter != null) {
mFineItemOneAdapter = null;
}
if (mFineItemTwoAdapter != null) {
mFineItemTwoAdapter = null;
}
// if (mCurrentSlodoutFoodList_Full != null) {
// mCurrentSlodoutFoodList_Full.clear();
// mCurrentSlodoutFoodList_Full = null;
// }
if (mFineItemOneList != null) {
mFineItemOneList.clear();
mFineItemOneList = null;
}
if (mFineItemTwoList != null) {
mFineItemTwoList.clear();
mFineItemTwoList = null;
}
}
}
package com.gingersoft.gsa.cloud.table.mvp.presenter;
import android.app.Activity;
import android.app.Application;
import android.content.Context;
import android.text.TextUtils;
import android.view.View;
import com.gingersoft.gsa.cloud.base.common.bean.OrderDetail;
import com.gingersoft.gsa.cloud.base.utils.LanguageUtils;
import com.gingersoft.gsa.cloud.base.utils.VibratorUtils;
import com.gingersoft.gsa.cloud.database.bean.ComboItem;
import com.gingersoft.gsa.cloud.database.bean.Food;
import com.gingersoft.gsa.cloud.database.bean.Modifier;
import com.gingersoft.gsa.cloud.database.utils.ModifierDaoUtils;
import com.gingersoft.gsa.cloud.constans.MealConstant;
import com.gingersoft.gsa.cloud.table.mvp.contract.FineItemOneselfContract;
import com.gingersoft.gsa.cloud.table.mvp.model.bean.SoldoutCtrFood;
import com.gingersoft.gsa.cloud.table.mvp.ui.activity.MealStandActivity;
import com.gingersoft.gsa.cloud.table.mvp.ui.activity.SoldoutCtrlActivity;
import com.gingersoft.gsa.cloud.table.mvp.ui.adapter.FineItemOneAdapter;
import com.gingersoft.gsa.cloud.table.mvp.ui.adapter.FineItemTwoAdapter;
import com.gingersoft.gsa.cloud.table.mvp.ui.adapter.meal.ComboAdapter;
import com.gingersoft.gsa.cloud.table.mvp.ui.adapter.meal.ModifierAdapter;
import com.gingersoft.gsa.cloud.table.mvp.ui.widget.ChooseNumberDialog;
import com.gingersoft.gsa.cloud.ui.widget.dialog.CommonTipDialog;
import com.jess.arms.integration.AppManager;
import com.jess.arms.di.scope.FragmentScope;
import com.jess.arms.mvp.BasePresenter;
import com.jess.arms.http.imageloader.ImageLoader;
import me.jessyan.rxerrorhandler.core.RxErrorHandler;
import javax.inject.Inject;
import org.simple.eventbus.EventBus;
import java.util.ArrayList;
import java.util.List;
import static com.gingersoft.gsa.cloud.table.mvp.ui.activity.SoldoutCtrlActivity.FOOD_GROUP_TYPE;
import static com.gingersoft.gsa.cloud.table.mvp.ui.activity.SoldoutCtrlActivity.FOOD_TYPE;
import static com.gingersoft.gsa.cloud.table.mvp.ui.activity.SoldoutCtrlActivity.MODIFIER_TYPE;
/**
* ================================================
* Description:
* <p>
* Created by MVPArmsTemplate on 02/19/2020 22:16
* <a href="mailto:jess.yan.effort@gmail.com">Contact me</a>
* <a href="https://github.com/JessYanCoding">Follow me</a>
* <a href="https://github.com/JessYanCoding/MVPArms">Star me</a>
* <a href="https://github.com/JessYanCoding/MVPArms/wiki">See me</a>
* <a href="https://github.com/JessYanCoding/MVPArmsTemplate">模版请保持更新</a>
* ================================================
*/
@FragmentScope
public class FineItemOneselfPresenter extends BasePresenter<FineItemOneselfContract.Model, FineItemOneselfContract.View> {
@Inject
RxErrorHandler mErrorHandler;
@Inject
Application mApplication;
@Inject
ImageLoader mImageLoader;
@Inject
AppManager mAppManager;
private ComboAdapter mComboAdapter;
private ModifierAdapter mModifierAdapter;
//套餐细项数据
private List<ComboItem> mFoodComboList = new ArrayList<>();
private List<Modifier> mModifierList = new ArrayList<>();
//所有沽清数据
private List<SoldoutCtrFood> mCurrentSoldoutFoodList_Full = null;
private SoldoutCtrlActivity IActivity;
@Inject
public FineItemOneselfPresenter(FineItemOneselfContract.Model model, FineItemOneselfContract.View rootView) {
super(model, rootView);
this.IActivity = (SoldoutCtrlActivity) rootView.getCurrentActivity();
}
@Override
public void onDestroy() {
super.onDestroy();
this.mErrorHandler = null;
this.mAppManager = null;
this.mImageLoader = null;
this.mApplication = null;
}
public void initAdapter() {
if (mComboAdapter == null) {
mComboAdapter = new ComboAdapter(IActivity, mFoodComboList);
mRootView.setComboAdapter(mComboAdapter);
}
if (mModifierAdapter == null) {
mModifierAdapter = new ModifierAdapter(IActivity, mModifierList);
mRootView.setModifierAdapter(mModifierAdapter);
}
}
public void initItemListener(Context context) {
mComboAdapter.setOnItemClickListener(new ComboAdapter.OnItemClickListener() {
@Override
public void onItemClick(ComboItem datasBean, int position) {
if (!foodStopOpeart(datasBean)) {
IActivity.showSoldoutNumberDialog(datasBean.getId(), null);
}
}
});
mModifierAdapter.setOnItemClickListener(new ModifierAdapter.OnItemClickListener() {
@Override
public void onItemClick(Modifier datasBean, int position) {
if (!modifierStopOpeart(datasBean)) {
IActivity.showSoldoutNumberDialog(null, datasBean.getMid());
}
}
});
}
public void loadComboData(long fid) {
if (mModifierList.size() > 0) {
mModifierList.clear();
}
List<Modifier> modifierList = mModel.queryDB_ModifierList(fid, ModifierDaoUtils.modifierMode_All);
mModifierList.addAll(modifierList);
}
public boolean foodStopOpeart(ComboItem datasBean) {
boolean isStopOpeart = false;
if (mCurrentSoldoutFoodList_Full != null) {
for (SoldoutCtrFood csf : mCurrentSoldoutFoodList_Full) {
if (csf.getFoodId() != null && datasBean.getId() != null &&
csf.getFoodId().equals(datasBean.getId()) && csf.getType() == FOOD_TYPE) {
if (datasBean.getInvisible() == 2 || !TextUtils.isEmpty(csf.getQtyName())) {
isStopOpeart = true;
if (datasBean.getInvisible() == 2) {
//恢復暫停數量
String msg = LanguageUtils.get_language_system(IActivity, "whether.recover", "是否恢復[") + datasBean.getName() + "]";
Class[] parameterTypes = {Long.class, int.class, int.class};
Object[] parameters = {datasBean.getId(), 2, 0};
CommonTipDialog.showDoubtDialog(IActivity, msg, SoldoutCtrlPresenter.class, IActivity.getSoldoutCtrlPresenter(), "updateInvisible", parameterTypes, parameters);
} else {
//暂停或者售罄直接提示恢复
String msg = LanguageUtils.get_language_system(IActivity, "whether.recover", "是否恢復[") + datasBean.getName() + "]";
Class[] parameterTypes = {long.class};
Object[] parameters = {csf.getId()};
CommonTipDialog.showDoubtDialog(IActivity, msg, SoldoutCtrlPresenter.class, IActivity.getSoldoutCtrlPresenter(), "restoreSoldoutCtrl", parameterTypes, parameters);
}
break;
}
}
}
}
return isStopOpeart;
}
private boolean modifierStopOpeart(Modifier datasBean) {
boolean isStopOpeart = false;
if (mCurrentSoldoutFoodList_Full != null) {
for (SoldoutCtrFood csf : mCurrentSoldoutFoodList_Full) {
if (csf.getModifierId() != null) {
if (csf.getModifierId() == datasBean.getMid() && csf.getType() == MODIFIER_TYPE) {
if (datasBean.getInvisible() == 2 || !TextUtils.isEmpty(csf.getQtyName())) {
isStopOpeart = true;
if (datasBean.getInvisible() == 2) {
//恢復暫停數量
String msg = LanguageUtils.get_language_system(IActivity, "whether.recover", "是否恢復[") + datasBean.getModifierName() + "]";
Class[] parameterTypes = {Long.class, int.class, int.class};
Object[] parameters = {datasBean.getMid(), 3, 0};
CommonTipDialog.showDoubtDialog(IActivity, msg, SoldoutCtrlPresenter.class, IActivity.getSoldoutCtrlPresenter(), "updateInvisible", parameterTypes, parameters);
} else {
String msg = LanguageUtils.get_language_system(IActivity, "whether.recover", "是否恢復[") + datasBean.getModifierName() + "]";
Class[] parameterTypes = {long.class};
Object[] parameters = {csf.getId()};
CommonTipDialog.showDoubtDialog(IActivity, msg, SoldoutCtrlPresenter.class, IActivity.getSoldoutCtrlPresenter(), "restoreSoldoutCtrl", parameterTypes, parameters);
}
break;
}
}
}
}
}
return isStopOpeart;
}
/**
* 設置細項組獲細項沽清數據
*
* @param soldoutCtrList
*/
public void setSoldoutFoodList_Full(List<SoldoutCtrFood> soldoutCtrList) {
this.mCurrentSoldoutFoodList_Full = soldoutCtrList;
}
/**
* 更新細項組沽清數據
*/
public void updateSoldoutFoodList_Full() {
for (int i = mCurrentSoldoutFoodList_Full.size() - 1; i >= 0; i--) {
if (mCurrentSoldoutFoodList_Full.get(i).getType() == MODIFIER_TYPE && mCurrentSoldoutFoodList_Full.get(i).isStop()) {
mCurrentSoldoutFoodList_Full.remove(i);
}
}
cleaSoldoutCtrData();
addStopSoldoutCtrItem(mCurrentSoldoutFoodList_Full);
setSoldoutCtrItem(mCurrentSoldoutFoodList_Full);
// mComboAdapter.notifyDataSetChanged();
mModifierAdapter.notifyDataSetChanged();
}
private void setSoldoutCtrItem(List<SoldoutCtrFood> soldoutCtrList) {
for (SoldoutCtrFood scc : soldoutCtrList) {
for (Modifier modifier : mModifierList) {
if (scc.getType() == MODIFIER_TYPE && scc.getModifierId() != null && modifier.getMid() == scc.getModifierId()) {
String qtyName;
if (modifier.getInvisible() == 2) {
qtyName = "暫停";
scc.setStop(true);
modifier.setMaxNumber(qtyName);
modifier.setCurrentMaxNumber(qtyName);
} else {
qtyName = scc.getQtyName();
scc.setStop(false);
modifier.setMaxNumber(qtyName);
modifier.setCurrentMaxNumber(qtyName);
}
}
}
}
}
private void addStopSoldoutCtrItem(List<SoldoutCtrFood> soldoutCtrFoods) {
for (Modifier modifier : mModifierList) {
if (modifier.getInvisible() == 2) {
SoldoutCtrFood soldoutCtrFood = new SoldoutCtrFood();
soldoutCtrFood.setType((byte) MODIFIER_TYPE);
soldoutCtrFood.setStop(true);
soldoutCtrFood.setFoodName(modifier.getModifierName());
soldoutCtrFood.setFoodName1(modifier.getModifierName1());
soldoutCtrFood.setFoodName2(modifier.getModifierName2());
soldoutCtrFood.setModifierId(modifier.getMid());
if (!isContainsModifier(soldoutCtrFoods, modifier)) {
soldoutCtrFoods.add(soldoutCtrFood);
}
}
}
}
private boolean isContainsModifier(List<SoldoutCtrFood> soldoutCtrFoods, Modifier modifier) {
for (SoldoutCtrFood soldoutCtrFood : soldoutCtrFoods) {
if (soldoutCtrFood.getType() == MODIFIER_TYPE && soldoutCtrFood.getModifierId() == modifier.getMid()) {
return true;
}
}
return false;
}
private void cleaSoldoutCtrData() {
for (Modifier modifier : mModifierList) {
modifier.setMaxNumber("");
modifier.setCurrentMaxNumber("");
}
for (ComboItem comboItem : mFoodComboList) {
comboItem.setMaxNumber("");
comboItem.setCurrentMaxNumber("");
}
}
}
......@@ -158,17 +158,30 @@ public class MealStandPresenter extends BaseOrderPresenter<MealStandContract.Mod
if (foodGroupList != null && foodGroupList.size() > 0) {
mFoodGroupList.addAll(foodGroupList);
//默認選中第一組
mFoodGroupList.get(0).setSelected(true);
Food defalutFoodGroup = getDefalutFoodGroup(mFoodGroupList);
if(defalutFoodGroup != null) {
//默認選中第一組
defalutFoodGroup.setSelected(true);
}
IActivity.initFoodGroupView(mFoodGroupList);
// if (!foodGroupConditionFilter(mFoodGroupList.get(0), false)) {
// return;
// }
if(defalutFoodGroup != null) {
changedMealByParentId(defalutFoodGroup.getId());
}
}
}
changedMealByParentId(mFoodGroupList.get(0).getId());
private Food getDefalutFoodGroup(List<Food> foodGroupList) {
Food defalutFoodGroup = null;
for (Food food: foodGroupList) {
if(food.getInvisible() == 0){
defalutFoodGroup = food;
break;
}
}
return defalutFoodGroup;
}
......@@ -261,10 +274,9 @@ public class MealStandPresenter extends BaseOrderPresenter<MealStandContract.Mod
RvMealClicked = false;
// Food orderBean = isParentFood(datasBean.getFID());
// if (orderBean != null && !foodConditionFilter(orderBean)) {
// return;
// }
if (!comboConditionFilter(datasBean)) {
return;
}
if (cutOutCombo(datasBean) == -100) {
//已送單數量已等於最大數,不能繼續添加
return;
......@@ -340,11 +352,13 @@ public class MealStandPresenter extends BaseOrderPresenter<MealStandContract.Mod
for (int i = 0; i < mFoodComboList.size(); i++) {
//自动添加组合子食品
ComboItem comboItem = mFoodComboList.get(i);
int defNumber = Integer.parseInt(comboItem.getDefmodifier());
if (defNumber != 0) {
long id = mCurrentOrderDetailBean.isNew() ? mCurrentOrderDetailBean.getProductId() : mCurrentOrderDetailBean.getId();
mCurrentOrderDetailBean = OrderDetail.comboTransOrderDetail(comboItem, id, mCurrentOrderDetailBean.getProductId(), defNumber, OrderDetail.COMBO_PROP, RvMealClicked);
addPosition = addComboItem(mCurrentOrderDetailBean);
if (comboItem.getInvisible() != 2) {
int defNumber = Integer.parseInt(comboItem.getDefmodifier());
if (defNumber != 0) {
long id = mCurrentOrderDetailBean.isNew() ? mCurrentOrderDetailBean.getProductId() : mCurrentOrderDetailBean.getId();
mCurrentOrderDetailBean = OrderDetail.comboTransOrderDetail(comboItem, id, mCurrentOrderDetailBean.getProductId(), defNumber, OrderDetail.COMBO_PROP, RvMealClicked);
addPosition = addComboItem(mCurrentOrderDetailBean);
}
}
}
}
......@@ -352,10 +366,12 @@ public class MealStandPresenter extends BaseOrderPresenter<MealStandContract.Mod
//自动添加mixqty>1細項
for (int i = 0; i < mModifierList.size(); i++) {
Modifier modfier = mModifierList.get(i);
int defNumber = Integer.parseInt(modfier.getDefmodifier());
if (defNumber != 0) {
long id = mCurrentOrderDetailBean.isNew() ? mCurrentOrderDetailBean.getProductId() : mCurrentOrderDetailBean.getId();
addPosition = mSelectMealAdapter.addFoodItem(OrderDetail.modifierTransOrderDetail(modfier, id, mCurrentOrderDetailBean.getProductId(), defNumber));
if (modfier.getInvisible() != 2) {
int defNumber = Integer.parseInt(modfier.getDefmodifier());
if (defNumber != 0) {
long id = mCurrentOrderDetailBean.isNew() ? mCurrentOrderDetailBean.getProductId() : mCurrentOrderDetailBean.getId();
addPosition = mSelectMealAdapter.addFoodItem(OrderDetail.modifierTransOrderDetail(modfier, id, mCurrentOrderDetailBean.getProductId(), defNumber));
}
}
}
return addPosition;
......@@ -408,8 +424,14 @@ public class MealStandPresenter extends BaseOrderPresenter<MealStandContract.Mod
//获取套餐细项数据
List<ComboItem> comboItems = mModel.queryDB_ComboList(fid);
comboItemList.addAll(comboItems);
//设置套餐沽清數據
setComboItemSoldoutCtrData(comboItemList, mSoldoutCtrList);
}
List<Modifier> modifierList = mModel.queryDB_ModifierList(fid, ModifierDaoUtils.modifierMode_All);
if (modifierList.size() > 0) {
//设置细项沽清數據
setModifierSoldoutCtrData(modifierList, mSoldoutCtrList);
}
//設置默認選中套餐食品
setComboDefModifier(comboItemList);
//設置默認選中細項
......@@ -603,8 +625,7 @@ public class MealStandPresenter extends BaseOrderPresenter<MealStandContract.Mod
}
mSoldoutCtrList.addAll(soldoutCtrFoods);
//設置食品沽清數
setFoodSoldoutCtrData();
updateFoodSoldoutCtrData(mSoldoutCtrList);
//設置細項沽清數
IActivity.setFineItemSlodoutListFull(mSoldoutCtrList);
} else {
......@@ -731,14 +752,21 @@ public class MealStandPresenter extends BaseOrderPresenter<MealStandContract.Mod
public void deleteFood(int maxNumber, int deleteNumber, long reasonId) {
String ids = getSelectOldFoodIds();
//删除食品前先保存一份
List<OrderDetail> recodeOrderFoods = new ArrayList<>();
recodeOrderFoods.addAll(getOrderFoodLists());
String ids = getSelectedOldFoodIds();
if (TextUtils.isEmpty(ids)) {
return;
}
//删除已选中食品 重新计算账单小数 折扣
removeSelectedFoods();
updateOrderMoneyItem();
DeleteOrderRequest.Request request = getDeleteOrderRequest(ids, reasonId, maxNumber, deleteNumber);
String deleteOrderRequest = GsonUtils.GsonString(request);
RequestBody requestBody = RequestBody.create(MediaType.parse("application/json"), deleteOrderRequest);
RequestBody requestBody = RequestBody.create(MediaType.parse("application/json"), deleteOrderRequest+",");
mModel.deleteFood(requestBody)
.subscribeOn(Schedulers.io())
......@@ -749,10 +777,22 @@ public class MealStandPresenter extends BaseOrderPresenter<MealStandContract.Mod
.compose(RxLifecycleUtils.bindToLifecycle(mRootView))
.subscribe(new ErrorHandleSubscriber<BaseRespose>(mErrorHandler) {
private void restoreOrderDetails(){
getOrderFoodLists().addAll(recodeOrderFoods);
recodeOrderFoods.clear();
mSelectMealAdapter.notifyDataSetChanged();
}
@Override
public void onError(Throwable t) {
super.onError(t);
restoreOrderDetails();
}
@Override
public void onNext(@NonNull BaseRespose info) {
if (info == null) {
restoreOrderDetails();
mRootView.showMessage("刪除失敗");
return;
}
......@@ -835,7 +875,6 @@ public class MealStandPresenter extends BaseOrderPresenter<MealStandContract.Mod
private void showDeleteFoodDialog(int maxNumber, int deleteNumber, int reasonId, String reason) {
QMUIDialog.MessageDialogBuilder dialogBuilder = new QMUIDialog.MessageDialogBuilder(IActivity);
dialogBuilder.setTitle("溫馨提示");
dialogBuilder.setTitleIcon(R.drawable.qmui_icon_dialog_doubt);
dialogBuilder.setMessage("是否確認取消該食品?" + "\n取消原因 [" + reason + "]");
dialogBuilder.addAction("取消", (dialog, index) -> dialog.dismiss());
......@@ -1003,15 +1042,98 @@ public class MealStandPresenter extends BaseOrderPresenter<MealStandContract.Mod
updateOrderFoodNumber();
}
private void setComboItemSoldoutCtrData(List<ComboItem> comboItemList, List<SoldoutCtrFood> soldoutCtrFoods) {
addFoodSoldoutCtrItem(soldoutCtrFoods);
for (SoldoutCtrFood scc : soldoutCtrFoods) {
for (ComboItem comboItem : comboItemList) {
if (scc.getType() == FOOD_TYPE && scc.getFoodId() != null && comboItem.getFid() != null && comboItem.getFid().equals(scc.getFoodId())) {
String qtyName;
if (comboItem.getInvisible() == 2) {
qtyName = "暫停";
comboItem.setMaxNumber(qtyName);
comboItem.setCurrentMaxNumber(qtyName);
} else {
qtyName = scc.getQtyName();
comboItem.setMaxNumber(qtyName);
comboItem.setCurrentMaxNumber(qtyName);
}
}
}
}
}
private void setModifierSoldoutCtrData(List<Modifier> modifierList, List<SoldoutCtrFood> soldoutCtrFoods) {
addFoodSoldoutCtrItem(soldoutCtrFoods);
for (SoldoutCtrFood scc : soldoutCtrFoods) {
for (Modifier modifier : modifierList) {
if (scc.getType() == FOOD_TYPE && scc.getFoodId() != null && modifier.getMid() != 0 && modifier.getMid() == scc.getFoodId()) {
String qtyName;
if (modifier.getInvisible() == 2) {
qtyName = "暫停";
modifier.setMaxNumber(qtyName);
modifier.setCurrentMaxNumber(qtyName);
} else {
qtyName = scc.getQtyName();
modifier.setMaxNumber(qtyName);
modifier.setCurrentMaxNumber(qtyName);
}
}
}
}
}
/**
* 更新沽清數據
*
* @param soldoutCtrFoods
*/
public void updateFoodSoldoutCtrData(List<SoldoutCtrFood> soldoutCtrFoods) {
addFoodSoldoutCtrItem(soldoutCtrFoods);
setFoodSoldoutCtrData(soldoutCtrFoods);
}
/**
* 添加食品組 食品沽清項
*
* @param soldoutCtrFoods
*/
private void addFoodSoldoutCtrItem(List<SoldoutCtrFood> soldoutCtrFoods) {
for (Food foodGroupBean : mFoodGroupList) {
if (foodGroupBean.getInvisible() == 2) {
SoldoutCtrFood soldoutCtrFood = new SoldoutCtrFood();
soldoutCtrFood.setType((byte) FOOD_GROUP_TYPE);
soldoutCtrFood.setStop(true);
soldoutCtrFood.setFoodName(foodGroupBean.getFoodName());
soldoutCtrFood.setFoodName1(foodGroupBean.getFoodName1());
soldoutCtrFood.setFoodName2(foodGroupBean.getFoodName2());
soldoutCtrFood.setFoodId(foodGroupBean.getId());
soldoutCtrFoods.add(soldoutCtrFood);
}
}
for (Food foodBean : mFoodList) {
if (foodBean.getInvisible() == 2) {
SoldoutCtrFood soldoutCtrFood = new SoldoutCtrFood();
soldoutCtrFood.setType((byte) FOOD_TYPE);
soldoutCtrFood.setStop(true);
soldoutCtrFood.setFoodName(foodBean.getFoodName());
soldoutCtrFood.setFoodName1(foodBean.getFoodName1());
soldoutCtrFood.setFoodName2(foodBean.getFoodName2());
soldoutCtrFood.setFoodId(foodBean.getId());
soldoutCtrFoods.add(soldoutCtrFood);
}
}
}
/**
* 設置食品沽清數據
*/
public void setFoodSoldoutCtrData() {
public void setFoodSoldoutCtrData(List<SoldoutCtrFood> soldoutCtrFoods) {
clearFoodSoldoutCtrData();
for (SoldoutCtrFood scc : mSoldoutCtrList) {
for (SoldoutCtrFood scc : soldoutCtrFoods) {
for (Food foodGroupBean : mFoodGroupList) {
if (scc.getType() == FOOD_GROUP_TYPE && scc.getFoodId() != null && foodGroupBean.getId() != null && foodGroupBean.getId().equals(scc.getFoodId())) {
String qtyName ;
String qtyName;
if (foodGroupBean.getInvisible() == 2) {
qtyName = "暫停";
foodGroupBean.setMaxNumber(qtyName);
......@@ -1042,6 +1164,7 @@ public class MealStandPresenter extends BaseOrderPresenter<MealStandContract.Mod
mFoodAdapter.notifyDataSetChanged();
}
private void clearFoodSoldoutCtrData() {
for (Food foodGroupBean : mFoodGroupList) {
foodGroupBean.setMaxNumber("");
......@@ -1107,15 +1230,12 @@ public class MealStandPresenter extends BaseOrderPresenter<MealStandContract.Mod
}
private boolean foodConditionFilter(Food foodBean) {
long Invisible = foodBean.getInvisible();
if (Invisible == 2) {
String msg = "[" + foodBean.getFoodName() + "]" + LanguageUtils.get_language_system(IActivity, "Comm.pause", "已暫停");
CommonTipDialog.showSurpisedDialog(IActivity, msg, null, null, null, null, null);
return false;
}
String User_Qty = foodBean.getCurrentMaxNumber();
if (!TextUtils.isEmpty(User_Qty)) {
if (User_Qty.equals("售罄") || User_Qty.equals("暫停")) {
......@@ -1127,6 +1247,24 @@ public class MealStandPresenter extends BaseOrderPresenter<MealStandContract.Mod
return true;
}
private boolean comboConditionFilter(ComboItem comboItem) {
long Invisible = comboItem.getInvisible();
if (Invisible == 2) {
String msg = "[" + comboItem.getName() + "]" + LanguageUtils.get_language_system(IActivity, "Comm.pause", "已暫停");
CommonTipDialog.showSurpisedDialog(IActivity, msg, null, null, null, null, null);
return false;
}
String User_Qty = comboItem.getCurrentMaxNumber();
if (!TextUtils.isEmpty(User_Qty)) {
if (User_Qty.equals("售罄") || User_Qty.equals("暫停")) {
String msg = "[" + comboItem.getName() + "]" + User_Qty;
CommonTipDialog.showSurpisedDialog(IActivity, msg, null, null, null, null, null);
return false;
}
}
return true;
}
public void updateOrderFoodNumber() {
setFoodBtnNumber();
setFoodGroupBtnNumber(IActivity.getFoodGroupGridViewAdapter(), mFoodGroupList);
......@@ -1244,9 +1382,13 @@ public class MealStandPresenter extends BaseOrderPresenter<MealStandContract.Mod
private void setModifierDefModifier(List<Modifier> modifierList) {
String defmodifier = null;
for (int i = 0; i < modifierList.size(); i++) {
String modifier = modifierList.get(i).getDefmodifier().trim();
if (!TextUtils.isEmpty(modifier)) {
defmodifier = modifier + ",";
Modifier item = modifierList.get(i);
if (item.getInvisible() != 2) {
//過濾掉已暫停細項
String modifier = item.getDefmodifier().trim();
if (!TextUtils.isEmpty(modifier)) {
defmodifier = modifier + ",";
}
}
}
if (!TextUtils.isEmpty(defmodifier)) {
......@@ -1280,9 +1422,13 @@ public class MealStandPresenter extends BaseOrderPresenter<MealStandContract.Mod
private void setComboDefModifier(List<ComboItem> comboItemList) {
String defmodifier = null;
for (int i = 0; i < comboItemList.size(); i++) {
String modifier = comboItemList.get(i).getDefmodifier().trim();
if (!TextUtils.isEmpty(modifier)) {
defmodifier = modifier + ",";
ComboItem comboItem = comboItemList.get(i);
if (comboItem.getInvisible() != 2) {
//過濾掉已暫停食品
String modifier = comboItem.getDefmodifier().trim();
if (!TextUtils.isEmpty(modifier)) {
defmodifier = modifier + ",";
}
}
}
if (!TextUtils.isEmpty(defmodifier)) {
......@@ -1487,6 +1633,8 @@ public class MealStandPresenter extends BaseOrderPresenter<MealStandContract.Mod
request.setOrderId(orderId);
request.setType(type);
request.setReasonId(reasonId);
Double rounding = getRounding();
request.setRounding(rounding != null ? rounding : 0);
return request;
}
......
......@@ -519,14 +519,23 @@ public class OrderContentPresenter extends BaseOrderPresenter<OrderContentContra
private void transferFood(TableBean.DataBean dataBean) {
String orderDetailsIds = getSelectOldFoodIds();
//删除食品前先保存一份
List<OrderDetail> recodeOrderFoods = new ArrayList<>();
recodeOrderFoods.addAll(getOrderFoodLists());
long orderId = MyOrderManage.getInstance().getOrderId();
String ids = getSelectedOldFoodIds();
if (TextUtils.isEmpty(ids)) {
return;
}
//删除已选中食品 重新计算账单小数 折扣
removeSelectedFoods();
updateOrderMoneyItem();
RequestBody requestBody = new FormBody.Builder()
.add("id", String.valueOf(dataBean.getId()))
.add("orderId", String.valueOf(orderId))
.add("orderDetailsIds", orderDetailsIds)
.add("orderId", String.valueOf(MyOrderManage.getInstance().getOrderId()))
.add("orderDetailsIds", ids)
.build();
mModel.transferFood(requestBody)
......@@ -538,10 +547,23 @@ public class OrderContentPresenter extends BaseOrderPresenter<OrderContentContra
.compose(RxLifecycleUtils.bindToLifecycle(mRootView))
.subscribe(new ErrorHandleSubscriber<BaseRespose>(mErrorHandler) {
private void restoreOrderDetails(){
getOrderFoodLists().addAll(recodeOrderFoods);
recodeOrderFoods.clear();
mSelectMealAdapter.notifyDataSetChanged();
}
@Override
public void onError(Throwable t) {
super.onError(t);
restoreOrderDetails();
}
@Override
public void onNext(@NonNull BaseRespose info) {
if (info == null) {
restoreOrderDetails();
mRootView.showMessage("轉移失敗");
return;
}
......@@ -579,7 +601,7 @@ public class OrderContentPresenter extends BaseOrderPresenter<OrderContentContra
mDiscountDialog.setOnClickListener(new DiscountDialog.Builder.OnClickListener() {
@Override
public void onItemClick(Discount item, int position) {
addOrderDiscount(item, 0, false);
addOrderDiscount(item, 0);
updateOrderMoneyItem();
}
});
......
......@@ -168,15 +168,25 @@ public class SoldoutCtrlPresenter extends BasePresenter<SoldoutCtrlContract.Mode
mCurrentSlodoutFoodAdapter.setSelectPosition(position);
mCurrentSlodoutFoodAdapter.notifyDataSetChanged();
int operatTtpe = 1;
if (datasBean.isStop()) {
//恢復暫停數量
operatTtpe = 0;
long id ;
if (datasBean.getType() == MODIFIER_TYPE) {
id = datasBean.getModifierId();
} else {
id = datasBean.getFoodId();
} //恢復暫停數量
String msg = LanguageUtils.get_language_system(IActivity, "whether.recover", "是否恢復[") + datasBean.getFoodName() + "]";
Class[] parameterTypes = {Long.class, int.class, int.class};
Object[] parameters = {id, datasBean.getType(), 0};
CommonTipDialog.showDoubtDialog(IActivity, msg, SoldoutCtrlPresenter.class, SoldoutCtrlPresenter.this, "updateInvisible", parameterTypes, parameters);
} else {
//恢復沽清數量
String msg = LanguageUtils.get_language_system(mApplication, "whether.recover", "是否恢復[") + datasBean.getName() + "]";
Class[] parameterTypes = {long.class};
Object[] parameters = {datasBean.getId()};
CommonTipDialog.showDoubtDialog(IActivity, msg, SoldoutCtrlPresenter.class, SoldoutCtrlPresenter.this, "restoreSoldoutCtrl", parameterTypes, parameters);
}
String msg = LanguageUtils.get_language_system(mApplication, "whether.recover", "是否恢復[") + datasBean.getName() + "]";
Class[] parameterTypes = {long.class, Long.class, Long.class, int.class, int.class};
Object[] parameters = {datasBean.getId(), datasBean.getFoodId(), datasBean.getModifierId(), datasBean.getType(), operatTtpe};
CommonTipDialog.showDoubtDialog(IActivity, msg, SoldoutCtrlPresenter.class, SoldoutCtrlPresenter.this, "restoreSoldoutCtrl", parameterTypes, parameters);
}
});
mFoodAdapter.setOnItemClickListener(new FoodAdapter.OnItemClickListener() {
......@@ -188,8 +198,10 @@ public class SoldoutCtrlPresenter extends BasePresenter<SoldoutCtrlContract.Mode
if (mRootView.getSoldoutType() == FOOD_TYPE) {
if (!foodStopOpeart(datasBean)) {
showSoldoutNumberDialog(datasBean.getId(), null);
IActivity.showSoldoutNumberDialog(datasBean.getId(), null);
}
} else if (mRootView.getSoldoutType() == MODIFIER_TYPE) {
IActivity.showModfierLayout(datasBean.getId());
}
}
});
......@@ -198,7 +210,7 @@ public class SoldoutCtrlPresenter extends BasePresenter<SoldoutCtrlContract.Mode
@Subscriber(tag = MealConstant.SOLDOUT_MODIFIER)
private void soldoutModifierItem(Modifier datasBean) {
if (!modifierStopOpeart(datasBean)) {
showSoldoutNumberDialog(null, datasBean.getMid());
IActivity.showSoldoutNumberDialog(null, datasBean.getMid());
}
}
......@@ -210,16 +222,19 @@ public class SoldoutCtrlPresenter extends BasePresenter<SoldoutCtrlContract.Mode
csf.getFoodId().equals(datasBean.getId()) && csf.getType() == FOOD_TYPE) {
if (datasBean.getInvisible() == 2 || !TextUtils.isEmpty(csf.getQtyName())) {
isStopOpeart = true;
int operatTtpe = 1;
if (datasBean.getInvisible() == 2) {
//恢復暫停數量
operatTtpe = 0;
String msg = LanguageUtils.get_language_system(IActivity, "whether.recover", "是否恢復[") + datasBean.getFoodName() + "]";
Class[] parameterTypes = {Long.class, int.class, int.class};
Object[] parameters = {datasBean.getId(), 2, 0};
CommonTipDialog.showDoubtDialog(IActivity, msg, SoldoutCtrlPresenter.class, this, "updateInvisible", parameterTypes, parameters);
} else {
//暂停或者售罄直接提示恢复
String msg = LanguageUtils.get_language_system(IActivity, "whether.recover", "是否恢復[") + datasBean.getFoodName() + "]";
Class[] parameterTypes = {long.class};
Object[] parameters = {csf.getId()};
CommonTipDialog.showDoubtDialog(IActivity, msg, SoldoutCtrlPresenter.class, this, "restoreSoldoutCtrl", parameterTypes, parameters);
}
//暂停或者售罄直接提示恢复
String msg = LanguageUtils.get_language_system(IActivity, "whether.recover", "是否恢復[") + datasBean.getFoodName() + "]";
Class[] parameterTypes = {long.class, Long.class, Long.class, int.class, int.class};
Object[] parameters = {csf.getId(), datasBean.getId(), null, 2, operatTtpe};
CommonTipDialog.showDoubtDialog(IActivity, msg, SoldoutCtrlPresenter.class, this, "restoreSoldoutCtrl", parameterTypes, parameters);
break;
}
}
......@@ -236,16 +251,18 @@ public class SoldoutCtrlPresenter extends BasePresenter<SoldoutCtrlContract.Mode
if (csf.getModifierId() == datasBean.getMid() && csf.getType() == MODIFIER_TYPE) {
if (datasBean.getInvisible() == 2 || !TextUtils.isEmpty(csf.getQtyName())) {
isStopOpeart = true;
int operatTtpe = 1;
if (datasBean.getInvisible() == 2) {
//恢復暫停數量
operatTtpe = 0;
String msg = LanguageUtils.get_language_system(IActivity, "whether.recover", "是否恢復[") + datasBean.getModifierName() + "]";
Class[] parameterTypes = {Long.class, int.class, int.class};
Object[] parameters = {datasBean.getMid(), 3, 0};
CommonTipDialog.showDoubtDialog(IActivity, msg, SoldoutCtrlPresenter.class, this, "updateInvisible", parameterTypes, parameters);
} else {
String msg = LanguageUtils.get_language_system(IActivity, "whether.recover", "是否恢復[") + datasBean.getModifierName() + "]";
Class[] parameterTypes = {long.class};
Object[] parameters = {csf.getId()};
CommonTipDialog.showDoubtDialog(IActivity, msg, SoldoutCtrlPresenter.class, this, "restoreSoldoutCtrl", parameterTypes, parameters);
}
//暂停或者售罄直接提示恢复
String msg = LanguageUtils.get_language_system(IActivity, "whether.recover", "是否恢復[") + datasBean.getModifierName() + "]";
Class[] parameterTypes = {long.class, Long.class, Long.class, int.class, int.class};
Object[] parameters = {csf.getId(), null, datasBean.getMid(), 3, operatTtpe};
CommonTipDialog.showDoubtDialog(IActivity, msg, SoldoutCtrlPresenter.class, this, "restoreSoldoutCtrl", parameterTypes, parameters);
break;
}
}
......@@ -255,26 +272,6 @@ public class SoldoutCtrlPresenter extends BasePresenter<SoldoutCtrlContract.Mode
return isStopOpeart;
}
public void showSoldoutNumberDialog(Long foodId, Long modifierId) {
//选择沽清的数量
ChooseNumberDialog chooseNumberDialog = new ChooseNumberDialog(IActivity);
chooseNumberDialog.setBackBtnText("暫停");
chooseNumberDialog.builder();
chooseNumberDialog.setOnClickListener(new ChooseNumberDialog.OnClickListener() {
@Override
public void onComfirmClick(String number) {
insertSoldoutCtrl(foodId, modifierId, Integer.parseInt(number), Integer.parseInt(number) == 0 ? 0 : 1, foodId != null ? 2 : 3);
}
@Override
public void onBackPage() {
}
});
chooseNumberDialog.setType(2);
chooseNumberDialog.setCancelable(true);
chooseNumberDialog.show();
}
public void initFoodData() {
List<Food> foodGroupList = mModel.queryDB_FoodGroupList();
......@@ -322,6 +319,16 @@ public class SoldoutCtrlPresenter extends BasePresenter<SoldoutCtrlContract.Mode
}
/**
* 更新沽清數據
*
* @param soldoutCtrFoods
*/
public void updateFoodSoldoutCtrData(List<SoldoutCtrFood> soldoutCtrFoods) {
addFoodSoldoutCtrItem(soldoutCtrFoods);
setFoodSoldoutCtrData(soldoutCtrFoods);
}
/**
* 設置食品沽清數據
*/
public void setFoodSoldoutCtrData(List<SoldoutCtrFood> soldoutCtrFoods) {
......@@ -375,9 +382,21 @@ public class SoldoutCtrlPresenter extends BasePresenter<SoldoutCtrlContract.Mode
mFoodAdapter.notifyDataSetChanged();
}
private void setFoodStopStatus(List<SoldoutCtrFood> soldoutCtrFoods) {
/**
* 添加食品組 食品沽清項
*
* @param soldoutCtrFoods
*/
private void addFoodSoldoutCtrItem(List<SoldoutCtrFood> soldoutCtrFoods) {
//先刪除已暫停的沽清項 防止重複
for (int i = soldoutCtrFoods.size() - 1; i >= 0; i--) {
if (soldoutCtrFoods.get(i).isStop()) {
soldoutCtrFoods.remove(i);
}
}
//添加暫停沽清項
for (Food foodGroupBean : mFoodGroupList) {
if (foodGroupBean.getInvisible() == 2) {
if (foodGroupBean.getInvisible() == 2 && foodGroupBean.getParentId() == 0) {
SoldoutCtrFood soldoutCtrFood = new SoldoutCtrFood();
soldoutCtrFood.setType((byte) FOOD_GROUP_TYPE);
soldoutCtrFood.setStop(true);
......@@ -388,8 +407,8 @@ public class SoldoutCtrlPresenter extends BasePresenter<SoldoutCtrlContract.Mode
soldoutCtrFoods.add(soldoutCtrFood);
}
}
for (Food foodBean : mFoodList) {
if (foodBean.getInvisible() == 2) {
for (Food foodBean : mAllFoodList) {
if (foodBean.getInvisible() == 2 && foodBean.getParentId() != 0) {
SoldoutCtrFood soldoutCtrFood = new SoldoutCtrFood();
soldoutCtrFood.setType((byte) FOOD_TYPE);
soldoutCtrFood.setStop(true);
......@@ -517,8 +536,7 @@ public class SoldoutCtrlPresenter extends BasePresenter<SoldoutCtrlContract.Mode
List<SoldoutCtrFood> soldoutCtrFoods = JsonUtils.parseArray(info.getData(), SoldoutCtrFood.class);
setFoodStopStatus(soldoutCtrFoods);
setFoodSoldoutCtrData(soldoutCtrFoods);
updateFoodSoldoutCtrData(soldoutCtrFoods);
if (soldoutCtrFoods != null && soldoutCtrFoods.size() > 0) {
......@@ -527,10 +545,8 @@ public class SoldoutCtrlPresenter extends BasePresenter<SoldoutCtrlContract.Mode
}
mCurrentSlodoutFoodList_Full.addAll(soldoutCtrFoods);
filterSlodoutData(false);
//更新細項沽清數據
IActivity.setFineItemSlodoutListFull(mCurrentSlodoutFoodList_Full);
IActivity.setFineItemSoldoutListFull(null, mCurrentSlodoutFoodList_Full);
} else {
if (mCurrentSlodoutFoodList_Full.size() > 0) {
......@@ -538,7 +554,7 @@ public class SoldoutCtrlPresenter extends BasePresenter<SoldoutCtrlContract.Mode
}
//更新細項沽清數據
IActivity.setFineItemSlodoutListFull(mCurrentSlodoutFoodList_Full);
IActivity.setFineItemSoldoutListFull(null, mCurrentSlodoutFoodList_Full);
if (mCurrentSlodoutFoodList.size() > 0) {
mCurrentSlodoutFoodList.clear();
......@@ -580,33 +596,6 @@ public class SoldoutCtrlPresenter extends BasePresenter<SoldoutCtrlContract.Mode
if (mOperatTtpe == 1) {
isInsertSoldoutOperat = true;
}
if (operatTtpe == 0) {
//暫停操作需要更新食品表狀態
switch (type) {
case 1:
case 2:
//更新食品狀態
FoodDaoUtils foodDao = new FoodDaoUtils(IActivity);
Food food = foodDao.queryFoodByFidQueryBuilder(foodId);
food.setInvisible(2);
boolean status = foodDao.updateFood(food);
if (status) {
if (food.getParentId() == 0) {
updateFoodGroup();
} else {
mAllFoodList = mModel.queryDB_AllFoodList();
changedMealByParentId(currentParentId);
}
}
// downFoodList();
break;
case 3:
//更新細項狀態
downFoodModifier();
break;
}
} else {
}
//重新获取沽清数据
getCurrentSoldoutFood();
} else {
......@@ -622,11 +611,9 @@ public class SoldoutCtrlPresenter extends BasePresenter<SoldoutCtrlContract.Mode
/**
* 恢復沽清
*
* @param id 明細ID
* @param type 恢復類型:1=食品組;1=食品;1=細項;
* @param operatTtpe 0= 暂停恢復,1=恢復食品沽清数量
* @param id 明細ID
*/
public void restoreSoldoutCtrl(long id, Long foodId, Long modifierId, int type, int operatTtpe) {
public void restoreSoldoutCtrl(long id) {
SoldoutRequest.update request = getDeleteRequest(id);
RequestBody requestBody = RequestBody.create(MediaType.parse("application/json"), GsonUtils.GsonString(request));
String json = GsonUtils.GsonString(request);
......@@ -644,43 +631,6 @@ public class SoldoutCtrlPresenter extends BasePresenter<SoldoutCtrlContract.Mode
if (info != null && info.isSuccess()) {
//记录恢复操作类型
mOperatTtpe = 2;
if (operatTtpe == 0) {
//暫停恢復需要更新食品表狀態
switch (type) {
case 1:
case 2:
//更新食品狀態
FoodDaoUtils foodDao = new FoodDaoUtils(IActivity);
Food food = foodDao.queryFoodByFidQueryBuilder(foodId);
if (food != null) {
food.setInvisible(2);
boolean status = foodDao.updateFood(food);
if (status) {
if (food.getParentId() == 0) {
updateFoodGroup();
} else {
mAllFoodList = mModel.queryDB_AllFoodList();
changedMealByParentId(currentParentId);
}
}
}
break;
case 3:
//更新細項狀態
ModifierDaoUtils modifierDaoUtils = new ModifierDaoUtils(mApplication);
Modifier modifier = modifierDaoUtils.queryModifierByQueryBuilder(modifierId);
if (modifier != null) {
modifier.setInvisible(2);
boolean status = modifierDaoUtils.updateModifier(modifier);
if (status) {
}
}
// downFoodModifier();
break;
}
} else {
}
//重新获取沽清数据
getCurrentSoldoutFood();
} else {
......@@ -690,59 +640,73 @@ public class SoldoutCtrlPresenter extends BasePresenter<SoldoutCtrlContract.Mode
});
}
public void downFoodList() {
int restaurantId = GsaCloudApplication.getRestaurantId(mApplication);
mModel.downFoodList(restaurantId)
.subscribeOn(Schedulers.io())
.subscribeOn(AndroidSchedulers.mainThread())
.observeOn(AndroidSchedulers.mainThread())
.compose(RxLifecycleUtils.bindToLifecycle(mRootView))
.subscribe(new ErrorHandleSubscriber<FoodBean>(mErrorHandler) {
@Override
public void onNext(@NonNull FoodBean foodBean) {
if (foodBean != null && foodBean.isSuccess()) {
if (foodBean.getData() != null) {
FoodDaoUtils foodDao = new FoodDaoUtils(IActivity);
foodDao.deleteAll();
boolean status = foodDao.insertMultFood(foodBean.getData());
if (status) {
//更新表數據成功
changedMealByParentId(currentParentId);
//重新获取沽清数据
getCurrentSoldoutFood();
}
}
} else {
}
}
});
}
public void downFoodModifier() {
int restaurantId = GsaCloudApplication.getRestaurantId(IActivity);
mModel.downFoodModifier(restaurantId)
/**
* 更新食品組,食品,細項狀態
*
* @param id 1食品組 2食品 3 細項;
* @param type 類型:1=食品組;2=食品;3=細項;
* @param invisible 0=顯示, 1=隱藏, 2=暫停
*/
public void updateInvisible(Long id, int type, int invisible) {
RequestBody requestBody = new FormBody.Builder()
.add("id", String.valueOf(id))
.add("type", String.valueOf(type))
.add("invisible", String.valueOf(invisible))
.build();
mModel.updateInvisible(requestBody)
.subscribeOn(Schedulers.io())
.doOnSubscribe(disposable -> mRootView.showLoading(null))
.subscribeOn(AndroidSchedulers.mainThread())
.observeOn(AndroidSchedulers.mainThread())
.doAfterTerminate(() -> mRootView.hideLoading())
.compose(RxLifecycleUtils.bindToLifecycle(mRootView))
.subscribe(new ErrorHandleSubscriber<BaseResult>(mErrorHandler) {
@Override
public void onNext(@NonNull BaseResult info) {
if (info != null && info.isSuccess()) {
if (info.getData() != null) {
List<FoodModifier> foodModifierList = JsonUtils.parseArray(info.getData(), FoodModifier.class);
if (foodModifierList != null && foodModifierList.size() > 0) {
FoodModifierDaoUtils foodModifierDao = new FoodModifierDaoUtils(IActivity);
foodModifierDao.deleteAll();
boolean status = foodModifierDao.insertMultFoodModifier(foodModifierList);
if (status) {
//重新获取沽清数据
getCurrentSoldoutFood();
//记录恢复操作类型
mOperatTtpe = 2;
//暫停恢復需要更新食品表狀態
switch (type) {
case 1:
case 2:
//更新食品狀態
FoodDaoUtils foodDao = new FoodDaoUtils(IActivity);
Food food = foodDao.queryFoodByFidQueryBuilder(id);
if (food != null) {
food.setInvisible(invisible);
boolean status = foodDao.updateFood(food);
if (status) {
if (food.getParentId() == 0) {
updateFoodGroup();
} else {
mAllFoodList = mModel.queryDB_AllFoodList();
changedMealByParentId(currentParentId);
}
updateFoodSoldoutCtrData(mCurrentSlodoutFoodList_Full);
filterSlodoutData(false);
}
}
}
break;
case 3:
//更新細項狀態
ModifierDaoUtils modifierDaoUtils = new ModifierDaoUtils(mApplication);
Modifier modifier = modifierDaoUtils.queryModifierByQueryBuilder(id);
if (modifier != null) {
modifier.setInvisible(invisible);
boolean status = modifierDaoUtils.updateModifier(modifier);
if (status) {
//更新細項沽清數據
IActivity.setFineItemSoldoutListFull(null, mCurrentSlodoutFoodList_Full);
}
}
break;
}
//重新获取沽清数据
// getCurrentSoldoutFood();
} else {
mRootView.showMessage(LanguageUtils.get_language_system(mApplication, "recovery.failure", "恢復失敗!"));
}
}
});
......@@ -774,4 +738,8 @@ public class SoldoutCtrlPresenter extends BasePresenter<SoldoutCtrlContract.Mode
public List<SoldoutCtrFood> getCurrentSlodoutFoodList_Full() {
return mCurrentSlodoutFoodList_Full;
}
public CurrentSlodoutFoodAdapter getCurrentSlodoutFoodAdapter() {
return mCurrentSlodoutFoodAdapter;
}
}
......@@ -16,7 +16,9 @@ import com.gingersoft.gsa.cloud.base.utils.time.TimeUtils;
import com.gingersoft.gsa.cloud.constans.GoldConstants;
import com.gingersoft.gsa.cloud.database.bean.FoodCombo;
import com.gingersoft.gsa.cloud.database.bean.Function;
import com.gingersoft.gsa.cloud.database.bean.Modifier;
import com.gingersoft.gsa.cloud.database.utils.FoodComboDaoUtils;
import com.gingersoft.gsa.cloud.database.utils.ModifierDaoUtils;
import com.gingersoft.gsa.cloud.function.FunctionManager;
import com.gingersoft.gsa.cloud.table.ComponentTable;
import com.gingersoft.gsa.cloud.table.R;
......@@ -56,6 +58,7 @@ import okhttp3.FormBody;
import okhttp3.RequestBody;
import static com.gingersoft.gsa.cloud.base.common.bean.OrderDetail.FOOD_TYPE;
import static com.gingersoft.gsa.cloud.base.common.bean.OrderDetail.MODIFIER_TYPE;
/**
......@@ -393,23 +396,38 @@ public class TablePresenter extends BasePresenter<TableContract.Model, TableCont
* @param orderDetailsBeans
*/
private void setTopId(List<OrderBean.OrderDetailsBean> orderDetailsBeans) {
long paroductId = 0;
long topId = 0;
for (int i = 0; i < orderDetailsBeans.size(); i++) {
OrderBean.OrderDetailsBean orderDetailsBean = orderDetailsBeans.get(i);
long topId;
if (orderDetailsBean.getType() == FOOD_TYPE) {
topId = getComboIdByFid((int) orderDetailsBean.getProductId());
int nextIndex = i + 1;
if (orderDetailsBean.getParentId() == 0 || (orderDetailsBeans.size() > nextIndex && orderDetailsBeans.get(nextIndex).getType() == MODIFIER_TYPE) ) {
paroductId = orderDetailsBean.getProductId();
}
topId = getComboIdByFid(paroductId);
} else {
topId = CommonConfiguration.getInstance().getModifierTopIdMid((int) orderDetailsBean.getProductId());
topId = 0;
List<Modifier> modifierList = mModel.queryDB_ModifierList(paroductId, ModifierDaoUtils.modifierMode_All);
for (Modifier modifier : modifierList) {
if (modifier.getMid() == orderDetailsBean.getProductId()) {
topId = modifier.getTopId();
break;
}
}
// topId = CommonConfiguration.getInstance().getModifierTopIdMid((int) orderDetailsBean.getProductId());
}
if (orderDetailsBean.getParentId() != 0) {
orderDetailsBean.setTopId(topId);
}
orderDetailsBean.setTopId(topId);
}
}
private long getComboIdByFid(int fid) {
private long getComboIdByFid(long fid) {
FoodComboDaoUtils daoUtils = new FoodComboDaoUtils(GsaCloudApplication.getAppContext());
List<FoodCombo> foodCombos = daoUtils.queryCombosByQueryBuilder(fid);
if (foodCombos != null && foodCombos.size() > 1) {
return foodCombos.get(1).getComId();
if (foodCombos != null && foodCombos.size() > 0) {
return foodCombos.get(0).getComId();
}
return 0;
}
......
......@@ -68,6 +68,7 @@ import com.gingersoft.gsa.cloud.ui.view.RecyclerViewNoBugLinearLayoutManager;
import com.gingersoft.gsa.cloud.ui.view.SearchKeyBoardView;
import com.gingersoft.gsa.cloud.ui.widget.dialog.LoadingDialog;
import com.jess.arms.base.BaseActivity;
import com.jess.arms.base.BaseFragmentActivity;
import com.jess.arms.base.DefaultAdapter;
import com.jess.arms.di.component.AppComponent;
import com.jess.arms.utils.ArmsUtils;
......@@ -101,7 +102,7 @@ import static com.jess.arms.utils.Preconditions.checkNotNull;
* <a href="https://github.com/JessYanCoding/MVPArmsTemplate">模版请保持更新</a>
* ================================================
*/
public class MealStandActivity extends BaseActivity<MealStandPresenter> implements MealStandContract.View, PagerGridLayoutManager.PageListener {
public class MealStandActivity extends BaseFragmentActivity<MealStandPresenter> implements MealStandContract.View, PagerGridLayoutManager.PageListener {
private SparseArray<View> map = new SparseArray<>();
......@@ -356,9 +357,11 @@ public class MealStandActivity extends BaseActivity<MealStandPresenter> implemen
if (!mPresenter.foodGroupConditionFilter(datasBean, false)) {
return;
}
datasBean.setSelected(true);
mPresenter.setRvMealClicked(false);
mPresenter.changedMealByParentId(datasBean.getId());
mPresenter.setFoodSoldoutCtrData();
mPresenter.updateFoodSoldoutCtrData(mPresenter.getSoldoutCtrList());
}
});
......@@ -650,11 +653,17 @@ public class MealStandActivity extends BaseActivity<MealStandPresenter> implemen
// }
@Override
public void onBackPressed() {
super.onBackPressed();
public void onBackPressedSupport() {
super.onBackPressedSupport();
returnBeforeActivity(true);
}
// @Override
// public void onBackPressed() {
// super.onBackPressed();
// returnBeforeActivity(true);
// }
public void returnBeforeActivity(boolean initTable) {
SPUtils.put(this, MealConstant.EXIT_IS_PLU_MODE, isPluMode);
if (initTable && OpenTableManage.getDefault().getTableBean() != null && !MyOrderManage.getInstance().isModifyOrder()) {
......@@ -1045,11 +1054,11 @@ public class MealStandActivity extends BaseActivity<MealStandPresenter> implemen
productId = mPresenter.getCurrentOrderDetailBean().getProductId();
}
if (mPresenter.getSelectMealAdapter().getSelectedMode() == SelectMealAdapter.SINGLE_SELECTED) {
modMsgFineItemFragment.onModMsgMidEvent(productId);
modSasteFineItemFragment.onModSasteEvent(productId);
modMsgFineItemFragment.loadModMsgData(productId);
modSasteFineItemFragment.loadModSasteData(productId);
} else {
modMsgFineItemFragment.onModCommMidEvent(productId);
modSasteFineItemFragment.onModSasteEvent(productId);
modMsgFineItemFragment.loadModCommData(productId);
modSasteFineItemFragment.loadModSasteData(productId);
}
setFineItemSlodoutListFull(mPresenter.getSoldoutCtrList());
}
......@@ -1061,10 +1070,12 @@ public class MealStandActivity extends BaseActivity<MealStandPresenter> implemen
*/
public void setFineItemSlodoutListFull(List<SoldoutCtrFood> slodoutListFull) {
if (modMsgFineItemFragment != null) {
modMsgFineItemFragment.updateCurrentSlodoutFoodList_Full(slodoutListFull);
modMsgFineItemFragment.setModifierSoldoutFoodList_Full(slodoutListFull);
modMsgFineItemFragment.updateParentModifierSlodoutFoodList_Full();
}
if (modSasteFineItemFragment != null) {
modSasteFineItemFragment.updateCurrentSlodoutFoodList_Full(slodoutListFull);
modSasteFineItemFragment.setModifierSoldoutFoodList_Full(slodoutListFull);
modSasteFineItemFragment.updateParentModifierSlodoutFoodList_Full();
}
}
......
......@@ -40,6 +40,7 @@ import com.gingersoft.gsa.cloud.table.mvp.ui.fragment.InputTableFragment;
import com.gingersoft.gsa.cloud.table.mvp.ui.widget.ChooseNumberDialog;
import com.gingersoft.gsa.cloud.ui.widget.dialog.LoadingDialog;
import com.jess.arms.base.BaseActivity;
import com.jess.arms.base.BaseFragmentActivity;
import com.jess.arms.base.DefaultAdapter;
import com.jess.arms.di.component.AppComponent;
import com.jess.arms.integration.AppManager;
......@@ -86,7 +87,7 @@ import static com.jess.arms.utils.Preconditions.checkNotNull;
* <a href="https://github.com/JessYanCoding/MVPArmsTemplate">模版请保持更新</a>
* ================================================
*/
public class OrderContentActivity extends BaseActivity<OrderContentPresenter> implements OrderContentContract.View {
public class OrderContentActivity extends BaseFragmentActivity<OrderContentPresenter> implements OrderContentContract.View {
@Inject
AppManager mAppManager;
......@@ -253,11 +254,18 @@ public class OrderContentActivity extends BaseActivity<OrderContentPresenter> im
// backPressed();
// }
@Override
public void onBackPressed() {
public void onBackPressedSupport() {
super.onBackPressedSupport();
backPressed();
}
// @Override
// public void onBackPressed() {
// backPressed();
// }
@Override
public void initIntent() {
......
......@@ -3,8 +3,11 @@ package com.gingersoft.gsa.cloud.table.mvp.ui.activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.graphics.drawable.ColorDrawable;
import android.os.Bundle;
import android.os.Message;
import android.text.TextUtils;
import android.util.Log;
import android.util.SparseArray;
import android.view.View;
import android.view.ViewGroup;
......@@ -31,6 +34,8 @@ import com.gingersoft.gsa.cloud.table.mvp.model.bean.SoldoutCtrFood;
import com.gingersoft.gsa.cloud.table.mvp.presenter.SoldoutCtrlPresenter;
import com.gingersoft.gsa.cloud.table.mvp.ui.fragment.FineItemAllFragment;
import com.gingersoft.gsa.cloud.table.mvp.ui.adapter.meal.FoodGroupAdapter;
import com.gingersoft.gsa.cloud.table.mvp.ui.fragment.FineItemOneselfFragment;
import com.gingersoft.gsa.cloud.table.mvp.ui.widget.ChooseNumberDialog;
import com.gingersoft.gsa.cloud.ui.recylcler.Indicator.PagerGridLayoutManager;
import com.gingersoft.gsa.cloud.ui.recylcler.Indicator.PagerGridSnapHelper;
import com.gingersoft.gsa.cloud.ui.view.RecyclerViewNoBugLinearLayoutManager;
......@@ -135,8 +140,10 @@ public class SoldoutCtrlActivity extends BaseFragmentActivity<SoldoutCtrlPresent
public static final int FOOD_TYPE = 2;
public static final int MODIFIER_TYPE = 3;
private FineItemOneselfFragment oneselfFineItemFragment;
private FineItemAllFragment modMsgFineItemFragment, modSasteFineItemFragment;
private String[] mFineTabTitles = {"口味", "特別信息"};
private String[] mFineTabTitles = {"子項", "口味", "特別信息"};
// private String[] mFineTabTitles = {"口味", "特別信息"};
private int mCurrentFinePageIndex;
private boolean mInitModData = false;
......@@ -266,6 +273,8 @@ public class SoldoutCtrlActivity extends BaseFragmentActivity<SoldoutCtrlPresent
VibratorUtils.pressButtonSound(SoldoutCtrlActivity.this);
datasBean.setSelected(true);
if (mSoldoutType == FOOD_GROUP_TYPE) {
//操作類型(暂停操作、恢复操作)
boolean isStopOpeart = false;
......@@ -275,29 +284,24 @@ public class SoldoutCtrlActivity extends BaseFragmentActivity<SoldoutCtrlPresent
csf.getFoodId().equals(datasBean.getId())) {
if (!TextUtils.isEmpty(csf.getQtyName())) {
isStopOpeart = true;
int operatTtpe =1;
if(datasBean.getInvisible() == 2){
//恢復暫停數量
operatTtpe = 0;
}
//暂停或者售罄直接提示恢复
String msg = LanguageUtils.get_language_system(SoldoutCtrlActivity.this, "whether.recover", "是否恢復\"") + datasBean.getFoodName() + "\"?";
Class[] parameterTypes = {long.class, Long.class, Long.class,int.class, int.class};
Object[] parameters = {csf.getId(),datasBean.getId(),null, 1,operatTtpe};
CommonTipDialog.showDoubtDialog(SoldoutCtrlActivity.this, msg, SoldoutCtrlPresenter.class, mPresenter, "restoreSoldoutCtrl", parameterTypes, parameters);
//恢復暫停數量
String msg = LanguageUtils.get_language_system(SoldoutCtrlActivity.this, "whether.recover", "是否恢復[") + datasBean.getFoodName() + "]";
Class[] parameterTypes = {Long.class, int.class, int.class};
Object[] parameters = {datasBean.getId(), 1, 0};
CommonTipDialog.showDoubtDialog(SoldoutCtrlActivity.this, msg, SoldoutCtrlPresenter.class, mPresenter, "updateInvisible", parameterTypes, parameters);
break;
}
}
}
if (!isStopOpeart) {
String msg = LanguageUtils.get_language_system(SoldoutCtrlActivity.this, "whether.suspend.group", "是否暫停組別?") + datasBean.getFoodName() + "\"?";
Class[] parameterTypes = {Long.class, Long.class, int.class, int.class, int.class};
Object[] parameters = {datasBean.getId(), null, 0, 0,1};
CommonTipDialog.showDoubtDialog(SoldoutCtrlActivity.this, msg, SoldoutCtrlPresenter.class, mPresenter, "insertSoldoutCtrl", parameterTypes, parameters);
Class[] parameterTypes = {Long.class, int.class, int.class};
Object[] parameters = {datasBean.getId(), 1, 2};
CommonTipDialog.showDoubtDialog(SoldoutCtrlActivity.this, msg, SoldoutCtrlPresenter.class, mPresenter, "updateInvisible", parameterTypes, parameters);
}
} else {
mPresenter.changedMealByParentId(datasBean.getId());
mPresenter.setFoodSoldoutCtrData(mPresenter.getCurrentSlodoutFoodList_Full());
mPresenter.updateFoodSoldoutCtrData(mPresenter.getCurrentSlodoutFoodList_Full());
}
}
});
......@@ -305,9 +309,7 @@ public class SoldoutCtrlActivity extends BaseFragmentActivity<SoldoutCtrlPresent
int mParentColHeight = GsaCloudApplication.androidSetting.getLayoutFoodTypeHeight() / GsaCloudApplication.androidSetting.getFoodTypeRow() * Rows;
//设置ViewPager适配器
recycle_food_group.setLayoutParams(new LinearLayout.LayoutParams(
ViewGroup.LayoutParams.MATCH_PARENT,
mParentColHeight));
recycle_food_group.setLayoutParams(new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, mParentColHeight));
//添加小圆点
ivPoints = new ImageView[totalPage];
......@@ -339,8 +341,9 @@ public class SoldoutCtrlActivity extends BaseFragmentActivity<SoldoutCtrlPresent
int id = v.getId();
if (id == R.id.tv_return) {
if (mCurrentViewMode == MealConstant.fine_ViewMode) {
mSoldoutType = FOOD_TYPE;
tv_soldout.setText(mTypeItem[1]);
// mSoldoutType = FOOD_TYPE;
// tv_soldout.setText(mTypeItem[1]);
mPresenter.filterSlodoutData(false);
showViewModeVisibility(MealConstant.food_group_ViewMode, MealConstant.food_ViewMode);
} else {
killMyself();
......@@ -348,8 +351,8 @@ public class SoldoutCtrlActivity extends BaseFragmentActivity<SoldoutCtrlPresent
} else if (id == R.id.tv_soldout) {
showClearControlDialog();
} else if (id == R.id.iv_fine_item_back) {
ll_fine_item.setVisibility(View.INVISIBLE);
ll_fine_item.setVisibility(View.INVISIBLE);
recycle_food_group.setVisibility(View.VISIBLE);
recycle_food.setVisibility(View.VISIBLE);
}
......@@ -372,13 +375,15 @@ public class SoldoutCtrlActivity extends BaseFragmentActivity<SoldoutCtrlPresent
showViewModeVisibility(MealConstant.food_group_ViewMode, MealConstant.food_ViewMode);
break;
case MODIFIER_TYPE:
if (!mInitModData) {
modSasteFineItemFragment.onModSasteEvent(0);
modMsgFineItemFragment.onModMsgMidEvent(0);
mInitModData = true;
}
setFineItemSlodoutListFull(mPresenter.getCurrentSlodoutFoodList_Full());
showViewModeVisibility(MealConstant.fine_ViewMode);
// if (!mInitModData) {
// modSasteFineItemFragment.onModSasteEvent(0);
// modMsgFineItemFragment.onModMsgMidEvent(0);
// mInitModData = true;
// }
// setFineItemSoldoutListFull(mPresenter.getCurrentSlodoutFoodList_Full());
// showViewModeVisibility(MealConstant.fine_ViewMode);
showViewModeVisibility(MealConstant.food_group_ViewMode, MealConstant.food_ViewMode);
break;
}
......@@ -390,6 +395,44 @@ public class SoldoutCtrlActivity extends BaseFragmentActivity<SoldoutCtrlPresent
builder.create().show();
}
public void showModfierLayout(long fid) {
if (!mInitModData) {
modSasteFineItemFragment.loadModSasteData(0);
modMsgFineItemFragment.loadModMsgData(0);
mInitModData = true;
}
setFineItemSoldoutListFull(fid, mPresenter.getCurrentSlodoutFoodList_Full());
showViewModeVisibility(MealConstant.fine_ViewMode);
}
public void showSoldoutNumberDialog(Long foodId, Long modifierId) {
Long id = foodId != null ? foodId : modifierId;
int type = foodId != null ? 2 : 3;
//选择沽清的数量
ChooseNumberDialog chooseNumberDialog = new ChooseNumberDialog(this);
// chooseNumberDialog.setBackBtnText("暫停");
chooseNumberDialog.builder();
chooseNumberDialog.setOnClickListener(new ChooseNumberDialog.OnClickListener() {
@Override
public void onComfirmClick(String number) {
if (Integer.parseInt(number) == 0) {
mPresenter.updateInvisible(id, type, 2);
} else {
mPresenter.insertSoldoutCtrl(foodId, modifierId, Integer.parseInt(number), Integer.parseInt(number) == 0 ? 0 : 1, foodId != null ? 2 : 3);
}
}
@Override
public void onBackPage() {
mPresenter.updateInvisible(id, type, 2);
}
});
chooseNumberDialog.setType(2);
chooseNumberDialog.setCancelable(true);
chooseNumberDialog.show();
}
@Override
public void showLoading(String message) {
if (message != null)
......@@ -545,18 +588,24 @@ public class SoldoutCtrlActivity extends BaseFragmentActivity<SoldoutCtrlPresent
@Override
public Fragment createFragment(int position) {
switch (position) {
case 1:
case 2:
if (modMsgFineItemFragment != null) {
return modMsgFineItemFragment;
}
modMsgFineItemFragment = FineItemAllFragment.newInstance();
return modMsgFineItemFragment;
default:
case 1:
if (modSasteFineItemFragment != null) {
return modSasteFineItemFragment;
}
modSasteFineItemFragment = FineItemAllFragment.newInstance();
return modSasteFineItemFragment;
default:
if (oneselfFineItemFragment != null) {
return oneselfFineItemFragment;
}
oneselfFineItemFragment = FineItemOneselfFragment.newInstance();
return oneselfFineItemFragment;
}
}
......@@ -578,12 +627,17 @@ public class SoldoutCtrlActivity extends BaseFragmentActivity<SoldoutCtrlPresent
QMUITab tab2 = builder
.setText(mFineTabTitles[1])
.build(mContext);
QMUITab tab3 = builder
.setText(mFineTabTitles[2])
.build(mContext);
mTabSegment
.addTab(tab1)
.addTab(tab2);
.addTab(tab2)
.addTab(tab3);
mContentViewPager.setAdapter(pagerAdapter);
mContentViewPager.setCurrentItem(mCurrentFinePageIndex);
mContentViewPager.setOffscreenPageLimit(2);
int space = QMUIDisplayHelper.dp2px(this, 16);
mTabSegment.setIndicator(new QMUITabIndicator(QMUIDisplayHelper.dp2px(this, 2), false, true));
mTabSegment.setDefaultTextSize(QMUIDisplayHelper.dp2px(this, 16), QMUIDisplayHelper.dp2px(this, 16));
......@@ -618,18 +672,30 @@ public class SoldoutCtrlActivity extends BaseFragmentActivity<SoldoutCtrlPresent
});
}
public void setFineItemSlodoutListFull(List<SoldoutCtrFood> currentSlodoutFoodListc_Full) {
public void setFineItemSoldoutListFull(Long fid, List<SoldoutCtrFood> currentSoldoutFoodListc_Full) {
if (oneselfFineItemFragment != null) {
oneselfFineItemFragment.loadComboData(fid);
oneselfFineItemFragment.setSoldoutFoodList_Full(currentSoldoutFoodListc_Full);
oneselfFineItemFragment.updateSoldoutFoodList_Full();
}
if (modMsgFineItemFragment != null) {
modMsgFineItemFragment.updateCurrentSlodoutFoodList_Full(currentSlodoutFoodListc_Full);
modMsgFineItemFragment.loadModMsgData(0);
modMsgFineItemFragment.setModifierSoldoutFoodList_Full(currentSoldoutFoodListc_Full);
modMsgFineItemFragment.updateParentModifierSlodoutFoodList_Full();
}
if (modSasteFineItemFragment != null) {
modSasteFineItemFragment.updateCurrentSlodoutFoodList_Full(currentSlodoutFoodListc_Full);
modSasteFineItemFragment.loadModSasteData(0);
modSasteFineItemFragment.setModifierSoldoutFoodList_Full(currentSoldoutFoodListc_Full);
modSasteFineItemFragment.updateParentModifierSlodoutFoodList_Full();
}
mPresenter.filterSlodoutData(false);
}
public FoodGroupAdapter getFoodGroupAdapter() {
return mFoodGroupAdapter;
}
public SoldoutCtrlPresenter getSoldoutCtrlPresenter() {
return mPresenter;
}
}
......@@ -151,7 +151,12 @@ public class OrderDetailActivity extends BaseActivity<OrderDetailPresenter> impl
@Override
public void initData(@Nullable Bundle savedInstanceState) {
scrollview.post(new Runnable() {
@Override
public void run() {
scrollview.scrollTo(0,0);
}
});
initOrderDetail(mOrderDetailItem);
}
......@@ -189,9 +194,13 @@ public class OrderDetailActivity extends BaseActivity<OrderDetailPresenter> impl
if (mOrderCenterMoneyList.size() > 0) {
mOrderCenterMoneyList.clear();
}
Discount discount = getOrderDiscount(orderDetailItem, totalMoney);
if (discount != null) {
mOrderCenterMoneyList.addAll(SectionTextItem3.discountTransSectionTextItem3(discount));
List<SectionTextItem3> discountSections = getOrderDiscountSections(orderDetailItem, totalMoney);
if (discountSections != null) {
mOrderCenterMoneyList.addAll(discountSections);
}
SectionTextItem3 roudingSection = getOrderRoudingSection(orderDetailItem);
if (roudingSection != null) {
mOrderCenterMoneyList.add(roudingSection);
}
if (mOrderCenterMoneyAdapter == null) {
mOrderCenterMoneyAdapter = new OrderCenterMoneyAdapter(mOrderCenterMoneyList);
......@@ -259,7 +268,13 @@ public class OrderDetailActivity extends BaseActivity<OrderDetailPresenter> impl
return payMethodList;
}
private Discount getOrderDiscount(OrderDetailItem orderDetailItem, double totalMoney) {
/**
* 獲取賬單折扣列
* @param orderDetailItem
* @param totalMoney
* @return
*/
private List<SectionTextItem3> getOrderDiscountSections(OrderDetailItem orderDetailItem, double totalMoney) {
if (orderDetailItem.getRemark() != null) {
//折扣
Discount discount = new Discount();
......@@ -268,7 +283,19 @@ public class OrderDetailActivity extends BaseActivity<OrderDetailPresenter> impl
discount.setDiscount_value(orderDetailItem.getDiscountValue());
double discountPrice = Discount.calculationDiscount(discount, totalMoney);
discount.setAmount(discountPrice);
return discount;
return SectionTextItem3.discountTransSectionTextItem3(discount);
}
return null;
}
/**
* 獲取賬單小數列
* @param orderDetailItem
* @return
*/
private SectionTextItem3 getOrderRoudingSection(OrderDetailItem orderDetailItem) {
if (orderDetailItem.getRounding() != null && orderDetailItem.getRounding() != 0) {
return SectionTextItem3.roundingTransSectionTextItem3(orderDetailItem.getRounding());
}
return null;
}
......
......@@ -148,13 +148,13 @@ public class FineItemTwoAdapter extends DefaultAdapter<Modifier> {
}
private void setReturnButton(Modifier datasBean) {
// tv_food_name.setBackgroundColor(datasBean.getColor());
tv_food_name.setTextColor(android.graphics.Color.parseColor("#FFFFFF"));
tv_food_name.setMaxWidth(mColwidth);
tv_food_name.setMinWidth(mColwidth);
tv_food_name.setWidth(mColwidth);
tv_food_name.setText(datasBean.getModifierName());
tv_food_name.setTextColor(android.graphics.Color.parseColor("#FFFFFF"));
tv_food_name.setBackgroundColor(datasBean.getBgColor());
tv_food_name.setTextSize(mModFontSize);
tv_food_name.setHeight(mColHeight);
tv_food_name.setGravity(Gravity.CENTER);
......@@ -172,7 +172,7 @@ public class FineItemTwoAdapter extends DefaultAdapter<Modifier> {
String desc = "";
// switch (GsaCloudApplication.androidSetting.getDataLanguage()) {
// case 1:
// desc = datasBean.getDesc1();
desc = datasBean.getModifierName();
// break;
// case 2:
// desc = datasBean.getDesc2();
......
package com.gingersoft.gsa.cloud.table.mvp.ui.adapter.meal;
import android.content.Context;
import android.graphics.Color;
import android.graphics.drawable.GradientDrawable;
import android.text.TextUtils;
import android.view.Gravity;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.RelativeLayout;
import android.widget.TextView;
import com.gingersoft.gsa.cloud.base.application.GsaCloudApplication;
import com.gingersoft.gsa.cloud.database.bean.ComboItem;
import com.gingersoft.gsa.cloud.database.bean.Food;
import com.gingersoft.gsa.cloud.database.bean.Modifier;
import com.gingersoft.gsa.cloud.table.R;
import com.gingersoft.gsa.cloud.table.R2;
......@@ -97,7 +102,9 @@ public class ComboAdapter extends DefaultAdapter<ComboItem> {
initModifierName(datasBean.getModifier());
initModifierSoldout(datasBean.getModifier());
}
setSolodStatus(datasBean);
initComboLayoutParams();
tv_name.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
......@@ -186,6 +193,38 @@ public class ComboAdapter extends DefaultAdapter<ComboItem> {
initComboColor(datasBean);
}
private void setSolodStatus(ComboItem datasBean) {
tv_soldout.setMaxHeight(OrderNumberChildFontSize);
tv_soldout.setMinHeight(OrderNumberChildFontSize);
tv_soldout.setTextSize(OrderNumberChildFontSize);
tv_soldout.setTextColor(Color.parseColor("#000000"));
tv_soldout.setBackgroundDrawable(mContext.getResources().getDrawable(R.drawable.ui_selector_white_rect));
tv_soldout.setMinWidth(15);
tv_soldout.setTextSize(8);
tv_soldout.setGravity(Gravity.CENTER);
RelativeLayout.LayoutParams lp2 = new RelativeLayout.LayoutParams(new ViewGroup.MarginLayoutParams(60, 40));
lp2.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM);
lp2.addRule(RelativeLayout.ALIGN_PARENT_LEFT);
tv_soldout.setLayoutParams(lp2);
tv_soldout.setVisibility(View.INVISIBLE);
iv_qty_sold.setVisibility(View.INVISIBLE);
String qty = datasBean.getCurrentMaxNumber();
if (TextUtils.isEmpty(qty)) {
tv_soldout.setVisibility(View.INVISIBLE);
} else {
if (qty.equalsIgnoreCase("售罄")) {
iv_qty_sold.setVisibility(View.VISIBLE);
} else {
tv_soldout.setVisibility(View.VISIBLE);
tv_soldout.setText(qty);
}
}
}
private void initComboColor(ComboItem datasBean) {
GradientDrawable drawable = new GradientDrawable();
drawable.setShape(GradientDrawable.RECTANGLE);
......
......@@ -50,8 +50,6 @@ public class FoodGroupAdapter extends DefaultAdapter<Food> {
private int mParentColHeight;
private int mLayoutQtyHeight;
private int currentSelectPosition = 0;
/**
* 作為那個頁面的適配器:1=餐牌頁;2=沽清頁
*/
......@@ -124,15 +122,8 @@ public class FoodGroupAdapter extends DefaultAdapter<Food> {
for (int i = 0; i < mInfos.size(); i++) {
mInfos.get(i).setSelected(false);
}
if (currentSelectPosition != position) {
//设置当前选中item颜色
datasBean.setSelected(true);
tv_name.setBackgroundColor(mContext.getResources().getColor(R.color.orange_500));
//保存上次操作的position
currentSelectPosition = position;
}
notifyDataSetChanged();
mOnItemClickListener.onItemClick(datasBean, position);
notifyDataSetChanged();
}
}
});
......
package com.gingersoft.gsa.cloud.table.mvp.ui.adapter.meal;
import android.content.Context;
import android.text.TextUtils;
import android.view.Gravity;
import android.view.View;
import android.view.ViewGroup;
......@@ -145,32 +146,29 @@ public class ModifierAdapter extends DefaultAdapter<Modifier> {
private void initModifierSoldout(Modifier datasBean) {
// if (datasBean.isSoldout()) {
// iv_qty_sold.setVisibility(View.VISIBLE);
// String qty = datasBean.getCurrentMaxNumber();
// if (qty.equals("")) {
// tv_soldout.setVisibility(View.INVISIBLE);
// } else {
// iv_qty_sold.setVisibility(View.INVISIBLE);
// }
// int maxNumber = datasBean.getMaxNumber();
// int number = datasBean.getNumber();
// if (number >= maxNumber) {
// tv_soldout.setVisibility(View.VISIBLE);
// tv_soldout.setText(maxNumber);
// } else {
// tv_soldout.setVisibility(View.INVISIBLE);
// tv_soldout.setText(datasBean.getCurrentMaxNumber());
// }
tv_soldout.setMaxHeight(OrderNumberChildShowSize);
tv_soldout.setMinHeight(OrderNumberChildShowSize);
tv_soldout.setTextSize(OrderNumberChildFontSize);
String qty = datasBean.getCurrentMaxNumber();
if (qty.equals("")) {
if (TextUtils.isEmpty(qty)) {
tv_soldout.setVisibility(View.INVISIBLE);
} else {
tv_soldout.setVisibility(View.VISIBLE);
tv_soldout.setText(datasBean.getCurrentMaxNumber());
if (qty.equalsIgnoreCase("售罄")) {
iv_qty_sold.setVisibility(View.VISIBLE);
} else {
tv_soldout.setVisibility(View.VISIBLE);
tv_soldout.setText(qty);
}
}
tv_soldout.setMaxHeight(OrderNumberChildShowSize);
tv_soldout.setMinHeight(OrderNumberChildShowSize);
tv_soldout.setTextSize(OrderNumberChildFontSize);
}
private void initModifierLayoutParams() {
......
......@@ -9,6 +9,7 @@ import android.view.View;
import android.view.ViewGroup;
import com.gingersoft.gsa.cloud.base.application.GsaCloudApplication;
import com.gingersoft.gsa.cloud.database.bean.Modifier;
import com.gingersoft.gsa.cloud.table.R;
import com.gingersoft.gsa.cloud.table.R2;
import com.gingersoft.gsa.cloud.table.di.component.DaggerFineItemAllComponent;
......@@ -24,6 +25,7 @@ import com.gingersoft.gsa.cloud.table.mvp.presenter.FineItemAllPresenter;
import org.simple.eventbus.Subscriber;
import java.util.ArrayList;
import java.util.List;
import androidx.annotation.NonNull;
......@@ -94,25 +96,38 @@ public class FineItemAllFragment extends BaseFragment<FineItemAllPresenter> impl
}
public void updateCurrentSlodoutFoodList_Full(List<SoldoutCtrFood> event) {
if (event == null) {
public void setModifierSoldoutFoodList_Full(List<SoldoutCtrFood> soldoutCtrFoodList) {
if (soldoutCtrFoodList == null) {
return;
}
mPresenter.updateParentModifierSlodoutFoodList_Full(event);
mPresenter.setModifierSoldoutFoodList_Full(soldoutCtrFoodList);
}
public void onModSasteEvent(long fid) {
public void updateParentModifierSlodoutFoodList_Full() {
mPresenter.updateParentModifierSoldoutFoodList_Full();
}
public void loadModSasteData(long fid) {
mPresenter.initModSasteFineItemKindData(fid);
}
public void onModMsgMidEvent(long fid) {
public void loadModMsgData(long fid) {
mPresenter.initModMsgFineItemData(fid);
}
public void onModCommMidEvent(long fid) {
public void loadModCommData(long fid) {
mPresenter.initModCommFineItemKindData(fid);
}
private List<SoldoutCtrFood> getNewSoldoutCtrFoodList(List<SoldoutCtrFood> soldoutCtrFoodList) {
List<SoldoutCtrFood> newSoldoutCtrFoodList = new ArrayList<>();
for (SoldoutCtrFood soldoutCtrFood : soldoutCtrFoodList) {
SoldoutCtrFood newSoldout = new SoldoutCtrFood(soldoutCtrFood);
newSoldoutCtrFoodList.add(newSoldout);
}
return newSoldoutCtrFoodList;
}
@Override
public void showLoading(String message) {
......@@ -126,7 +141,7 @@ public class FineItemAllFragment extends BaseFragment<FineItemAllPresenter> impl
@Override
public void showMessage(@NonNull String message) {
checkNotNull(message);
ArmsUtils.makeText(getCurrentActivity(),message);
ArmsUtils.makeText(getCurrentActivity(), message);
}
@Override
......@@ -226,5 +241,4 @@ public class FineItemAllFragment extends BaseFragment<FineItemAllPresenter> impl
}
}
......@@ -3,23 +3,29 @@ package com.gingersoft.gsa.cloud.table.mvp.ui.fragment;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.os.Message;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;
import com.gingersoft.gsa.cloud.base.application.GsaCloudApplication;
import com.gingersoft.gsa.cloud.base.common.bean.TableBean;
import com.gingersoft.gsa.cloud.table.R;
import com.gingersoft.gsa.cloud.table.R2;
import com.gingersoft.gsa.cloud.table.di.component.DaggerFineItemKindComponent;
import com.gingersoft.gsa.cloud.table.di.component.DaggerFineItemOneselfComponent;
import com.gingersoft.gsa.cloud.table.mvp.contract.FineItemOneselfContract;
import com.gingersoft.gsa.cloud.table.mvp.model.bean.SoldoutCtrFood;
import com.jess.arms.base.BaseFragment;
import com.jess.arms.base.DefaultAdapter;
import com.jess.arms.di.component.AppComponent;
import com.jess.arms.utils.ArmsUtils;
import com.gingersoft.gsa.cloud.table.mvp.contract.FineItemKindContract;
import com.gingersoft.gsa.cloud.table.mvp.presenter.FineItemKindPresenter;
import com.gingersoft.gsa.cloud.table.mvp.presenter.FineItemOneselfPresenter;
import org.simple.eventbus.Subscriber;
import java.util.List;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.recyclerview.widget.DefaultItemAnimator;
......@@ -43,24 +49,23 @@ import static com.jess.arms.utils.Preconditions.checkNotNull;
* <a href="https://github.com/JessYanCoding/MVPArmsTemplate">模版请保持更新</a>
* ================================================
*/
public class FineItemKindFragment extends BaseFragment<FineItemKindPresenter> implements FineItemKindContract.View {
@BindView(R2.id.recycle_fine_item_kind)
RecyclerView recycle_fine_item_kind; //细项分类
public class FineItemOneselfFragment extends BaseFragment<FineItemOneselfPresenter> implements FineItemOneselfContract.View {
@BindView(R2.id.recycle_fine_item_kind_item)
RecyclerView recycle_fine_item_kind_item;//细项分类详细数据
@BindView(R2.id.rv_combo)
RecyclerView rv_combo;
@BindView(R2.id.rv_modifier)
RecyclerView rv_modifier;
private int modCol;
private long mFid;
public static FineItemKindFragment newInstance() {
FineItemKindFragment fragment = new FineItemKindFragment();
public static FineItemOneselfFragment newInstance() {
FineItemOneselfFragment fragment = new FineItemOneselfFragment();
return fragment;
}
@Override
public void setupFragmentComponent(@NonNull AppComponent appComponent) {
DaggerFineItemKindComponent //如找不到该类,请编译一下项目
DaggerFineItemOneselfComponent //如找不到该类,请编译一下项目
.builder()
.appComponent(appComponent)
.view(this)
......@@ -70,38 +75,33 @@ public class FineItemKindFragment extends BaseFragment<FineItemKindPresenter> im
@Override
public View initView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
return inflater.inflate(R.layout.table_fragment_fine_item_kind, container, false);
return inflater.inflate(R.layout.table_fragment_fine_itemoneself, container, false);
}
@Override
public void initData(@Nullable Bundle savedInstanceState) {
modCol = GsaCloudApplication.androidSetting.getModCol();
mPresenter.initAdapter();
mPresenter.initItemListener(mContext);
}
// @Subscriber(tag = "FineItemKindFragment_onCurrentSlodoutFoodList_FullEvent")
// public void onCurrentSlodoutFoodList_FullEvent(List<SoldoutCtrFood.DatasBean> event) {
// if (event == null) {
// return;
// }
// mPresenter.updateCurrentSlodoutFoodList_Full1(event);
// mPresenter.updateCurrentSlodoutFoodList_Full2(event);
// }
@Subscriber(tag = "FineItemKindFragment_onMidEvent")
public void onMidEvent(long mid) {
if (mid == 0) {
return;
public void loadComboData(Long fid) {
if(fid != null){
this.mFid = fid;
}
mPresenter.initFineItemKindData(mid);
mPresenter.loadComboData(mFid);
}
public void setSoldoutFoodList_Full(List<SoldoutCtrFood> soldoutCtrList){
mPresenter.setSoldoutFoodList_Full(soldoutCtrList);
}
public void updateSoldoutFoodList_Full(){
mPresenter.updateSoldoutFoodList_Full();
}
@Override
public void setData(@Nullable Object data) {
}
@Override
......@@ -117,7 +117,7 @@ public class FineItemKindFragment extends BaseFragment<FineItemKindPresenter> im
@Override
public void showMessage(@NonNull String message) {
checkNotNull(message);
ArmsUtils.makeText(getCurrentActivity(),message);
ArmsUtils.makeText(getCurrentActivity(), message);
}
@Override
......@@ -132,81 +132,25 @@ public class FineItemKindFragment extends BaseFragment<FineItemKindPresenter> im
}
@Override
public void setFineItemKindAdapter(DefaultAdapter adapter) {
recycle_fine_item_kind.setAdapter(adapter);
initFineItemOneRecycleView();
}
@Override
public void setFineItemKindItemAdapter(DefaultAdapter adapter) {
recycle_fine_item_kind_item.setAdapter(adapter);
initFineItemTwoRecycleView();
}
@Override
public RecyclerView getRecycle_fine_item_kind() {
return recycle_fine_item_kind;
}
@Override
public RecyclerView getRecycle_fine_item_kind_item() {
return recycle_fine_item_kind_item;
}
private GridLayoutManager mFineItemOneRecycleLayoutManager;
private GridLayoutManager mFineItemTwoRecycleLayoutManager;
public void initFineItemOneRecycleView() {
mFineItemOneRecycleLayoutManager = new GridLayoutManager(mContext, 1, LinearLayoutManager.VERTICAL, false);
recycle_fine_item_kind.setLayoutManager(mFineItemOneRecycleLayoutManager);
recycle_fine_item_kind.setItemAnimator(new DefaultItemAnimator());
}
public void initFineItemOneRecycleView2() {
mFineItemOneRecycleLayoutManager = new GridLayoutManager(mContext, 1, LinearLayoutManager.HORIZONTAL, false);
recycle_fine_item_kind.setLayoutManager(mFineItemOneRecycleLayoutManager);
recycle_fine_item_kind.setItemAnimator(new DefaultItemAnimator());
}
public void initFineItemTwoRecycleView() {
mFineItemTwoRecycleLayoutManager = new GridLayoutManager(mContext, 1, LinearLayoutManager.VERTICAL, false);
recycle_fine_item_kind_item.setLayoutManager(mFineItemTwoRecycleLayoutManager);
recycle_fine_item_kind_item.setItemAnimator(new DefaultItemAnimator());
}
public void initFineItemTwoRecycleView2() {
mFineItemTwoRecycleLayoutManager = new GridLayoutManager(mContext, 1, LinearLayoutManager.HORIZONTAL, false);
recycle_fine_item_kind_item.setLayoutManager(mFineItemTwoRecycleLayoutManager);
recycle_fine_item_kind_item.setItemAnimator(new DefaultItemAnimator());
public Activity getCurrentActivity() {
return (Activity) mContext;
}
@Override
public void setFineItemKindRecycleSpanCount(int size) {
if (size > 0) {
if (size > modCol) {
initFineItemOneRecycleView();
mFineItemOneRecycleLayoutManager.setSpanCount(modCol);
} else {
initFineItemOneRecycleView2();
}
}
public void setComboAdapter(DefaultAdapter adapter) {
// rv_combo.setAdapter(adapter);
}
@Override
public void setFineItemKindItemRecycleSpanCount(int size) {
if (size > 0) {
if (size > modCol) {
initFineItemTwoRecycleView();
mFineItemTwoRecycleLayoutManager.setSpanCount(modCol);
} else {
initFineItemTwoRecycleView2();
}
}
public void setModifierAdapter(DefaultAdapter adapter) {
rv_modifier.setAdapter(adapter);
}
@Override
public Activity getCurrentActivity() {
return (Activity) mContext;
public void setModifierTop(int margins) {
LinearLayout.LayoutParams layoutParam = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
layoutParam.setMargins(0, margins, 0, 0);
rv_modifier.setLayoutParams(layoutParam);
}
@Override
......
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
......@@ -8,18 +8,23 @@
android:orientation="vertical">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recycle_fine_item_kind"
android:id="@+id/rv_combo"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:divider="@null"
android:fadeScrollbars="false"
android:orientation="vertical"
app:spanCount="4"
app:layoutManager="androidx.recyclerview.widget.GridLayoutManager"/>
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recycle_fine_item_kind_item"
android:id="@+id/rv_modifier"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:divider="@null"
android:fadeScrollbars="false"
android:visibility="invisible"
android:orientation="vertical"
app:spanCount="4"
app:layoutManager="androidx.recyclerview.widget.GridLayoutManager"/>
</FrameLayout>
\ No newline at end of file
</LinearLayout>
\ No newline at end of file
ext.alwaysLib = true //虽然apply了cc-settings-2.gradle,但一直作为library编译,否则别的组件依赖此module时会报错
apply from: rootProject.file("cc-settings.gradle")
android {
compileSdkVersion rootProject.ext.android["compileSdkVersion"]
buildToolsVersion rootProject.ext.android["buildToolsVersion"]
// useLibrary 'org.apache.http.legacy'
compileOptions {
targetCompatibility JavaVersion.VERSION_1_8
sourceCompatibility JavaVersion.VERSION_1_8
}
defaultConfig {
minSdkVersion rootProject.ext.android["minSdkVersion"]
targetSdkVersion rootProject.ext.android["targetSdkVersion"]
versionCode rootProject.ext.android["versionCode"]
versionName rootProject.ext.android["versionName"]
}
buildTypes {
debug {
buildConfigField "boolean", "LOG_DEBUG", "true"
buildConfigField "boolean", "USE_CANARY", "true"
minifyEnabled false
proguardFiles 'proguard.cfg'
}
release {
buildConfigField "boolean", "LOG_DEBUG", "false"
buildConfigField "boolean", "USE_CANARY", "false"
minifyEnabled false
shrinkResources false
zipAlignEnabled false
proguardFiles 'proguard.cfg'
}
}
lintOptions {
abortOnError false
}
}
dependencies {
implementation fileTree(include: ['*.jar'], dir: 'libs')
api(rootProject.ext.dependencies["appcompat-v7"]) {
exclude module: 'support-annotations'
exclude module: 'support-v4'
}
implementation 'com.liulishuo.filedownloader:library:1.6.8'
}
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-4.6-all.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
# Add project specific ProGuard rules here.
# You can control the set of applied configuration files using the
# proguardFiles main_function_setting in build.gradle.
#
# For more details, see
# http://developer.android.com/guide/developing/tools/proguard.html
# If your project uses WebView with JS, uncomment the following
# and specify the fully qualified class name to the JavaScript interface
# class:
#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
# public *;
#}
# Uncomment this to preserve the line number information for
# debugging stack traces.
#-keepattributes SourceFile,LineNumberTable
# If you keep the line number information, uncomment this to
# hide the original source file name.
#-renamesourcefileattribute SourceFile
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="teprinciple.updateapputils">
<uses-permission android:name="android.permission.DOWNLOAD_WITHOUT_NOTIFICATION" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />
<application
android:allowBackup="true"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity
android:name="activity.UpdateAppActivity"
android:theme="@style/DialogActivityTheme" />
<service android:name="service.UpdateAppService"/>
<provider
android:name="android.support.v4.content.FileProvider"
android:authorities="${applicationId}.fileprovider"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/update_file_paths"/>
</provider>
</application>
</manifest>
\ No newline at end of file
package activity;
import android.Manifest;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.provider.Settings;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v4.app.ActivityCompat;
import android.support.v4.content.ContextCompat;
import android.support.v7.app.AppCompatActivity;
import android.text.TextUtils;
import android.view.View;
import android.widget.LinearLayout;
import android.widget.ProgressBar;
import android.widget.TextView;
import model.UpdateBean;
import service.UpdateAppService;
import teprinciple.updateapputils.R;
import util.DownloadAppUtils;
import util.UpdateAppUtils;
import view.ConfirmDialog;
import view.DownloadDialog;
/**
* 作者:ELEGANT_BIN
* 版本:1.6.0
* 创建日期:2019/2/16
* 修订历史:2019/2/16
* 描述:
*/
public class UpdateAppActivity extends AppCompatActivity {
private static String KEY_OF_INTENT_UPDATE_BEAN = "KEY_OF_INTENT_UPDATE_BEAN";
public static void launch(Context context, UpdateBean updateBean) {
Intent intent = new Intent(context, UpdateAppActivity.class);
intent.putExtra(KEY_OF_INTENT_UPDATE_BEAN, updateBean);
context.startActivity(intent);
}
private TextView tv_title;
private TextView content;
private TextView sureBtn;
private TextView cancleBtn;
private ProgressBar progressBar;
private LinearLayout ll_bottom;
private UpdateBean updateBean;
private static final int PERMISSION_CODE = 1001;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.view_version_tips_dialog);
updateBean = getIntent().getParcelableExtra(KEY_OF_INTENT_UPDATE_BEAN);
initView();
initOperation();
}
private void initView() {
tv_title = (TextView) findViewById(R.id.tv_title);
sureBtn = (TextView) findViewById(R.id.dialog_confirm_sure);
cancleBtn = (TextView) findViewById(R.id.dialog_confirm_cancle);
content = (TextView) findViewById(R.id.dialog_confirm_title);
progressBar = (ProgressBar) findViewById(R.id.progressBar);
ll_bottom = (LinearLayout) findViewById(R.id.ll_bottom);
String contentStr = "發現新版本:" + updateBean.getServerVersionName() + "\n是否下載更新?";
if (!TextUtils.isEmpty(updateBean.getUpdateInfo())) {
contentStr = "發現新版本:" + updateBean.getServerVersionName() + "是否下載更新?\n\n" + updateBean.getUpdateInfo();
}
content.setText(contentStr);
if (updateBean.getForce()) {
cancleBtn.setText("exit");
} else {
cancleBtn.setText("cancel");
}
}
private void initOperation() {
cancleBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (updateBean.getForce()) {
System.exit(0);
} else {
finish();
}
}
});
sureBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
preDownLoad();
}
});
}
/**
* 预备下载 进行 6.0权限检查
*/
private void preDownLoad() {
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) {
download();
} else {
if (ContextCompat.checkSelfPermission(this,
Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED) {
download();
} else {//申请权限
ActivityCompat.requestPermissions(this,
new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, PERMISSION_CODE);
}
}
}
private void download() {
startService(new Intent(this, UpdateAppService.class));
if (updateBean.getDownloadBy() == UpdateAppUtils.DOWNLOAD_BY_APP) {
if (isWifiConnected(this)) {
showProgressBar();
DownloadAppUtils.download(UpdateAppActivity.this, updateBean.getApkPath(), updateBean.getServerVersionName(), progressBar,content);
} else {
new ConfirmDialog(this, new ConfirmDialog.Callback() {
@Override
public void callback(int position) {
if (position == 1) {
showProgressBar();
DownloadAppUtils.download(UpdateAppActivity.this, updateBean.getApkPath(), updateBean.getServerVersionName(), progressBar,content);
} else {
if (updateBean.getForce()) {
System.exit(0);
} else {
finish();
}
}
}
}).setContent("目前手機不是WiFi狀態\n確認是否繼續下載更新?").show();
}
} else if (updateBean.getDownloadBy() == UpdateAppUtils.DOWNLOAD_BY_BROWSER) {
DownloadAppUtils.downloadForWebView(this, updateBean.getApkPath());
}
}
/**
* 权限请求结果
*/
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
switch (requestCode) {
case PERMISSION_CODE:
if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
download();
} else {
new ConfirmDialog(this, new ConfirmDialog.Callback() {
@Override
public void callback(int position) {
if (position == 1) {
Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
intent.setData(Uri.parse("package:" + getPackageName())); // 根据包名打开对应的设置界面
startActivity(intent);
}
}
}).setContent("暫無讀寫SD卡權限\n是否前往設置?").show();
}
break;
}
}
/**
* 检测wifi是否连接
*/
private boolean isWifiConnected(Context context) {
ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
if (cm != null) {
NetworkInfo networkInfo = cm.getActiveNetworkInfo();
if (networkInfo != null && networkInfo.getType() == ConnectivityManager.TYPE_WIFI) {
return true;
}
}
return false;
}
public void showProgressBar() {
ll_bottom.setVisibility(View.GONE);
progressBar.setVisibility(View.VISIBLE);
tv_title.setText("downloading...");
}
}
package model;
import android.os.Parcel;
import android.os.Parcelable;
import util.UpdateAppUtils;
/**
* 作者:ELEGANT_BIN
* 版本:1.6.0
* 创建日期:2019/2/16
* 修订历史:2019/2/16
* 描述:
*/
public class UpdateBean implements Parcelable {
private int downloadBy = UpdateAppUtils.DOWNLOAD_BY_APP; // 下载方式:默认app下载
private String apkPath = ""; // apk 下载地址
private String updateInfo = ""; // 更新说明
private Boolean isForce = false; // 是否强制更新
private String serverVersionName = ""; // 服务器上版本名
private int serverVersionCode = 0; // 服务器上版本号
private String localVersionName = ""; // 当前本地版本名
private int localVersionCode = 0; // 当前本地版本号
private int checkBy = UpdateAppUtils.CHECK_BY_VERSION_CODE; // 检查方式 按版本名或版本号
private boolean showNotification = true; // 是否在通知栏显示
public boolean isShowNotification() {
return showNotification;
}
public void setShowNotification(boolean showNotification) {
this.showNotification = showNotification;
}
public int getDownloadBy() {
return downloadBy;
}
public void setDownloadBy(int downloadBy) {
this.downloadBy = downloadBy;
}
public String getApkPath() {
return apkPath;
}
public void setApkPath(String apkPath) {
this.apkPath = apkPath;
}
public String getUpdateInfo() {
return updateInfo;
}
public void setUpdateInfo(String updateInfo) {
this.updateInfo = updateInfo;
}
public Boolean getForce() {
return isForce;
}
public void setForce(Boolean force) {
isForce = force;
}
public String getServerVersionName() {
return serverVersionName;
}
public void setServerVersionName(String serverVersionName) {
this.serverVersionName = serverVersionName;
}
public int getServerVersionCode() {
return serverVersionCode;
}
public void setServerVersionCode(int serverVersionCode) {
this.serverVersionCode = serverVersionCode;
}
public String getLocalVersionName() {
return localVersionName;
}
public void setLocalVersionName(String localVersionName) {
this.localVersionName = localVersionName;
}
public int getLocalVersionCode() {
return localVersionCode;
}
public void setLocalVersionCode(int localVersionCode) {
this.localVersionCode = localVersionCode;
}
public int getCheckBy() {
return checkBy;
}
public void setCheckBy(int checkBy) {
this.checkBy = checkBy;
}
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeInt(this.downloadBy);
dest.writeString(this.apkPath);
dest.writeString(this.updateInfo);
dest.writeValue(this.isForce);
dest.writeString(this.serverVersionName);
dest.writeInt(this.serverVersionCode);
dest.writeString(this.localVersionName);
dest.writeInt(this.localVersionCode);
dest.writeInt(this.checkBy);
dest.writeByte(this.showNotification ? (byte) 1 : (byte) 0);
}
public UpdateBean() {
}
protected UpdateBean(Parcel in) {
this.downloadBy = in.readInt();
this.apkPath = in.readString();
this.updateInfo = in.readString();
this.isForce = (Boolean) in.readValue(Boolean.class.getClassLoader());
this.serverVersionName = in.readString();
this.serverVersionCode = in.readInt();
this.localVersionName = in.readString();
this.localVersionCode = in.readInt();
this.checkBy = in.readInt();
this.showNotification = in.readByte() != 0;
}
public static final Parcelable.Creator<UpdateBean> CREATOR = new Parcelable.Creator<UpdateBean>() {
@Override
public UpdateBean createFromParcel(Parcel source) {
return new UpdateBean(source);
}
@Override
public UpdateBean[] newArray(int size) {
return new UpdateBean[size];
}
};
}
package service;
import android.app.Service;
import android.content.BroadcastReceiver;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.IBinder;
import android.support.annotation.Nullable;
import util.UpdateAppReceiver;
/**
* 作者:ELEGANT_BIN
* 版本:1.6.0
* 创建日期:2019/2/16
* 修订历史:2019/2/16
* 描述:
*/
public class UpdateAppService extends Service {
private BroadcastReceiver receiver = new UpdateAppReceiver();
@Override
public void onCreate() {
super.onCreate();
// 动态注册receiver 适配8.0 receiver 静态注册没收不到广播
IntentFilter intentFilter = new IntentFilter("teprinciple.update");
registerReceiver(receiver, intentFilter);
}
@Override
public void onDestroy() {
super.onDestroy();
unregisterReceiver(receiver); // 注销广播
}
@Nullable
@Override
public IBinder onBind(Intent intent) {
return null;
}
}
package util;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.os.Environment;
import android.util.Log;
import android.view.View;
import android.widget.ProgressBar;
import android.widget.TextView;
import com.liulishuo.filedownloader.BaseDownloadTask;
import com.liulishuo.filedownloader.FileDownloadLargeFileListener;
import com.liulishuo.filedownloader.FileDownloader;
import java.io.File;
import activity.UpdateAppActivity;
import teprinciple.updateapputils.R;
import view.DownloadDialog;
/**
* 作者:ELEGANT_BIN
* 版本:1.6.0
* 创建日期:2019/2/16
* 修订历史:2019/2/16
* 描述:
*/
public class DownloadAppUtils {
private static final String TAG = DownloadAppUtils.class.getSimpleName();
public static String downloadUpdateApkFilePath;//下载更新Apk 文件路径
public static String APK = "Download";//安装包目录放在系统目录
public static final String APK_PATH = File.separator + APK + File.separator;
private Context context;
/**
* 通过浏览器下载APK包
*/
public static void downloadForWebView(Context context, String url) {
Uri uri = Uri.parse(url);
Intent intent = new Intent(Intent.ACTION_VIEW, uri);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(intent);
}
public static void download(final Activity context, String url, final String serverVersionName, ProgressBar progressBar, TextView content) {
String packageName = context.getPackageName();
String filePath = null;
if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {//外部存储卡
filePath = Environment.getExternalStorageDirectory().getAbsolutePath() + APK_PATH;
} else {
Log.i(TAG, "没有SD卡");
return;
}
String apkLocalPath = filePath + "GsAndroid" + "_" + serverVersionName + ".apk";
deleteOldGsAndroidApkFiles(new File(filePath));
downloadUpdateApkFilePath = apkLocalPath;
FileDownloader.setup(context);
BaseDownloadTask downloadTask = FileDownloader.getImpl().create(url);
downloadTask.setPath(apkLocalPath);
downloadTask.setListener(new FileDownloadLargeFileListener() {
@Override
protected void started(BaseDownloadTask task) {
content.setText("");
}
@Override
protected void pending(BaseDownloadTask task, long soFarBytes, long totalBytes) {
}
@Override
protected void progress(BaseDownloadTask task, long soFarBytes, long totalBytes) {
int pro = (int) (soFarBytes * 100.0 / totalBytes);
progressBar.setProgress(pro);
content.setText(pro + "%");
send(context, pro, serverVersionName);
}
@Override
protected void paused(BaseDownloadTask task, long soFarBytes, long totalBytes) {
}
@Override
protected void completed(BaseDownloadTask task) {
context.finish();
send(context, 100, serverVersionName);
}
@Override
protected void error(BaseDownloadTask task, Throwable e) {
//Toast.makeText(context, "下载出错", Toast.LENGTH_SHORT).show();
}
@Override
protected void warn(BaseDownloadTask task) {
}
}).start();
}
/**
* 删除目录下旧GsaAndroid Apk
*
* @param file
*/
private static void deleteOldGsAndroidApkFiles(File file) {
File files[] = file.listFiles();
if (files != null)
for (File f : files) {
if (f.getName().contains("GsAndroid") && f.exists()) {// 判断是否存在  
deleteOldGsAndroidApkFiles(f);
try {
f.delete();
} catch (Exception e) {
}
}
}
}
private static void send(Context context, int progress, String serverVersionName) {
Intent intent = new Intent("teprinciple.update");
intent.putExtra("progress", progress);
intent.putExtra("title", serverVersionName);
context.sendBroadcast(intent);
}
}
package util;
import android.app.Notification;
import android.app.NotificationChannel;
import android.app.NotificationManager;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.os.Build;
import android.support.v4.content.FileProvider;
import android.webkit.DownloadListener;
import java.io.File;
import teprinciple.updateapputils.R;
/**
* 作者:ELEGANT_BIN
* 版本:1.6.0
* 创建日期:2019/2/16
* 修订历史:2019/2/16
* 描述:
*/
public class UpdateAppReceiver extends BroadcastReceiver {
private String notificationChannel = "1001";
@Override
public void onReceive(Context context, Intent intent) {
int progress = intent.getIntExtra("progress", 0);
String title = intent.getStringExtra("title");
NotificationManager nm = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
// 显示通知栏
int notifyId = 1;
if (UpdateAppUtils.showNotification) {
showNotification(context, notifyId, progress, title, notificationChannel, nm);
}
// 下载完成
if (progress == 100) {
handleDownloadComplete(context, notifyId, nm);
}
}
/**
* 下载完成后的逻辑
*/
private void handleDownloadComplete(Context context, int notifyId, NotificationManager nm) {
// 关闭通知栏
if (nm != null) {
nm.cancel(notifyId);
if (Build.VERSION.SDK_INT > Build.VERSION_CODES.O) {
nm.deleteNotificationChannel(notificationChannel);
}
}
// 安装apk
if (DownloadAppUtils.downloadUpdateApkFilePath != null) {
toInstall(context);
}
}
/**
* 通知栏显示
*/
private void showNotification(Context context, int notifyId, int progress, String title, String notificationChannel, NotificationManager nm) {
String notificationName = "notification";
// 适配8.0
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
// 通知渠道
NotificationChannel channel = new NotificationChannel(notificationChannel, notificationName, NotificationManager.IMPORTANCE_HIGH);
channel.enableLights(false); // 是否在桌面icon右上角展示小红点
channel.setShowBadge(false); // 是否在久按桌面图标时显示此渠道的通知
channel.enableVibration(false);
// 最后在notificationmanager中创建该通知渠道
nm.createNotificationChannel(channel);
}
Notification.Builder builder = new Notification.Builder(context);
//NotificationCompat.Builder builder = new NotificationCompat.Builder(context);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
builder.setChannelId(notificationChannel);
}
builder.setContentTitle("正在下載 " + title);
builder.setSmallIcon(R.drawable.logo);
builder.setProgress(100, progress, false);
Notification notification = null;
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.JELLY_BEAN) {
notification = builder.build();
} else {
notification = builder.getNotification();
}
nm.notify(notifyId, notification);
}
/**
* 跳转安装
*/
private void toInstall(Context context) {
Intent i = new Intent(Intent.ACTION_VIEW);
File apkFile = new File(DownloadAppUtils.downloadUpdateApkFilePath);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
i.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
Uri contentUri = FileProvider.getUriForFile(
context, context.getPackageName() + ".fileprovider", apkFile);
i.setDataAndType(contentUri, "application/vnd.android.package-archive");
} else {
i.setDataAndType(Uri.fromFile(apkFile), "application/vnd.android.package-archive");
}
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(i);
}
}
package util;
import android.app.Activity;
import android.content.Context;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.util.Log;
import activity.UpdateAppActivity;
import model.UpdateBean;
import view.DownloadDialog;
/**
* 作者:ELEGANT_BIN
* 版本:1.6.0
* 创建日期:2019/2/16
* 修订历史:2019/2/16
* 描述:
*/
public class UpdateAppUtils {
private final String TAG = "UpdateAppUtils";
public static final int CHECK_BY_VERSION_NAME = 1001;
public static final int CHECK_BY_VERSION_CODE = 1002;
public static final int DOWNLOAD_BY_APP = 1003;
public static final int DOWNLOAD_BY_BROWSER = 1004;
private Activity activity;
public static boolean showNotification = true;
// 将所有的 属性 放入model
private UpdateBean updateBean = new UpdateBean();
private UpdateAppUtils(Activity activity) {
this.activity = activity;
getAPPLocalVersion(activity);
}
public static UpdateAppUtils from(Activity activity) {
return new UpdateAppUtils(activity);
}
public UpdateAppUtils checkBy(int checkBy) {
updateBean.setCheckBy(checkBy);
return this;
}
public UpdateAppUtils apkPath(String apkPath) {
updateBean.setApkPath(apkPath);
return this;
}
public UpdateAppUtils downloadBy(int downloadBy) {
updateBean.setDownloadBy(downloadBy);
return this;
}
public UpdateAppUtils showNotification(boolean showNotification) {
updateBean.setShowNotification(showNotification);
this.showNotification = showNotification;
return this;
}
public UpdateAppUtils updateInfo(String updateInfo) {
updateBean.setUpdateInfo(updateInfo);
return this;
}
public UpdateAppUtils serverVersionCode(int serverVersionCode) {
updateBean.setServerVersionCode(serverVersionCode);
return this;
}
public UpdateAppUtils serverVersionName(String serverVersionName) {
updateBean.setServerVersionName(serverVersionName);
return this;
}
public UpdateAppUtils isForce(boolean isForce) {
updateBean.setForce(isForce);
return this;
}
/**
* 获取apk的版本号 currentVersionCode
*/
private void getAPPLocalVersion(Context ctx) {
PackageManager manager = ctx.getPackageManager();
try {
PackageInfo info = manager.getPackageInfo(ctx.getPackageName(), 0);
updateBean.setLocalVersionCode(info.versionCode);
updateBean.setLocalVersionName(info.versionName);
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
}
}
/**
* 检查更新
*/
public void update() {
switch (updateBean.getCheckBy()) {
case CHECK_BY_VERSION_CODE:
if (updateBean.getServerVersionCode() > updateBean.getLocalVersionCode()) {
toUpdate();
} else {
Log.i(TAG, "当前版本是最新版本" + updateBean.getServerVersionCode() + "/" + updateBean.getServerVersionName());
}
break;
case CHECK_BY_VERSION_NAME:
if (!updateBean.getServerVersionName().equals(updateBean.getLocalVersionName())) {
toUpdate();
} else {
Log.i(TAG, "当前版本是最新版本" + updateBean.getServerVersionCode() + "/" + updateBean.getServerVersionName());
}
break;
}
}
/**
* 更新
*/
private void toUpdate() {
UpdateAppActivity.launch(activity, updateBean);
}
}
package view;
import android.app.Dialog;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.TextView;
import teprinciple.updateapputils.R;
/**
* 作者:ELEGANT_BIN
* 版本:1.6.0
* 创建日期:2019/2/16
* 修订历史:2019/2/16
* 描述:
*/
public class ConfirmDialog extends Dialog {
Callback callback;
private TextView content;
private TextView sureBtn;
private TextView cancleBtn;
public ConfirmDialog(Context context, Callback callback) {
super(context, R.style.CustomDialog);
this.callback = callback;
setCustomDialog();
}
private void setCustomDialog() {
View mView = LayoutInflater.from(getContext()).inflate(R.layout.dialog_confirm, null);
sureBtn = (TextView) mView.findViewById(R.id.dialog_confirm_sure);
cancleBtn = (TextView) mView.findViewById(R.id.dialog_confirm_cancle);
content = (TextView) mView.findViewById(R.id.dialog_confirm_title);
sureBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
callback.callback(1);
ConfirmDialog.this.cancel();
}
});
cancleBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
callback.callback(0);
ConfirmDialog.this.cancel();
}
});
super.setContentView(mView);
}
public ConfirmDialog setContent(String s) {
content.setText(s);
return this;
}
public interface Callback {
void callback(int position);
}
}
package view;
import android.app.Dialog;
import android.content.Context;
import android.os.Bundle;
import android.widget.ProgressBar;
import android.widget.TextView;
import teprinciple.updateapputils.R;
/**
* @company: JOE工作室
* @ClassName: DownloadDialog
* @Description: TODO(下载进度对话框)
* @Author: JOE
* @Date: 2016-9-10 上午11:30:43
*/
public class DownloadDialog extends Dialog {
private TextView textTitle;
private ProgressBar progress_bar;
private TextView progress_value;
private TextView close_btn;
private android.view.View.OnClickListener listener;
public DownloadDialog(Context context) {
super(context);
}
public DownloadDialog(Context context, int theme, android.view.View.OnClickListener listener) {
super(context, theme);
this.listener = listener;
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.layout_download_dialog);
initView();
}
private void initView() {
textTitle = (TextView) findViewById(R.id.dialog_title);
progress_bar = (ProgressBar) findViewById(R.id.progress_bar);
progress_value = (TextView) findViewById(R.id.progress_value);
close_btn = (TextView) findViewById(R.id.close_btn);
int themeColor = getContext().getResources().getColor(R.color.colorPrimary);
textTitle.setTextColor(themeColor);
progress_value.setTextColor(themeColor);
close_btn.setTextColor(themeColor);
close_btn.setOnClickListener(listener);
}
public void setTitle(String title) {
textTitle.setText(title);
}
public void updateProgress(int value) {
progress_value.setText(value + "%");
progress_bar.setProgress(value);
if (100 == value)
dismiss();
}
public void setBottomText(String text) {
close_btn.setText(text);
}
}
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<size
android:width="40dp"
android:height="20dp" />
<solid android:color="#EFEFEF" />
<corners android:radius="12dp" />
</shape>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical">
<LinearLayout
android:layout_width="270dp"
android:layout_height="wrap_content"
android:background="@drawable/bg_dialog_confirm"
android:orientation="vertical">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="15dp"
android:layout_marginTop="15dp"
android:layout_marginRight="15dp"
android:gravity="center_horizontal"
android:text="提示"
android:textColor="@color/text_black"
android:textSize="19sp" />
<TextView
android:id="@+id/dialog_confirm_title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="15dp"
android:layout_marginTop="10dp"
android:layout_marginRight="15dp"
android:layout_marginBottom="10dp"
android:gravity="center_horizontal"
android:lineSpacingExtra="5dp"
android:textColor="@color/text_black"
android:textSize="17sp" />
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:layout_marginTop="13dp"
android:background="#DFDFDF" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="44dp"
android:orientation="horizontal">
<TextView
android:id="@+id/dialog_confirm_cancle"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:clickable="true"
android:gravity="center"
android:text="@string/cancel"
android:textColor="@color/text_blue"
android:textSize="17sp" />
<View
android:layout_width="1dp"
android:layout_height="match_parent"
android:background="#DFDFDF" />
<TextView
android:id="@+id/dialog_confirm_sure"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:clickable="true"
android:gravity="center"
android:text="@string/sure"
android:textColor="@color/text_blue"
android:textSize="17sp" />
</LinearLayout>
</LinearLayout>
</LinearLayout>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="280dip"
android:layout_height="wrap_content"
android:layout_marginBottom="15dip"
android:background="#FFFFFF"
android:orientation="vertical"
android:paddingLeft="10dip"
android:paddingTop="15dip"
android:paddingRight="10dip">
<TextView
android:id="@+id/dialog_title"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="10dip"
android:gravity="center"
android:text="downloading..."
android:textColor="@color/colorPrimary"
android:textSize="16sp" />
<ProgressBar
android:id="@+id/progress_bar"
style="?android:attr/progressBarStyleHorizontal"
android:layout_width="match_parent"
android:layout_height="5dp"
android:max="100"
android:progress="0" />
<TextView
android:id="@+id/progress_value"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_marginTop="6dip"
android:layout_marginBottom="10dip"
android:text="0%"
android:textColor="@color/colorAccent"
android:textSize="14sp" />
<TextView
android:id="@+id/close_btn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_marginTop="1dip"
android:layout_marginBottom="5dip"
android:padding="5dip"
android:text="@string/cancel"
android:textColor="#000000" />
</LinearLayout>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical">
<LinearLayout
android:layout_width="270dp"
android:layout_height="wrap_content"
android:background="@drawable/bg_dialog_confirm"
android:orientation="vertical">
<TextView
android:id="@+id/tv_title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="15dp"
android:layout_marginTop="15dp"
android:layout_marginRight="15dp"
android:gravity="center_horizontal"
android:text="提示"
android:textColor="@color/text_black"
android:textSize="19sp" />
<TextView
android:id="@+id/dialog_confirm_title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="15dp"
android:layout_marginTop="10dp"
android:layout_marginRight="15dp"
android:layout_marginBottom="10dp"
android:gravity="center_horizontal"
android:lineSpacingExtra="5dp"
android:textColor="@color/text_black"
android:textSize="16sp" />
<ProgressBar
android:id="@+id/progressBar"
style="?android:attr/progressBarStyleHorizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="10dp"
android:layout_gravity="center"
android:visibility="gone"
android:progress="88"/>
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:layout_marginTop="13dp"
android:background="#DFDFDF" />
<LinearLayout
android:id="@+id/ll_bottom"
android:layout_width="match_parent"
android:layout_height="44dp"
android:orientation="horizontal">
<TextView
android:id="@+id/dialog_confirm_cancle"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:clickable="true"
android:gravity="center"
android:text="@string/cancel"
android:textColor="@color/text_blue"
android:textSize="17sp" />
<View
android:layout_width="1dp"
android:layout_height="match_parent"
android:background="#DFDFDF" />
<TextView
android:id="@+id/dialog_confirm_sure"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:clickable="true"
android:gravity="center"
android:text="@string/sure"
android:textColor="@color/text_blue"
android:textSize="17sp" />
</LinearLayout>
</LinearLayout>
</LinearLayout>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="colorPrimary">#1296db</color>
<color name="colorPrimaryDark">#303F9F</color>
<color name="colorAccent">#FF4081</color>
<color name="text_blue">#0076FF</color>
<color name="text_black">#333333</color>
</resources>
\ No newline at end of file
<resources>
<string name="app_name">Library</string>
<string name="cancel">cancel</string>
<string name="sure">sure</string>
</resources>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="CustomDialog" parent="@android:style/Theme.Dialog">
<item name="android:windowFrame">@null</item>
<item name="android:windowIsFloating">true</item>
<item name="android:windowIsTranslucent">false</item>
<item name="android:windowNoTitle">true</item>
<item name="android:windowBackground">@drawable/bg_dialog_confirm</item>
<item name="android:backgroundDimEnabled">true</item>
</style>
<style name="AppTheme" parent="Theme.AppCompat.NoActionBar"/>
<style name="DialogActivityTheme" parent="Theme.AppCompat.Dialog">
<item name="android:windowFrame">@null</item>
<!-- 边框 -->
<item name="android:windowIsFloating">true</item>
<!-- 是否浮现在activity之上 -->
<item name="android:windowIsTranslucent">true</item>
<!-- 半透明 -->
<item name="android:windowNoTitle">true</item>
<item name="android:windowBackground">@android:color/transparent</item>
<item name="android:background">@android:color/transparent</item>
<item name="android:backgroundDimEnabled">true</item>
<!-- 模糊 -->
<item name="android:windowCloseOnTouchOutside">false</item>
<!-- 重点,去掉标题 -->
<item name="windowNoTitle">true</item>
</style>
</resources>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<paths>
<external-path path="" name="files_root" />
</paths>
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment