Commit 525c4def by 宁斌

折扣增加:上限,獨佔,暫停,只一次,最小賬單金額邏輯

parent aa04da1b
......@@ -3,6 +3,7 @@ package com.gingersoft.gsa.cloud.ui.widget.dialog;
import android.app.Activity;
import android.text.InputType;
import android.text.TextUtils;
import android.widget.EditText;
import com.gingersoft.gsa.cloud.base.R;
import com.qmuiteam.qmui.widget.dialog.QMUIDialog;
......@@ -59,6 +60,20 @@ public class CommonTipDialog {
dialogBuilder.create(R.style.MyDialogTheme2).show();
}
public static void showDoubtDialog2(Activity context, String msg, OnCallbackListener listener) {
QMUIDialog.MessageDialogBuilder dialogBuilder = new QMUIDialog.MessageDialogBuilder(context);
dialogBuilder.setTitleIcon(R.drawable.qmui_icon_dialog_doubt);
dialogBuilder.setMessage(msg);
dialogBuilder.addAction(R.drawable.shape_red_five_radius_bg, "確認", QMUIDialogAction.ACTION_PROP_NEGATIVE, (dialog, index) -> {
dialog.dismiss();
if (listener != null) {
listener.onSure();
}
});
dialogBuilder.addAction(R.drawable.shape_3c_cancel_btn_bg, "取消", (dialog, index) -> dialog.dismiss());
dialogBuilder.create(R.style.MyDialogTheme2).show();
}
/**
* 危險警示dialog 確認后執行對應方法
*
......@@ -190,7 +205,7 @@ public class CommonTipDialog {
* @param title
* @param placeholder
*/
public static void showEditDialog(Activity context, String title, String placeholder,int inputType, OnEditTextListener onEditTextListener) {
public static EditText showEditDialog(Activity context, String title, String placeholder, int inputType, OnEditTextListener onEditTextListener) {
final QMUIDialog.EditTextDialogBuilder dialogBuilder = new QMUIDialog.EditTextDialogBuilder(context);
dialogBuilder.setTitle(title);
dialogBuilder.setPlaceholder(placeholder);
......@@ -204,15 +219,25 @@ public class CommonTipDialog {
});
dialogBuilder.addAction("取消", (dialog, index) -> dialog.dismiss());
dialogBuilder.create(R.style.MyEditDialogTheme).show();
return dialogBuilder.getEditText();
}
private OnEditTextListener onEditTextListener;
private OnCallbackListener onCallbackListener;
public void setOnEditTextListener(OnEditTextListener onEditTextListener) {
this.onEditTextListener = onEditTextListener;
}
public void setOnCallbackListener(OnCallbackListener onCallbackListener) {
this.onCallbackListener = onCallbackListener;
}
public interface OnEditTextListener {
void inputText(String text);
}
public interface OnCallbackListener {
void onSure();
}
}
package com.gingersoft.gsa.cloud.ui.widget.keyboard;
import android.content.Context;
import android.graphics.Color;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.RelativeLayout;
import android.widget.TextView;
import com.gingersoft.gsa.cloud.base.R;
import java.util.ArrayList;
import java.util.Map;
/**
* 九宫格键盘适配器
*/
public class KeyBoardAdapter extends BaseAdapter {
private Context mContext;
private ArrayList<Map<String, String>> valueList;
public KeyBoardAdapter(Context mContext, ArrayList<Map<String, String>> valueList) {
this.mContext = mContext;
this.valueList = valueList;
}
@Override
public int getCount() {
return valueList.size();
}
@Override
public Object getItem(int position) {
return valueList.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder viewHolder;
if (convertView == null) {
convertView = View.inflate(mContext, R.layout.item_grid_virtual_keyboard, null);
viewHolder = new ViewHolder();
viewHolder.btnKey = (TextView) convertView.findViewById(R.id.btn_keys);
viewHolder.imgDelete = (RelativeLayout) convertView.findViewById(R.id.imgDelete);
convertView.setTag(viewHolder);
} else {
viewHolder = (ViewHolder) convertView.getTag();
}
if (position == 9) {
viewHolder.imgDelete.setVisibility(View.INVISIBLE);
viewHolder.btnKey.setVisibility(View.VISIBLE);
viewHolder.btnKey.setText(valueList.get(position).get("name"));
viewHolder.btnKey.setBackgroundColor(Color.parseColor("#e0e0e0"));
} else if (position == 11) {
viewHolder.btnKey.setBackgroundResource(R.mipmap.keyboard_delete_img);
viewHolder.imgDelete.setVisibility(View.VISIBLE);
viewHolder.btnKey.setVisibility(View.INVISIBLE);
} else {
viewHolder.imgDelete.setVisibility(View.INVISIBLE);
viewHolder.btnKey.setVisibility(View.VISIBLE);
viewHolder.btnKey.setText(valueList.get(position).get("name"));
}
return convertView;
}
/**
* 存放控件
*/
public final class ViewHolder {
public TextView btnKey;
public RelativeLayout imgDelete;
}
}
\ No newline at end of file
package com.gingersoft.gsa.cloud.ui.widget.keyboard;
/**
* 自定义接口,用于给密码输入完成添加回掉事件
*/
public interface OnPasswordInputFinish {
void inputFinish(String password);
}
\ No newline at end of file
package com.gingersoft.gsa.cloud.ui.widget.keyboard;
import android.content.Context;
import android.text.Editable;
import android.text.TextWatcher;
import android.util.AttributeSet;
import android.view.View;
import android.widget.AdapterView;
import android.widget.GridView;
import android.widget.ImageView;
import android.widget.RelativeLayout;
import android.widget.TextView;
import com.gingersoft.gsa.cloud.base.R;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
/**
* 弹框里面的View
*/
public class PasswordView extends RelativeLayout {
Context mContext;
private VirtualKeyboardView virtualKeyboardView;
private TextView[] tvList; //用数组保存6个TextView,为什么用数组?
private ImageView[] imgList; //用数组保存6个TextView,为什么用数组?
private GridView gridView;
private ImageView imgCancel;
private ArrayList<Map<String, String>> valueList;
private int currentIndex = -1; //用于记录当前输入密码格位置
public PasswordView(Context context) {
this(context, null);
}
public PasswordView(Context context, AttributeSet attrs) {
super(context, attrs);
this.mContext = context;
View view = View.inflate(context, R.layout.layout_popup_bottom, null);
virtualKeyboardView = (VirtualKeyboardView) view.findViewById(R.id.virtualKeyboardView);
imgCancel = (ImageView) view.findViewById(R.id.img_cancel);
gridView = virtualKeyboardView.getGridView();
initValueList();
initView(view);
setupView();
addView(view);
}
private void initView(View view) {
tvList = new TextView[6];
imgList = new ImageView[6];
tvList[0] = (TextView) view.findViewById(R.id.tv_pass1);
tvList[1] = (TextView) view.findViewById(R.id.tv_pass2);
tvList[2] = (TextView) view.findViewById(R.id.tv_pass3);
tvList[3] = (TextView) view.findViewById(R.id.tv_pass4);
tvList[4] = (TextView) view.findViewById(R.id.tv_pass5);
tvList[5] = (TextView) view.findViewById(R.id.tv_pass6);
imgList[0] = (ImageView) view.findViewById(R.id.img_pass1);
imgList[1] = (ImageView) view.findViewById(R.id.img_pass2);
imgList[2] = (ImageView) view.findViewById(R.id.img_pass3);
imgList[3] = (ImageView) view.findViewById(R.id.img_pass4);
imgList[4] = (ImageView) view.findViewById(R.id.img_pass5);
imgList[5] = (ImageView) view.findViewById(R.id.img_pass6);
}
// 这里,我们没有使用默认的数字键盘,因为第10个数字不显示.而是空白
private void initValueList() {
valueList = new ArrayList<>();
// 初始化按钮上应该显示的数字
for (int i = 1; i < 13; i++) {
Map<String, String> map = new HashMap<String, String>();
if (i < 10) {
map.put("name", String.valueOf(i));
} else if (i == 10) {
map.put("name", "");
} else if (i == 11) {
map.put("name", String.valueOf(0));
} else if (i == 12) {
map.put("name", "");
}
valueList.add(map);
}
}
private void setupView() {
// 这里、重新为数字键盘gridView设置了Adapter
KeyBoardAdapter keyBoardAdapter = new KeyBoardAdapter(mContext, valueList);
gridView.setAdapter(keyBoardAdapter);
gridView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
if (position < 11 && position != 9) { //点击0~9按钮
if (currentIndex >= -1 && currentIndex < 5) { //判断输入位置————要小心数组越界
;
++currentIndex;
tvList[currentIndex].setText(valueList.get(position).get("name"));
tvList[currentIndex].setVisibility(View.INVISIBLE);
imgList[currentIndex].setVisibility(View.VISIBLE);
}
} else {
if (position == 11) { //点击退格键
if (currentIndex - 1 >= -1) { //判断是否删除完毕————要小心数组越界
tvList[currentIndex].setText("");
tvList[currentIndex].setVisibility(View.VISIBLE);
imgList[currentIndex].setVisibility(View.INVISIBLE);
currentIndex--;
}
}
}
}
});
}
//设置监听方法,在第6位输入完成后触发
public void setOnFinishInput(final OnPasswordInputFinish pass) {
tvList[5].addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
@Override
public void afterTextChanged(Editable s) {
if (s.toString().length() == 1) {
String strPassword = ""; //每次触发都要先将strPassword置空,再重新获取,避免由于输入删除再输入造成混乱
for (int i = 0; i < 6; i++) {
strPassword += tvList[i].getText().toString().trim();
}
pass.inputFinish(strPassword); //接口中要实现的方法,完成密码输入完成后的响应逻辑
}
}
});
}
public VirtualKeyboardView getVirtualKeyboardView() {
return virtualKeyboardView;
}
public ImageView getImgCancel() {
return imgCancel;
}
}
package com.gingersoft.gsa.cloud.ui.widget.keyboard;
import android.app.Activity;
import android.content.Context;
import android.graphics.drawable.ColorDrawable;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup.LayoutParams;
import android.widget.PopupWindow;
import android.widget.Toast;
import com.gingersoft.gsa.cloud.base.R;
/**
* 输入支付密码
*
* @author lining
*/
public class PopEnterPassword extends PopupWindow {
private PasswordView pwdView;
private View mMenuView;
private Activity mContext;
public PopEnterPassword(final Activity context) {
super(context);
this.mContext = context;
LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
mMenuView = inflater.inflate(R.layout.pop_enter_password, null);
pwdView = (PasswordView) mMenuView.findViewById(R.id.pwd_view);
//添加密码输入完成的响应
pwdView.setOnFinishInput(new OnPasswordInputFinish() {
@Override
public void inputFinish(final String password) {
new Thread(new Runnable() {
@Override
public void run() {
// 模拟耗时的操作。
try {
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
mContext.runOnUiThread(new Runnable() {
@Override
public void run() {
dismiss();
Toast.makeText(mContext, "支付成功,密码为:" + password, Toast.LENGTH_SHORT).show();
}
});
}
}).start();
}
});
// 监听X关闭按钮
pwdView.getImgCancel().setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
dismiss();
}
});
// 监听键盘上方的返回
pwdView.getVirtualKeyboardView().getLayoutBack().setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
dismiss();
}
});
// 设置SelectPicPopupWindow的View
this.setContentView(mMenuView);
// 设置SelectPicPopupWindow弹出窗体的宽
this.setWidth(LayoutParams.MATCH_PARENT);
// 设置SelectPicPopupWindow弹出窗体的高
this.setHeight(LayoutParams.WRAP_CONTENT);
// 设置SelectPicPopupWindow弹出窗体可点击
this.setFocusable(true);
// 设置SelectPicPopupWindow弹出窗体动画效果
this.setAnimationStyle(R.style.pop_add_ainm);
// 实例化一个ColorDrawable颜色为半透明
ColorDrawable dw = new ColorDrawable(0x66000000);
// 设置SelectPicPopupWindow弹出窗体的背景
this.setBackgroundDrawable(dw);
}
}
package com.gingersoft.gsa.cloud.ui.widget.keyboard;
import android.content.Context;
import android.util.AttributeSet;
import android.view.View;
import android.widget.GridView;
import android.widget.RelativeLayout;
import com.gingersoft.gsa.cloud.base.R;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
/**
* @author : bin
* @create date: 2020-10-28
* @update date: 2020-10-28
* @description:
*/
public class VirtualKeyboardView extends RelativeLayout implements View.OnClickListener {
private Context context;
private GridView gridView;
private RelativeLayout layoutBack;
private ArrayList<Map<String, String>> valueList;
public VirtualKeyboardView(Context context) {
this(context, null);
}
public VirtualKeyboardView(Context context, AttributeSet attrs) {
super(context, attrs);
this.context = context;
View view = View.inflate(context, R.layout.layout_virtual_keyboard, null);
valueList = new ArrayList<>();
layoutBack = (RelativeLayout) view.findViewById(R.id.layoutBack);
layoutBack.setOnClickListener(this);
gridView = (GridView) view.findViewById(R.id.gv_keybord);
setView();
addView(view);
}
public RelativeLayout getLayoutBack() {
return layoutBack;
}
public ArrayList<Map<String, String>> getValueList() {
return valueList;
}
public GridView getGridView() {
return gridView;
}
private void setView() {
/* 初始化按钮上应该显示的数字 */
for (int i = 1; i < 13; i++) {
Map<String, String> map = new HashMap<String, String>();
if (i < 10) {
map.put("name", String.valueOf(i));
} else if (i == 10) {
map.put("name", ".");
} else if (i == 11) {
map.put("name", String.valueOf(0));
} else if (i == 12) {
map.put("name", "");
}
valueList.add(map);
}
KeyBoardAdapter keyBoardAdapter = new KeyBoardAdapter(context, valueList);
gridView.setAdapter(keyBoardAdapter);
}
@Override
public void onClick(View v) {
}
}
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<corners android:radius="0dp" />
<stroke
android:width="0.66dp"
android:color="#bfbfbf" />
<solid android:color="@android:color/white" />
</shape>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<!-- 上下滑入式 -->
<set xmlns:android="http://schemas.android.com/apk/res/android" >
<translate
android:duration="300"
android:fromYDelta="100%p"
android:toYDelta="0" />
<alpha
android:fromAlpha="0.0"
android:toAlpha="1.0"
android:duration="300" />
</set>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<!-- 上下滑入式 -->
<set xmlns:android="http://schemas.android.com/apk/res/android" >
<translate
android:duration="300"
android:fromYDelta="0"
android:toYDelta="50%p" />
<alpha
android:fromAlpha="1.0"
android:toAlpha="0.0"
android:duration="300"
/>
</set>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_enabled="false">
<shape>
<solid android:color="#C0C4C7" />
</shape>
</item>
<item android:state_enabled="true" android:state_pressed="false">
<shape>
<solid android:color="#F5F5F5" />
</shape>
</item>
<item android:state_enabled="true" android:state_pressed="true">
<shape>
<solid android:color="#C0C4C7" />
</shape>
</item>
</selector>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="oval"
android:useLevel="false">
<solid android:color="#000000" />
<size
android:width="20dp"
android:height="20dp" />
</shape>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<corners android:radius="0dp" />
<stroke
android:width="0.66dp"
android:color="#bfbfbf" />
<solid android:color="@android:color/white" />
</shape>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#e0e0e0">
<TextView
android:id="@+id/btn_keys"
android:layout_width="match_parent"
android:layout_height="@dimen/dp_60"
android:layout_centerInParent="true"
android:background="@drawable/ui_selector_item_background"
android:gravity="center"
android:includeFontPadding="false"
android:textColor="#333333"
android:textSize="@dimen/sp_26" />
<RelativeLayout
android:id="@+id/imgDelete"
android:layout_width="wrap_content"
android:layout_height="@dimen/dp_60"
android:layout_centerInParent="true">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:src="@mipmap/keyboard_delete_img" />
</RelativeLayout>
</RelativeLayout>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<!-- 输入键盘 -->
<GridView
android:id="@+id/gv_keybord"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:background="#bdbdbd"
android:horizontalSpacing="1px"
android:numColumns="3"
android:verticalSpacing="1px" />
<View
android:id="@+id/line"
android:layout_width="match_parent"
android:layout_height="1px"
android:layout_above="@id/gv_keybord"
android:background="#bdbdbd" />
<RelativeLayout
android:id="@+id/layoutBack"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_above="@id/line"
android:background="#f5f5f5"
android:padding="@dimen/dp_10">
<ImageView
android:id="@+id/imgBack"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:src="@mipmap/keyboard_back_img" />
</RelativeLayout>
<View
android:layout_width="match_parent"
android:layout_height="1px"
android:layout_above="@id/layoutBack"
android:layout_marginTop="@dimen/dp_1"
android:background="#bdbdbd" />
</RelativeLayout>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true">
<RelativeLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="center_horizontal"
android:orientation="vertical">
<com.gingersoft.gsa.cloud.ui.widget.keyboard.PasswordView
android:id="@+id/pwd_view"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true" />
</RelativeLayout>
</FrameLayout>
\ No newline at end of file
......@@ -89,6 +89,11 @@
<item name="android:textSize">16sp</item>
</style>
<style name="pop_add_ainm" parent="android:Animation">
<item name="android:windowEnterAnimation">@anim/push_bottom_in</item>
<item name="android:windowExitAnimation">@anim/push_bottom_out</item>
</style>
<!-- **************************QMUI 相关*******************************-->
<style name="QDtextAppearanceListItem">
......
......@@ -129,8 +129,7 @@ public class Discount {
@Transient
private long memberId = -1;
@Generated(hash = 637151409)
@Generated(hash = 1938515536)
public Discount(Long id, int restaurantId, double amount, int discountValue,
int type, String discountType, int status, String remark,
byte freeServiceCharge, byte managerApproval, String color,
......@@ -170,7 +169,6 @@ public class Discount {
public Discount() {
}
public Long getId() {
return this.id;
}
......@@ -235,19 +233,19 @@ public class Discount {
this.remark = remark;
}
public Byte getFreeServiceCharge() {
public byte getFreeServiceCharge() {
return this.freeServiceCharge;
}
public void setFreeServiceCharge(Byte freeServiceCharge) {
public void setFreeServiceCharge(byte freeServiceCharge) {
this.freeServiceCharge = freeServiceCharge;
}
public Byte getManagerApproval() {
public byte getManagerApproval() {
return this.managerApproval;
}
public void setManagerApproval(Byte managerApproval) {
public void setManagerApproval(byte managerApproval) {
this.managerApproval = managerApproval;
}
......@@ -275,83 +273,83 @@ public class Discount {
this.discountCap = discountCap;
}
public Double getSalesAmount() {
public double getSalesAmount() {
return this.salesAmount;
}
public void setSalesAmount(Double salesAmount) {
public void setSalesAmount(double salesAmount) {
this.salesAmount = salesAmount;
}
public Byte getTaxFree() {
public byte getTaxFree() {
return this.taxFree;
}
public void setTaxFree(Byte taxFree) {
public void setTaxFree(byte taxFree) {
this.taxFree = taxFree;
}
public Byte getExclusive() {
public byte getExclusive() {
return this.exclusive;
}
public void setExclusive(Byte exclusive) {
public void setExclusive(byte exclusive) {
this.exclusive = exclusive;
}
public Byte getPause() {
return this.pause;
public boolean isPause() {
return pause == 1;
}
public void setPause(Byte pause) {
public void setPause(byte pause) {
this.pause = pause;
}
public Byte getAdditionalDiscount() {
public byte getAdditionalDiscount() {
return this.additionalDiscount;
}
public void setAdditionalDiscount(Byte additionalDiscount) {
public void setAdditionalDiscount(byte additionalDiscount) {
this.additionalDiscount = additionalDiscount;
}
public Byte getOnlyOnce() {
public byte getOnlyOnce() {
return this.onlyOnce;
}
public void setOnlyOnce(Byte onlyOnce) {
public void setOnlyOnce(byte onlyOnce) {
this.onlyOnce = onlyOnce;
}
public Double getMinBillAmount() {
public double getMinBillAmount() {
return this.minBillAmount;
}
public void setMinBillAmount(Double minBillAmount) {
public void setMinBillAmount(double minBillAmount) {
this.minBillAmount = minBillAmount;
}
public Byte getPointsDeduction() {
public byte getPointsDeduction() {
return this.pointsDeduction;
}
public void setPointsDeduction(Byte pointsDeduction) {
public void setPointsDeduction(byte pointsDeduction) {
this.pointsDeduction = pointsDeduction;
}
public Byte getWholeFreePoints() {
public byte getWholeFreePoints() {
return this.wholeFreePoints;
}
public void setWholeFreePoints(Byte wholeFreePoints) {
public void setWholeFreePoints(byte wholeFreePoints) {
this.wholeFreePoints = wholeFreePoints;
}
public Byte getAmountTypeMin() {
public byte getAmountTypeMin() {
return this.amountTypeMin;
}
public void setAmountTypeMin(Byte amountTypeMin) {
public void setAmountTypeMin(byte amountTypeMin) {
this.amountTypeMin = amountTypeMin;
}
......@@ -371,57 +369,11 @@ public class Discount {
this.endTime = endTime;
}
public void setFreeServiceCharge(byte freeServiceCharge) {
this.freeServiceCharge = freeServiceCharge;
}
public void setManagerApproval(byte managerApproval) {
this.managerApproval = managerApproval;
}
public void setDiscountCap(long discountCap) {
this.discountCap = discountCap;
}
public void setSalesAmount(double salesAmount) {
this.salesAmount = salesAmount;
}
public void setTaxFree(byte taxFree) {
this.taxFree = taxFree;
}
public void setExclusive(byte exclusive) {
this.exclusive = exclusive;
}
public void setPause(byte pause) {
this.pause = pause;
}
public void setAdditionalDiscount(byte additionalDiscount) {
this.additionalDiscount = additionalDiscount;
}
public void setOnlyOnce(byte onlyOnce) {
this.onlyOnce = onlyOnce;
}
public void setMinBillAmount(double minBillAmount) {
this.minBillAmount = minBillAmount;
}
public void setPointsDeduction(byte pointsDeduction) {
this.pointsDeduction = pointsDeduction;
public byte getPause() {
return this.pause;
}
public void setWholeFreePoints(byte wholeFreePoints) {
this.wholeFreePoints = wholeFreePoints;
}
public void setAmountTypeMin(byte amountTypeMin) {
this.amountTypeMin = amountTypeMin;
}
}
......@@ -36,7 +36,7 @@ public class DiscountDao extends AbstractDao<Discount, Long> {
public final static Property ManagerApproval = new Property(9, byte.class, "managerApproval", false, "MANAGER_APPROVAL");
public final static Property Color = new Property(10, String.class, "color", false, "COLOR");
public final static Property PlaceOrderType = new Property(11, String.class, "placeOrderType", false, "PLACE_ORDER_TYPE");
public final static Property DiscountCap = new Property(12, long.class, "discountCap", false, "DISCOUNT_CAP");
public final static Property DiscountCap = new Property(12, double.class, "discountCap", false, "DISCOUNT_CAP");
public final static Property SalesAmount = new Property(13, double.class, "salesAmount", false, "SALES_AMOUNT");
public final static Property TaxFree = new Property(14, byte.class, "taxFree", false, "TAX_FREE");
public final static Property Exclusive = new Property(15, byte.class, "exclusive", false, "EXCLUSIVE");
......@@ -76,7 +76,7 @@ public class DiscountDao extends AbstractDao<Discount, Long> {
"\"MANAGER_APPROVAL\" INTEGER NOT NULL ," + // 9: managerApproval
"\"COLOR\" TEXT," + // 10: color
"\"PLACE_ORDER_TYPE\" TEXT," + // 11: placeOrderType
"\"DISCOUNT_CAP\" INTEGER NOT NULL ," + // 12: discountCap
"\"DISCOUNT_CAP\" REAL NOT NULL ," + // 12: discountCap
"\"SALES_AMOUNT\" REAL NOT NULL ," + // 13: salesAmount
"\"TAX_FREE\" INTEGER NOT NULL ," + // 14: taxFree
"\"EXCLUSIVE\" INTEGER NOT NULL ," + // 15: exclusive
......@@ -132,7 +132,7 @@ public class DiscountDao extends AbstractDao<Discount, Long> {
if (placeOrderType != null) {
stmt.bindString(12, placeOrderType);
}
stmt.bindLong(13, entity.getDiscountCap());
stmt.bindDouble(13, entity.getDiscountCap());
stmt.bindDouble(14, entity.getSalesAmount());
stmt.bindLong(15, entity.getTaxFree());
stmt.bindLong(16, entity.getExclusive());
......@@ -190,7 +190,7 @@ public class DiscountDao extends AbstractDao<Discount, Long> {
if (placeOrderType != null) {
stmt.bindString(12, placeOrderType);
}
stmt.bindLong(13, entity.getDiscountCap());
stmt.bindDouble(13, entity.getDiscountCap());
stmt.bindDouble(14, entity.getSalesAmount());
stmt.bindLong(15, entity.getTaxFree());
stmt.bindLong(16, entity.getExclusive());
......@@ -233,7 +233,7 @@ public class DiscountDao extends AbstractDao<Discount, Long> {
(byte) cursor.getShort(offset + 9), // managerApproval
cursor.isNull(offset + 10) ? null : cursor.getString(offset + 10), // color
cursor.isNull(offset + 11) ? null : cursor.getString(offset + 11), // placeOrderType
cursor.getLong(offset + 12), // discountCap
cursor.getDouble(offset + 12), // discountCap
cursor.getDouble(offset + 13), // salesAmount
(byte) cursor.getShort(offset + 14), // taxFree
(byte) cursor.getShort(offset + 15), // exclusive
......@@ -264,7 +264,7 @@ public class DiscountDao extends AbstractDao<Discount, Long> {
entity.setManagerApproval((byte) cursor.getShort(offset + 9));
entity.setColor(cursor.isNull(offset + 10) ? null : cursor.getString(offset + 10));
entity.setPlaceOrderType(cursor.isNull(offset + 11) ? null : cursor.getString(offset + 11));
entity.setDiscountCap(cursor.getLong(offset + 12));
entity.setDiscountCap(cursor.getDouble(offset + 12));
entity.setSalesAmount(cursor.getDouble(offset + 13));
entity.setTaxFree((byte) cursor.getShort(offset + 14));
entity.setExclusive((byte) cursor.getShort(offset + 15));
......
......@@ -49,6 +49,7 @@ public class ShoppingCart {
protected List<OrderDetail> orderCommodityList = new ArrayList<>();
/**
* 賬單項列表
*
* @see CopyOnWriteArrayList 賬單計算放在子線程中保證同步問題使用CopyOnWriteArrayList
*/
protected List<BillItem> billItemList = new ArrayList<>();
......@@ -174,6 +175,17 @@ public class ShoppingCart {
}
/**
* 刪除所有折扣
*/
public void delAllMultyDiscount() {
List<MultyDiscount> multyDiscountList = getMultyDiscountList();
// for (MultyDiscount multyDiscount: multyDiscountList) {
// multyDiscountList.remove(multyDiscount);
// }
multyDiscountList.removeAll(multyDiscountList);
}
/**
* 將普通折扣添加到鏈條中
*
* @param discount
......@@ -267,6 +279,21 @@ public class ShoppingCart {
}
}
/**
* 獲取普通折扣
*
* @return
*/
public List<NomalDiscount> getNomalDiscoutByMultyDiscountList() {
List<NomalDiscount> nomalDiscountList = new ArrayList<>();
for (MultyDiscount multyDiscount : getMultyDiscountList()) {
if (multyDiscount instanceof NomalDiscount) {
nomalDiscountList.add((NomalDiscount) multyDiscount);
}
}
return nomalDiscountList;
}
public List<MultyDiscount> getMultyDiscountList() {
if (multyDiscountList == null) {
multyDiscountList = new ArrayList<>();
......
package com.gingersoft.gsa.cloud.base.order.discount;
import com.gingersoft.gsa.cloud.base.application.GsaCloudApplication;
import com.gingersoft.gsa.cloud.base.utils.MoneyUtil;
import com.gingersoft.gsa.cloud.database.bean.Discount;
import com.gingersoft.gsa.cloud.order.base.BuildConfig;
import com.jess.arms.utils.ArmsUtils;
import lombok.Getter;
......@@ -50,6 +53,9 @@ public class NomalDiscount extends MultyDiscount {
if (Double.doubleToLongBits(discount.getDiscountCap()) != 0 && discount.getDiscountCap() < discountMoney) {
//不能大於折扣上限
discountMoney = discount.getDiscountCap();
if (BuildConfig.DEBUG) {
ArmsUtils.makeText(GsaCloudApplication.getAppContext(), "此折扣上限為:" + discountMoney);
}
}
if (sourceMoney < discountMoney) {
//折扣金額不能超出總額
......
package com.gingersoft.gsa.cloud.table.mvp.model.discount;
import android.app.Activity;
import android.text.Editable;
import android.text.InputType;
import android.view.View;
import android.view.WindowManager;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.widget.AdapterView;
import android.widget.EditText;
import android.widget.GridView;
import com.gingersoft.gsa.cloud.base.order.discount.NomalDiscount;
import com.gingersoft.gsa.cloud.base.order.order.BaseOrder;
import com.gingersoft.gsa.cloud.database.bean.Discount;
import com.gingersoft.gsa.cloud.patterns.Strategy;
import com.gingersoft.gsa.cloud.table.R;
import com.gingersoft.gsa.cloud.table.R2;
import com.gingersoft.gsa.cloud.table.mvp.ui.widget.KeyboardDialog;
import com.gingersoft.gsa.cloud.ui.widget.dialog.CommonTipDialog;
import com.gingersoft.gsa.cloud.ui.widget.keyboard.VirtualKeyboardView;
import com.jess.arms.utils.DeviceUtils;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import butterknife.BindView;
import butterknife.BindViews;
/**
* @author : bin
* @create date: 2020-10-27
* @update date: 2020-10-27
* @description:賬單折扣邏輯
*/
public class BillDiscountAction implements Strategy<Discount> {
private Activity mContext;
private List<NomalDiscount> mNomalDiscountList;
private OnCallBackListener mListener;
public BillDiscountAction(Activity context, List<NomalDiscount> nomalDiscountList, OnCallBackListener listener) {
this.mContext = context;
this.mNomalDiscountList = nomalDiscountList;
this.mListener = listener;
}
@Override
public void action(Discount discount) {
if (isOnlyOnce(discount)) {
//此折扣只一次
return;
}
boolean hasExclusive = hasExclusiveDiscount() || discount.getExclusive() == 1;
if (hasExclusive) {
//有獨佔折扣
exclusiveDiscount(discount);
return;
}
switch (discount.getType()) {
case Discount.DISCOUNT_TYPE_AMOUNT:
case Discount.DISCOUNT_TYPE_RATE:
break;
case Discount.DISCOUNT_TYPE_CUSTOM_AMOUNT:
showCustomAmountDialog(discount);
break;
case Discount.DISCOUNT_TYPE_KEYBOARD:
showKeyboardDialog(discount);
break;
case Discount.DISCOUNT_TYPE_FREE_SERVICE_CHARGE:
break;
default:
break;
}
}
private void exclusiveDiscount(Discount discount) {
if (mListener != null) {
showExclusiveTipDialog(discount);
}
}
/**
* 是否有獨佔折扣
*
* @return
*/
private boolean hasExclusiveDiscount() {
for (NomalDiscount nomalDiscount : mNomalDiscountList) {
if (nomalDiscount.getDiscount().getExclusive() == 1) {
return true;
}
}
return false;
}
/**
* 此折扣是否只一次
*
* @param discount
* @return
*/
private boolean isOnlyOnce(Discount discount) {
if (discount.getOnlyOnce() == 1) {
for (NomalDiscount nomalDiscount : mNomalDiscountList) {
Discount item = nomalDiscount.getDiscount();
if (discount.getId().longValue() == item.getId().longValue()) {
return true;
}
}
}
return false;
}
/**
* 顯示自定義金額彈窗
* @param discount
*/
private void showCustomAmountDialog(Discount discount) {
CommonTipDialog.showEditDialog(mContext, discount.getRemark(), "請輸入折扣金額", InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_FLAG_DECIMAL, new CommonTipDialog.OnEditTextListener() {
@Override
public void inputText(String text) {
discount.setAmount(Double.parseDouble(text));
if (mListener != null) {
mListener.preformAddDiscount(discount);
}
}
});
}
/**
* 顯示子弟你金額彈窗 鍵盤
* @param discount
*/
private void showKeyboardDialog(Discount discount) {
new KeyboardDialog(mContext)
.build()
.setOnCallBackListener(new KeyboardDialog.OnCallBackListener() {
@Override
public void onSure(String number) {
discount.setAmount(Double.parseDouble(number));
if (mListener != null) {
mListener.preformAddDiscount(discount);
}
}
})
.show();
}
/**
* 提示有獨佔折扣是否替換
* @param discount
*/
private void showExclusiveTipDialog(Discount discount) {
CommonTipDialog.showDoubtDialog2(mContext, "有獨佔折扣,是否替換", new CommonTipDialog.OnCallbackListener() {
@Override
public void onSure() {
mListener.exclusiveRemoveOther();
mListener.preformAddDiscount(discount);
}
});
}
public interface OnCallBackListener {
void exclusiveRemoveOther();
void preformAddDiscount(Discount discount);
}
}
package com.gingersoft.gsa.cloud.table.mvp.model.discount;
import android.app.Activity;
import android.text.InputType;
import com.gingersoft.gsa.cloud.base.order.commodity.OrderDetail;
import com.gingersoft.gsa.cloud.base.order.discount.NomalDiscount;
import com.gingersoft.gsa.cloud.database.bean.Discount;
import com.gingersoft.gsa.cloud.patterns.Strategy;
import com.gingersoft.gsa.cloud.table.mvp.ui.widget.KeyboardDialog;
import com.gingersoft.gsa.cloud.ui.widget.dialog.CommonTipDialog;
import java.util.ArrayList;
import java.util.List;
/**
* @author : bin
* @create date: 2020-10-28
* @update date: 2020-10-28
* @description:美食折扣邏輯
*/
public class MealDiscountAction implements Strategy<Discount> {
private Activity mContext;
private List<OrderDetail> mOrderMealList;
private MealDiscountAction.OnCallBackListener mListener;
public MealDiscountAction(Activity context, List<OrderDetail> orderMealList, MealDiscountAction.OnCallBackListener listener) {
this.mContext = context;
this.mOrderMealList = orderMealList;
this.mListener = listener;
}
@Override
public void action(Discount discount) {
if (isOnlyOnce(discount)) {
//此折扣只一次
return;
}
boolean hasExclusive = hasExclusiveDiscount() || discount.getExclusive() == 1;
if (hasExclusive) {
//有獨佔折扣
exclusiveDiscount(discount);
return;
}
switch (discount.getType()) {
case Discount.DISCOUNT_TYPE_AMOUNT:
case Discount.DISCOUNT_TYPE_RATE:
break;
case Discount.DISCOUNT_TYPE_CUSTOM_AMOUNT:
showCustomAmountDialog(discount);
break;
case Discount.DISCOUNT_TYPE_KEYBOARD:
showKeyboardDialog(discount);
break;
case Discount.DISCOUNT_TYPE_FREE_SERVICE_CHARGE:
break;
default:
break;
}
}
private void exclusiveDiscount(Discount discount) {
if (mListener != null) {
showExclusiveTipDialog(discount);
}
}
/**
* 食品是否有獨佔折扣
*
* @return
*/
private boolean hasExclusiveDiscount() {
for (NomalDiscount nomalDiscount : mNomalDiscountList) {
if (nomalDiscount.getDiscount().getExclusive() == 1) {
return true;
}
}
return false;
}
/**
* 此折扣是否只一次
*
* @param discount
* @return
*/
private boolean isOnlyOnce(Discount discount) {
if (discount.getOnlyOnce() == 1) {
for (NomalDiscount nomalDiscount : mNomalDiscountList) {
Discount item = nomalDiscount.getDiscount();
if (discount.getId().longValue() == item.getId().longValue()) {
return true;
}
}
}
return false;
}
/**
* 顯示自定義金額彈窗
*
* @param discount
*/
private void showCustomAmountDialog(Discount discount) {
CommonTipDialog.showEditDialog(mContext, discount.getRemark(), "請輸入折扣金額", InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_FLAG_DECIMAL, new CommonTipDialog.OnEditTextListener() {
@Override
public void inputText(String text) {
discount.setAmount(Double.parseDouble(text));
if (mListener != null) {
mListener.preformAddDiscount(discount);
}
}
});
}
/**
* 顯示子弟你金額彈窗 鍵盤
*
* @param discount
*/
private void showKeyboardDialog(Discount discount) {
new KeyboardDialog(mContext)
.build()
.setOnCallBackListener(new KeyboardDialog.OnCallBackListener() {
@Override
public void onSure(String number) {
discount.setAmount(Double.parseDouble(number));
if (mListener != null) {
mListener.preformAddDiscount(discount);
}
}
})
.show();
}
/**
* 提示有獨佔折扣是否替換
*
* @param discount
*/
private void showExclusiveTipDialog(Discount discount) {
CommonTipDialog.showDoubtDialog2(mContext, "有獨佔折扣,是否替換", new CommonTipDialog.OnCallbackListener() {
@Override
public void onSure() {
mListener.exclusiveRemoveOther();
mListener.preformAddDiscount(discount);
}
});
}
public interface OnCallBackListener {
void exclusiveRemoveOther();
void preformAddDiscount(Discount discount);
}
}
package com.gingersoft.gsa.cloud.table.mvp.model.discount;
import android.app.Activity;
import android.content.Context;
import android.text.InputType;
import com.gingersoft.gsa.cloud.base.order.discount.MultyDiscount;
import com.gingersoft.gsa.cloud.base.order.discount.NomalDiscount;
import com.gingersoft.gsa.cloud.database.bean.Discount;
import com.gingersoft.gsa.cloud.patterns.Strategy;
import com.gingersoft.gsa.cloud.table.mvp.model.table.action.TableAction;
import com.gingersoft.gsa.cloud.ui.view.AddKeyBoard;
import com.gingersoft.gsa.cloud.ui.widget.dialog.CommonTipDialog;
import java.util.List;
/**
* @author : bin
* @create date: 2020-10-27
* @update date: 2020-10-27
* @description:
*/
public class NomalDiscountAction implements Strategy<Discount> {
public Context mContext;
private List<NomalDiscount> mNomalDiscountList;
public NomalDiscountAction(Context context, List<NomalDiscount> nomalDiscountList) {
this.mContext = context;
this.mNomalDiscountList = nomalDiscountList;
}
@Override
public void action(Discount discount) {
for (NomalDiscount nomalDiscount : mNomalDiscountList) {
Discount item = nomalDiscount.getDiscount();
if () {
}
}
if (discount.getOnlyOnce() == 1) {
//此折扣只一次
return;
}
if (discount.getExclusive() == 1) {
//獨佔折扣
}
switch (discount.getType()) {
case Discount.DISCOUNT_TYPE_AMOUNT:
case Discount.DISCOUNT_TYPE_RATE:
break;
case Discount.DISCOUNT_TYPE_CUSTOM_AMOUNT:
showCustomAmountDialog(discount);
break;
case Discount.DISCOUNT_TYPE_KEYBOARD:
showKeyboardDialog(discount);
break;
case Discount.DISCOUNT_TYPE_FREE_SERVICE_CHARGE:
break;
default:
break;
}
}
private void showCustomAmountDialog(Discount discount) {
CommonTipDialog.showEditDialog((Activity) mContext, discount.getRemark(), "請輸入折扣金額", InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_FLAG_DECIMAL, new CommonTipDialog.OnEditTextListener() {
@Override
public void inputText(String text) {
}
});
}
private void showKeyboardDialog(Discount discount) {
}
}
......@@ -141,7 +141,6 @@ public abstract class BaseOrderPresenter<M extends BaseOrderContract.Model, V ex
*/
private OrderBean orderPlaced;
//币種
protected String cashStr = "$";
protected String serviceChargeStr = "服務費";
protected String roundingStr = "賬單小數";
......@@ -161,7 +160,6 @@ public abstract class BaseOrderPresenter<M extends BaseOrderContract.Model, V ex
mDoshokuOrder.getOpenTableInfo().setCreateTime(TimeUtils.getTime(createTime, TimeUtils.DEFAULT_DATE_FORMAT));
}
public BaseOrderPresenter(BaseOrderContract.Model model, BaseOrderContract.View rootView) {
super(model, rootView);
this.mModel = (M) model;
......@@ -363,6 +361,21 @@ public abstract class BaseOrderPresenter<M extends BaseOrderContract.Model, V ex
return billItem;
}
/**
* 是否大於最小賬單金額
* @param discount
* @param sourceMoney
* @return
*/
protected boolean greaterThanMinimumBill(Discount discount, double sourceMoney) {
double discountMoney = NomalDiscount.calculationDiscount(discount, sourceMoney);
double wholeAmount = mShoppingCart.getWholeAmount();
if (discountMoney > wholeAmount) {
return false;
}
return true;
}
private void initOrderAdapter() {
if (mSelectMealAdapter == null) {
mSelectMealAdapter = new SelectMealAdapter(IActivity, mOrderMealList, this);
......@@ -1181,6 +1194,9 @@ public abstract class BaseOrderPresenter<M extends BaseOrderContract.Model, V ex
protected List<Discount> filterDiscountByType(List<Discount> discountList, String discountType) {
for (int i = discountList.size() - 1; i >= 0; i--) {
Discount discount = discountList.get(i);
if(discount.getDiscountType().equals("2")){
continue;
}
if (TextUtils.isEmpty(discount.getDiscountType()) || !discount.getDiscountType().contains(discountType)) {
discountList.remove(i);
}
......
......@@ -12,28 +12,22 @@ import com.gingersoft.gsa.cloud.base.application.GsaCloudApplication;
import com.gingersoft.gsa.cloud.base.common.bean.BaseResult;
import com.gingersoft.gsa.cloud.base.common.bean.MemberInfo;
import com.gingersoft.gsa.cloud.base.order.bean.DeleteOrderRequest;
import com.gingersoft.gsa.cloud.base.order.billItem.BillItem;
import com.gingersoft.gsa.cloud.base.order.commodity.OrderDetail;
import com.gingersoft.gsa.cloud.base.order.bean.discount.CouponDiscountBean;
import com.gingersoft.gsa.cloud.base.order.bean.discount.OrderDiscount;
import com.gingersoft.gsa.cloud.base.order.billItem.DiscountItem;
import com.gingersoft.gsa.cloud.base.order.billItem.ServiceChargeItem;
import com.gingersoft.gsa.cloud.base.order.discount.MultyDiscount;
import com.gingersoft.gsa.cloud.base.order.discount.NomalDiscount;
import com.gingersoft.gsa.cloud.base.order.order.BaseOrder;
import com.gingersoft.gsa.cloud.base.utils.JsonUtils;
import com.gingersoft.gsa.cloud.base.utils.LanguageUtils;
import com.gingersoft.gsa.cloud.base.utils.MoneyUtil;
import com.gingersoft.gsa.cloud.base.utils.RestaurantExpandInfoUtils;
import com.gingersoft.gsa.cloud.base.utils.gson.GsonUtils;
import com.gingersoft.gsa.cloud.patterns.Strategy;
import com.gingersoft.gsa.cloud.table.R;
import com.gingersoft.gsa.cloud.table.mvp.contract.MealStandContract;
import com.gingersoft.gsa.cloud.table.mvp.model.bean.FoodReason;
import com.gingersoft.gsa.cloud.table.mvp.model.bean.SoldoutCtrFood;
import com.gingersoft.gsa.cloud.table.mvp.model.bean.request.AddOrderRequest;
import com.gingersoft.gsa.cloud.table.mvp.model.bean.request.CreateOrderRequest;
import com.gingersoft.gsa.cloud.table.mvp.model.discount.NomalDiscountAction;
import com.gingersoft.gsa.cloud.table.mvp.model.discount.BillDiscountAction;
import com.gingersoft.gsa.cloud.table.mvp.model.discount.MealDiscountAction;
import com.gingersoft.gsa.cloud.table.mvp.ui.activity.MealStandActivity;
import com.gingersoft.gsa.cloud.table.mvp.ui.adapter.meal.ComboAdapter;
import com.gingersoft.gsa.cloud.table.mvp.ui.adapter.meal.DiscountAdapter;
......@@ -61,7 +55,6 @@ import com.jess.arms.integration.AppManager;
import com.jess.arms.utils.RxLifecycleUtils;
import com.qmuiteam.qmui.widget.dialog.QMUIDialog;
import com.qmuiteam.qmui.widget.dialog.QMUIDialogAction;
import com.qmuiteam.qmui.widget.dialog.QMUIDialogBuilder;
import org.simple.eventbus.Subscriber;
......@@ -144,7 +137,7 @@ public class MealStandPresenter extends BaseOrderPresenter<MealStandContract.Mod
*/
private List<SoldoutCtrFood> mSoldoutCtrList = new ArrayList<>();
private NomalDiscountAction mNomalDiscountAction;
private MealDiscountAction mMealDiscountAction;
private OrderDetail mCurrentOrderDetailBean;
private boolean RvMealClicked;
......@@ -154,7 +147,46 @@ public class MealStandPresenter extends BaseOrderPresenter<MealStandContract.Mod
public MealStandPresenter(MealStandContract.Model model, MealStandContract.View rootView) {
super(model, rootView);
this.IActivity = (MealStandActivity) rootView;
this.mNomalDiscountAction = new NomalDiscountAction(IActivity,mShoppingCart.getMultyDiscountList());
mMealDiscountAction = new MealDiscountAction(IActivity, getMixOrderMealList(), new MealDiscountAction.OnCallBackListener() {
@Override
public void exclusiveRemoveOther() {
}
@Override
public void preformAddDiscount(Discount discount) {
}
});
}
/**
* 獲取當前選中的套餐食品組
* @return
*/
private List<OrderDetail> getMixOrderMealList() {
List<OrderDetail> mixOrderMealList = new ArrayList<>();
for (int i = mSelectMealAdapter.getSelect_full_start_position();
mSelectMealAdapter.getSelect_full_end_position() < mOrderMealList.size(); i++) {
mixOrderMealList.add(mOrderMealList.get(i));
}
return mixOrderMealList;
}
/**
* 獲取套餐總金額
* @param mixOrderMealList
* @return
*/
private double getMixTotalAomout(List<OrderDetail> mixOrderMealList){
double mixTotalAomout = 0.0;
for (OrderDetail orderDetail: mixOrderMealList) {
mixTotalAomout = MoneyUtil.sum(mixTotalAomout,orderDetail.getPrice());
}
return mixTotalAomout;
}
@Override
......@@ -365,19 +397,12 @@ public class MealStandPresenter extends BaseOrderPresenter<MealStandContract.Mod
if (cutOutDiscount() == -100) {
return;
}
if (discountBean.getType() == Discount.DISCOUNT_TYPE_CUSTOM_AMOUNT) {
showCustomAmountDialog(discountBean);
} else {
addDiscountItem(discountBean);
}
// mNomalDiscountAction.action(discountBean, new Strategy.CallBackListener() {
//
// @Override
// public void callBack(Object o) {
// addDiscountItem((Discount) o);
// if (discountBean.getType() == Discount.DISCOUNT_TYPE_CUSTOM_AMOUNT) {
// showCustomAmountDialog(discountBean);
// } else {
// addDiscountItem(discountBean);
// }
// });
// new NomalDiscountAction().
mNomalDiscountAction.action(discountBean);
}
});
}
......@@ -1948,8 +1973,7 @@ public class MealStandPresenter extends BaseOrderPresenter<MealStandContract.Mod
return addPosition;
}
private int getEndInsertPosition(List<OrderDetail> newOrderList, OrderDetail orderDetail,
int currentI) {
private int getEndInsertPosition(List<OrderDetail> newOrderList, OrderDetail orderDetail, int currentI) {
boolean hasChildFood = false;
for (int i = currentI; i < newOrderList.size(); i++) {
OrderDetail item = newOrderList.get(i);
......@@ -2031,19 +2055,6 @@ public class MealStandPresenter extends BaseOrderPresenter<MealStandContract.Mod
}
/**
* 刪除會員折扣,會員優惠券
*/
// public void removeMemberDiscountItem() {
// for (int i = mBillItemList.size() - 1; i >= 0; i--) {
// BillItem billItem = mBillItemList.get(i);
// if (billItem.getType() == BillItem.MEMBER_DISCOUNT_TYPE || billItem.getType() == BillItem.COUPON_DISCOUNT_TYPE) {
// mBillItemList.remove(i);
// mOrderMoneyAdapter.notifyItemChanged(i);
// }
// }
// }
/**
* 加載折扣數據
*/
public void loadDiscountData() {
......
......@@ -18,7 +18,6 @@ import com.gingersoft.gsa.cloud.base.order.billItem.DiscountItem;
import com.gingersoft.gsa.cloud.base.order.commodity.OrderDetail;
import com.gingersoft.gsa.cloud.base.order.bean.discount.CouponDiscountBean;
import com.gingersoft.gsa.cloud.base.order.bean.discount.CouponDiscountResult;
import com.gingersoft.gsa.cloud.base.order.discount.MultyDiscount;
import com.gingersoft.gsa.cloud.base.order.discount.NomalDiscount;
import com.gingersoft.gsa.cloud.base.order.order.BaseOrder;
import com.gingersoft.gsa.cloud.base.order.order.DoshokuOrder;
......@@ -42,6 +41,7 @@ import com.gingersoft.gsa.cloud.table.mvp.model.bean.BaseOrderRespose;
import com.gingersoft.gsa.cloud.table.mvp.model.bean.TableDetail;
import com.gingersoft.gsa.cloud.table.mvp.model.bean.request.AddOrderRequest;
import com.gingersoft.gsa.cloud.table.mvp.model.bean.request.CreateOrderRequest;
import com.gingersoft.gsa.cloud.table.mvp.model.discount.BillDiscountAction;
import com.gingersoft.gsa.cloud.table.mvp.model.utils.OrderAssemblyUtil;
import com.gingersoft.gsa.cloud.table.mvp.ui.activity.MealStandActivity;
import com.gingersoft.gsa.cloud.table.mvp.ui.activity.OrderContentActivity;
......@@ -118,7 +118,10 @@ public class OrderContentPresenter extends BaseOrderPresenter<OrderContentContra
*/
private SplitTableDialog mSplitTableDialog;
private DiscountDialog.Builder mDiscountDialog;
/**
* 整單折扣邏輯
*/
private BillDiscountAction mNomalDiscountAction;
@Inject
public OrderContentPresenter(OrderContentContract.Model model, OrderContentContract.View rootView) {
......@@ -128,6 +131,19 @@ public class OrderContentPresenter extends BaseOrderPresenter<OrderContentContra
//转移食品可多选
mSelectMealAdapter.setSelectedMode(SelectMealAdapter.MULTIPLE_SELECTED);
}
mNomalDiscountAction = new BillDiscountAction(IActivity, mShoppingCart.getNomalDiscoutByMultyDiscountList(), new BillDiscountAction.OnCallBackListener() {
@Override
public void exclusiveRemoveOther() {
mShoppingCart.delAllMultyDiscount();
}
@Override
public void preformAddDiscount(Discount discount) {
mShoppingCart.addMultyDiscount(mShoppingCart.createNomalDiscount(discount, BillItem.BILL_ITEM_NO_ORDER_STATUS));
updateBillInfo();
}
});
}
@Override
......@@ -747,18 +763,12 @@ public class OrderContentPresenter extends BaseOrderPresenter<OrderContentContra
mDiscountDialog.setOnClickListener(new DiscountDialog.Builder.OnClickListener() {
@Override
public void onItemClick(Discount item, int position) {
if (item.getOnlyOnce() == 1) {
//此折扣只一次
if (item.getMinBillAmount() > mShoppingCart.getWholeAmount()) {
//小於最小賬單金額 直接提示
mRootView.showMessage("食品總計金額小於" + cashStr + item.getMinBillAmount());
return;
}
if (item.getExclusive() == 1) {
//獨佔折扣
}
MultyDiscount nomalDiscount = mShoppingCart.createNomalDiscount(item, BillItem.BILL_ITEM_NO_ORDER_STATUS);
mShoppingCart.addMultyDiscount(nomalDiscount);
updateBillInfo();
mNomalDiscountAction.action(item);
}
@Override
......@@ -772,7 +782,6 @@ public class OrderContentPresenter extends BaseOrderPresenter<OrderContentContra
mDiscountDialog.build().show();
}
/**
* 更新訂單詳情
*
......
......@@ -40,6 +40,7 @@ import com.gingersoft.gsa.cloud.table.mvp.presenter.OrderContentPresenter;
import com.gingersoft.gsa.cloud.table.mvp.ui.fragment.AllTableFragment;
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.table.mvp.ui.widget.KeyboardDialog;
import com.gingersoft.gsa.cloud.ui.widget.dialog.LoadingDialog;
import com.gingersoft.gsa.cloud.zxing.MipcaCaptureActivity;
import com.jess.arms.base.BaseFragmentActivity;
......
package com.gingersoft.gsa.cloud.table.mvp.ui.adapter.meal;
import android.content.Context;
import android.graphics.Color;
import android.text.TextUtils;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
......@@ -9,6 +11,7 @@ import com.gingersoft.gsa.cloud.base.application.GsaCloudApplication;
import com.gingersoft.gsa.cloud.database.bean.Discount;
import com.gingersoft.gsa.cloud.table.R;
import com.gingersoft.gsa.cloud.table.R2;
import com.gingersoft.gsa.cloud.ui.view.BeveLabelView;
import com.jess.arms.base.BaseHolder;
import com.jess.arms.base.DefaultAdapter;
import com.jess.arms.utils.ArmsUtils;
......@@ -58,6 +61,8 @@ public class DiscountAdapter extends DefaultAdapter<Discount> {
@BindView(R2.id.tv_name)
TextView tv_name;
@BindView(R2.id.blv_soldout)
BeveLabelView blv_soldout;
public DiscountItemHolder(View itemView) {
super(itemView);
......@@ -68,6 +73,7 @@ public class DiscountAdapter extends DefaultAdapter<Discount> {
initLayoutParams();
initName(datasBean);
initSoldoutStatus(datasBean);
setColor(datasBean);
}
......@@ -77,12 +83,24 @@ public class DiscountAdapter extends DefaultAdapter<Discount> {
tv_name.setTextSize(fontSize);
}
private void setColor(Discount datasBean) {
private void initSoldoutStatus(Discount datasBean) {
if (datasBean.isPause()) {
blv_soldout.setLableText("暫停");
blv_soldout.setVisibility(View.VISIBLE);
} else {
blv_soldout.setVisibility(View.GONE);
}
}
private void setColor(Discount datasBean) {
String colorRes = datasBean.getColor();
if (!TextUtils.isEmpty(colorRes) && colorRes.startsWith("#")) {
tv_name.setBackgroundColor(Color.parseColor(colorRes));
} else {
int color = ArmsUtils.getColor(mContext, R.color.light_blue_900);
int fontColor = ArmsUtils.getColor(mContext, R.color.theme_white_color);
tv_name.setBackgroundColor(color);
}
int fontColor = ArmsUtils.getColor(mContext, R.color.theme_white_color);
tv_name.setTextColor(fontColor);
}
......
......@@ -75,7 +75,6 @@ public class SelectMealAdapter extends DefaultAdapter<OrderDetail> {
this.mContext = context;
this.BillListFontSize = GsaCloudApplication.uiStyleConfiguration.getBillListFontSizeValue();
if (presenter instanceof MealStandPresenter) {
// this.mMealStandPresenter = (MealStandPresenter) presenter;
this.mMealStandActivity = (MealStandActivity) context;
} else if (presenter instanceof OrderContentPresenter) {
this.mOrderContentPresenter = (OrderContentPresenter) presenter;
......
......@@ -49,7 +49,6 @@ public class UseMemberDialog extends Dialog {
private static final String TAG = "UseMemberDialog";
private Context mContext;
private UseMemberDialog mDialog;
// 动画时长
private final static int mAnimationDuration = 300;
......@@ -111,10 +110,6 @@ public class UseMemberDialog extends Dialog {
super.setContentView(view, params);
}
public View getContentView() {
return mContentView;
}
@Override
public void setContentView(@NonNull View view) {
mContentView = view;
......@@ -209,14 +204,10 @@ public class UseMemberDialog extends Dialog {
}
public UseMemberDialog build() {
if (mDialog != null) {
return mDialog;
}
mDialog = new UseMemberDialog(mContext);
View contentView = buildViews();
mDialog.setContentView(contentView, new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, (int) (QMUIDisplayHelper.getScreenHeight(mContext) * 0.65)));
setContentView(contentView, new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, (int) (QMUIDisplayHelper.getScreenHeight(mContext) * 0.65)));
updateMemberInfo(memberInfo);
return mDialog;
return this;
}
private View buildViews() {
......@@ -242,7 +233,7 @@ public class UseMemberDialog extends Dialog {
return;
}
if (onLayoutClickListener != null) {
onLayoutClickListener.onInputPhone(mDialog, getTvPhone());
onLayoutClickListener.onInputPhone(UseMemberDialog.this, getTvPhone());
}
}
});
......@@ -250,7 +241,7 @@ public class UseMemberDialog extends Dialog {
@Override
public void onClick(View v) {
if (onLayoutClickListener != null) {
onLayoutClickListener.onScanAction(mDialog);
onLayoutClickListener.onScanAction(UseMemberDialog.this);
}
}
});
......@@ -258,7 +249,7 @@ public class UseMemberDialog extends Dialog {
@Override
public void onClick(View v) {
if (onLayoutClickListener != null) {
onLayoutClickListener.onUseMember(mDialog);
onLayoutClickListener.onUseMember(UseMemberDialog.this);
}
}
});
......@@ -280,7 +271,7 @@ public class UseMemberDialog extends Dialog {
@Override
public void onClick(View v) {
mDialog.dismiss();
UseMemberDialog.this.dismiss();
}
});
mTopBar.setTitle("使用會員");
......
<?xml version="1.0" encoding="utf-8"?>
<com.qmuiteam.qmui.alpha.QMUIAlphaTextView xmlns:android="http://schemas.android.com/apk/res/android"
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/rl_container"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<com.gingersoft.gsa.cloud.ui.view.BeveLabelView
android:id="@+id/blv_soldout"
android:layout_width="40dp"
android:layout_height="40dp"
app:label_bg_color="#D10035"
app:label_corner="10dp"
app:label_length="23dp"
app:label_mode="left_top"
app:label_text="暫停"
app:label_text_color="@color/theme_white_color"
app:label_text_size="@dimen/sp_10"
android:visibility="gone"/>
<com.qmuiteam.qmui.alpha.QMUIAlphaTextView
android:id="@+id/tv_name"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginRight="1px"
android:layout_marginTop="1px"
android:layout_marginRight="1px"
android:gravity="center"
android:padding="@dimen/dp_2"
android:text="food"
......@@ -12,3 +31,6 @@
android:textColor="@color/theme_white_color"
android:textSize="@dimen/sp_16" />
</FrameLayout>
......@@ -59,17 +59,6 @@
app:label_text_color="@color/theme_white_color"
app:label_text_size="@dimen/sp_10" />
<!--<TextView-->
<!--android:id="@+id/tv_status"-->
<!--android:layout_width="wrap_content"-->
<!--android:layout_height="wrap_content"-->
<!--android:layout_alignParentRight="true"-->
<!--android:layout_gravity="right"-->
<!--android:layout_marginRight="3px"-->
<!--android:layout_marginTop="2px"-->
<!--android:background="@drawable/selector_white_rect"-->
<!--android:text="sold" />-->
<ImageView
android:id="@+id/iv_qtySold"
android:layout_width="@dimen/dp_40"
......
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:paddingTop="@dimen/dp_25"
android:paddingBottom="@dimen/dp_10"
android:paddingStart="@dimen/dp_20"
android:paddingEnd="@dimen/dp_20"
android:background="@drawable/shape_rect_fillet_white_5">
<com.rengwuxian.materialedittext.MaterialEditText
android:id="@+id/ed_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@null"
android:hint="請輸入自定義金額"
android:paddingLeft="@dimen/dp_10"
android:paddingRight="@dimen/dp_10"
android:singleLine="true"
android:textColor="@color/normal_color"
android:textColorHint="@color/hint_color"
android:textSize="@dimen/sp_16"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:met_autoValidate="true"
app:met_baseColor="@color/theme_black"
app:met_clearButton="true"
app:met_floatingLabel="highlight"
app:met_iconPadding="2dp"
app:met_primaryColor="@color/theme_color"
app:met_singleLineEllipsis="false"
app:met_bottomTextSize="@dimen/sp_16"
app:met_floatingLabelTextSize="@dimen/sp_16"/>
<View
android:layout_width="1px"
android:layout_height="@dimen/dp_30"
android:background="@color/theme_grey_color"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintBottom_toBottomOf="parent"/>
<com.qmuiteam.qmui.alpha.QMUIAlphaTextView
android:id="@+id/tv_sure"
android:layout_width="@dimen/dp_70"
android:layout_height="@dimen/dp_40"
android:gravity="center"
android:textSize="@dimen/sp_14"
android:textColor="@color/theme_red_color"
android:text="確認"
android:layout_marginTop="@dimen/dp_10"
app:layout_constraintTop_toBottomOf="@+id/ed_text"
app:layout_constraintLeft_toLeftOf="@+id/ed_text"
app:qmui_borderColor="@color/trans"
app:qmui_radius="@dimen/dp_5" />
<com.qmuiteam.qmui.alpha.QMUIAlphaTextView
android:id="@+id/tv_cancel"
android:layout_width="@dimen/dp_70"
android:layout_height="@dimen/dp_40"
android:gravity="center"
android:textSize="@dimen/sp_14"
android:textColor="@color/theme_grey_color"
android:text="取消"
android:layout_marginTop="@dimen/dp_10"
app:layout_constraintTop_toBottomOf="@+id/ed_text"
app:layout_constraintRight_toRightOf="@+id/ed_text"
app:qmui_borderColor="@color/trans"
app:qmui_radius="@dimen/dp_5" />
</androidx.constraintlayout.widget.ConstraintLayout>
<com.gingersoft.gsa.cloud.ui.widget.keyboard.VirtualKeyboardView
android:id="@+id/virtualKeyboardView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="bottom" />
</FrameLayout>
\ No newline at end of file
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