Commit 90f41b1d by Wyh

1、凍鏈PRJ

2、外送代碼優化
3、prj打印頁數問題處理
4、供應鏈代碼提交
parent 36307038
......@@ -58,7 +58,6 @@ dependencies {
//lombok
implementation 'org.projectlombok:lombok:1.18.10'
annotationProcessor 'org.projectlombok:lombok:1.18.10'
}
//此文件是作为组件化配置的公共gradle脚本文件,在每个组件中都apply此文件,下载到工程根目录后,可以在下方添加一些自己工程中通用的配置
......
......@@ -31,6 +31,9 @@ android {
dataBinding {
enabled = true
}
// viewBinding {
// enabled = true
// }
resourcePrefix "coldChain"
buildTypes {
debug {
......
......@@ -7,6 +7,7 @@ import com.gingersoft.coldchain_module.mvp.model.bean.ShipAnyOrdersNewBean;
import com.gingersoft.coldchain_module.mvp.model.bean.SupplementInfoBean;
import com.gingersoft.coldchain_module.mvp.model.bean.UpdateOrderStatusBean;
import com.gingersoft.coldchain_module.mvp.model.bean.UpdateRestaurantStateBean;
import com.gingersoft.gsa.cloud.common.bean.BaseResult;
import com.gingersoft.gsa.cloud.common.core.delivery.OrderDetails;
import com.jess.arms.mvp.IModel;
import com.jess.arms.mvp.IView;
......@@ -47,7 +48,7 @@ public interface ColdChainMainContract {
Observable<UpdateOrderStatusBean> updateOrderStatus(RequestBody requestBody);
Observable<String> addPrj(RequestBody requestBody);
Observable<BaseResult> addPrj(RequestBody requestBody);
}
}
......@@ -37,7 +37,7 @@ public interface OrderDetailsContract {
Observable<ReadBean> setIsRead(RequestBody requestBody);
Observable<String> addPrj(RequestBody requestBody);
Observable<BaseResult> addPrj(RequestBody requestBody);
Observable<BaseResult> updatePrintPdfStatus(RequestBody requestBody);
}
......
......@@ -3,6 +3,7 @@ package com.gingersoft.coldchain_module.mvp.contract;
import com.gingersoft.coldchain_module.mvp.model.bean.OrderList;
import com.gingersoft.coldchain_module.mvp.model.bean.ShipAnyOrdersNewBean;
import com.gingersoft.coldchain_module.mvp.model.bean.UpdateOrderStatusBean;
import com.gingersoft.gsa.cloud.common.bean.BaseResult;
import com.gingersoft.gsa.cloud.common.core.delivery.OrderDetails;
import com.jess.arms.mvp.IModel;
import com.jess.arms.mvp.IView;
......@@ -24,7 +25,7 @@ public interface OrderListContract {
void loadOrderTotalNum(OrderList.DataBeanX.DataBean bean);
void getOrderDetails(OrderDetails.DataBean dataBean);
// void getOrderDetails(OrderDetails.DataBean dataBean);
}
......@@ -38,6 +39,6 @@ public interface OrderListContract {
Observable<UpdateOrderStatusBean> updateOrderStatus(RequestBody requestBody);
Observable<String> addPrj(RequestBody requestBody);
Observable<BaseResult> addPrj(RequestBody requestBody);
}
}
......@@ -12,6 +12,7 @@ import com.gingersoft.coldchain_module.mvp.model.bean.UpdateOrderStatusBean;
import com.gingersoft.coldchain_module.mvp.model.bean.UpdateRestaurantStateBean;
import com.gingersoft.coldchain_module.mvp.model.service.ColdChainService;
import com.gingersoft.coldchain_module.mvp.model.service.OrderDetailService;
import com.gingersoft.gsa.cloud.common.bean.BaseResult;
import com.gingersoft.gsa.cloud.common.core.delivery.OrderDetails;
import com.google.gson.Gson;
import com.jess.arms.di.scope.ActivityScope;
......@@ -89,7 +90,7 @@ public class ColdChainMainModel extends BaseModel implements ColdChainMainContra
}
@Override
public Observable<String> addPrj(RequestBody requestBody) {
public Observable<BaseResult> addPrj(RequestBody requestBody) {
return mRepositoryManager.obtainRetrofitService(OrderDetailService.class).addPrj(requestBody);
}
......
......@@ -66,7 +66,7 @@ public class OrderDetailsModel extends BaseModel implements OrderDetailsContract
}
@Override
public Observable<String> addPrj(RequestBody requestBody) {
public Observable<BaseResult> addPrj(RequestBody requestBody) {
return mRepositoryManager.obtainRetrofitService(OrderDetailService.class).addPrj(requestBody);
}
......
......@@ -8,6 +8,7 @@ import com.gingersoft.coldchain_module.mvp.model.bean.ShipAnyOrdersNewBean;
import com.gingersoft.coldchain_module.mvp.model.bean.UpdateOrderStatusBean;
import com.gingersoft.coldchain_module.mvp.model.service.ColdChainService;
import com.gingersoft.coldchain_module.mvp.model.service.OrderDetailService;
import com.gingersoft.gsa.cloud.common.bean.BaseResult;
import com.gingersoft.gsa.cloud.common.core.delivery.OrderDetails;
import com.google.gson.Gson;
import com.jess.arms.di.scope.FragmentScope;
......@@ -60,7 +61,7 @@ public class OrderListModel extends BaseModel implements OrderListContract.Model
}
@Override
public Observable<String> addPrj(RequestBody requestBody) {
public Observable<BaseResult> addPrj(RequestBody requestBody) {
return mRepositoryManager.obtainRetrofitService(OrderDetailService.class).addPrj(requestBody);
}
}
\ No newline at end of file
......@@ -41,7 +41,7 @@ public interface OrderDetailService {
Observable<CancelLogisticsBean> cancelLogistics(@Body RequestBody requestBody);
@POST("printerRecording/add" + RetrofitUrlManager.IDENTIFICATION_PATH_SIZE + 2)
Observable<String> addPrj(@Body RequestBody requestBody);
Observable<BaseResult> addPrj(@Body RequestBody requestBody);
@Headers({"Domain-Name: ricepon_gsa"})
@POST("shipanyTransportOrderInfo/update" + RetrofitUrlManager.IDENTIFICATION_PATH_SIZE + 2)
......
package com.gingersoft.coldchain_module.mvp.presenter;
import android.app.Application;
import android.util.Log;
import com.gingersoft.coldchain_module.mvp.constans.ColdChainConstants;
import com.gingersoft.coldchain_module.mvp.contract.ColdChainMainContract;
......@@ -31,9 +32,11 @@ import java.util.List;
import javax.inject.Inject;
import io.reactivex.Observer;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.annotations.NonNull;
import io.reactivex.disposables.Disposable;
import io.reactivex.functions.Consumer;
import io.reactivex.schedulers.Schedulers;
import me.jessyan.rxerrorhandler.core.RxErrorHandler;
import me.jessyan.rxerrorhandler.handler.ErrorHandleSubscriber;
......@@ -209,16 +212,12 @@ public class ColdChainMainPresenter extends BasePresenter<ColdChainMainContract.
});
}
private List<Integer> ids;
private Disposable autoDisposable;
private boolean isAutoReceiving;
public void stopAutoReceivingOrders() {
if (autoDisposable != null) {
autoDisposable.dispose();
}
errorCount = 6;
isAutoReceiving = false;
}
/**
......@@ -227,11 +226,6 @@ public class ColdChainMainPresenter extends BasePresenter<ColdChainMainContract.
* @param restaurantId
*/
public void startToBeConfirmedOrderList(int restaurantId) {
if (autoDisposable != null && (!autoDisposable.isDisposed() || !isAutoReceiving)) {
return;
}
isAutoReceiving = true;
errorCount = 0;
RequestBody requestBody = new FormBody.Builder()
.add("restaurantId", restaurantId + "")
.add("page", "0")
......@@ -261,14 +255,11 @@ public class ColdChainMainPresenter extends BasePresenter<ColdChainMainContract.
if (info != null && info.isSuccess() && info.getData() != null) {
if (info.getData().getData() != null && info.getData().getData().size() > 0) {
List<OrderList.DataBeanX.DataBean> dataBeans = info.getData().getData();
//移除掉其他信息
dataBeans.remove(dataBeans.size() - 1);
ids = new ArrayList<>();
for (int i = 0; i < dataBeans.size(); i++) {
ids.add(dataBeans.get(i).getId());
}
if (ids.size() > 0) {
findOrderDetails(ids.get(0));
ids.remove(0);
if (dataBeans.size() > 0) {
//獲取訂單詳情
findOrderDetails(dataBeans.get(0).getId());
}
}
}
......@@ -276,10 +267,11 @@ public class ColdChainMainPresenter extends BasePresenter<ColdChainMainContract.
});
}
/**
* 獲取訂單詳情
*/
public void findOrderDetails(int orderId) {
if (!isAutoReceiving) {
return;
}
//startTime endTime //mRootView.showLoading("獲取訂單詳情...") mRootView.hideLoading()
RequestBody requestBody = new FormBody.Builder()
.add("orderId", orderId + "")
......@@ -303,30 +295,21 @@ public class ColdChainMainPresenter extends BasePresenter<ColdChainMainContract.
@Override
public void onNext(@NonNull OrderDetails info) {
if (info != null && info.getData() != null && info.getData().size() > 0) {
//第三方配送
thirdDelivery(info.getData().get(0));
} else {
if (errorCount < maxErrorCount) {
startToBeConfirmedOrderList(RestaurantInfoManager.newInstance().getRestaurantId());
errorCount++;
}
}
}
});
}
private int errorCount = 0;
private int maxErrorCount = 5;
/**
* 指派到第三方物流配送
*
* @param dataBean
*/
public void thirdDelivery(OrderDetails.DataBean dataBean) {
if (!isAutoReceiving) {
return;
}
//驗證訂單金額是否正確
if(OrderDetails.verificationAmount(dataBean)){
if (OrderDetails.verificationAmount(dataBean)) {
return;
}
ThirdItem third = new ThirdItem();
......@@ -358,32 +341,24 @@ public class ColdChainMainPresenter extends BasePresenter<ColdChainMainContract.
.compose(RxLifecycleUtils.bindToLifecycle(mRootView))
.subscribe(new ErrorHandleSubscriber<ShipAnyOrdersNewBean>(mErrorHandler) {
@Override
public void onSubscribe(Disposable d) {
super.onSubscribe(d);
autoDisposable = d;
}
@Override
public void onNext(@NonNull ShipAnyOrdersNewBean info) {
if (info != null && info.isSuccess()) {
//修改訂單狀態
updateOrderState(dataBean, ColdChainConstants.ORDER_CONFIRMED);
} else {
if (errorCount < 5) {
thirdDelivery(dataBean);
errorCount++;
}
}
}
});
}
/**
* 修改訂單狀態
*
* @param dataBean
* @param status
*/
public void updateOrderState(OrderDetails.DataBean dataBean, int status) {
if (!isAutoReceiving) {
return;
}
//驗證訂單金額是否正確
if(OrderDetails.verificationAmount(dataBean)){
if (OrderDetails.verificationAmount(dataBean)) {
return;
}
//添加PRJ
......@@ -403,21 +378,8 @@ public class ColdChainMainPresenter extends BasePresenter<ColdChainMainContract.
.compose(RxLifecycleUtils.bindToLifecycle(mRootView))
.subscribe(new ErrorHandleSubscriber<UpdateOrderStatusBean>(mErrorHandler) {
@Override
public void onSubscribe(Disposable d) {
super.onSubscribe(d);
autoDisposable = d;
}
@Override
public void onNext(@NonNull UpdateOrderStatusBean info) {
errorCount = 0;
mRootView.refreshOrderState(dataBean.getID());
if (ids != null && ids.size() > 0) {
findOrderDetails(ids.get(0));
ids.remove(0);
} else {
startToBeConfirmedOrderList(RestaurantInfoManager.newInstance().getRestaurantId());
}
}
});
}
......@@ -429,9 +391,11 @@ public class ColdChainMainPresenter extends BasePresenter<ColdChainMainContract.
if (productnameBean.getChild() != null) {
for (OrderDetails.DataBean.PRODUCTNAMEBean.ChildBeanX childBeanX : productnameBean.getChild()) {
if (childBeanX != null) {
for (OrderDetails.DataBean.PRODUCTNAMEBean.ChildBeanX.ChildBean childBean : childBeanX.getChild()) {
ids.append(childBean.getOdsId());
ids.append(",");
if (childBeanX.getChild() != null) {
for (OrderDetails.DataBean.PRODUCTNAMEBean.ChildBeanX.ChildBean childBean : childBeanX.getChild()) {
ids.append(childBean.getOdsId());
ids.append(",");
}
}
ids.append(childBeanX.getOdsId());
ids.append(",");
......@@ -446,7 +410,8 @@ public class ColdChainMainPresenter extends BasePresenter<ColdChainMainContract.
.add("restaurantId", RestaurantInfoManager.newInstance().getRestaurantId() + "")
.add("orderDetailsIds", ids.toString())
.build();
mModel.addPrj(requestBody);
Disposable subscribe = mModel.addPrj(requestBody)
.subscribeOn(Schedulers.io()).subscribe(s -> {});
}
}
......
......@@ -146,7 +146,7 @@ public class OrderDetailsPresenter extends BasePresenter<OrderDetailsContract.Mo
public void thirdDelivery(OrderDetails.DataBean dataBean) {
//驗證訂單金額是否正確
if(OrderDetails.verificationAmount(dataBean)){
if (OrderDetails.verificationAmount(dataBean)) {
mRootView.showMessage(OrderDetails.getVerifiAmountTip());
return;
}
......@@ -208,7 +208,7 @@ public class OrderDetailsPresenter extends BasePresenter<OrderDetailsContract.Mo
public void updateOrderState(OrderDetails.DataBean dataBean, int status, String labUrl) {
//驗證訂單金額是否正確
if(OrderDetails.verificationAmount(dataBean)){
if (OrderDetails.verificationAmount(dataBean)) {
mRootView.showMessage(OrderDetails.getVerifiAmountTip());
return;
}
......@@ -254,26 +254,28 @@ public class OrderDetailsPresenter extends BasePresenter<OrderDetailsContract.Mo
@Override
public void onError(Throwable t) {
super.onError(t);
mRootView.showMessage(t.getMessage());
mRootView.showMessage(t.getMessage() + "");
mRootView.killMyself();
}
});
}
public void addPrj(OrderDetails.DataBean dataBean) {
StringBuffer ids = new StringBuffer();
StringBuilder ids = new StringBuilder();
if (dataBean.getPRODUCT_NAME() != null) {
for (OrderDetails.DataBean.PRODUCTNAMEBean productnameBean : dataBean.getPRODUCT_NAME()) {
if (productnameBean.getChild() != null) {
for (OrderDetails.DataBean.PRODUCTNAMEBean.ChildBeanX childBeanX : productnameBean.getChild()) {
if (childBeanX != null) {
for (OrderDetails.DataBean.PRODUCTNAMEBean.ChildBeanX.ChildBean childBean : childBeanX.getChild()) {
ids.append(childBean.getOdsId());
ids.append(",");
if (childBeanX.getChild() != null) {
for (OrderDetails.DataBean.PRODUCTNAMEBean.ChildBeanX.ChildBean childBean : childBeanX.getChild()) {
ids.append(childBean.getOdsId());
ids.append(",");
}
}
ids.append(childBeanX.getOdsId());
ids.append(",");
}
ids.append(childBeanX.getOdsId());
ids.append(",");
}
}
ids.append(productnameBean.getOdsId());
......@@ -284,7 +286,8 @@ public class OrderDetailsPresenter extends BasePresenter<OrderDetailsContract.Mo
.add("restaurantId", RestaurantInfoManager.newInstance().getRestaurantId() + "")
.add("orderDetailsIds", ids.toString())
.build();
mModel.addPrj(requestBody);
Disposable subscribe = mModel.addPrj(requestBody)
.subscribeOn(Schedulers.io()).subscribe(s -> {});
}
}
......
......@@ -53,6 +53,9 @@ import com.qmuiteam.qmui.util.QMUIDisplayHelper;
import com.qmuiteam.qmui.widget.QMUITopBar;
import com.qmuiteam.qmui.widget.popup.QMUIPopup;
import com.qmuiteam.qmui.widget.popup.QMUIPopups;
import com.xuexiang.rxutil2.exception.RxException;
import com.xuexiang.rxutil2.rxjava.RxJavaUtils;
import com.xuexiang.rxutil2.subsciber.BaseSubscriber;
import java.lang.reflect.Method;
import java.util.ArrayList;
......@@ -65,6 +68,7 @@ import butterknife.OnClick;
import io.reactivex.Observable;
import io.reactivex.Observer;
import io.reactivex.disposables.Disposable;
import io.reactivex.functions.Consumer;
import io.reactivex.schedulers.Schedulers;
import static androidx.fragment.app.FragmentStatePagerAdapter.BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT;
......@@ -98,6 +102,8 @@ public class ColdChainMainActivity extends BaseFragmentActivity<ColdChainMainPre
@BindView(R2.id.cb_auto_receiving_orders)
CheckBox autoReceivingOrders;
private final int autoReceivingOrderInterval = 15;
public void setOrderNum(OrderList.DataBeanX.DataBean bean) {
mTakeAwayPb.setMax(bean.getMaxOrder() == 0 ? 1 : bean.getMaxOrder());
mTakeAwayPb.setProgress(bean.getNum());
......@@ -161,32 +167,12 @@ public class ColdChainMainActivity extends BaseFragmentActivity<ColdChainMainPre
if (autoOrderDisposable != null && !autoOrderDisposable.isDisposed()) {
autoOrderDisposable.dispose();
}
Observable.timer(1, TimeUnit.SECONDS).subscribeOn(Schedulers.io()).subscribe(new Observer<Long>() {
@Override
public void onSubscribe(Disposable d) {
autoOrderDisposable = d;
}
@Override
public void onNext(Long aLong) {
// mPresenter.updateExpandInfo(ExpandConstant.FrozenChainAutoOrder, new String[]{RestaurantExpandInfoUtils.VALUE_INT}, new String[]{RestaurantExpandInfoUtils.getValue(ExpandConstant.FrozenChainAutoOrder, false) ? "0" : "1"});
if (!isChecked) {
mPresenter.stopAutoReceivingOrders();
} else {
mPresenter.startToBeConfirmedOrderList(restaurantId);
}
}
@Override
public void onError(Throwable e) {
}
@Override
public void onComplete() {
}
});
if (isChecked) {
//開始自動接單
autoOrderDisposable = RxJavaUtils.polling(1, autoReceivingOrderInterval, aLong -> mPresenter.startToBeConfirmedOrderList(restaurantId));
} else {
mPresenter.stopAutoReceivingOrders();
}
});
}
......
......@@ -10,12 +10,14 @@ import android.view.KeyEvent;
import android.view.View;
import android.widget.LinearLayout;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.core.content.ContextCompat;
import androidx.recyclerview.widget.GridLayoutManager;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import com.gingersoft.coldchain_module.R;
import com.gingersoft.coldchain_module.R2;
import com.gingersoft.coldchain_module.di.component.DaggerOrderDetailsComponent;
......@@ -231,7 +233,9 @@ public class OrderDetailsActivity extends BaseActivity<OrderDetailsPresenter> im
}
mTvOrderNo.setText(getResources().getString(R.string.order_no) + bean.getORDER_NO());
mTvCreateTime.setText(getResources().getString(R.string.create_order_time) + TimeUtils.parseTimeRepeat(bean.getCREATE_TIME(), TimeUtils.DEFAULT_DATE_FORMAT));
mTvReceiver.setText(bean.getRECEIVER());
if(TextUtil.isNotEmptyOrNullOrUndefined(bean.getRECEIVER())) {
mTvReceiver.setText(bean.getRECEIVER());
}
mTvOrderNum.setText(bean.getBillNo());
mTvReceiverPhone.setText(bean.getPHONE());
mTvReceiverTime.setText(TextUtil.isNotEmptyOrNullOrUndefined(bean.getTakeTime()) ? bean.getTakeTime() : bean.getSEND_TIME());
......@@ -260,7 +264,7 @@ public class OrderDetailsActivity extends BaseActivity<OrderDetailsPresenter> im
}
}
mTvTotalAmount2.setText(amountUnit + totalAmount);
mTvPayAmount.setText(amountUnit + totalAmount);
mTvPayAmount.setText(amountUnit + bean.getPAY_AMOUNT());
if (bean.getOrderPayType() == 2 && bean.getPayMultiple() != null) {
StringBuilder sb = new StringBuilder();
......
......@@ -260,14 +260,14 @@ public class OrderListFragment extends BaseFragment<OrderListPresenter> implemen
}
}
@Override
public void getOrderDetails(OrderDetails.DataBean dataBean) {
if (getActivity() instanceof ColdChainMainActivity && ((ColdChainMainActivity) getActivity()).isAutoReceivingOrder()) {
if (dataBean.getOrderStatus() == 0 || dataBean.getOrderStatus() == 1) {
mPresenter.thirdDelivery(dataBean);
}
}
}
// @Override
// public void getOrderDetails(OrderDetails.DataBean dataBean) {
// if (getActivity() instanceof ColdChainMainActivity && ((ColdChainMainActivity) getActivity()).isAutoReceivingOrder()) {
// if (dataBean.getOrderStatus() == 0 || dataBean.getOrderStatus() == 1) {
// mPresenter.thirdDelivery(dataBean);
// }
// }
// }
private void notifyActivityOrderNum() {
if (getActivity() instanceof ColdChainMainActivity) {
......
......@@ -27,6 +27,9 @@ android {
dataBinding {
enabled = true
}
// viewBinding {
// enabled = true
// }
buildTypes {
debug {
buildConfigField "boolean", "LOG_DEBUG", "true"
......
......@@ -413,15 +413,15 @@ class PageViewModel(private val repository: WeatherRepository) : ViewModel() {
}
launch({
when (dataBean.companyType) {
0 -> {
OrderDetails.ourStoreDistribution -> {
//本店
updateOrderAndPrint(restaurantId, dataBean, status, isPrintPrj, listener)
}
1 -> {
OrderDetails.zeekDistribution -> {
//zeek
thirdSend(restaurantId, dataBean, trafficType, status, isPrintPrj, isPrintBill, listener)
}
2 -> {
OrderDetails.lalamoveDistribution -> {
//lalamove
thirdSend(restaurantId, dataBean, trafficType, status, isPrintPrj, isPrintBill, listener)
}
......@@ -484,7 +484,7 @@ class PageViewModel(private val repository: WeatherRepository) : ViewModel() {
payMethods.forEach {
payMultiple.add(OrderDetails.DataBean.PayMultiple(it.id.toString(), it.payMoney, it.payName, 0.0))
}
repository.updateOrderPay(orderDetails.ID, 4, orderDetails.order_type, 3, orderPayInfoVO = payMultiple).apply {
repository.updateOrderPay(orderDetails.ID, OrderDetails.closingAmount, orderDetails.order_type, 3, orderPayInfoVO = payMultiple).apply {
orderDetails.payMultiple = payMultiple
orderDetails.payTime = TimeUtils.getCurrentTimeInString(TimeUtils.DEFAULT_DATE_FORMAT)
val bean = GsonUtils.GsonToBean(GsonUtils.GsonString(data), OrderClosingBean::class.java)
......@@ -498,7 +498,6 @@ class PageViewModel(private val repository: WeatherRepository) : ViewModel() {
}, {
listener.invoke(OrderDelivery, false)
it.printStackTrace()
// integralBean.postValue(null)
})
}
......@@ -510,7 +509,7 @@ class PageViewModel(private val repository: WeatherRepository) : ViewModel() {
return
}
launch({
repository.gsUpdateOrderStatus(orderDetails.ID, 4, orderDetails.order_type, 3, orderFrom = 0).apply {
repository.gsUpdateOrderStatus(orderDetails.ID, OrderDetails.closingAmount, orderDetails.order_type, 3, orderFrom = 0).apply {
if (orderPayInfoVO != null && orderPayInfoVO.isNotEmpty()) {
orderDetails.payMultiple = orderPayInfoVO
}
......
......@@ -156,7 +156,7 @@ class OrderDetailsActivity : BaseActivity<IPresenter>() {
val orderStatusText: String
val type = if (orderDetails.order_type == 7) "自取" else "外送"
when (orderDetails.orderStatus) {
2 -> {//製作中
OrderDetails.inProduction -> {//製作中
//製作中訂單狀態為2,但是列表中的狀態為0的話,可能是調用了指派物流,沒修改訂單狀態
if (state == 0) {
//防止調用了第三方物流接口,沒調用到確認訂單接口
......@@ -180,7 +180,7 @@ class OrderDetailsActivity : BaseActivity<IPresenter>() {
btnBuilder.getPrintBtn()?.let {
btnList.add(it)
}
if (orderDetails.order_type == 7) {
if (orderDetails.order_type == OrderDetails.yourselfPickUp) {
//製作中的自取,應該製作完成、打印、取消訂單
btnBuilder.getProductionCompletedBtn()?.let {
btnList.add(it)
......@@ -188,18 +188,18 @@ class OrderDetailsActivity : BaseActivity<IPresenter>() {
tv_order_state.setTextColor(getCustomColor(R.color.order_state0_color))
} else {
//製作中的外賣,應該有打印、取消物流、取消訂單
if (orderDetails.isDelete == 0) {
if (orderDetails.isDelete == OrderDetails.thirdPartyDistribution) {
btnBuilder.getLogisticsBtn()?.let {
btnList.add(it)
}
if (isTimeOut && orderDetails.companyType == 2) {
if (isTimeOut && orderDetails.companyType == OrderDetails.lalamoveDistribution) {
//已超時,添加追加貼士的按鈕
btnBuilder.getAdditionalServiceChargeBtn()?.let {
btnList.add(it)
}
}
} else {
if (orderDetails.companyType == 2) {
if (orderDetails.companyType == OrderDetails.lalamoveDistribution) {
btnBuilder.getTransportationBtn()?.let {
btnList.add(it)
}
......@@ -216,11 +216,11 @@ class OrderDetailsActivity : BaseActivity<IPresenter>() {
btnList.add(it)
}
}
3 -> {//外賣是送貨中,自取是待取餐
OrderDetails.appointDelivery -> {//外賣是送貨中,自取是待取餐
btnBuilder.getPrintBtn()?.let {
btnList.add(it)
}
if (orderDetails.order_type == 7) {
if (orderDetails.order_type == OrderDetails.yourselfPickUp) {
//自取待取餐,有打印和結賬
orderStatusText = "待取餐"
btnBuilder.getClosingBtn()?.let {
......@@ -231,7 +231,7 @@ class OrderDetailsActivity : BaseActivity<IPresenter>() {
// 外賣有打印
// 如果是第三方物流,不顯示結賬
// 如果是本店配送,有結賬按鈕
if (orderDetails.isDelete == 0) {
if (orderDetails.isDelete == OrderDetails.thirdPartyDistribution) {
//如果是第三方物流,不顯示結賬按鈕
} else {
btnBuilder.getAssignDeliveryBtn()?.let {
......@@ -245,7 +245,7 @@ class OrderDetailsActivity : BaseActivity<IPresenter>() {
tv_order_state.setTextColor(getCustomColor(R.color.order_state2_color))
}
}
8 -> {//預約單
OrderDetails.bookingOrder -> {//預約單
if (!isBookingOrder) {
btnBuilder.getSureBtn()?.let {
btnList.add(it)
......@@ -270,7 +270,7 @@ class OrderDetailsActivity : BaseActivity<IPresenter>() {
tv_order_state.setTextColor(ContextCompat.getColor(this@OrderDetailsActivity, R.color.order_state0_color))
}
}
if (orderDetails.orderPayType == 2 && orderDetails.payMultiple != null) {
if (orderDetails.orderPayType == OrderDetails.onLinePay && orderDetails.payMultiple != null) {
val sb = StringBuilder()
for (value in orderDetails.payMultiple!!) {
sb.append(value.payName)
......@@ -330,7 +330,7 @@ class OrderDetailsActivity : BaseActivity<IPresenter>() {
cancelLogistics(orderDetails)
BtnBuilder.AssignDeliveryBtn ->
//指派送貨
selectorDelivery(this@OrderDetailsActivity, orderDetails, 3) { _, _ -> finish() }
selectorDelivery(this@OrderDetailsActivity, orderDetails, OrderDetails.appointDelivery) { _, _ -> finish() }
BtnBuilder.CancelBtn ->
//取消訂單
cancelOrder(orderDetails)
......@@ -347,8 +347,9 @@ class OrderDetailsActivity : BaseActivity<IPresenter>() {
}
}
BtnBuilder.ClosingBtn -> {
//如果是在線支付的訂單,就直接修改訂單狀態
if (orderPayType != 1) {
//只要不是貨到付款
if (orderPayType != OrderDetails.payOnDelivery) {
//如果是在線支付的訂單,就直接修改訂單狀態
gsUpdateOrderStatus(orderDetails, null) { errorCode, isSuccess ->
when {
isSuccess -> {
......@@ -363,6 +364,7 @@ class OrderDetailsActivity : BaseActivity<IPresenter>() {
}
}
} else {
//跳轉到結賬頁面
if (OrderDetails.verificationAmount(orderDetails)) {
ToastUtils.show(this@OrderDetailsActivity, verifiAmountTip)
return@setOnItemClickListener
......@@ -378,17 +380,17 @@ class OrderDetailsActivity : BaseActivity<IPresenter>() {
updateOrderAndPrint(restaurantId, orderDetails, 8, false, listener)
} else {
//確認訂單,判斷是本店還是zeek或是lalamove
if (orderDetails.order_type == 7) {
if (orderDetails.order_type == OrderDetails.yourselfPickUp) {
//如果是自取單,將物流類型改為本店
orderDetails.companyType = 0
orderDetails.companyType = OrderDetails.ourStoreDistribution
}
when (orderDetails.companyType) {
0, 1 -> {
OrderDetails.ourStoreDistribution, OrderDetails.zeekDistribution -> {
//本店配送和zeek
confirmOrder(orderDetails)
}
2 -> {
OrderDetails.lalamoveDistribution -> {
//lalamove
selectLalaMove(orderDetails, true) { it, orderDetails ->
showIsUpdateTransportation(it, orderDetails, true)
......@@ -404,7 +406,7 @@ class OrderDetailsActivity : BaseActivity<IPresenter>() {
}
BtnBuilder.ProductionCompletedBtn -> {
//製作完成
updateOrderAndPrint(restaurantId, orderDetails, 3) {
updateOrderAndPrint(restaurantId, orderDetails, OrderDetails.appointDelivery) {
if (it.success) {
finish()
}
......
......@@ -33,7 +33,7 @@
android:id="@+id/tv_dialog_confirm"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/shape_red_five_radius_bg"
android:background="@drawable/shape_red_seven_radius_bg"
android:paddingLeft="@dimen/dp_28"
android:paddingTop="@dimen/dp_10"
android:paddingRight="@dimen/dp_28"
......
......@@ -118,3 +118,6 @@
}
-keep public class * implements java.io.Serializable {*;}
#xpopup
-dontwarn com.lxj.xpopup.widget.**
-keep class com.lxj.xpopup.widget.**{*;}
......@@ -30,7 +30,9 @@ android {
}
}
}
// viewBinding {
// enabled = true
// }
resourcePrefix "main"
buildTypes {
......
......@@ -242,7 +242,7 @@ public class SettlementReportPresenter extends BasePresenter<SettlementReportCon
dialogBuilder.setTitleIcon(com.gingersoft.gsa.cloud.common.R.drawable.qmui_icon_dialog_doubt);
dialogBuilder.setMessage(msg);
dialogBuilder.setCancelable(true);
dialogBuilder.addAction(com.gingersoft.gsa.cloud.common.R.drawable.shape_red_five_radius_bg, "是", QMUIDialogAction.ACTION_PROP_NEGATIVE, (dialog, index) -> {
dialogBuilder.addAction(com.gingersoft.gsa.cloud.common.R.drawable.shape_red_seven_radius_bg, "是", QMUIDialogAction.ACTION_PROP_NEGATIVE, (dialog, index) -> {
dialog.dismiss();
sendSettlement(SettlementReportActivity.merge_settlement_type_2);
});
......
......@@ -12,6 +12,7 @@ import org.jetbrains.annotations.NotNull;
/**
* @author admin
* 跳轉到別的頁面
*/
public class SelectItemProvider extends FoodMenuItemProvider {
private Context context;
......
......@@ -358,7 +358,7 @@ public class PrjService extends Service implements ReceiveListener {
if (datas != null && datas.size() > 0) {
//打印位置和需要打印的數據
listMap.put(key, datas);
//有沒有不需要切紙的
//計算本次打印的prj總張數有沒有不需要切紙的
boolean isHasNoCut = false;
for (PrjBean.DataBean.Bean bean : datas) {
if (bean.getStatus() == 2) {
......@@ -384,14 +384,22 @@ public class PrjService extends Service implements ReceiveListener {
private Map<String, List<PrjBean.DataBean.Bean>> setPrjIndex(Map<String, List<PrjBean.DataBean.Bean>> listMap, int totalPrj) {
for (Map.Entry<String, List<PrjBean.DataBean.Bean>> prjMap : listMap.entrySet()) {
//上一個對象是否切紙
boolean lastIsCute = false;
for (PrjBean.DataBean.Bean bean : prjMap.getValue()) {
bean.setTotalPrj(totalPrj);
if (bean.getStatus() == 2) {
//要切紙,紙張數+1
currentIndex++;
lastIsCute = true;
} else {
if (currentIndex == 0) {
currentIndex = 1;
} else if (lastIsCute) {
//如果上一張切紙,那這一張下標就要+1
currentIndex++;
}
lastIsCute = false;
}
bean.setCurrentIndex(currentIndex);
}
......@@ -470,7 +478,7 @@ public class PrjService extends Service implements ReceiveListener {
private PrintCurrencyBean getPrintCurrencyBean(List<PrjBean.DataBean.Bean> beans) {
PrintCurrencyBean printCurrencyBean = null;
if (beans != null && beans.size() > 0) {
if (beans.get(0).getOrderType() == 1 || beans.get(0).getOrderType() == 3 ) {
if (beans.get(0).getOrderType() == 1 || beans.get(0).getOrderType() == 3) {
//堂食,skyorder
printCurrencyBean = MyPrintUtils.getPrintCurrencyBeanByType(mContext, 1);
} else {
......
......@@ -27,7 +27,9 @@ android {
}
}
}
// viewBinding {
// enabled = true
// }
resourcePrefix "supply_chain"
buildTypes {
......
package com.gingersoft.supply_chain.di.component;
import dagger.BindsInstance;
import dagger.Component;
import com.jess.arms.di.component.AppComponent;
import com.gingersoft.supply_chain.di.module.WareHouseListModule;
import com.gingersoft.supply_chain.mvp.contract.WareHouseListContract;
import com.jess.arms.di.scope.FragmentScope;
import com.gingersoft.supply_chain.mvp.ui.fragment.warehouse.WareHouseListFragment;
/**
* ================================================
* Description:
* <p>
* Created by MVPArmsTemplate on 01/06/2021 15:37
* <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
@Component(modules = WareHouseListModule.class, dependencies = AppComponent.class)
public interface WareHouseListComponent {
void inject(WareHouseListFragment fragment);
@Component.Builder
interface Builder {
@BindsInstance
WareHouseListComponent.Builder view(WareHouseListContract.View view);
WareHouseListComponent.Builder appComponent(AppComponent appComponent);
WareHouseListComponent build();
}
}
\ No newline at end of file
package com.gingersoft.supply_chain.di.component;
import dagger.BindsInstance;
import dagger.Component;
import com.jess.arms.di.component.AppComponent;
import com.gingersoft.supply_chain.di.module.WareHousingDetailsModule;
import com.gingersoft.supply_chain.mvp.contract.WareHousingDetailsContract;
import com.jess.arms.di.scope.FragmentScope;
import com.gingersoft.supply_chain.mvp.ui.fragment.warehouse.WareHousingDetailsFragment;
/**
* ================================================
* Description:
* <p>
* Created by MVPArmsTemplate on 01/12/2021 14:28
* <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
@Component(modules = WareHousingDetailsModule.class, dependencies = AppComponent.class)
public interface WareHousingDetailsComponent {
void inject(WareHousingDetailsFragment fragment);
@Component.Builder
interface Builder {
@BindsInstance
WareHousingDetailsComponent.Builder view(WareHousingDetailsContract.View view);
WareHousingDetailsComponent.Builder appComponent(AppComponent appComponent);
WareHousingDetailsComponent build();
}
}
\ No newline at end of file
package com.gingersoft.supply_chain.di.module;
import com.jess.arms.di.scope.FragmentScope;
import dagger.Binds;
import dagger.Module;
import dagger.Provides;
import com.gingersoft.supply_chain.mvp.contract.WareHouseListContract;
import com.gingersoft.supply_chain.mvp.model.WareHouseListModel;
/**
* ================================================
* Description:
* <p>
* Created by MVPArmsTemplate on 01/06/2021 15:37
* <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>
* ================================================
*/
@Module
public abstract class WareHouseListModule {
@Binds
abstract WareHouseListContract.Model bindWareHouseListModel(WareHouseListModel model);
}
\ No newline at end of file
package com.gingersoft.supply_chain.di.module;
import com.jess.arms.di.scope.FragmentScope;
import dagger.Binds;
import dagger.Module;
import dagger.Provides;
import com.gingersoft.supply_chain.mvp.contract.WareHousingDetailsContract;
import com.gingersoft.supply_chain.mvp.model.WareHousingDetailsModel;
/**
* ================================================
* Description:
* <p>
* Created by MVPArmsTemplate on 01/12/2021 14:28
* <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>
* ================================================
*/
@Module
public abstract class WareHousingDetailsModule {
@Binds
abstract WareHousingDetailsContract.Model bindWareHousingDetailsModel(WareHousingDetailsModel model);
}
\ No newline at end of file
......@@ -27,4 +27,11 @@ public class BasicUnitBean {
private long createTime;
private long updateTime;
private int updateUid;
public BasicUnitBean() {
}
public BasicUnitBean(String content) {
this.content = content;
}
}
package com.gingersoft.supply_chain.mvp.bean;
import java.util.List;
import lombok.Data;
/**
* @author 宇航.
* User: admin
* Date: 2021/1/7
* Time: 12:22
* Use: 存儲分類和對應食材
*/
@Data
public class CategoryFoodTreeBean {
/**
* 分類集合,父分類id和子分類id都在
* 可以通過遍歷這個集合找到分類下的食材數據
*/
private List<Integer> categoryIds;
/**
* 分類集合,父分類名和子分類名都在
* 可以通過遍歷這個集合找到分類下的食材數據
*/
private List<String> categoryNames;
/**
* 食品數據
*/
private List<PurchaseFoodBean> foodInfo;
}
......@@ -21,6 +21,7 @@ public class ConfirmOrderBean {
private PurchaseOrder purchaseOrder;
private List<PurchaseOrderDetails> purchaseOrderDetails;
private double minimumAmount;//最低採購金額
@Data
public static class PurchaseOrder implements Serializable {
private static final long serialVersionUID = -8777410033061311699L;
......@@ -38,14 +39,14 @@ public class ConfirmOrderBean {
private String remarks;
}
public static PurchaseOrder conversionPurchaseOrder(PurchaseFoodBean cartFood) {
public static PurchaseOrder conversionPurchaseOrder(int supplierId, String supplierName, double totalAmount) {
PurchaseOrder purchaseOrder = new PurchaseOrder();
purchaseOrder.setSupplierId(cartFood.getSupplierId());
purchaseOrder.setSupplierName(cartFood.getSupplierName());
purchaseOrder.setSupplierId(supplierId);
purchaseOrder.setSupplierName(supplierName);
purchaseOrder.setBrandId(RestaurantInfoManager.newInstance().getBrandId());
purchaseOrder.setRestaurantId(RestaurantInfoManager.newInstance().getRestaurantId());
purchaseOrder.setInitialShippingTime(TimeUtils.getNextDayLong(1));
purchaseOrder.setTotalAmount(MoneyUtil.priceCalculation(cartFood.getUnitPrice(), cartFood.getFoodQuantity()));
purchaseOrder.setTotalAmount(totalAmount);
purchaseOrder.setActualPayment(MoneyUtil.sum(purchaseOrder.getTotalAmount(), purchaseOrder.getShipping()));
return purchaseOrder;
}
......
......@@ -13,6 +13,8 @@ import lombok.Data;
*/
@Data
public class DeputyUnitBean implements Serializable {
private Integer id;
private int uid;
/**
* 品牌id
*/
......@@ -30,16 +32,40 @@ public class DeputyUnitBean implements Serializable {
*/
private String deputyUnit;
/**
* 副單位的值
*/
private double deputyValue;
/**
* 食材id
*/
private int purchaseFoodId;
/**
* 換算倍數
*/
private String conversionMultiple = "1";
private double conversionMultiple;
/**
* 是否删除:0正常,1删除
*/
private Boolean deletes;
private int deletes;
/**
* 不知道幹嘛的
*/
private int type;
public DeputyUnitBean() {
}
public DeputyUnitBean(String deputyUnit, double deputyValue) {
this.deputyUnit = deputyUnit;
this.deputyValue = deputyValue;
}
public static DeputyUnitBean getDeputyUnitByWareHousingUnit(WareHousingUnitBean wareHousingUnitBean){
DeputyUnitBean deputyUnitBean = new DeputyUnitBean();
deputyUnitBean.setId(wareHousingUnitBean.getId());
deputyUnitBean.setDeputyUnit(wareHousingUnitBean.getUnitName());
deputyUnitBean.setDeputyValue(wareHousingUnitBean.getUnitValue());
deputyUnitBean.setConversionMultiple(wareHousingUnitBean.getConversionMultiple());
return deputyUnitBean;
}
}
......@@ -17,5 +17,4 @@ public class FoodByCategoryResultBean {
private long sysTime;
private String errMsg;
private List<PurchaseFoodBean> data;
}
......@@ -17,10 +17,10 @@ public class NewPurchaseOrderBean {
private int restaurantId;
private double totalAmount;
private String remarks;
private List<PurchaseOrderDetailsBean> purchaseOrderDetailsVOS;
private List<NewPurchaseOrderDetailsBean> purchaseOrderDetailsVOS;
@Data
public static class PurchaseOrderDetailsBean {
public static class NewPurchaseOrderDetailsBean {
private int foodId;
private int foodQuantity;
private double foodPrice;
......
......@@ -17,7 +17,7 @@ public class OrderWareHouseBean {
private int orderId;
private PurchaseWarehousingOrder purchaseWarehousingOrder;
private List<PurchaseWarehousingOrderDetail> purchaseWarehousingOrderDetails;
private List<PurchaseWarehousingOrderDetail> purchaseWarehousingOrderDetailsTOS;
@Data
public static class PurchaseWarehousingOrder {
......@@ -36,7 +36,17 @@ public class OrderWareHouseBean {
private int foodQuantity;
private double foodPrice;
private double totalPrice;
private int type;
private String unitContent;
/**
* 主單位名稱
*/
private String basicUnitName;
/**
* 主單位內容
*/
private double basicUnitValue;
/**
* 副單位
*/
private List<WareHousingUnitBean> purchaseWarehousingUnits;
}
}
......@@ -30,6 +30,10 @@ public class PurchaseFoodBean implements Serializable {
* 分類名
*/
private String foodCategoryName;
/**
* 應該是分類的父級id
*/
private int parentId;
private String remarks;
private int quantityStarts;
private int quantityEnd;
......@@ -54,7 +58,8 @@ public class PurchaseFoodBean implements Serializable {
/**
* 分類id
*/
private int categoryId;
private int foodCategoryId;
/**
* 所屬供應商id
*/
......@@ -74,10 +79,21 @@ public class PurchaseFoodBean implements Serializable {
private InventoryAlarm inventoryAlarm;
/**
* 預警的信息,獲取詳情接口返回的不是對象,傳遞給後台時需要轉為對象
* 所以需要在這裡建這幾個字段,用於接收
*/
private int inventoryWarningId;
private boolean reviews;
private int minimumInventory;
private int shelfLife;
private int warningDays;
/**
* 庫存預警 模塊
*/
@Data
public static class InventoryAlarm {
private int id;
/**
* 是否審核 0否 1是
*/
......
......@@ -99,22 +99,24 @@ public class PurchaseOrderDetailsBean {
private String name;
//自定義字段,總價
private double totalAmount;
//入庫總價
private double warehousingAmount;
//是否被選中
private boolean isChecked = false;
/**
* 未入庫時,後台傳來的副單位集合
*/
private List<DeputyUnitBean> foodUnits;
/**
* 入庫後,後台傳來的副單位數據
*/
private List<WareHousingUnitBean> purchaseWarehousingUnits;
//用戶顯示的可操作的集合
List<WareHouseBean> wareHouseBeans;
@Data
public static class WareHouseBean {
private String title;
private String value;
// List<DeputyUnitBean> deputyUnitBeans;
/**
* 沒有入庫單號,暫時用訂單編號
*/
private String orderNo;
public WareHouseBean(String title, String value) {
this.title = title;
this.value = value;
}
}
}
}
......@@ -22,6 +22,10 @@ public class SendSupplierMsgBean {
//自定義字段,當前選中的發送方式
private int checkPosition = 0;
/**
* 是否發送
*/
private boolean isSend = false;
private List<SupplierInfoBean.SupplierContacts> supplierContacts;
}
package com.gingersoft.supply_chain.mvp.bean;
import java.util.List;
import lombok.Data;
/**
* @author 宇航.
* User: admin
* Date: 2021/1/9
* Time: 11:47
* Use:購物車操作類,避免在列表中計算
*/
@Data
public class ShoppingCartBean {
/**
* 該供應商下的食品列表
*/
List<PurchaseFoodBean> foodList;
/**
* 供應商id
*/
private int supplierId;
/**
* 供應商名字
*/
private String supplierName;
/**
* 最低採購金額
*/
private double minimumAmount;
/**
* 供應商地址
*/
private String address;
/**
* 選中的食材種類數量
*/
private int selectSpeciesNum;
/**
* 選中的食材總價
*/
private double selectFoodAmount;
/**
* 當前供應商下的食品是否全選
*/
private boolean isAllSelect;
/**
* 是否閃爍:如果採購金額低於最低採購金額限制,會滾動到指定位置並閃爍
*/
private boolean isFlashing = false;
}
package com.gingersoft.supply_chain.mvp.bean;
import java.util.List;
import lombok.Data;
/**
* @author 宇航.
* User: admin
* Date: 2021/1/6
* Time: 16:22
* Use: 庫存查詢列表實體類
*/
@Data
public class WareHouseListBean {
/**
* success : true
* sysTime : 1609921315071
* data : {"total":{"overdue":0,"aboutExpire":0,"outStock":1,"cost":1067,"count":4},"purchaseWarehousingOrderDetailsVOS":[{"id":84,"name":"阿克苏苹果🍎","cateName":"特级水果","supplierName":"盒马生鲜","basicUnitName":"1","foodPrice":89,"foodNum":3,"foodAmount":267},{"id":67,"name":"大閘蟹","cateName":"海鮮","supplierName":"測試供應商1205","basicUnitName":"1","foodPrice":100,"foodNum":3,"foodAmount":300},{"id":66,"name":"澳洲龍蝦","cateName":"海鮮","supplierName":"測試供應商1205","basicUnitName":"1","foodPrice":100,"foodNum":3,"foodAmount":300},{"id":3,"name":"香蕉","cateName":"青菜","supplierName":"人民公社供應商","basicUnitName":"3","foodPrice":2,"foodNum":20,"foodAmount":200}]}
*/
private String errMsg;
private boolean success;
private long sysTime;
private WareHousingDataBean data;
@Data
public static class WareHousingDataBean {
/**
* total : {"overdue":0,"aboutExpire":0,"outStock":1,"cost":1067,"count":4}
* purchaseWarehousingOrderDetailsVOS : [{"id":84,"name":"阿克苏苹果🍎","cateName":"特级水果","supplierName":"盒马生鲜","basicUnitName":"1","foodPrice":89,"foodNum":3,"foodAmount":267},{"id":67,"name":"大閘蟹","cateName":"海鮮","supplierName":"測試供應商1205","basicUnitName":"1","foodPrice":100,"foodNum":3,"foodAmount":300},{"id":66,"name":"澳洲龍蝦","cateName":"海鮮","supplierName":"測試供應商1205","basicUnitName":"1","foodPrice":100,"foodNum":3,"foodAmount":300},{"id":3,"name":"香蕉","cateName":"青菜","supplierName":"人民公社供應商","basicUnitName":"3","foodPrice":2,"foodNum":20,"foodAmount":200}]
*/
private TotalBean total;
private List<PurchaseWarehousingOrderDetailsVOSBean> purchaseWarehousingOrderDetailsVOS;
/**
* 數量統計
*/
@Data
public static class TotalBean {
/**
* overdue : 0
* aboutExpire : 0
* outStock : 1
* cost : 1067
* count : 4
*/
/**
* 過期食材數量
*/
private int overdue;
/**
* 即將過期食材數量
*/
private int aboutExpire;
/**
* 低庫存
*/
private int outStock;
/**
* 成本
*/
private double cost;
/**
* 本次查詢數據條數
*/
private int count;
}
/**
* 食品信息
*/
@Data
public static class PurchaseWarehousingOrderDetailsVOSBean {
/**
* id : 84
* name : 阿克苏苹果🍎
* cateName : 特级水果
* supplierName : 盒马生鲜
* basicUnitName : 1
* foodPrice : 89
* foodNum : 3
* foodAmount : 267
*/
private int id;
private String name;
private String cateName;
private String supplierName;
private String basicUnitName;
private double foodPrice;
private int foodNum;
private double foodAmount;
}
}
}
......@@ -9,7 +9,7 @@ import lombok.Data;
* User: admin
* Date: 2020/12/26
* Time: 15:46
* Use:
* Use: 入庫單實體類
*/
@Data
public class WareHousingOrderBean {
......
package com.gingersoft.supply_chain.mvp.bean;
/**
* @author 宇航.
* User: admin
* Date: 2021/1/14
* Time: 14:53
* Use:
*/
public class WareHousingUnitBean {
private int id;
/**
* 入庫單詳情id
*/
private int purchaseWarehousingOrderDetailsId;
/**
* 副單位名稱
*/
private String unitName;
/**
* 副單位值
*/
private double unitValue;
/**
* 換算倍數
*/
private double conversionMultiple;
private int brandId;
private int restaurantId;
public WareHousingUnitBean(int purchaseWarehousingOrderDetailsId, String unitName, double unitValue, double conversionMultiple) {
this.purchaseWarehousingOrderDetailsId = purchaseWarehousingOrderDetailsId;
this.unitName = unitName;
this.unitValue = unitValue;
this.conversionMultiple = conversionMultiple;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public int getPurchaseWarehousingOrderDetailsId() {
return purchaseWarehousingOrderDetailsId;
}
public void setPurchaseWarehousingOrderDetailsId(int purchaseWarehousingOrderDetailsId) {
this.purchaseWarehousingOrderDetailsId = purchaseWarehousingOrderDetailsId;
}
public String getUnitName() {
return unitName;
}
public void setUnitName(String unitName) {
this.unitName = unitName;
}
public double getUnitValue() {
return unitValue;
}
public void setUnitValue(double unitValue) {
this.unitValue = unitValue;
}
public double getConversionMultiple() {
return conversionMultiple;
}
public void setConversionMultiple(double conversionMultiple) {
this.conversionMultiple = conversionMultiple;
}
public int getBrandId() {
return brandId;
}
public void setBrandId(int brandId) {
this.brandId = brandId;
}
public int getRestaurantId() {
return restaurantId;
}
public void setRestaurantId(int restaurantId) {
this.restaurantId = restaurantId;
}
}
......@@ -18,15 +18,29 @@ public class Constant {
public static final int DELETE = 1;
public static final int NORMAL = 0;
/**
* 上傳圖片類型:食材圖
*/
public static final int UPLOAD_PIC_TYPE_FOOD = 1;
/**
* 上傳圖片類型:訂單收貨圖
*/
public static final int UPLOAD_PIC_TYPE_ORDER = 2;
public static final String GET_INFO_ERROR = "數據獲取失敗,請稍候再試";
public static final String INFO_SYNTAX_ERROR = "數據解析失敗,請聯繫開發人員";
public static final String GET_INFO_LOADING = "數據獲取中...";
public static final String NULL_INFO_ERROR = "未獲取到數據,請退出後重試";
public static final String SAVE_LOADING = "保存中...";
public static final String SAVE_SUCCESS = "保存成功";
public static final String SAVE_FAIL = "保存失敗";
public static final String SAVE_FAIL = "保存失敗,請稍後重試";
public static final String UPDATE_LOADING = "修改中...";
public static final String UPDATE_SUCCESS = "修改成功";
public static final String UPDATE_FAIL = "修改失敗,請稍後重試";
public static final String DELETE_LOADING = "刪除中...";
public static final String DELETE_SUCCESS = "刪除成功";
public static final String DELETE_FAIL = "刪除失敗,請稍後重試";
public static void addBrandId(Map<String, Object> map) {
map.put("brandId", RestaurantInfoManager.newInstance().getBrandId());
}
......
......@@ -13,7 +13,7 @@ import java.util.Observable;
* Time: 11:21
* Use: 供應鏈購物車,需要緩存用戶選中的食品
*/
public class SupplyShoppingCart extends Observable {
public class SupplyShoppingCart {
/**
* key為食品id
* value為食品信息
......@@ -36,7 +36,6 @@ public class SupplyShoppingCart extends Observable {
cartFoods = new ArrayList<>();
}
if (cartFoods.size() != goodsNumber) {
notifyObservers(cartFoods.size());
goodsNumber = cartFoods.size();
}
return cartFoods;
......
......@@ -30,6 +30,10 @@ public interface CategoryContract {
void loadCategoryInfo(List<FoodCategoryResultBean.DataBean.FoodCategoryBean> list, int hierarchy);
void refreshInfo(int hierarchy, int position);
void loadCategoryFail();
void loadCategoryError();
}
//Model层定义接口,外部只需关心Model返回的数据,无需关心内部细节,即是否使用缓存
......
......@@ -52,8 +52,6 @@ public interface FoodIngredientsContract {
void loadFail();
void setCurrentSupplierName(String name);
void setCurrentCategoryName(String name);
}
//Model层定义接口,外部只需关心Model返回的数据,无需关心内部细节,即是否使用缓存
......@@ -64,6 +62,8 @@ public interface FoodIngredientsContract {
Observable<BaseResult> updateFood(RequestBody requestBody);
Observable<BaseResult> deleteFood(int foodId);
Observable<OrderCategoryBean> getCategoryTrees(Map<String, Object> map);
Observable<FoodByCategoryResultBean> getFoodByCategory(Map<String, Object> map);
......
......@@ -29,9 +29,17 @@ public interface FoodUnitPageContract {
interface View extends IView {
void loadBasicUnitAdapter(List<BasicUnitBean> basicUnitBeans);
void addBasicUnit(BasicUnitBean basicUnitBeans);
void loadDeputyUnitAdapter(List<DeputyUnitBean> deputyUnitBeans);
void initTopBar(String title);
void setMainUnit(String content);
void callBackDeputyUnit(List<DeputyUnitBean> deputyUnitBeans);
void deleteDeputyUnit(int position);
}
//Model层定义接口,外部只需关心Model返回的数据,无需关心内部细节,即是否使用缓存
......@@ -51,5 +59,15 @@ public interface FoodUnitPageContract {
* @return
*/
Observable<BaseResult> updateDeputyUnitList(RequestBody requestBody);
/**
* 修改副單位
*/
Observable<BaseResult> updateDeputyUnit(RequestBody requestBody);
/**
* 添加下面快捷輸入的單位
* @return
*/
Observable<BaseResult> addBasicUnit(RequestBody requestBody);
}
}
......@@ -5,6 +5,7 @@ import com.jess.arms.mvp.IModel;
import com.jess.arms.mvp.IView;
import java.util.List;
import java.util.Map;
import io.reactivex.Observable;
import okhttp3.MultipartBody;
......@@ -30,16 +31,25 @@ public interface NewFoodIngredientsContract {
void uploadPicSuccess(List<String> picUrl);
void saveFoodInfoSuccess();
/**
* 保存成功需要將供應商名稱和分類名稱傳回上一個頁面,用於刷新頁面數據
*
* @param supplierName 供應商名稱
* @param categoryName 分類名稱
*/
void updateFoodInfoSuccess(String supplierName, String categoryName);
void initAdapter();
}
//Model层定义接口,外部只需关心Model返回的数据,无需关心内部细节,即是否使用缓存
interface Model extends IModel {
Observable<BaseResult> upLoadPic(List<MultipartBody.Part> parts);
Observable<BaseResult> upLoadPic(List<MultipartBody.Part> parts, Map<String, Object> map);
Observable<BaseResult> addFood(RequestBody requestBody);
Observable<BaseResult> updateFood(RequestBody requestBody);
Observable<BaseResult> getFoodIngredientsDetails(Map<String, Object> map);
}
}
......@@ -3,6 +3,7 @@ package com.gingersoft.supply_chain.mvp.contract;
import com.gingersoft.gsa.cloud.common.bean.BaseResult;
import com.gingersoft.supply_chain.mvp.bean.ConfirmOrderBean;
import com.gingersoft.supply_chain.mvp.bean.PurchaseFoodBean;
import com.gingersoft.supply_chain.mvp.bean.ShoppingCartBean;
import com.jess.arms.mvp.IModel;
import com.jess.arms.mvp.IView;
......@@ -27,11 +28,18 @@ import okhttp3.RequestBody;
public interface ShoppingCatContract {
//对于经常使用的关于UI的方法可以定义到IView中,如显示隐藏进度条,和显示文字消息
interface View extends IView {
void loadAdapter(List<List<PurchaseFoodBean>> supplierFoods);
void loadAdapter(List<ShoppingCartBean> shoppingCartBeans);
void setTotalInfo(int typeTotal, double totalPrice);
void addOrderSuccess(List<ConfirmOrderBean.PurchaseOrder> purchaseOrders);
/**
* 刷新列表數據
* @param position 傳-1 刷新所有,否則,刷新指定item
*/
void notifyAdapter(int position);
}
//Model层定义接口,外部只需关心Model返回的数据,无需关心内部细节,即是否使用缓存
......
package com.gingersoft.supply_chain.mvp.contract;
import com.gingersoft.gsa.cloud.common.bean.BaseResult;
import com.gingersoft.supply_chain.mvp.bean.WareHouseListBean;
import com.jess.arms.mvp.IView;
import com.jess.arms.mvp.IModel;
import java.util.List;
import java.util.Map;
import io.reactivex.Observable;
/**
* ================================================
* Description:
* <p>
* Created by MVPArmsTemplate on 01/06/2021 15:37
* <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>
* ================================================
*/
public interface WareHouseListContract {
//对于经常使用的关于UI的方法可以定义到IView中,如显示隐藏进度条,和显示文字消息
interface View extends IView {
void loadWarehousingInfo(WareHouseListBean.WareHousingDataBean data);
void loadListInfo(List<WareHouseListBean.WareHousingDataBean.PurchaseWarehousingOrderDetailsVOSBean> purchaseWarehousingOrderDetailsVos);
void finishLoad();
void loadFail();
}
//Model层定义接口,外部只需关心Model返回的数据,无需关心内部细节,即是否使用缓存
interface Model extends IModel {
Observable<WareHouseListBean> getWarehousing(Map<String, Object> map);
}
}
package com.gingersoft.supply_chain.mvp.contract;
import com.jess.arms.mvp.IView;
import com.jess.arms.mvp.IModel;
/**
* ================================================
* Description:
* <p>
* Created by MVPArmsTemplate on 01/12/2021 14:28
* <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>
* ================================================
*/
public interface WareHousingDetailsContract {
//对于经常使用的关于UI的方法可以定义到IView中,如显示隐藏进度条,和显示文字消息
interface View extends IView {
}
//Model层定义接口,外部只需关心Model返回的数据,无需关心内部细节,即是否使用缓存
interface Model extends IModel {
}
}
......@@ -68,6 +68,11 @@ public class FoodIngredientsModel extends BaseModel implements FoodIngredientsCo
}
@Override
public Observable<BaseResult> deleteFood(int foodId) {
return mRepositoryManager.obtainRetrofitService(SupplierServer.class).deleteFood(foodId);
}
@Override
public Observable<OrderCategoryBean> getCategoryTrees(Map<String, Object> map) {
return mRepositoryManager.obtainRetrofitService(SupplierServer.class).getCategoryTrees(map);
}
......
......@@ -58,4 +58,14 @@ public class FoodUnitPageModel extends BaseModel implements FoodUnitPageContract
public Observable<BaseResult> updateDeputyUnitList(RequestBody requestBody) {
return mRepositoryManager.obtainRetrofitService(SupplierServer.class).updateDeputyUnitList(requestBody);
}
@Override
public Observable<BaseResult> updateDeputyUnit(RequestBody requestBody) {
return mRepositoryManager.obtainRetrofitService(SupplierServer.class).updateDeputyUnit(requestBody);
}
@Override
public Observable<BaseResult> addBasicUnit(RequestBody requestBody) {
return mRepositoryManager.obtainRetrofitService(SupplierServer.class).addDeputyUnitInput(requestBody);
}
}
\ No newline at end of file
......@@ -11,6 +11,7 @@ import com.jess.arms.integration.IRepositoryManager;
import com.jess.arms.mvp.BaseModel;
import java.util.List;
import java.util.Map;
import javax.inject.Inject;
......@@ -51,8 +52,8 @@ public class NewFoodIngredientsModel extends BaseModel implements NewFoodIngredi
}
@Override
public Observable<BaseResult> upLoadPic(List<MultipartBody.Part> parts) {
return mRepositoryManager.obtainRetrofitService(SupplierServer.class).upLoadPic(parts);
public Observable<BaseResult> upLoadPic(List<MultipartBody.Part> parts, Map<String, Object> map) {
return mRepositoryManager.obtainRetrofitService(SupplierServer.class).upLoadPic(parts, map);
}
@Override
......@@ -65,5 +66,8 @@ public class NewFoodIngredientsModel extends BaseModel implements NewFoodIngredi
return mRepositoryManager.obtainRetrofitService(SupplierServer.class).updateFood(requestBody);
}
@Override
public Observable<BaseResult> getFoodIngredientsDetails(Map<String, Object> map) {
return mRepositoryManager.obtainRetrofitService(SupplierServer.class).getFoodIngredientsDetails(map);
}
}
\ No newline at end of file
package com.gingersoft.supply_chain.mvp.model;
import android.app.Application;
import com.gingersoft.gsa.cloud.common.bean.BaseResult;
import com.gingersoft.supply_chain.mvp.bean.WareHouseListBean;
import com.gingersoft.supply_chain.mvp.server.SupplierServer;
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 com.gingersoft.supply_chain.mvp.contract.WareHouseListContract;
import java.util.Map;
import io.reactivex.Observable;
/**
* ================================================
* Description:
* <p>
* Created by MVPArmsTemplate on 01/06/2021 15:37
* <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 WareHouseListModel extends BaseModel implements WareHouseListContract.Model {
@Inject
Gson mGson;
@Inject
Application mApplication;
@Inject
public WareHouseListModel(IRepositoryManager repositoryManager) {
super(repositoryManager);
}
@Override
public void onDestroy() {
super.onDestroy();
this.mGson = null;
this.mApplication = null;
}
@Override
public Observable<WareHouseListBean> getWarehousing(Map<String, Object> map) {
return mRepositoryManager.obtainRetrofitService(SupplierServer.class).getWarehousing(map);
}
}
\ No newline at end of file
package com.gingersoft.supply_chain.mvp.model;
import android.app.Application;
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 com.gingersoft.supply_chain.mvp.contract.WareHousingDetailsContract;
/**
* ================================================
* Description:
* <p>
* Created by MVPArmsTemplate on 01/12/2021 14:28
* <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 WareHousingDetailsModel extends BaseModel implements WareHousingDetailsContract.Model {
@Inject
Gson mGson;
@Inject
Application mApplication;
@Inject
public WareHousingDetailsModel(IRepositoryManager repositoryManager) {
super(repositoryManager);
}
@Override
public void onDestroy() {
super.onDestroy();
this.mGson = null;
this.mApplication = null;
}
}
\ No newline at end of file
......@@ -76,6 +76,13 @@ public class CategoryPresenter extends BasePresenter<CategoryContract.Model, Cat
this.mApplication = null;
}
/**
* 根據父分類id獲取子分類
*
* @param name
* @param parentId
* @param hierarchy
*/
public void getFoodCategoryList(String name, int parentId, int hierarchy) {
Map<String, Object> map = new HashMap<>(6);
map.put("pageSize", 1000);
......@@ -149,6 +156,9 @@ public class CategoryPresenter extends BasePresenter<CategoryContract.Model, Cat
super.onError(t);
mRootView.showMessage("獲取" + hierarchy + "級分類失敗");
mRootView.hideLoading();
if (hierarchy == primaryCategoryTag) {
mRootView.loadCategoryError();
}
}
});
......@@ -163,6 +173,13 @@ public class CategoryPresenter extends BasePresenter<CategoryContract.Model, Cat
}
}
/**
* 新增分類
*
* @param parentId 父類id
* @param categoryName 分類名字
* @param hierarchy 級別:是第幾級分類
*/
public void addCategory(int parentId, String categoryName, int hierarchy) {
FoodCategoryResultBean.DataBean.FoodCategoryBean foodCategoryBean = toFoodCategoryBean(parentId, categoryName, 0);
RequestBody requestBody = RequestBody.create(MediaType.parse("application/json"), GsonUtils.GsonString(foodCategoryBean));
......@@ -214,7 +231,7 @@ public class CategoryPresenter extends BasePresenter<CategoryContract.Model, Cat
RequestBody requestBody = RequestBody.create(MediaType.parse("application/json"), GsonUtils.GsonString(foodCategoryBean));
mModel.updateFoodCategory(requestBody)
.subscribeOn(Schedulers.io())
.doOnSubscribe(disposable -> mRootView.showLoading("修改中..."))
.doOnSubscribe(disposable -> mRootView.showLoading(foodCategoryBean.getDeletes() == Constant.DELETE ? Constant.DELETE_LOADING : Constant.UPDATE_LOADING))
.subscribeOn(AndroidSchedulers.mainThread())
.observeOn(AndroidSchedulers.mainThread())
.doAfterTerminate(() -> mRootView.hideLoading())
......@@ -227,7 +244,7 @@ public class CategoryPresenter extends BasePresenter<CategoryContract.Model, Cat
} else if (TextUtil.isNotEmptyOrNullOrUndefined(info.getErrMsg())) {
mRootView.showMessage(info.getErrMsg());
} else {
mRootView.showMessage("修改失敗");
mRootView.showMessage(foodCategoryBean.getDeletes() == Constant.DELETE ? Constant.DELETE_FAIL : Constant.UPDATE_FAIL);
}
}
});
......
......@@ -80,7 +80,7 @@ public class ConfirmOrderPresenter extends BasePresenter<ConfirmOrderContract.Mo
ConfirmOrderBean confirmOrderBean = listMap.get(cartFood.getSupplierId());
if (confirmOrderBean == null) {
confirmOrderBean = new ConfirmOrderBean();
confirmOrderBean.setPurchaseOrder(ConfirmOrderBean.conversionPurchaseOrder(cartFood));
// confirmOrderBean.setPurchaseOrder(ConfirmOrderBean.conversionPurchaseOrder(cartFood));
List<ConfirmOrderBean.PurchaseOrderDetails> purchaseOrderDetails = new ArrayList<>();
purchaseOrderDetails.add(ConfirmOrderBean.conversionPurchaseOrderDetails(cartFood));
......
......@@ -408,7 +408,7 @@ public class NewSupplierPresenter extends BasePresenter<NewSupplierContract.Mode
supplierInfoBean.setMinimumAmount(Double.parseDouble(minimumAmount));
}
if (TextUtil.isEmptyOrNullOrUndefined(supplierInfoBean.getSupplierNo())) {
supplierInfoBean.setSupplierNo("GYS001");
supplierInfoBean.setSupplierNo(null);
}
if (TextUtil.isEmptyOrNullOrUndefined(supplierInfoBean.getSupplierName())) {
mRootView.showMessage("請輸入供應商名稱");
......
package com.gingersoft.supply_chain.mvp.presenter;
import android.app.Application;
import android.text.InputFilter;
import android.view.inputmethod.EditorInfo;
import com.gingersoft.gsa.cloud.ui.adapter.bean.InfoMultiBean;
import com.gingersoft.gsa.cloud.ui.adapter.bean.MultiInputSelectBean;
import com.gingersoft.supply_chain.mvp.bean.FoodPackingSpecificationBean;
import com.gingersoft.supply_chain.mvp.bean.MeasurementUnitBean;
import com.gingersoft.supply_chain.mvp.contract.PackageSpecificationContract;
import com.gingersoft.supply_chain.mvp.ui.fragment.food.MeasurementUnitFragment;
import com.jess.arms.di.scope.FragmentScope;
import com.jess.arms.http.imageloader.ImageLoader;
import com.jess.arms.integration.AppManager;
......@@ -22,9 +18,6 @@ import javax.inject.Inject;
import me.jessyan.rxerrorhandler.core.RxErrorHandler;
import static com.gingersoft.supply_chain.mvp.ui.fragment.food.PackageSpecificationFragment.OrderingUnitRequestCode;
import static com.gingersoft.supply_chain.mvp.ui.fragment.food.PackageSpecificationFragment.ReceivingUnitRequestCode;
/**
* ================================================
......@@ -65,20 +58,20 @@ public class PackageSpecificationPresenter extends BasePresenter<PackageSpecific
List<InfoMultiBean> infoMultiBeans = new ArrayList<>();
infoMultiBeans.add(new InfoMultiBean(InfoMultiBean.ITEM_TYPE_LINE));
infoMultiBeans.add(new InfoMultiBean(InfoMultiBean.ITEM_TYPE_TITLE, "包裝規格"));
infoMultiBeans.add(new MultiInputSelectBean(InfoMultiBean.ITEM_MULTIPLE_INPUT_SELECT, "訂貨單位", "最小數量", "最大數量", "單位", OrderingUnitRequestCode, MeasurementUnitFragment.newInstance(true), new InputFilter[]{new InputFilter.LengthFilter(11)}, EditorInfo.TYPE_CLASS_NUMBER));
// infoMultiBeans.add(new MultiInputSelectBean(InfoMultiBean.ITEM_MULTIPLE_INPUT_SELECT, "訂貨單位", "最小數量", "最大數量", "單位", OrderingUnitRequestCode, MeasurementUnitFragment.class, new InputFilter[]{new InputFilter.LengthFilter(11)}, EditorInfo.TYPE_CLASS_NUMBER));
infoMultiBeans.add(new InfoMultiBean(InfoMultiBean.ITEM_TYPE_LINE));
infoMultiBeans.add(new MultiInputSelectBean(InfoMultiBean.ITEM_MULTIPLE_INPUT_SELECT, "收貨單位", "最小數量", "最大數量", "單位", ReceivingUnitRequestCode, MeasurementUnitFragment.newInstance(true), new InputFilter[]{new InputFilter.LengthFilter(11)}, EditorInfo.TYPE_CLASS_NUMBER));
// infoMultiBeans.add(new MultiInputSelectBean(InfoMultiBean.ITEM_MULTIPLE_INPUT_SELECT, "收貨單位", "最小數量", "最大數量", "單位", ReceivingUnitRequestCode, MeasurementUnitFragment.class, new InputFilter[]{new InputFilter.LengthFilter(11)}, EditorInfo.TYPE_CLASS_NUMBER));
return infoMultiBeans;
}
public void setOrderingUnit(List<InfoMultiBean> infoMultiBeans, MeasurementUnitBean.DataBean.Unit unit) {
this.orderingUnit = unit;
infoMultiBeans.get(orderingUnitIndex).setShowValueThird(unit.getUnitContent());
// infoMultiBeans.get(orderingUnitIndex).setShowValueThird(unit.getUnitContent());
}
public void setReceivingUnit(List<InfoMultiBean> infoMultiBeans, MeasurementUnitBean.DataBean.Unit unit) {
this.receivingUnit = unit;
infoMultiBeans.get(receivingUnitIndex).setShowValueThird(unit.getUnitContent());
// infoMultiBeans.get(receivingUnitIndex).setShowValueThird(unit.getUnitContent());
}
public List<FoodPackingSpecificationBean> getFoodPackingSpecifications(List<InfoMultiBean> infoMultiBeans) {
......@@ -87,34 +80,34 @@ public class PackageSpecificationPresenter extends BasePresenter<PackageSpecific
FoodPackingSpecificationBean orderingUnitBean = new FoodPackingSpecificationBean();
orderingUnitBean.setFoodUnitId(orderingUnit.getId());
// orderingUnitBean.setType(FoodPackingSpecificationBean.ORDERING_TYPE);
orderingUnitBean.setQuantityStarts(Double.parseDouble(getOrderingMinNum(infoMultiBeans)));
orderingUnitBean.setQuantityEnd(Double.parseDouble(getOrderingMaxNum(infoMultiBeans)));
orderingUnitBean.setTypeName(infoMultiBeans.get(orderingUnitIndex).getShowValueThird());
// orderingUnitBean.setQuantityStarts(Double.parseDouble(getOrderingMinNum(infoMultiBeans)));
// orderingUnitBean.setQuantityEnd(Double.parseDouble(getOrderingMaxNum(infoMultiBeans)));
// orderingUnitBean.setTypeName(infoMultiBeans.get(orderingUnitIndex).getShowValueThird());
foodPackingSpecificationBeans.add(orderingUnitBean);
FoodPackingSpecificationBean receivingUnitBean = new FoodPackingSpecificationBean();
receivingUnitBean.setFoodUnitId(receivingUnit.getId());
// receivingUnitBean.setType(FoodPackingSpecificationBean.RECEIVING_TYPE);
receivingUnitBean.setQuantityStarts(Double.parseDouble(getReceivingMinNum(infoMultiBeans)));
receivingUnitBean.setQuantityEnd(Double.parseDouble(getReceivingMaxNum(infoMultiBeans)));
receivingUnitBean.setTypeName(infoMultiBeans.get(receivingUnitIndex).getShowValueThird());
// receivingUnitBean.setQuantityStarts(Double.parseDouble(getReceivingMinNum(infoMultiBeans)));
// receivingUnitBean.setQuantityEnd(Double.parseDouble(getReceivingMaxNum(infoMultiBeans)));
// receivingUnitBean.setTypeName(infoMultiBeans.get(receivingUnitIndex).getShowValueThird());
foodPackingSpecificationBeans.add(receivingUnitBean);
return foodPackingSpecificationBeans;
}
public String getOrderingMinNum(List<InfoMultiBean> infoMultiBeans) {
return infoMultiBeans.get(orderingUnitIndex).getShowValue();
}
public String getOrderingMaxNum(List<InfoMultiBean> infoMultiBeans) {
return infoMultiBeans.get(orderingUnitIndex).getShowValueSecond();
}
public String getReceivingMinNum(List<InfoMultiBean> infoMultiBeans) {
return infoMultiBeans.get(receivingUnitIndex).getShowValue();
}
public String getReceivingMaxNum(List<InfoMultiBean> infoMultiBeans) {
return infoMultiBeans.get(receivingUnitIndex).getShowValueSecond();
}
// public String getOrderingMinNum(List<InfoMultiBean> infoMultiBeans) {
// return infoMultiBeans.get(orderingUnitIndex).getShowValue();
// }
//
// public String getOrderingMaxNum(List<InfoMultiBean> infoMultiBeans) {
// return infoMultiBeans.get(orderingUnitIndex).getShowValueSecond();
// }
// public String getReceivingMinNum(List<InfoMultiBean> infoMultiBeans) {
// return infoMultiBeans.get(receivingUnitIndex).getShowValue();
// }
//
// public String getReceivingMaxNum(List<InfoMultiBean> infoMultiBeans) {
// return infoMultiBeans.get(receivingUnitIndex).getShowValueSecond();
// }
}
......@@ -15,7 +15,9 @@ import com.jess.arms.integration.AppManager;
import com.jess.arms.mvp.BasePresenter;
import com.jess.arms.utils.RxLifecycleUtils;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.inject.Inject;
......@@ -45,9 +47,12 @@ public class PurchaseListPresenter extends BasePresenter<PurchaseListContract.Mo
@Inject
AppManager mAppManager;
private List<OrderBean> orderList;
@Inject
public PurchaseListPresenter(PurchaseListContract.Model model, PurchaseListContract.View rootView) {
super(model, rootView);
orderList = new ArrayList<>();
}
@Override
......@@ -64,7 +69,6 @@ public class PurchaseListPresenter extends BasePresenter<PurchaseListContract.Mo
Constant.addRestaurantId(map);
Constant.addBrandId(map);
Constant.addPageSize(map);
if (TextUtil.isNotEmptyOrNullOrUndefined(orderNo)) {
map.put("orderNo", orderNo);
}
......@@ -82,12 +86,12 @@ public class PurchaseListPresenter extends BasePresenter<PurchaseListContract.Mo
.subscribe(new ErrorHandleSubscriber<PurchaseOrderResultBean>(mErrorHandler) {
@Override
public void onNext(@NonNull PurchaseOrderResultBean info) {
if (info.isSuccess() && info.getData() != null) {
if (info.getData().getCount() > 0) {
mRootView.loadOrderList(info.getData().getList());
} else if (pageIndex <= 0) {
mRootView.loadFail();
if (info.isSuccess()) {
if (pageIndex == 0) {
orderList.clear();
}
orderList.addAll(info.getData().getList());
mRootView.loadOrderList(orderList);
} else if (TextUtil.isNotEmptyOrNullOrUndefined(info.getErrMsg())) {
mRootView.showMessage(info.getErrMsg());
mRootView.loadFail();
......
......@@ -221,6 +221,11 @@ public class SendMsgPresenter extends BasePresenter<SendMsgContract.Model, SendM
return currentSelectedSupplier;
}
public void setSendSuccess(){
SendSupplierMsgBean sendSupplierMsgBean = sendSupplierMsgBeans.get(currentSelectedSupplier);
sendSupplierMsgBean.setSend(true);
}
/**
* 獲取供應商聯繫方式
*
......
package com.gingersoft.supply_chain.mvp.presenter;
import android.app.Application;
import android.util.Log;
import com.gingersoft.gsa.cloud.common.bean.BaseResult;
import com.gingersoft.gsa.cloud.common.utils.CollectionUtils;
import com.gingersoft.gsa.cloud.common.utils.other.TextUtil;
import com.gingersoft.supply_chain.mvp.bean.SupplierResultBean;
import com.gingersoft.supply_chain.mvp.bean.WareHouseListBean;
import com.gingersoft.supply_chain.mvp.content.Constant;
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 io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.schedulers.Schedulers;
import me.jessyan.rxerrorhandler.core.RxErrorHandler;
import me.jessyan.rxerrorhandler.handler.ErrorHandleSubscriber;
import javax.inject.Inject;
import com.gingersoft.supply_chain.mvp.contract.WareHouseListContract;
import com.jess.arms.utils.RxLifecycleUtils;
import org.w3c.dom.Text;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* ================================================
* Description:
* <p>
* Created by MVPArmsTemplate on 01/06/2021 15:37
* <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 WareHouseListPresenter extends BasePresenter<WareHouseListContract.Model, WareHouseListContract.View> {
@Inject
RxErrorHandler mErrorHandler;
@Inject
Application mApplication;
@Inject
ImageLoader mImageLoader;
@Inject
AppManager mAppManager;
public final int SORT_UNIT_PRICE = 1;
public final int SORT_WAREHOUSING_NUM = 2;
public final int SORT_TOTAL_AMOUNT = 3;
private WareHouseListBean.WareHousingDataBean data;
@Inject
public WareHouseListPresenter(WareHouseListContract.Model model, WareHouseListContract.View rootView) {
super(model, rootView);
}
@Override
public void onDestroy() {
super.onDestroy();
this.mErrorHandler = null;
this.mAppManager = null;
this.mImageLoader = null;
this.mApplication = null;
}
/**
* 跟進類型排序
*
* @param type 類型
* @param isAscending 升序或降序
*/
public void sortByType(int type, boolean isAscending) {
if (data == null || data.getPurchaseWarehousingOrderDetailsVOS() == null) {
return;
}
if (type == SORT_UNIT_PRICE) {
Collections.sort(data.getPurchaseWarehousingOrderDetailsVOS(), (o1, o2) -> {
if (isAscending) {
return (int) (o1.getFoodPrice() - o2.getFoodPrice());
} else {
return (int) (o2.getFoodPrice() - o1.getFoodPrice());
}
});
} else if (type == SORT_WAREHOUSING_NUM) {
//庫存數量
Collections.sort(data.getPurchaseWarehousingOrderDetailsVOS(), (o1, o2) -> {
if (isAscending) {
return o1.getFoodNum() - o2.getFoodNum();
} else {
return o2.getFoodNum() - o1.getFoodNum();
}
});
} else if (type == SORT_TOTAL_AMOUNT) {
//總價
Collections.sort(data.getPurchaseWarehousingOrderDetailsVOS(), (o1, o2) -> {
if (isAscending) {
return (int) (o1.getFoodAmount() - o2.getFoodAmount());
} else {
return (int) (o2.getFoodAmount() - o1.getFoodAmount());
}
});
}
mRootView.loadListInfo(data.getPurchaseWarehousingOrderDetailsVOS());
}
public void getWarehousing(int pageIndex, String foodName) {
Map<String, Object> map = new HashMap<>(5);
if (TextUtil.isNotEmptyOrNullOrUndefined(foodName)) {
map.put("name", foodName);
}
Constant.addRestaurantId(map);
Constant.addBrandId(map);
Constant.addPageSize(map);
map.put("pageIndex", pageIndex * Constant.PAGE_SIZE);
mModel.getWarehousing(map)
.subscribeOn(Schedulers.io())
.doOnSubscribe(disposable -> mRootView.showLoading(Constant.GET_INFO_LOADING))
.subscribeOn(AndroidSchedulers.mainThread())
.observeOn(AndroidSchedulers.mainThread())
.doAfterTerminate(() -> mRootView.hideLoading())
.compose(RxLifecycleUtils.bindToLifecycle(mRootView))
.subscribe(new ErrorHandleSubscriber<WareHouseListBean>(mErrorHandler) {
@Override
public void onNext(WareHouseListBean wareHouseListBean) {
if (wareHouseListBean.isSuccess()) {
mRootView.finishLoad();
if (data == null || pageIndex == 0) {
data = new WareHouseListBean.WareHousingDataBean();
data.setPurchaseWarehousingOrderDetailsVOS(new ArrayList<>());
}
data.setTotal(wareHouseListBean.getData().getTotal());
data.getPurchaseWarehousingOrderDetailsVOS().addAll(wareHouseListBean.getData().getPurchaseWarehousingOrderDetailsVOS());
mRootView.loadWarehousingInfo(data);
} else if (TextUtil.isNotEmptyOrNullOrUndefined(wareHouseListBean.getErrMsg())) {
mRootView.showMessage(wareHouseListBean.getErrMsg());
mRootView.loadFail();
} else {
mRootView.showMessage(Constant.GET_INFO_ERROR);
mRootView.loadFail();
}
}
@Override
public void onError(Throwable t) {
super.onError(t);
mRootView.loadFail();
}
});
}
}
package com.gingersoft.supply_chain.mvp.presenter;
import android.app.Application;
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.supply_chain.mvp.contract.WareHousingDetailsContract;
/**
* ================================================
* Description:
* <p>
* Created by MVPArmsTemplate on 01/12/2021 14:28
* <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 WareHousingDetailsPresenter extends BasePresenter<WareHousingDetailsContract.Model, WareHousingDetailsContract.View> {
@Inject
RxErrorHandler mErrorHandler;
@Inject
Application mApplication;
@Inject
ImageLoader mImageLoader;
@Inject
AppManager mAppManager;
@Inject
public WareHousingDetailsPresenter(WareHousingDetailsContract.Model model, WareHousingDetailsContract.View rootView) {
super(model, rootView);
}
@Override
public void onDestroy() {
super.onDestroy();
this.mErrorHandler = null;
this.mAppManager = null;
this.mImageLoader = null;
this.mApplication = null;
}
}
......@@ -8,6 +8,7 @@ import com.gingersoft.supply_chain.mvp.bean.MeasurementUnitBean;
import com.gingersoft.supply_chain.mvp.bean.OrderCategoryBean;
import com.gingersoft.supply_chain.mvp.bean.PurchaseOrderResultBean;
import com.gingersoft.supply_chain.mvp.bean.SupplierResultBean;
import com.gingersoft.supply_chain.mvp.bean.WareHouseListBean;
import java.util.List;
import java.util.Map;
......@@ -24,6 +25,7 @@ import retrofit2.http.Headers;
import retrofit2.http.Multipart;
import retrofit2.http.POST;
import retrofit2.http.Part;
import retrofit2.http.PartMap;
import retrofit2.http.Query;
import retrofit2.http.QueryMap;
import retrofit2.http.QueryName;
......@@ -159,7 +161,7 @@ public interface SupplierServer {
@Headers({"Domain-Name: ricepon-purchase"})
@Multipart
@POST("purchaseFood/image/upload" + RetrofitUrlManager.IDENTIFICATION_PATH_SIZE + 2)
Observable<BaseResult> upLoadPic(@Part List<MultipartBody.Part> parts);
Observable<BaseResult> upLoadPic(@Part List<MultipartBody.Part> parts, @PartMap Map<String, Object> map);
/**
* 新增食品
......@@ -182,6 +184,16 @@ public interface SupplierServer {
Observable<FoodListInfoBean> getFoodIngredientsData(@QueryMap Map<String, Object> map);
/**
* 根據食材id獲取食材詳情
*
* @param map
* @return
*/
@Headers({"Domain-Name: ricepon-purchase"})
@GET("purchaseFood/get" + RetrofitUrlManager.IDENTIFICATION_PATH_SIZE + 2)
Observable<BaseResult> getFoodIngredientsDetails(@QueryMap Map<String, Object> map);
/**
* 和上面的是同一個接口,返回數據不一致
*
* @param map
......@@ -202,6 +214,14 @@ public interface SupplierServer {
Observable<BaseResult> updateFood(@Body RequestBody requestBody);
/**
* 刪除食材
*/
@FormUrlEncoded
@Headers({"Domain-Name: ricepon-purchase"})
@POST("purchaseFood/delete" + RetrofitUrlManager.IDENTIFICATION_PATH_SIZE + 2)
Observable<BaseResult> deleteFood(@Field("id") int id);
/**
* 獲取採購單列表
*
* @param map
......@@ -289,7 +309,7 @@ public interface SupplierServer {
Observable<BaseResult> addWarehouse(@Body RequestBody requestBody);
/**
* 獲取訂單詳情
* 獲取訂單列表
*
* @return
*/
......@@ -305,12 +325,32 @@ public interface SupplierServer {
@GET("basicUnitType/list" + RetrofitUrlManager.IDENTIFICATION_PATH_SIZE + 2)
Observable<BaseResult> getDeputyUnitList(@Query("brandId") int brandId, @Query("restaurantId") int restaurantId);
/**
* 批量修改副單位
*/
@Headers({"Domain-Name: ricepon-purchase"})
@POST("basicUnitType/set" + RetrofitUrlManager.IDENTIFICATION_PATH_SIZE + 2)
@POST("foodUnit/set" + RetrofitUrlManager.IDENTIFICATION_PATH_SIZE + 2)
Observable<BaseResult> updateDeputyUnitList(@Body RequestBody requestBody);
/**
* 批量修改副單位
*/
@Headers({"Domain-Name: ricepon-purchase"})
@POST("foodUnit/update" + RetrofitUrlManager.IDENTIFICATION_PATH_SIZE + 2)
Observable<BaseResult> updateDeputyUnit(@Body RequestBody requestBody);
/**
* 查詢庫存列表
*/
@Headers({"Domain-Name: ricepon-purchase"})
@GET("purchaseWarehousingOrder/details/list" + RetrofitUrlManager.IDENTIFICATION_PATH_SIZE + 2)
Observable<WareHouseListBean> getWarehousing(@QueryMap Map<String, Object> map);
/**
* 添加副單位快捷輸入
*/
@Headers({"Domain-Name: ricepon-purchase"})
@POST("basicUnitType/add" + RetrofitUrlManager.IDENTIFICATION_PATH_SIZE + 2)
Observable<BaseResult> addDeputyUnitInput(@Body RequestBody requestBody);
}
......@@ -2,6 +2,10 @@ package com.gingersoft.supply_chain.mvp.ui.activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
import android.widget.EditText;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
......@@ -12,24 +16,19 @@ import com.gingersoft.supply_chain.di.component.DaggerSupplyChainMainComponent;
import com.gingersoft.supply_chain.mvp.contract.SupplyChainMainContract;
import com.gingersoft.supply_chain.mvp.presenter.SupplyChainMainPresenter;
import com.gingersoft.supply_chain.mvp.ui.fragment.FunctionListFragment;
import com.gingersoft.supply_chain.mvp.ui.fragment.food.FoodUnitPageFragment;
import com.gingersoft.supply_chain.mvp.utils.NotDispatchListener;
import com.jess.arms.base.BaseFragmentActivity;
import com.jess.arms.di.component.AppComponent;
import com.jess.arms.utils.ArmsUtils;
import com.jess.arms.utils.DeviceUtils;
import com.xuexiang.rxutil2.rxjava.RxJavaUtils;
import static com.jess.arms.utils.Preconditions.checkNotNull;
/**
* ================================================
* Description:
* <p>
* Created by MVPArmsTemplate on 11/19/2020 14:45
* <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>
* ================================================
* Description:供應鏈首頁
*/
public class SupplyChainMainActivity extends BaseFragmentActivity<SupplyChainMainPresenter> implements SupplyChainMainContract.View {
......@@ -54,6 +53,46 @@ public class SupplyChainMainActivity extends BaseFragmentActivity<SupplyChainMai
}
@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
if(getTopFragment() instanceof NotDispatchListener){
return super.dispatchTouchEvent(ev);
}
if (ev.getAction() == MotionEvent.ACTION_DOWN) {
// 获得当前得到焦点的View,一般情况下就是EditText(特殊情况就是轨迹求或者实体案件会移动焦点)
View v = getCurrentFocus();
if (isShouldHideInput(v, ev)) {
if(v instanceof EditText){
//不然不會觸發焦點監聽事件
v.clearFocus();
}
DeviceUtils.hideSoftKeyboard(mContext, getWindow().getDecorView());
}
}
return super.dispatchTouchEvent(ev);
}
/**
* 根据EditText所在坐标和用户点击的坐标相对比,来判断是否隐藏键盘,因为当用户点击EditText时没必要隐藏
*
* @param v
* @param event
* @return
*/
private boolean isShouldHideInput(View v, MotionEvent event) {
if ((v instanceof EditText)) {
int[] l = {0, 0};
v.getLocationInWindow(l);
int left = l[0], top = l[1], bottom = top + v.getHeight(), right = left
+ v.getWidth();
// 点击EditText的事件,忽略它。
return event.getX() <= left || event.getX() >= right
|| event.getY() <= top || event.getY() >= bottom;
}
// 如果焦点不是EditText则忽略,这个发生在视图刚绘制完,第一个焦点不在EditView上,和用户用轨迹球选择其他的焦点
return false;
}
@Override
public void initIntent() {
}
......
......@@ -37,10 +37,7 @@ public class DeputyUnitAdapter extends BaseQuickAdapter<DeputyUnitBean, BaseView
EditText edConversionMultiple = viewHolder.getView(R.id.ed_deputy_unit_conversion_multiple);
viewHolder.setText(R.id.tv_deputy_unit_title, "副單位" + (viewHolder.getAdapterPosition() + 1));
viewHolder.setText(R.id.ed_deputy_unit_name, item.getDeputyUnit());
viewHolder.setText(R.id.ed_deputy_unit_conversion_multiple, item.getConversionMultiple());
if (TextUtil.isEmptyOrNullOrUndefined(item.getDeputyUnit())) {
edDeputyUnitName.requestFocus();
}
viewHolder.setText(R.id.ed_deputy_unit_conversion_multiple, item.getConversionMultiple() + "");
TextWatcher deputyUnitNameWatcher = new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
......@@ -73,10 +70,15 @@ public class DeputyUnitAdapter extends BaseQuickAdapter<DeputyUnitBean, BaseView
@Override
public void afterTextChanged(Editable s) {
DeputyUnitBean deputyUnitBean = getData().get(viewHolder.getAdapterPosition());
deputyUnitBean.setConversionMultiple(s + "");
if (TextUtil.isNotEmptyOrNullOrUndefined(s + "")) {
deputyUnitBean.setConversionMultiple(Double.parseDouble(s + ""));
}
}
};
setFocusChangeListener(edConversionMultiple, conversionMultipleWatcher);
if (TextUtil.isEmptyOrNullOrUndefined(item.getDeputyUnit())) {
edDeputyUnitName.requestFocus();
}
}
private void setFocusChangeListener(EditText edDeputyUnitName, TextWatcher deputyUnitNameWatcher) {
......
......@@ -30,8 +30,8 @@ public class OrderCategoryAdapter extends BaseQuickAdapter<OrderCategoryBean.Foo
private Context context;
private int lastSelectIndex = -1;
public final int PRIMARY_CATEGORY = 1;
public final int SECOND_CATEGORY = 2;
public static final int PRIMARY_CATEGORY = 1;
public static final int SECOND_CATEGORY = 2;
/**
* 當前顯示的是幾級分類
*/
......
package com.gingersoft.supply_chain.mvp.ui.adapter;
import android.content.Context;
import android.text.Editable;
import android.text.InputFilter;
import android.text.TextWatcher;
import android.view.View;
import android.widget.EditText;
import androidx.recyclerview.widget.GridLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
......@@ -9,13 +13,24 @@ import androidx.recyclerview.widget.RecyclerView;
import com.chad.library.adapter.base.BaseQuickAdapter;
import com.chad.library.adapter.base.viewholder.BaseViewHolder;
import com.gingersoft.gsa.cloud.common.utils.MoneyUtil;
import com.gingersoft.gsa.cloud.common.utils.inputFilter.MoneyInputFilter;
import com.gingersoft.gsa.cloud.common.utils.other.TextUtil;
import com.gingersoft.supply_chain.R;
import com.gingersoft.supply_chain.mvp.bean.DeputyUnitBean;
import com.gingersoft.supply_chain.mvp.bean.PurchaseOrderDetailsBean;
import com.xuexiang.rxutil2.rxjava.RxJavaUtils;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.util.List;
import java.util.concurrent.TimeUnit;
import io.reactivex.Observable;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.disposables.Disposable;
import io.reactivex.functions.Consumer;
import io.reactivex.schedulers.Schedulers;
/**
* @author 宇航.
......@@ -27,6 +42,11 @@ import java.util.List;
public class OrderDetailsFoodAdapter extends BaseQuickAdapter<PurchaseOrderDetailsBean.PurchaseOrderDetailsInfoVosBean, BaseViewHolder> {
private Context context;
private OnValueChangeListener onValueChangeListener;
public void setOnValueChangeListener(OnValueChangeListener onValueChangeListener) {
this.onValueChangeListener = onValueChangeListener;
}
public OrderDetailsFoodAdapter(Context context, @Nullable List<PurchaseOrderDetailsBean.PurchaseOrderDetailsInfoVosBean> data) {
super(R.layout.item_order_details_food, data);
......@@ -35,35 +55,111 @@ public class OrderDetailsFoodAdapter extends BaseQuickAdapter<PurchaseOrderDetai
@Override
protected void convert(@NotNull BaseViewHolder viewHolder, PurchaseOrderDetailsBean.PurchaseOrderDetailsInfoVosBean item) {
viewHolder.setText(R.id.tv_order_no, item.getOrderNo() + "");
viewHolder.setText(R.id.tv_order_details_item_food_name, item.getName());
viewHolder.setText(R.id.tv_order_details_item_purchasing_unit, item.getUnit_content());
viewHolder.setText(R.id.tv_order_details_item_purchasing_unit_price, "$" + item.getFoodPrice());
viewHolder.setText(R.id.tv_order_details_item_num, String.valueOf(item.getFoodQuantity()));
//保存下來總價,用於計算所有食品的總價
item.setTotalAmount(MoneyUtil.priceCalculation(item.getFoodPrice(), item.getFoodQuantity()));
//食品的總價
viewHolder.setText(R.id.tv_order_details_item_purchasing_total_amount, "$" + item.getTotalAmount());
//入庫單價
//拿到單價
// double unitPrice = Integer.parseInt(item.getWareHouseBeans().get(0).getValue());
//拿到數量
// double foodQuantity = Integer.parseInt(item.getWareHouseBeans().get(1).getValue());
//設置入庫總價,總價是由用戶輸入的單價*基本單位數
viewHolder.setText(R.id.tv_order_details_item_warehouse_total_amount, String.format(context.getString(R.string.amount_string_s), MoneyUtil.formatDouble(item.getWarehousingAmount())));
RecyclerView rvWarehouseUnit = viewHolder.getView(R.id.rv_warehouse_unit);
if (item.getWareHouseBeans() != null) {
if (item.getFoodUnits() != null) {
rvWarehouseUnit.setVisibility(View.VISIBLE);
rvWarehouseUnit.setLayoutManager(new GridLayoutManager(context, 3));
WareHouseUnitAdapter wareHouseUnitAdapter = new WareHouseUnitAdapter(item.getWareHouseBeans());
WareHouseUnitAdapter wareHouseUnitAdapter = new WareHouseUnitAdapter(item.getFoodUnits(), viewHolder.getAdapterPosition(), (position, value) -> {
PurchaseOrderDetailsBean.PurchaseOrderDetailsInfoVosBean purchaseOrderDetailsInfoVosBean = getData().get(viewHolder.getAdapterPosition());
//獲取入庫單位集合,用第0位(單價)乘以第一位(主單位數量),得到現在的入庫價格
List<DeputyUnitBean> deputyUnitBeans = purchaseOrderDetailsInfoVosBean.getFoodUnits();
if (deputyUnitBeans != null && deputyUnitBeans.size() > 1) {
double currentWareHouseAmount = MoneyUtil.priceCalculation(deputyUnitBeans.get(0).getDeputyValue(), deputyUnitBeans.get(1).getDeputyValue());
//現在的價格減去之前的價格,得到增加了多少
double changeAmount = MoneyUtil.sub(currentWareHouseAmount, purchaseOrderDetailsInfoVosBean.getWarehousingAmount());
if (purchaseOrderDetailsInfoVosBean.isChecked()) {
//调用接口,修改外部總金額
onValueChangeListener.onValueChange(position, changeAmount);
}
//保存最新的金額數據
purchaseOrderDetailsInfoVosBean.setWarehousingAmount(currentWareHouseAmount);
viewHolder.setText(R.id.tv_order_details_item_warehouse_total_amount, currentWareHouseAmount + "");
}
});
rvWarehouseUnit.setAdapter(wareHouseUnitAdapter);
} else {
rvWarehouseUnit.setVisibility(View.GONE);
}
viewHolder.setBackgroundResource(R.id.iv_order_details_item_food_select, item.isChecked() ? R.drawable.ic_checkbox_checked : R.drawable.ic_checkbox_uncheck);
}
private static class WareHouseUnitAdapter extends BaseQuickAdapter<PurchaseOrderDetailsBean.PurchaseOrderDetailsInfoVosBean.WareHouseBean, BaseViewHolder> {
public WareHouseUnitAdapter(List<PurchaseOrderDetailsBean.PurchaseOrderDetailsInfoVosBean.WareHouseBean> wareHouseBeans) {
private static class WareHouseUnitAdapter extends BaseQuickAdapter<DeputyUnitBean, BaseViewHolder> {
private int parentPosition;
private OnValueChangeListener onValueChangeListener;
private Disposable mDisposable;
public WareHouseUnitAdapter(List<DeputyUnitBean> wareHouseBeans, int parentPosition, OnValueChangeListener onValueChangeListener) {
super(R.layout.item_receiving_unit, wareHouseBeans);
this.parentPosition = parentPosition;
this.onValueChangeListener = onValueChangeListener;
}
@Override
protected void convert(@NotNull BaseViewHolder viewHolder, PurchaseOrderDetailsBean.PurchaseOrderDetailsInfoVosBean.WareHouseBean wareHouseBean) {
viewHolder.setText(R.id.tv_receiving_unit_title, wareHouseBean.getTitle());
viewHolder.setText(R.id.ed_receiving_unit_value, wareHouseBean.getValue());
protected void convert(@NotNull BaseViewHolder viewHolder, DeputyUnitBean wareHouseBean) {
viewHolder.setText(R.id.tv_receiving_unit_title, wareHouseBean.getDeputyUnit());
EditText edWareHouseValue = viewHolder.getView(R.id.ed_receiving_unit_value);
edWareHouseValue.setFilters(new InputFilter[]{new MoneyInputFilter()});
edWareHouseValue.setText(MoneyUtil.formatDouble(wareHouseBean.getDeputyValue()));
TextWatcher textWatcher = 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 editable) {
String s = editable + "";
if (TextUtil.isEmptyOrNullOrUndefined(s)) {
s = "0";
}
DeputyUnitBean item = getData().get(viewHolder.getLayoutPosition());
item.setDeputyValue(Double.parseDouble(s + ""));
if (viewHolder.getAdapterPosition() == 0 || viewHolder.getAdapterPosition() == 1) {
//如果修改的是單價,或者是主單位數量,就要刷新總價
if (mDisposable != null) {
mDisposable.dispose();
}
String finalS = s;
mDisposable = RxJavaUtils.delay(1, l -> onValueChangeListener.onValueChange(parentPosition, Double.parseDouble(finalS)));
}
}
};
edWareHouseValue.setOnFocusChangeListener((v, hasFocus) -> {
if (hasFocus) {
edWareHouseValue.addTextChangedListener(textWatcher);
} else {
edWareHouseValue.removeTextChangedListener(textWatcher);
}
});
}
}
public interface OnValueChangeListener {
/**
* 入庫價格發生變化回調接口
*
* @param position 入庫食品的下標
* @param value 增加了多少價格,如果是減少,則改為負的
*/
void onValueChange(int position, double value);
}
}
package com.gingersoft.supply_chain.mvp.ui.adapter;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import com.chad.library.adapter.base.BaseQuickAdapter;
import com.chad.library.adapter.base.viewholder.BaseViewHolder;
import com.gingersoft.gsa.cloud.common.utils.time.TimeUtils;
import com.gingersoft.supply_chain.R;
import com.gingersoft.supply_chain.mvp.bean.NewPurchaseOrderBean;
import com.gingersoft.supply_chain.mvp.bean.OrderBean;
import com.gingersoft.supply_chain.mvp.bean.PurchaseOrderDetailsBean;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
......@@ -27,15 +25,18 @@ public class PurchaseOrderAdapter extends BaseQuickAdapter<OrderBean, BaseViewHo
public PurchaseOrderAdapter(@Nullable List<OrderBean> data) {
super(R.layout.item_purchase_order, data);
addChildClickViewIds(R.id.iv_supplier_delete, R.id.btn_purchase_send, R.id.btn_purchase_buy_again, R.id.btn_receiver_goods);
addChildClickViewIds(R.id.btn_purchase_send, R.id.btn_purchase_buy_again, R.id.btn_receiver_goods);
}
@Override
protected void convert(@NotNull BaseViewHolder viewHolder, OrderBean purchaseOrderBean) {
viewHolder.setText(R.id.tv_purchase_order_no, "" + purchaseOrderBean.getOrderNo());
viewHolder.setText(R.id.tv_purchase_order_supplier_name, purchaseOrderBean.getSupplierName());
viewHolder.setText(R.id.tv_purchase_order_no, purchaseOrderBean.getOrderNo() + "");
viewHolder.setText(R.id.tv_purchase_order_create_time, TimeUtils.getTime(purchaseOrderBean.getCreateTime(), TimeUtils.DEFAULT_DATE_FORMAT_YMDHM));
viewHolder.setText(R.id.tv_purchase_order_goods_num, purchaseOrderBean.getPurchaseFoodCount() + "");
viewHolder.setText(R.id.tv_purchase_order_goods, purchaseOrderBean.getName());
viewHolder.setText(R.id.tv_purchase_order_total_price, purchaseOrderBean.getTotalAmount() + "");
viewHolder.setText(R.id.btn_receiver_goods, PurchaseOrderDetailsBean.getStringByOrderState(purchaseOrderBean.getStatus()));
}
}
......@@ -23,11 +23,13 @@ import android.widget.AdapterView;
import androidx.recyclerview.widget.RecyclerView;
import com.gingersoft.gsa.cloud.ui.recylcler.decorator.DividerItemDecoration;
import com.gingersoft.gsa.cloud.ui.recylcler.decorator.MarginDecoration;
import com.gingersoft.supply_chain.R;
import com.jess.arms.utils.DeviceUtils;
/**
* Demo 中通用的 RecyclerView Adapter。
* Created by sm on 2015/5/3.
* RecyclerView Adapter。
*/
public class PurchasePageAdapter extends RecyclerView.Adapter<PurchasePageAdapter.ViewHolder> {
......@@ -77,6 +79,7 @@ public class PurchasePageAdapter extends RecyclerView.Adapter<PurchasePageAdapte
itemView.setOnClickListener(this);
mAdapter = adapter;
recyclerView = itemView.findViewById(R.id.rv_purchase_list_content);
recyclerView.addItemDecoration(new MarginDecoration((int) DeviceUtils.dpToPixel(itemView.getContext(), 8)));
}
@Override
......
......@@ -37,7 +37,7 @@ public class SendSupplierMsgAdapter extends BaseQuickAdapter<SendSupplierMsgBean
@Override
protected void convert(@NotNull BaseViewHolder viewHolder, SendSupplierMsgBean sendSupplierMsgBean) {
viewHolder.setText(R.id.tv_item_send_supplier_msg_supplier_name, sendSupplierMsgBean.getSupplierName());
viewHolder.setGone(R.id.tv_supplier_send_state, !sendSupplierMsgBean.isSend());
RecyclerView rvContacts = viewHolder.getView(R.id.rv_item_send_supplier_msg);
ContactsListAdapter contactsListAdapter = new ContactsListAdapter(sendSupplierMsgBean.getSupplierContacts());
contactsListAdapter.setOnItemClickListener((adapter, view, position) -> {
......
......@@ -36,7 +36,6 @@ public class SupplierAdapter extends BaseQuickAdapter<SupplierInfoBean, BaseView
@Override
protected void convert(@NotNull BaseViewHolder viewHolder, SupplierInfoBean supplierBean) {
Log.e("eee", "供應商名:" +supplierBean.getSupplierName());
viewHolder.setText(R.id.tv_supplier_name, supplierBean.getSupplierName());
viewHolder.setText(R.id.tv_supplier_address, supplierBean.getAddress());
viewHolder.setText(R.id.tv_supplier_phone, supplierBean.getContactInformation());
......
......@@ -17,8 +17,10 @@ import java.util.List;
* User: admin
* Date: 2020/12/2
* Time: 17:36
* Use: 採購訂單列表
* Use: 庫存訂單列表
* 最新 @{WarehousingQueryAdapter}
*/
@Deprecated
public class WareHousingAdapter extends BaseQuickAdapter<WareHousingOrderBean.WareHousingBean, BaseViewHolder> {
public WareHousingAdapter() {
super(R.layout.item_ware_housing);
......
package com.gingersoft.supply_chain.mvp.ui.adapter;
import android.content.Context;
import androidx.core.content.ContextCompat;
import com.chad.library.adapter.base.BaseQuickAdapter;
import com.chad.library.adapter.base.viewholder.BaseViewHolder;
import com.gingersoft.supply_chain.R;
import com.gingersoft.supply_chain.mvp.bean.WareHouseListBean;
import org.jetbrains.annotations.NotNull;
import java.util.List;
/**
* @author 宇航.
* User: admin
* Date: 2021/1/6
* Time: 16:36
* Use:庫存查詢的訂單列表
*/
public class WarehousingQueryAdapter extends BaseQuickAdapter<WareHouseListBean.WareHousingDataBean.PurchaseWarehousingOrderDetailsVOSBean, BaseViewHolder> {
private Context context;
private int[] colors = new int[]{R.color.color_f9, R.color.white};
public WarehousingQueryAdapter(Context context, List<WareHouseListBean.WareHousingDataBean.PurchaseWarehousingOrderDetailsVOSBean> purchaseWarehousingOrderDetailsVosBeans) {
super(R.layout.item_warehousing_query, purchaseWarehousingOrderDetailsVosBeans);
this.context = context;
}
@Override
protected void convert(@NotNull BaseViewHolder viewHolder, WareHouseListBean.WareHousingDataBean.PurchaseWarehousingOrderDetailsVOSBean item) {
viewHolder.setText(R.id.tv_warehouse_item_ingredients_name, item.getName());
viewHolder.setText(R.id.tv_warehouse_item_ingredients_species, item.getCateName());
viewHolder.setText(R.id.tv_warehouse_item_supplier, item.getSupplierName());
viewHolder.setText(R.id.tv_warehouse_item_unit, item.getBasicUnitName());
viewHolder.setText(R.id.tv_warehouse_item_unit_price, item.getFoodPrice() + "");
viewHolder.setText(R.id.tv_warehouse_item_inventory_quantity, item.getFoodNum() + "");
viewHolder.setText(R.id.tv_warehouse_item_total_amount, item.getFoodAmount() + "");
// if (viewHolder.getAdapterPosition() == 0) {
// int textColorRes = getColor(R.color.white);
// setTextColor(viewHolder, textColorRes);
// int bgColorRes = getColor(R.color.theme_color);
// setBgColor(viewHolder, bgColorRes);
// } else {
int textColorRes = getColor(R.color.color_3c);
setTextColor(viewHolder, textColorRes);
int colorRes = getColor(colors[viewHolder.getAdapterPosition() % 2]);
setBgColor(viewHolder, colorRes);
// }
}
private void setBgColor(@NotNull BaseViewHolder viewHolder, int bgColorRes) {
viewHolder.setBackgroundColor(R.id.tv_warehouse_item_ingredients_name, bgColorRes);
viewHolder.setBackgroundColor(R.id.tv_warehouse_item_ingredients_species, bgColorRes);
viewHolder.setBackgroundColor(R.id.tv_warehouse_item_supplier, bgColorRes);
viewHolder.setBackgroundColor(R.id.tv_warehouse_item_unit, bgColorRes);
viewHolder.setBackgroundColor(R.id.tv_warehouse_item_unit_price, bgColorRes);
viewHolder.setBackgroundColor(R.id.tv_warehouse_item_inventory_quantity, bgColorRes);
viewHolder.setBackgroundColor(R.id.tv_warehouse_item_total_amount, bgColorRes);
}
private void setTextColor(@NotNull BaseViewHolder viewHolder, int textColorRes) {
viewHolder.setTextColor(R.id.tv_warehouse_item_ingredients_name, textColorRes);
viewHolder.setTextColor(R.id.tv_warehouse_item_ingredients_species, textColorRes);
viewHolder.setTextColor(R.id.tv_warehouse_item_supplier, textColorRes);
viewHolder.setTextColor(R.id.tv_warehouse_item_unit, textColorRes);
viewHolder.setTextColor(R.id.tv_warehouse_item_unit_price, textColorRes);
viewHolder.setTextColor(R.id.tv_warehouse_item_inventory_quantity, textColorRes);
viewHolder.setTextColor(R.id.tv_warehouse_item_total_amount, textColorRes);
}
private int getColor(int colorRes) {
return ContextCompat.getColor(context, colorRes);
}
}
......@@ -14,6 +14,7 @@ import com.gingersoft.supply_chain.mvp.contract.BaseSupplyChainContract;
import com.jess.arms.base.BaseFragment;
import com.jess.arms.mvp.IPresenter;
import com.jess.arms.utils.ArmsUtils;
import com.jess.arms.utils.DeviceUtils;
import com.kingja.loadsir.core.LoadService;
import com.qmuiteam.qmui.widget.QMUITopBar;
......@@ -113,7 +114,9 @@ public abstract class BaseSupplyChainFragment<P extends IPresenter> extends Base
public void killMyself() {
FragmentActivity activity = getActivity();
if (activity != null) {
DeviceUtils.hideSoftKeyboard(mContext, activity.getWindow().getDecorView());
activity.onBackPressed();
}
}
}
......@@ -25,6 +25,7 @@ import com.gingersoft.supply_chain.mvp.ui.fragment.order.PurchaseListFragment;
import com.gingersoft.supply_chain.mvp.ui.fragment.food.MeasurementUnitFragment;
import com.gingersoft.supply_chain.mvp.ui.fragment.supplier.SupplierListFragment;
import com.gingersoft.supply_chain.mvp.ui.fragment.food.FoodIngredientsFragment;
import com.gingersoft.supply_chain.mvp.ui.fragment.warehouse.WareHouseListFragment;
import com.jess.arms.di.component.AppComponent;
import com.qmuiteam.qmui.widget.QMUITopBar;
import java.util.ArrayList;
......@@ -89,39 +90,39 @@ public class FunctionListFragment extends BaseSupplyChainFragment<FunctionListPr
orderManger.add(new Function("採購訂單", R.drawable.ic_purchase_order));
purchaseFunctionBeans.add(new PurchaseFunctionBean("訂單管理", orderManger));
// List<Function> storage = new ArrayList<>();
// storage.add(new Function("入庫", R.drawable.ic_purchase_order));
// purchaseFunctionBeans.add(new PurchaseFunctionBean("庫存管理", storage));
List<Function> storage = new ArrayList<>();
storage.add(new Function("庫存查詢", R.drawable.ic_purchase_order));
purchaseFunctionBeans.add(new PurchaseFunctionBean("庫存管理", storage));
PurchaseFunctionAdapter purchaseFunctionAdapter = new PurchaseFunctionAdapter(mContext, purchaseFunctionBeans);
purchaseFunctionAdapter.setFunctionClickListener(new OnItemClickListener() {
@Override
public void onItemClick(@NonNull BaseQuickAdapter<?, ?> adapter, @NonNull View view, int position) {
FunctionChildAdapter functionChildAdapter = (FunctionChildAdapter) adapter;
List<Function> data = functionChildAdapter.getData();
switch (data.get(position).getResName()) {
case "供應商":
start(SupplierListFragment.newInstance(false));
break;
case "食材":
start(FoodIngredientsFragment.newInstance(FOOD_INGREDIENTS));
break;
case "種類":
start(CategoryFragment.newInstance());
break;
case "包裝":
start(MeasurementUnitFragment.newInstance(false));
break;
case "採購訂單":
start(PurchaseListFragment.newInstance());
break;
case "入庫":
start(StorageListFragment.newInstance());
break;
default:
break;
}
purchaseFunctionAdapter.setFunctionClickListener((adapter, view, position) -> {
FunctionChildAdapter functionChildAdapter = (FunctionChildAdapter) adapter;
List<Function> data = functionChildAdapter.getData();
switch (data.get(position).getResName()) {
case "供應商":
start(SupplierListFragment.newInstance(false));
break;
case "食材":
start(FoodIngredientsFragment.newInstance(FOOD_INGREDIENTS));
break;
case "種類":
start(CategoryFragment.newInstance());
break;
case "包裝":
start(MeasurementUnitFragment.newInstance(false));
break;
case "採購訂單":
start(PurchaseListFragment.newInstance());
break;
case "入庫":
start(StorageListFragment.newInstance());
break;
case "庫存查詢":
start(WareHouseListFragment.newInstance());
break;
default:
break;
}
});
rvSupplyChainFunctionList.setAdapter(purchaseFunctionAdapter);
......
package com.gingersoft.supply_chain.mvp.ui.fragment.food;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
......@@ -14,6 +15,7 @@ import androidx.recyclerview.widget.GridLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import com.gingersoft.gsa.cloud.common.utils.other.TextUtil;
import com.gingersoft.gsa.cloud.ui.utils.AppDialog;
import com.gingersoft.supply_chain.R;
import com.gingersoft.supply_chain.R2;
import com.gingersoft.supply_chain.di.component.DaggerFoodUnitPageComponent;
......@@ -24,9 +26,13 @@ import com.gingersoft.supply_chain.mvp.presenter.FoodUnitPagePresenter;
import com.gingersoft.supply_chain.mvp.ui.adapter.BasicUnitAdapter;
import com.gingersoft.supply_chain.mvp.ui.adapter.DeputyUnitAdapter;
import com.gingersoft.supply_chain.mvp.ui.fragment.BaseSupplyChainFragment;
import com.gingersoft.supply_chain.mvp.utils.NotDispatchListener;
import com.jess.arms.di.component.AppComponent;
import com.qmuiteam.qmui.alpha.QMUIAlphaTextView;
import com.qmuiteam.qmui.widget.QMUITopBar;
import com.qmuiteam.qmui.widget.dialog.QMUIDialog;
import com.qmuiteam.qmui.widget.dialog.QMUIDialogView;
import com.qmuiteam.qmui.widget.popup.QMUIBasePopup;
import java.io.Serializable;
import java.util.Iterator;
......@@ -40,7 +46,7 @@ import butterknife.OnClick;
* ================================================
* Description: 最新版食品單位填寫頁面
*/
public class FoodUnitPageFragment extends BaseSupplyChainFragment<FoodUnitPagePresenter> implements FoodUnitPageContract.View {
public class FoodUnitPageFragment extends BaseSupplyChainFragment<FoodUnitPagePresenter> implements FoodUnitPageContract.View, NotDispatchListener {
@BindView(R2.id.supply_top_bar)
QMUITopBar topBar;
......@@ -55,19 +61,35 @@ public class FoodUnitPageFragment extends BaseSupplyChainFragment<FoodUnitPagePr
private DeputyUnitAdapter deputyUnitAdapter;
private BasicUnitAdapter basicUnitAdapter;
/**
* 主單位名稱
*/
public final static String BASIC_UNIT_KEY = "basicUnitKey";
/**
* 副單位集合
*/
public final static String DEPUTY_UNIT_KEY = "deputyUnitKey";
/**
* 是否是修改單位
*/
public final static String UPDATE_UNIT_KEY = "updateUnitKey";
/**
* 食品id
*/
public final static String FOOD_ID_KEY = "foodIdKey";
/**
* @param basicUnit 基本單位
* @param deputyUnitBeans 副單位集合
* @return
*/
public static FoodUnitPageFragment newInstance(String basicUnit, List<DeputyUnitBean> deputyUnitBeans) {
public static FoodUnitPageFragment newInstance(String basicUnit, List<DeputyUnitBean> deputyUnitBeans, boolean isUpdateUnit, int foodId) {
FoodUnitPageFragment fragment = new FoodUnitPageFragment();
Bundle bundle = new Bundle();
bundle.putSerializable(DEPUTY_UNIT_KEY, (Serializable) deputyUnitBeans);
bundle.putString(BASIC_UNIT_KEY, basicUnit);
bundle.putBoolean(UPDATE_UNIT_KEY, isUpdateUnit);
bundle.putInt(FOOD_ID_KEY, foodId);
fragment.setArguments(bundle);
return fragment;
}
......@@ -90,6 +112,7 @@ public class FoodUnitPageFragment extends BaseSupplyChainFragment<FoodUnitPagePr
@Override
public void initData(@Nullable Bundle savedInstanceState) {
mPresenter.initData(getArguments());
edBasicUnit.requestFocus();
}
@OnClick({R2.id.tv_add_deputy, R2.id.tv_food_unit_complete})
......@@ -107,41 +130,57 @@ public class FoodUnitPageFragment extends BaseSupplyChainFragment<FoodUnitPagePr
edBasicUnit.setError("請輸入基本單位");
return;
}
//拿到副單位集合
Bundle result = new Bundle();
result.putString(BASIC_UNIT_KEY, basicUnit);
if (deputyUnitAdapter != null) {
List<DeputyUnitBean> data = deputyUnitAdapter.getData();
Iterator<DeputyUnitBean> iterator = data.iterator();
while (iterator.hasNext()){
if(TextUtil.isEmptyOrNullOrUndefined(iterator.next().getDeputyUnit())){
//單位為空,移除掉
iterator.remove();
}
}
result.putSerializable(DEPUTY_UNIT_KEY, (Serializable) data);
mPresenter.addDeputyUnit(deputyUnitAdapter.getData());
}
setFragmentResult(RESULT_OK, result);
killMyself();
// Bundle result = new Bundle();
// result.putString(BASIC_UNIT_KEY, basicUnit);
// if (deputyUnitAdapter != null) {
// //拿到副單位集合
// List<DeputyUnitBean> data = deputyUnitAdapter.getData();
// Iterator<DeputyUnitBean> iterator = data.iterator();
// while (iterator.hasNext()) {
// if (TextUtil.isEmptyOrNullOrUndefined(iterator.next().getDeputyUnit())) {
// //單位為空,移除掉
// iterator.remove();
// }
// }
// result.putSerializable(DEPUTY_UNIT_KEY, (Serializable) data);
// }
// setFragmentResult(RESULT_OK, result);
// killMyself();
}
}
@Override
public void loadBasicUnitAdapter(List<BasicUnitBean> basicUnitBeans) {
BasicUnitAdapter basicUnitAdapter = new BasicUnitAdapter(basicUnitBeans);
basicUnitAdapter = new BasicUnitAdapter(basicUnitBeans);
rvBasicUnitList.setLayoutManager(new GridLayoutManager(mContext, 5));
rvBasicUnitList.setAdapter(basicUnitAdapter);
basicUnitAdapter.setOnItemClickListener((adapter, view, position) -> {
//先獲取當前焦點在哪個輸入框上,然後再填充內容
FragmentActivity activity = getActivity();
if (activity != null) {
Window window = activity.getWindow();
if (window != null) {
View decorView = window.getDecorView();
View focusView = decorView.findFocus();
if (focusView instanceof EditText) {
EditText editText = (EditText) focusView;
editText.setText(editText.getText() + basicUnitAdapter.getData().get(position).getContent());
if (position == basicUnitAdapter.getItemCount() - 1) {
//新增
AppDialog.getInstance().showEditDialog(mContext, "新增單位", "單位名稱:", "", "", new AppDialog.OnInputConfirmListener() {
@Override
public void onConfirm(String text) {
if (TextUtil.isNotEmptyOrNullOrUndefined(text)) {
mPresenter.addBasicUnit(text);
}
}
});
} else {
//先獲取當前焦點在哪個輸入框上,然後再填充內容
FragmentActivity activity = getActivity();
if (activity != null) {
Window window = activity.getWindow();
if (window != null) {
View decorView = window.getDecorView();
View focusView = decorView.findFocus();
if (focusView instanceof EditText) {
EditText editText = (EditText) focusView;
editText.setText(basicUnitAdapter.getData().get(position).getContent());
editText.setSelection(editText.getText().length());
}
}
}
}
......@@ -149,6 +188,14 @@ public class FoodUnitPageFragment extends BaseSupplyChainFragment<FoodUnitPagePr
}
@Override
public void addBasicUnit(BasicUnitBean basicUnitBean) {
if (basicUnitAdapter != null) {
int index = basicUnitAdapter.getItemCount() - 1;
basicUnitAdapter.addData(Math.max(index, 0), basicUnitBean);
}
}
@Override
public void loadDeputyUnitAdapter(List<DeputyUnitBean> deputyUnitBeans) {
if (deputyUnitAdapter == null) {
deputyUnitAdapter = new DeputyUnitAdapter(deputyUnitBeans);
......@@ -156,7 +203,7 @@ public class FoodUnitPageFragment extends BaseSupplyChainFragment<FoodUnitPagePr
deputyUnitAdapter.setOnItemChildClickListener((adapter, view, position) -> {
if (view.getId() == R.id.iv_deputy_unit_delete) {
//刪除副單位
deputyUnitAdapter.removeAt(position);
mPresenter.deleteDeputyUnit(deputyUnitAdapter.getItem(position), position);
}
});
} else {
......@@ -168,4 +215,25 @@ public class FoodUnitPageFragment extends BaseSupplyChainFragment<FoodUnitPagePr
public void initTopBar(String title) {
initTopBar(topBar, title);
}
@Override
public void setMainUnit(String content) {
edBasicUnit.setText(content);
}
@Override
public void callBackDeputyUnit(List<DeputyUnitBean> deputyUnitBeans) {
String basicUnit = edBasicUnit.getText() + "";
Bundle result = new Bundle();
result.putString(BASIC_UNIT_KEY, basicUnit);
result.putSerializable(DEPUTY_UNIT_KEY, (Serializable) deputyUnitBeans);
setFragmentResult(RESULT_OK, result);
killMyself();
}
@Override
public void deleteDeputyUnit(int position) {
deputyUnitAdapter.removeAt(position);
}
}
......@@ -9,10 +9,8 @@ import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.recyclerview.widget.RecyclerView;
import com.gingersoft.gsa.cloud.common.utils.other.TextUtil;
import com.gingersoft.gsa.cloud.common.utils.toast.ToastUtils;
import com.gingersoft.gsa.cloud.ui.adapter.bean.InfoMultiBean;
import com.gingersoft.gsa.cloud.ui.adapter.bean.MultiInputSelectBean;
import com.gingersoft.gsa.cloud.ui.adapter.multi.InfoMultiAdapter;
import com.gingersoft.gsa.cloud.ui.recylcler.decorator.DividerItemDecoration;
import com.gingersoft.supply_chain.R;
......@@ -31,7 +29,6 @@ import java.util.List;
import butterknife.BindView;
import butterknife.OnClick;
import me.yokeyword.fragmentation.ISupportFragment;
import static com.gingersoft.gsa.cloud.ui.recylcler.decorator.DividerItemDecoration.VERTICAL_LIST;
import static com.gingersoft.supply_chain.mvp.ui.fragment.food.MeasurementUnitFragment.SELECT_FOOD_UNIT_REQUEST_CODE;
......@@ -95,14 +92,15 @@ public class PackageSpecificationFragment extends BaseSupplyChainFragment<Packag
public void initData(@Nullable Bundle savedInstanceState) {
initTopBar();
infoMultiAdapter = new InfoMultiAdapter(mContext, mPresenter.getInfoMultiList());
infoMultiAdapter.setOnItemClickListener((adapter, view, position) -> {
if (adapter.getItemViewType(position) == InfoMultiBean.ITEM_MULTIPLE_INPUT_SELECT) {
List<InfoMultiBean> data = infoMultiAdapter.getData();
MultiInputSelectBean multiInputSelectBean = (MultiInputSelectBean) data.get(position);
ISupportFragment fragment = multiInputSelectBean.getFragment();
startForResult(fragment, multiInputSelectBean.getRequestCode());
}
});
// infoMultiAdapter.setOnItemClickListener((adapter, view, position) -> {
// if (adapter.getItemViewType(position) == InfoMultiBean.ITEM_MULTIPLE_INPUT_SELECT) {
// List<InfoMultiBean> data = infoMultiAdapter.getData();
// MultiInputSelectBean multiInputSelectBean = (MultiInputSelectBean) data.get(position);
// if(multiInputSelectBean.getFragment() == MeasurementUnitFragment.class){
// startForResult(MeasurementUnitFragment.newInstance(true), multiInputSelectBean.getRequestCode());
// }
// }
// });
rvNewPackageSpecification.addItemDecoration(new DividerItemDecoration(mContext, VERTICAL_LIST));
rvNewPackageSpecification.setAdapter(infoMultiAdapter);
}
......@@ -125,19 +123,19 @@ public class PackageSpecificationFragment extends BaseSupplyChainFragment<Packag
return;
}
List<InfoMultiBean> data = infoMultiAdapter.getData();
if (TextUtil.isEmptyOrNullOrUndefined(mPresenter.getOrderingMinNum(data))) {
ToastUtils.show(mContext, "請輸入訂貨單位最小數量");
return;
} else if (TextUtil.isEmptyOrNullOrUndefined(mPresenter.getOrderingMaxNum(data))) {
ToastUtils.show(mContext, "請輸入訂貨單位最大數量");
return;
} else if (TextUtil.isEmptyOrNullOrUndefined(mPresenter.getReceivingMinNum(data))) {
ToastUtils.show(mContext, "請輸入收貨單位最小數量");
return;
} else if (TextUtil.isEmptyOrNullOrUndefined(mPresenter.getReceivingMinNum(data))) {
ToastUtils.show(mContext, "請輸入收貨單位最大數量");
return;
}
// if (TextUtil.isEmptyOrNullOrUndefined(mPresenter.getOrderingMinNum(data))) {
// ToastUtils.show(mContext, "請輸入訂貨單位最小數量");
// return;
// } else if (TextUtil.isEmptyOrNullOrUndefined(mPresenter.getOrderingMaxNum(data))) {
// ToastUtils.show(mContext, "請輸入訂貨單位最大數量");
// return;
// } else if (TextUtil.isEmptyOrNullOrUndefined(mPresenter.getReceivingMinNum(data))) {
// ToastUtils.show(mContext, "請輸入收貨單位最小數量");
// return;
// } else if (TextUtil.isEmptyOrNullOrUndefined(mPresenter.getReceivingMinNum(data))) {
// ToastUtils.show(mContext, "請輸入收貨單位最大數量");
// return;
// }
List<FoodPackingSpecificationBean> foodPackingSpecifications = mPresenter.getFoodPackingSpecifications(data);
Bundle bundle = new Bundle();
bundle.putSerializable(FOOD_PACKING_SPECIFICATION_DATA_KEY, (Serializable) foodPackingSpecifications);
......
package com.gingersoft.supply_chain.mvp.ui.fragment.order;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
......@@ -73,12 +74,15 @@ public class OrderDetailsFragment extends BaseSupplyChainFragment<OrderDetailsPr
private int typesOfFood = 0;
private double totalAmount = 0;
// private int orderState = PurchaseOrderDetailsBean.WAIT_RECEIVED;
private final static String ORDER_DETAILS_ORDER_ID = "orderId";
private final static String ORDER_STATE = "orderState";
public static OrderDetailsFragment newInstance(int orderId) {
public static OrderDetailsFragment newInstance(int orderId, int orderState) {
OrderDetailsFragment fragment = new OrderDetailsFragment();
Bundle bundle = new Bundle();
bundle.putInt(ORDER_DETAILS_ORDER_ID, orderId);
bundle.putInt(ORDER_STATE, orderState);
fragment.setArguments(bundle);
return fragment;
}
......@@ -103,13 +107,18 @@ public class OrderDetailsFragment extends BaseSupplyChainFragment<OrderDetailsPr
initTopBar(supplyTopBar, "入庫單");
supplyTopBar.addRightImageButton(R.drawable.ic_white_delete, R.id.qmui_delete_order).setOnClickListener(v -> {
//刪除訂單
});
Bundle arguments = getArguments();
if (arguments != null) {
int orderId = arguments.getInt(ORDER_DETAILS_ORDER_ID, 0);
// orderState = arguments.getInt(ORDER_STATE, 0);
// if (orderState == PurchaseOrderDetailsBean.COMPLETE_RECEIVED) {
// } else {
mPresenter.getOrderDetailsById(orderId);
// }
} else {
showMessage("未獲取到訂單ID,請重試");
showMessage("未獲取到訂單編號,請重試");
killMyself();
}
}
......@@ -127,9 +136,11 @@ public class OrderDetailsFragment extends BaseSupplyChainFragment<OrderDetailsPr
} else if (viewId == R.id.tv_order_details_partial_receipt) {
//部分收貨
mPresenter.addWarehouse(PurchaseOrderDetailsBean.PART_RECEIVED, "", edOrderDetailsRemark.getText() + "", totalAmount, orderDetailsFoodAdapter.getData());
setFragmentResult(RESULT_OK, null);
} else if (viewId == R.id.tv_order_details_receipt) {
//收貨
mPresenter.addWarehouse(PurchaseOrderDetailsBean.COMPLETE_RECEIVED, "", edOrderDetailsRemark.getText() + "", totalAmount, orderDetailsFoodAdapter.getData());
setFragmentResult(RESULT_OK, null);
}
}
......@@ -165,7 +176,7 @@ public class OrderDetailsFragment extends BaseSupplyChainFragment<OrderDetailsPr
for (PurchaseOrderDetailsBean.PurchaseOrderDetailsInfoVosBean datum : orderDetailsFoodAdapter.getData()) {
datum.setChecked(isChecked);
if (isChecked) {
totalAmount = MoneyUtil.sum(totalAmount, MoneyUtil.priceCalculation(datum.getFoodPrice(), datum.getFoodQuantity()));
totalAmount = MoneyUtil.sum(totalAmount, datum.getWarehousingAmount());
}
}
orderDetailsFoodAdapter.notifyDataSetChanged();
......@@ -185,18 +196,24 @@ public class OrderDetailsFragment extends BaseSupplyChainFragment<OrderDetailsPr
private void initRecyclerView(PurchaseOrderDetailsBean orderDetailsBean) {
orderDetailsFoodAdapter = new OrderDetailsFoodAdapter(mContext, orderDetailsBean.getPurchaseOrderDetailsInfoVOS());
rvOrderDetailsFoodList.setAdapter(orderDetailsFoodAdapter);
orderDetailsFoodAdapter.setOnValueChangeListener((position, value) -> {
totalAmount = MoneyUtil.sum(totalAmount, value);
setTotalAmount();
});
orderDetailsFoodAdapter.setOnItemClickListener((adapter, view, position) -> {
PurchaseOrderDetailsBean.PurchaseOrderDetailsInfoVosBean infoVosBean = orderDetailsFoodAdapter.getData().get(position);
infoVosBean.setChecked(!infoVosBean.isChecked());
adapter.notifyItemChanged(position);
//修改選中狀態後,重新計算總價
//修改選中狀態後,重新計算入庫總價
if (infoVosBean.isChecked()) {
totalAmount = MoneyUtil.sum(totalAmount, MoneyUtil.priceCalculation(infoVosBean.getFoodPrice(), infoVosBean.getFoodQuantity()));
totalAmount = MoneyUtil.sum(totalAmount, infoVosBean.getWarehousingAmount());
typesOfFood += 1;
} else {
totalAmount = MoneyUtil.sub(totalAmount, MoneyUtil.priceCalculation(infoVosBean.getFoodPrice(), infoVosBean.getFoodQuantity()));
totalAmount = MoneyUtil.sub(totalAmount, infoVosBean.getWarehousingAmount());
typesOfFood -= 1;
}
//全選
cbOrderDetailsAllSelected.setChecked(typesOfFood == orderDetailsFoodAdapter.getData().size());
setTotalAmount();
setTypesOfFood();
});
......
......@@ -94,6 +94,7 @@ public class PurchaseListFragment extends BaseSupplyChainFragment<PurchaseListPr
* 當前訂單列表類型的下標
*/
private int orderStateIndex = 0;
private final static int REQUEST_ORDER_DETAILS_CODE = 1001;
@Override
public void setupFragmentComponent(@NonNull AppComponent appComponent) {
......@@ -112,6 +113,7 @@ public class PurchaseListFragment extends BaseSupplyChainFragment<PurchaseListPr
@Override
public void initData(@Nullable Bundle savedInstanceState) {
refreshPurchaseList.setPrimaryColorsId(R.color.trans, R.color.black);
btnNewOrder.setText("+新增訂單");
edSearch.setFilters(new InputFilter[]{InputFilterUtils.getChAndEnAndNumInputFilter(mContext), InputFilterUtils.getLengthFilter(mContext, 20)});
btnNewOrder.setOnClickListener(v -> {
......@@ -164,17 +166,10 @@ public class PurchaseListFragment extends BaseSupplyChainFragment<PurchaseListPr
.setSelectColor(ContextCompat.getColor(mContext, R.color.theme_color));
purchaseOrderAdapter = new PurchaseOrderAdapter(null);
purchaseOrderAdapter.setOnItemClickListener((adapter, view, position) -> start(OrderDetailsFragment.newInstance(purchaseOrderAdapter.getData().get(position).getId())));
purchaseOrderAdapter.setOnItemClickListener((adapter, view, position) -> startForResult(OrderDetailsFragment.newInstance(purchaseOrderAdapter.getData().get(position).getId(), orderState[orderStateIndex]), REQUEST_ORDER_DETAILS_CODE));
purchaseOrderAdapter.setOnItemChildClickListener((adapter, view, position) -> {
int viewId = view.getId();
if (viewId == R.id.iv_supplier_delete) {
//刪除採購單
AppDialog.getInstance().showWaringDialog(mContext, "是否刪除採購單?", (view1, dialog) -> {
List<OrderBean> data = purchaseOrderAdapter.getData();
mPresenter.deleteOrder(position, data.get(position));
dialog.dismiss();
});
} else if (viewId == R.id.btn_purchase_send) {
if (viewId == R.id.btn_purchase_send) {
//發送採購單
List<OrderBean> data = purchaseOrderAdapter.getData();
OrderBean orderBean = data.get(position);
......@@ -185,8 +180,16 @@ public class PurchaseListFragment extends BaseSupplyChainFragment<PurchaseListPr
purchaseOrder.setSupplierName(orderBean.getSupplierName());
start(SendMsgFragment.newInstance(Collections.singletonList(purchaseOrder)));
}
// if (viewId == R.id.iv_supplier_delete) {
// //刪除採購單
// AppDialog.getInstance().showWaringDialog(mContext, "是否刪除採購單?", (view1, dialog) -> {
// List<OrderBean> data = purchaseOrderAdapter.getData();
// mPresenter.deleteOrder(position, data.get(position));
// dialog.dismiss();
// });
// }
});
PurchasePageAdapter adapter = new PurchasePageAdapter(purchaseOrderAdapter, 4);
PurchasePageAdapter adapter = new PurchasePageAdapter(purchaseOrderAdapter, 2);
contentViewPager.setAdapter(adapter);
mTabSegment.setupWithViewPager(contentViewPager);
mTabSegment.setIndicator(new QMUITabIndicator(
......@@ -235,20 +238,32 @@ public class PurchaseListFragment extends BaseSupplyChainFragment<PurchaseListPr
@Override
public void loadOrderList(List<OrderBean> list) {
closeLoading();
if (list == null) {
loadService.showCallback(EmptyCallback.class);
} else if (list.size() == 0) {
loadService.showCallback(EmptyCallback.class);
} else {
loadService.showCallback(SuccessCallback.class);
}
purchaseOrderAdapter.setList(list);
}
private void closeLoading() {
refreshPurchaseList.finishRefresh();
refreshPurchaseList.finishLoadMore();
loadService.showCallback(SuccessCallback.class);
purchaseOrderAdapter.setList(list);
}
@Override
public void loadFail() {
closeLoading();
purchaseOrderAdapter.setList(null);
loadService.showCallback(EmptyCallback.class);
}
@Override
public void loadError() {
closeLoading();
purchaseOrderAdapter.setList(null);
loadService.showCallback(ErrorCallback.class);
}
......@@ -257,4 +272,13 @@ public class PurchaseListFragment extends BaseSupplyChainFragment<PurchaseListPr
public void deleteOrder(int position) {
purchaseOrderAdapter.removeAt(position);
}
@Override
public void onFragmentResult(int requestCode, int resultCode, Bundle data) {
super.onFragmentResult(requestCode, resultCode, data);
if(requestCode == REQUEST_ORDER_DETAILS_CODE && resultCode == RESULT_OK){
//用戶進行了收貨操作,需要對列表進行刷新
getOrderList();
}
}
}
......@@ -99,46 +99,11 @@ public class SendMsgFragment extends BaseSupplyChainFragment<SendMsgPresenter> i
if (viewId == R.id.btn_supplier_confirm) {
//發送
mPresenter.sendMsg();
// if (rgSendMsgMethod.getCheckedRadioButtonId() == R.id.rb_whatsapp) {
// //分享到WhatsApp
// DeviceUtils.shareWhatsApp(mContext, url);
// } else if (rgSendMsgMethod.getCheckedRadioButtonId() == R.id.rb_wechat) {
// //分享到微信
// DeviceUtils.shareWeChatFriend(mContext, url);
// } else if (rgSendMsgMethod.getCheckedRadioButtonId() == R.id.rb_line) {
// //分享到Line
// DeviceUtils.shareLine(mContext, "", url);
// } else if (rgSendMsgMethod.getCheckedRadioButtonId() == R.id.rb_kakao) {
// //跳轉Kakao
//
// }
// if (cbEmail.isChecked()) {
// //發送email
// sendMsg(Email);
// }
// if (cbSms.isChecked()) {
// //發送SMS
// sendMsg(SMS);
// }
// if (cbEfax.isChecked()) {
// //發送Efax
// sendMsg(Efax);
// }
} else if (viewId == R.id.btn_supplier_cancel) {
popTo(PurchaseListFragment.class, true);
}
}
// private void sendMsg(int email) {
// mPresenter.sendMsg(purchaseOrders.get(sendSupplierMsgAdapter.getSelectIndex()).getId(), email);
// }
private String url;
// @Override
// public void loadQrCode(String url) {
//
// }
@Override
public void shareThirdApp(String url, int type) {
......@@ -175,6 +140,7 @@ public class SendMsgFragment extends BaseSupplyChainFragment<SendMsgPresenter> i
@Override
public void sendSuccess() {
mPresenter.setSendSuccess();
mPresenter.getContactsBySupplier(mPresenter.getCurrentSelectedSupplier() + 1);
}
}
package com.gingersoft.supply_chain.mvp.ui.fragment.order;
import android.app.Dialog;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
......@@ -14,12 +13,11 @@ import androidx.annotation.Nullable;
import androidx.recyclerview.widget.RecyclerView;
import com.gingersoft.gsa.cloud.common.utils.MoneyUtil;
import com.gingersoft.gsa.cloud.ui.utils.AppDialog;
import com.gingersoft.supply_chain.R;
import com.gingersoft.supply_chain.R2;
import com.gingersoft.supply_chain.di.component.DaggerShoppingCatComponent;
import com.gingersoft.supply_chain.mvp.bean.ConfirmOrderBean;
import com.gingersoft.supply_chain.mvp.bean.PurchaseFoodBean;
import com.gingersoft.supply_chain.mvp.bean.ShoppingCartBean;
import com.gingersoft.supply_chain.mvp.content.SupplyShoppingCart;
import com.gingersoft.supply_chain.mvp.contract.ShoppingCatContract;
import com.gingersoft.supply_chain.mvp.presenter.ShoppingCatPresenter;
......@@ -58,6 +56,14 @@ public class ShoppingCatFragment extends BaseSupplyChainFragment<ShoppingCatPres
EditText edOrderContentRemark;
private ShoppingCartAdapter shoppingCartAdapter;
/**
* 食材種類
*/
private int totalSpecies = 0;
/**
* 總金額
*/
private double totalAmount = 0;
public static ShoppingCatFragment newInstance() {
ShoppingCatFragment fragment = new ShoppingCatFragment();
......@@ -87,77 +93,78 @@ public class ShoppingCatFragment extends BaseSupplyChainFragment<ShoppingCatPres
//全選
if (buttonView.isPressed()) {
if (shoppingCartAdapter != null) {
double totalAmount = 0;
int totalTypeFood = 0;
for (List<PurchaseFoodBean> datum : shoppingCartAdapter.getData()) {
for (PurchaseFoodBean purchaseFoodBean : datum) {
purchaseFoodBean.setChecked(isChecked);
if (isChecked) {
totalTypeFood++;
totalAmount = MoneyUtil.sum(totalAmount, MoneyUtil.priceCalculation(purchaseFoodBean.getUnitPrice(), purchaseFoodBean.getFoodQuantity()));
}
}
}
shoppingCartAdapter.addChecked(shoppingCartAdapter.getData());
setTotalInfo(totalTypeFood, totalAmount);
shoppingCartAdapter.notifyDataSetChanged();
mPresenter.calculateTotalPrice(isChecked, shoppingCartAdapter.getData());
}
}
});
}
@OnClick({R2.id.btn_order_content_order_template, R2.id.btn_order_content_add_food, R2.id.tv_order_content_complete})
@OnClick({R2.id.btn_order_content_order_template, R2.id.btn_order_content_add_food, R2.id.tv_order_content_complete, R2.id.tv_order_content_cancel})
@Override
public void onClick(View v) {
int viewId = v.getId();
if (viewId == R.id.tv_order_content_complete) {
//完成
List<PurchaseFoodBean> purchaseFoodBeans = shoppingCartAdapter.getPurchaseFoodListVosBeans();
//去到訂單確認頁面
boolean isHasChecked = false;
for (PurchaseFoodBean purchaseFoodBean : purchaseFoodBeans) {
if (purchaseFoodBean.isChecked()) {
isHasChecked = true;
break;
}
}
if (isHasChecked) {
//關閉選擇食材的頁面
AppDialog.getInstance().showWaringDialog(mContext, "確認創建採購單?", (view, dialog) -> {
dialog.dismiss();
mPresenter.addPurchaseOrder();
});
} else {
showMessage("請選擇食品");
}
//完成,篩選出選擇的食品
mPresenter.filterData(shoppingCartAdapter.getData());
} else if (viewId == R.id.btn_order_content_order_template) {
//訂單模板
} else if (viewId == R.id.btn_order_content_add_food) {
//添加食材
startWithPop(FoodIngredientsFragment.newInstance(ADD_ORDER));
} else if (viewId == R.id.tv_order_content_cancel) {
//取消
killMyself();
}
}
@Override
public void loadAdapter(List<List<PurchaseFoodBean>> supplierFoods) {
shoppingCartAdapter = new ShoppingCartAdapter(mContext, supplierFoods);
public void loadAdapter(List<ShoppingCartBean> shoppingCartBeans) {
shoppingCartAdapter = new ShoppingCartAdapter(mContext, shoppingCartBeans);
shoppingCartAdapter.setOnFoodDeleteListener((supplierIndex, foodListVosBean) -> {
//刪除食品之後,這個供應商下面沒有食材才會調用這裡
//從購物車元數據移除掉這個食材
SupplyShoppingCart.getInstance().getCartFoods().remove(foodListVosBean);
List<PurchaseFoodBean> purchaseFoodBeans = shoppingCartAdapter.getData().get(supplierIndex);
purchaseFoodBeans.remove(foodListVosBean);
if (purchaseFoodBeans.size() <= 0) {
shoppingCartAdapter.removeAt(supplierIndex);
List<ShoppingCartBean> shoppingCartAdapterData = shoppingCartAdapter.getData();
if (foodListVosBean.isChecked()) {
totalSpecies = MoneyUtil.sub(totalSpecies, 1);
totalAmount = MoneyUtil.sub(totalAmount, shoppingCartAdapterData.get(supplierIndex).getSelectFoodAmount());
setTotalInfo(totalSpecies, totalAmount);
}
//購物車adapter移除這個供應商
shoppingCartAdapter.removeAt(supplierIndex);
setAllSelect(shoppingCartAdapterData);
});
rvOrderContent.setAdapter(shoppingCartAdapter);
shoppingCartAdapter.setOnInfoChangeListener(() -> mPresenter.calculateTotalPrice(cbOrderContentAllSelect));
setAllSelect(shoppingCartBeans);
//當供應商裡面選中食品數量或價格有變化時回調,計算總價
shoppingCartAdapter.setOnInfoChangeListener((double changeAmount, int changeSpecies) -> {
totalAmount = MoneyUtil.sum(totalAmount, changeAmount);
totalSpecies += changeSpecies;
setTotalInfo(totalSpecies, totalAmount);
//這裡應該可以再加一個回調接口,用來專門處理食材的選中狀態切換
setAllSelect(shoppingCartAdapter.getData());
});
}
/**
* 設置是否全選
*/
public void setAllSelect(List<ShoppingCartBean> shoppingCartAdapterData) {
boolean checked = true;
for (ShoppingCartBean shoppingCartAdapterDatum : shoppingCartAdapterData) {
if (!shoppingCartAdapterDatum.isAllSelect()) {
checked = false;
break;
}
}
cbOrderContentAllSelect.setChecked(checked);
}
@Override
public void setTotalInfo(int typeTotal, double totalPrice) {
totalSpecies = typeTotal;
totalAmount = totalPrice;
tvOrderContentFoodTypeTotal.setText(String.valueOf(typeTotal));
tvOrderContentTotalAmount.setText("$" + totalPrice);
}
......@@ -170,4 +177,14 @@ public class ShoppingCatFragment extends BaseSupplyChainFragment<ShoppingCatPres
}
startWithPop(SendMsgFragment.newInstance(purchaseOrders));
}
@Override
public void notifyAdapter(int position) {
if (position == -1) {
shoppingCartAdapter.notifyDataSetChanged();
} else {
shoppingCartAdapter.notifyItemChanged(position);
rvOrderContent.scrollToPosition(position);
}
}
}
package com.gingersoft.supply_chain.mvp.ui.fragment.supplier;
import android.os.Bundle;
import android.util.Log;
import android.view.KeyEvent;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.inputmethod.EditorInfo;
import android.widget.EditText;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
......@@ -29,6 +33,8 @@ import com.qmuiteam.qmui.alpha.QMUIAlphaTextView;
import com.qmuiteam.qmui.widget.QMUITopBar;
import com.scwang.smartrefresh.layout.SmartRefreshLayout;
import org.jetbrains.annotations.NotNull;
import java.util.List;
import butterknife.BindView;
......@@ -121,6 +127,16 @@ public class SupplierListFragment extends BaseSupplyChainFragment<SupplierListPr
pageIndex++;
getSupplierList();
});
initEditText();
}
private void initEditText() {
edSupplier.setOnEditorActionListener((v, actionId, event) -> {
if (event != null) {
return true;
}
return false;
});
}
private void getSupplierList() {
......@@ -140,10 +156,13 @@ public class SupplierListFragment extends BaseSupplyChainFragment<SupplierListPr
int viewId = v.getId();
if (viewId == R.id.topbar_right_screen_button) {
//篩選
} else if (viewId == R.id.btn_new_supplier) {
//新增供應商
startForResult(NewSupplierFragment.newInstance(null), SUPPLIER_LIST);
} else if (viewId == R.id.btn_supplier_search) {
//搜索供應商
pageIndex = 0;
getSupplierList();
} else if (viewId == R.id.btn_supplier_cancel) {
killMyself();
......@@ -173,7 +192,7 @@ public class SupplierListFragment extends BaseSupplyChainFragment<SupplierListPr
}
@Override
public void loadSupplierList(List<SupplierInfoBean> supplierBeanList) {
public void loadSupplierList(@NotNull List<SupplierInfoBean> supplierBeanList) {
smartRefreshLayout.finishRefresh();
smartRefreshLayout.finishLoadMore();
if (supplierBeanList.size() == 0) {
......
package com.gingersoft.supply_chain.mvp.ui.fragment.warehouse;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.EditText;
import android.widget.HorizontalScrollView;
import android.widget.ImageView;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import com.gingersoft.gsa.cloud.common.loadsir.EmptyCallback;
import com.gingersoft.gsa.cloud.common.loadsir.ErrorCallback;
import com.gingersoft.supply_chain.R;
import com.gingersoft.supply_chain.R2;
import com.gingersoft.supply_chain.di.component.DaggerWareHouseListComponent;
import com.gingersoft.supply_chain.mvp.bean.WareHouseListBean;
import com.gingersoft.supply_chain.mvp.contract.WareHouseListContract;
import com.gingersoft.supply_chain.mvp.presenter.WareHouseListPresenter;
import com.gingersoft.supply_chain.mvp.ui.adapter.WarehousingQueryAdapter;
import com.gingersoft.supply_chain.mvp.ui.fragment.BaseSupplyChainFragment;
import com.jess.arms.di.component.AppComponent;
import com.kingja.loadsir.callback.Callback;
import com.kingja.loadsir.callback.SuccessCallback;
import com.kingja.loadsir.core.LoadSir;
import com.qmuiteam.qmui.widget.QMUITopBar;
import com.scwang.smartrefresh.layout.SmartRefreshLayout;
import com.scwang.smartrefresh.layout.api.RefreshLayout;
import com.scwang.smartrefresh.layout.listener.OnLoadMoreListener;
import com.scwang.smartrefresh.layout.listener.OnRefreshListener;
import java.util.List;
import butterknife.BindView;
import butterknife.OnClick;
/**
* 庫存查詢列表
*/
public class WareHouseListFragment extends BaseSupplyChainFragment<WareHouseListPresenter> implements WareHouseListContract.View {
@BindView(R2.id.supply_top_bar)
QMUITopBar supplyTopBar;
@BindView(R2.id.iv_warehouse_list_search)
ImageView ivWarehouseListSearch;
@BindView(R2.id.ed_warehouse_list_search)
EditText edWarehouseListSearch;
@BindView(R2.id.tv_overdue_food_num)
TextView tvOverdueFoodNum;
@BindView(R2.id.tv_expiring_soon_food_num)
TextView tvExpiringSoonFoodNum;
@BindView(R2.id.tv_low_inventory_food_num)
TextView tvLowInventoryFoodNum;
@BindView(R2.id.tv_ingredients_cost_inventory)
TextView tvIngredientsCostInventory;
@BindView(R2.id.rv_warehouse_list)
RecyclerView rvWarehouseList;
@BindView(R2.id.sl_warehousing_list)
SmartRefreshLayout smartRefreshLayout;
@BindView(R2.id.hs_warehousing_list)
HorizontalScrollView hsWarehousingList;
@BindView(R2.id.tv_warehouse_item_unit_price)
TextView tvUnitPrice;
@BindView(R2.id.tv_warehouse_item_inventory_quantity)
TextView tvWarehousingQuantity;
@BindView(R2.id.tv_warehouse_item_total_amount)
TextView tvTotalAmount;
private int SORT_TYPE = 0;
/**
* 升序或降序
*/
private boolean isAscending = false;
private int pageIndex = 0;
private WarehousingQueryAdapter warehousingQueryAdapter;
public static WareHouseListFragment newInstance() {
WareHouseListFragment fragment = new WareHouseListFragment();
return fragment;
}
@Override
public void setupFragmentComponent(@NonNull AppComponent appComponent) {
DaggerWareHouseListComponent //如找不到该类,请编译一下项目
.builder()
.appComponent(appComponent)
.view(this)
.build()
.inject(this);
}
@Override
public View initView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment_ware_house_list, container, false);
}
@Override
public void initData(@Nullable Bundle savedInstanceState) {
smartRefreshLayout.setPrimaryColorsId(R.color.trans, R.color.black);
initTopBar(supplyTopBar, "庫存查詢");
loadService = LoadSir.getDefault().register(rvWarehouseList);
smartRefreshLayout.setOnRefreshListener(refreshLayout -> {
pageIndex = 0;
getWarehousing();
});
smartRefreshLayout.setOnLoadMoreListener(refreshLayout -> {
pageIndex++;
getWarehousing();
});
getWarehousing();
}
private void getWarehousing() {
mPresenter.getWarehousing(pageIndex, edWarehouseListSearch.getText() + "");
}
@OnClick({R2.id.iv_warehouse_list_search, R2.id.tv_warehouse_item_unit_price, R2.id.tv_warehouse_item_inventory_quantity, R2.id.tv_warehouse_item_total_amount})
public void OnClick(View view) {
int id = view.getId();
if (id == R.id.iv_warehouse_list_search) {
pageIndex = 0;
getWarehousing();
} else if (id == R.id.tv_warehouse_item_unit_price) {
//切換按單價排序
sort(mPresenter.SORT_UNIT_PRICE);
} else if (id == R.id.tv_warehouse_item_inventory_quantity) {
//按庫存數量排序
sort(mPresenter.SORT_WAREHOUSING_NUM);
} else if (id == R.id.tv_warehouse_item_total_amount) {
//按總價排序
sort(mPresenter.SORT_TOTAL_AMOUNT);
}
}
private void sort(int sortType) {
if (SORT_TYPE == sortType) {
isAscending = !isAscending;
} else {
SORT_TYPE = sortType;
}
mPresenter.sortByType(SORT_TYPE, isAscending);
}
@Override
public void loadWarehousingInfo(WareHouseListBean.WareHousingDataBean data) {
WareHouseListBean.WareHousingDataBean.TotalBean total = data.getTotal();
tvOverdueFoodNum.setText(total.getOverdue() + "");
tvExpiringSoonFoodNum.setText(total.getAboutExpire() + "");
tvLowInventoryFoodNum.setText(total.getOutStock() + "");
tvIngredientsCostInventory.setText(String.format(getString(R.string.amount_string), total.getCost()));
loadListInfo(data.getPurchaseWarehousingOrderDetailsVOS());
}
@Override
public void finishLoad() {
smartRefreshLayout.finishRefresh();
smartRefreshLayout.finishLoadMore();
}
@Override
public void loadFail() {
finishLoad();
loadService.showCallback(ErrorCallback.class);
}
@Override
public void loadListInfo(List<WareHouseListBean.WareHousingDataBean.PurchaseWarehousingOrderDetailsVOSBean> purchaseWarehousingOrderDetailsVos) {
if (purchaseWarehousingOrderDetailsVos == null || purchaseWarehousingOrderDetailsVos.size() <= 0) {
loadService.showCallback(EmptyCallback.class);
return;
} else {
loadService.showSuccess();
}
// WareHouseListBean.WareHousingDataBean.PurchaseWarehousingOrderDetailsVOSBean purchaseWarehousingOrderDetailsVosBean = new WareHouseListBean.WareHousingDataBean.PurchaseWarehousingOrderDetailsVOSBean();
// purchaseWarehousingOrderDetailsVosBean.setName("食材名");
// purchaseWarehousingOrderDetailsVosBean.setCateName("食材種類");
// purchaseWarehousingOrderDetailsVosBean.setSupplierName("供應商");
// purchaseWarehousingOrderDetailsVosBean.setBasicUnitName("單位");
// purchaseWarehousingOrderDetailsVosBean.setFoodPrice("單價");
// purchaseWarehousingOrderDetailsVosBean.setFoodNum("庫存數量");
// purchaseWarehousingOrderDetailsVosBean.setFoodAmount("總價");
// purchaseWarehousingOrderDetailsVos.add(0, purchaseWarehousingOrderDetailsVosBean);
if (warehousingQueryAdapter == null) {
warehousingQueryAdapter = new WarehousingQueryAdapter(mContext, purchaseWarehousingOrderDetailsVos);
rvWarehouseList.setLayoutManager(new LinearLayoutManager(mContext));
rvWarehouseList.setAdapter(warehousingQueryAdapter);
} else {
warehousingQueryAdapter.setList(purchaseWarehousingOrderDetailsVos);
}
}
}
package com.gingersoft.supply_chain.mvp.ui.fragment.warehouse;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import com.gingersoft.supply_chain.R;
import com.gingersoft.supply_chain.di.component.DaggerWareHousingDetailsComponent;
import com.gingersoft.supply_chain.mvp.contract.WareHousingDetailsContract;
import com.gingersoft.supply_chain.mvp.presenter.WareHousingDetailsPresenter;
import com.gingersoft.supply_chain.mvp.ui.fragment.BaseSupplyChainFragment;
import com.jess.arms.di.component.AppComponent;
/**
* ================================================
* Description: 入庫庫存詳情
*/
public class WareHousingDetailsFragment extends BaseSupplyChainFragment<WareHousingDetailsPresenter> implements WareHousingDetailsContract.View {
public static WareHousingDetailsFragment newInstance() {
WareHousingDetailsFragment fragment = new WareHousingDetailsFragment();
return fragment;
}
@Override
public void setupFragmentComponent(@NonNull AppComponent appComponent) {
DaggerWareHousingDetailsComponent //如找不到该类,请编译一下项目
.builder()
.appComponent(appComponent)
.view(this)
.build()
.inject(this);
}
@Override
public View initView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment_ware_housing_details, container, false);
}
@Override
public void initData(@Nullable Bundle savedInstanceState) {
}
}
package com.gingersoft.supply_chain.mvp.ui.widget;
import android.content.Context;
import android.text.InputFilter;
import android.view.View;
import android.widget.EditText;
import androidx.annotation.NonNull;
import com.gingersoft.gsa.cloud.common.utils.inputFilter.InputFilterUtils;
import com.gingersoft.supply_chain.R;
import com.lxj.xpopup.impl.ConfirmPopupView;
import com.lxj.xpopup.impl.InputConfirmPopupView;
/**
* @author 宇航.
* User: admin
* Date: 2021/1/15
* Time: 9:45
* Use: 新增分類的彈窗
*/
public class CategoryPopup extends ConfirmPopupView {
private boolean showDelete;
private EditText et_input;
public CategoryPopup(@NonNull Context context, CharSequence title, CharSequence content, CharSequence hint, boolean showDelete) {
super(context, R.layout.dialog_new_category);
setTitleContent(title, content, hint);
this.showDelete = showDelete;
}
@Override
protected void onCreate() {
super.onCreate();
findViewById(R.id.iv_create_category_close).setOnClickListener(v -> dialog.dismiss());
findViewById(R.id.tv_cancel).setVisibility(showDelete ? View.VISIBLE : GONE);
et_input = findViewById(R.id.et_input);
et_input.setFilters(new InputFilter[]{InputFilterUtils.getLengthFilter(getContext(), 4), InputFilterUtils.getChAndEnAndNumInputFilter(getContext())});
}
public EditText getEditText() {
return et_input;
}
}
package com.gingersoft.supply_chain.mvp.utils;
/**
* @author 宇航.
* User: admin
* Date: 2021/1/14
* Time: 10:13
* Use: fragment頁面實現此接口,不攔截
*/
public interface NotDispatchListener {}
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