Commit de5cc93a by mReturn

收发货详情页面数据调整

parent b5fa1426
package com.dayu.base.ui.adapter; package com.dayu.base.ui.adapter;
import android.app.Activity; import android.app.Activity;
import android.content.Intent;
import android.os.Environment; import android.os.Environment;
import android.support.annotation.NonNull; import android.support.annotation.NonNull;
import android.support.v7.widget.RecyclerView; import android.support.v7.widget.RecyclerView;
...@@ -11,7 +10,7 @@ import android.view.ViewGroup; ...@@ -11,7 +10,7 @@ import android.view.ViewGroup;
import android.widget.ImageView; import android.widget.ImageView;
import android.widget.RelativeLayout; import android.widget.RelativeLayout;
import com.dayu.base.ui.activity.PreviewActivty; import com.dayu.base.ui.activity.ImgGalleryActivty;
import com.dayu.baselibrary.R; import com.dayu.baselibrary.R;
import com.dayu.common.Constants; import com.dayu.common.Constants;
import com.dayu.utils.GlideImageLoader; import com.dayu.utils.GlideImageLoader;
...@@ -81,13 +80,13 @@ public class PhotoViewAdapter extends RecyclerView.Adapter<PhotoViewAdapter.Hold ...@@ -81,13 +80,13 @@ public class PhotoViewAdapter extends RecyclerView.Adapter<PhotoViewAdapter.Hold
holder.picture.setOnClickListener(v -> showPicDialog()); holder.picture.setOnClickListener(v -> showPicDialog());
} else { } else {
holder.delete.setVisibility(canDelete?View.VISIBLE:View.GONE); holder.delete.setVisibility(canDelete?View.VISIBLE:View.GONE);
GlideImageLoader.load(context, list.get(position), holder.picture); GlideImageLoader.load(context, holder.picture,list.get(position), -1);
holder.delete.setOnClickListener(v -> removeItem(position)); holder.delete.setOnClickListener(v -> removeItem(position));
holder.picture.setOnClickListener(v -> { holder.picture.setOnClickListener(v -> {
ArrayList temp = new ArrayList(); ArrayList temp = new ArrayList();
temp.addAll(list); temp.addAll(list);
temp.remove("add"); temp.remove("add");
dumpPic(temp); dumpPic(temp,position);
}); });
} }
} }
...@@ -157,10 +156,12 @@ public class PhotoViewAdapter extends RecyclerView.Adapter<PhotoViewAdapter.Hold ...@@ -157,10 +156,12 @@ public class PhotoViewAdapter extends RecyclerView.Adapter<PhotoViewAdapter.Hold
return path; return path;
} }
private void dumpPic(ArrayList<String> list) { private void dumpPic(ArrayList<String> list, int position) {
Intent intent = new Intent(context, PreviewActivty.class); ImgGalleryActivty.launch(context, list.get(position));
intent.putStringArrayListExtra(Constants.BUNDLE_KEY_ID, list);
int DELETECODE = 0; // Intent intent = new Intent(context, PreviewActivty.class);
context.startActivityForResult(intent, DELETECODE); // intent.putStringArrayListExtra(Constants.BUNDLE_KEY_ID, list);
// int DELETECODE = 0;
// context.startActivityForResult(intent, DELETECODE);
} }
} }
...@@ -193,6 +193,7 @@ public class Constants { ...@@ -193,6 +193,7 @@ public class Constants {
public final static String CAN_EDIT = "can_edit"; public final static String CAN_EDIT = "can_edit";
//订单详情 //订单详情
public final static String ORDER_DETAIL = "order_detail"; public final static String ORDER_DETAIL = "order_detail";
public final static String PART_DETAIL = "part_detail";
//数据返回失败标识 //数据返回失败标识
public final static int FAILED = -1; public final static int FAILED = -1;
//相册选择照片删除时传递的key //相册选择照片删除时传递的key
......
package com.dayu.order.api.protocol.bean; package com.dayu.order.api.protocol.bean;
public class OrderPartListBean { import java.io.Serializable;
public class OrderPartListBean implements Serializable {
/** /**
* id : 35 * id : 35
...@@ -66,8 +68,8 @@ public class OrderPartListBean { ...@@ -66,8 +68,8 @@ public class OrderPartListBean {
private String sendAddress; private String sendAddress;
private Object orderBelongId; private Object orderBelongId;
private Object orderBelongType; private Object orderBelongType;
private Object comment; private String comment;
private Object receiverPicUrl; private String receiverPicUrl;
private Object totalPrice; private Object totalPrice;
private String createTime; private String createTime;
private Object key; private Object key;
...@@ -296,19 +298,19 @@ public class OrderPartListBean { ...@@ -296,19 +298,19 @@ public class OrderPartListBean {
this.orderBelongType = orderBelongType; this.orderBelongType = orderBelongType;
} }
public Object getComment() { public String getComment() {
return comment; return comment;
} }
public void setComment(Object comment) { public void setComment(String comment) {
this.comment = comment; this.comment = comment;
} }
public Object getReceiverPicUrl() { public String getReceiverPicUrl() {
return receiverPicUrl; return receiverPicUrl;
} }
public void setReceiverPicUrl(Object receiverPicUrl) { public void setReceiverPicUrl(String receiverPicUrl) {
this.receiverPicUrl = receiverPicUrl; this.receiverPicUrl = receiverPicUrl;
} }
......
...@@ -11,6 +11,7 @@ import com.dayu.order.api.OrderApiFactory; ...@@ -11,6 +11,7 @@ import com.dayu.order.api.OrderApiFactory;
import com.dayu.order.api.OrderService; import com.dayu.order.api.OrderService;
import com.dayu.order.api.protocol.OrderDetail; import com.dayu.order.api.protocol.OrderDetail;
import com.dayu.order.api.protocol.OrderPart; import com.dayu.order.api.protocol.OrderPart;
import com.dayu.order.api.protocol.bean.OrderPartListBean;
import com.dayu.order.ui.activity.ApplyAndRefuseActivity; import com.dayu.order.ui.activity.ApplyAndRefuseActivity;
import com.dayu.order.ui.activity.LogisticsInfoActivity; import com.dayu.order.ui.activity.LogisticsInfoActivity;
import com.dayu.order.ui.activity.OrderPartReceiveActivity; import com.dayu.order.ui.activity.OrderPartReceiveActivity;
...@@ -18,7 +19,6 @@ import com.dayu.order.ui.activity.OrderPartSendActivity; ...@@ -18,7 +19,6 @@ import com.dayu.order.ui.activity.OrderPartSendActivity;
import com.dayu.order.ui.activity.ReturnPartActivity; import com.dayu.order.ui.activity.ReturnPartActivity;
import com.dayu.utils.UIUtils; import com.dayu.utils.UIUtils;
import com.dayu.utils.UserManager; import com.dayu.utils.UserManager;
import com.megvii.idcardlib.util.Constant;
import com.umeng.analytics.MobclickAgent; import com.umeng.analytics.MobclickAgent;
import io.reactivex.Observable; import io.reactivex.Observable;
...@@ -85,7 +85,6 @@ public class OrderPartPresenter extends OrderPartContract.Presenter { ...@@ -85,7 +85,6 @@ public class OrderPartPresenter extends OrderPartContract.Presenter {
@Override @Override
public void applyOrReturnPart() { public void applyOrReturnPart() {
toDetail(true,-1);
// if (mType == 1) { // if (mType == 1) {
// Bundle bundle = new Bundle(); // Bundle bundle = new Bundle();
// bundle.putInt(Constants.ORDER_ID, mOrderId); // bundle.putInt(Constants.ORDER_ID, mOrderId);
...@@ -97,11 +96,12 @@ public class OrderPartPresenter extends OrderPartContract.Presenter { ...@@ -97,11 +96,12 @@ public class OrderPartPresenter extends OrderPartContract.Presenter {
// } // }
} }
public void toDetail(boolean canEdit,int partId) { public void toDetail(boolean canEdit, OrderPartListBean partListBean) {
Bundle bundle = new Bundle(); Bundle bundle = new Bundle();
bundle.putBoolean(Constants.CAN_EDIT,canEdit); bundle.putBoolean(Constants.CAN_EDIT,canEdit);
bundle.putInt(Constants.ID,partId); bundle.putInt(Constants.ID, partListBean.getId());
bundle.putSerializable(Constants.ORDER_DETAIL, mDetail); bundle.putSerializable(Constants.ORDER_DETAIL, mDetail);
bundle.putSerializable(Constants.PART_DETAIL, partListBean);
if (mType == 1) { if (mType == 1) {
mView.startActivity(OrderPartReceiveActivity.class, bundle); mView.startActivity(OrderPartReceiveActivity.class, bundle);
} else if (mType == 2) { } else if (mType == 2) {
......
...@@ -4,6 +4,7 @@ package com.dayu.order.presenter.orderpart_receive; ...@@ -4,6 +4,7 @@ package com.dayu.order.presenter.orderpart_receive;
import com.dayu.base.ui.presenter.BasePresenter; import com.dayu.base.ui.presenter.BasePresenter;
import com.dayu.common.BaseView; import com.dayu.common.BaseView;
import com.dayu.order.api.protocol.bean.OrderPardDeatilBean; import com.dayu.order.api.protocol.bean.OrderPardDeatilBean;
import com.dayu.order.api.protocol.bean.OrderPartListBean;
import java.util.List; import java.util.List;
...@@ -39,6 +40,8 @@ public interface PartReceiveContract { ...@@ -39,6 +40,8 @@ public interface PartReceiveContract {
* 收货详情 * 收货详情
*/ */
void setDetailData(OrderPardDeatilBean data); void setDetailData(OrderPardDeatilBean data);
void setPartDetail(OrderPartListBean partDetail);
} }
abstract class Presenter extends BasePresenter<View> { abstract class Presenter extends BasePresenter<View> {
......
...@@ -8,16 +8,13 @@ import com.dayu.base.api.Api; ...@@ -8,16 +8,13 @@ import com.dayu.base.api.Api;
import com.dayu.base.api.BaseApiFactory; import com.dayu.base.api.BaseApiFactory;
import com.dayu.common.Constants; import com.dayu.common.Constants;
import com.dayu.event.UserInfo; import com.dayu.event.UserInfo;
import com.dayu.order.R;
import com.dayu.order.api.OrderApiFactory;
import com.dayu.order.api.OrderService; import com.dayu.order.api.OrderService;
import com.dayu.order.api.protocol.OrderDetail; import com.dayu.order.api.protocol.OrderDetail;
import com.dayu.order.api.protocol.ShipperCompany;
import com.dayu.order.api.protocol.bean.OrderPardDeatilBean; import com.dayu.order.api.protocol.bean.OrderPardDeatilBean;
import com.dayu.order.api.protocol.bean.OrderPartListBean;
import com.dayu.order.api.protocol.data.ReceivePartData; import com.dayu.order.api.protocol.data.ReceivePartData;
import com.dayu.order.api.protocol.data.SendPartData;
import com.dayu.order.common.PartReceiverEvent; import com.dayu.order.common.PartReceiverEvent;
import com.dayu.order.presenter.orderpart_send.PartSendContract; import com.dayu.utils.CommonUtils;
import com.dayu.utils.ToastUtils; import com.dayu.utils.ToastUtils;
import com.dayu.utils.UserManager; import com.dayu.utils.UserManager;
...@@ -42,7 +39,22 @@ public class PartRecievePresenter extends PartReceiveContract.Presenter { ...@@ -42,7 +39,22 @@ public class PartRecievePresenter extends PartReceiveContract.Presenter {
mDetail = (OrderDetail) bundle.getSerializable(Constants.ORDER_DETAIL); mDetail = (OrderDetail) bundle.getSerializable(Constants.ORDER_DETAIL);
mView.setCanEdit(canEdit); mView.setCanEdit(canEdit);
partId = bundle.getInt(Constants.ID); partId = bundle.getInt(Constants.ID);
getDetailData(partId); // getDetailData(partId);
initPartDetail(bundle);
}
//详情
private void initPartDetail(Bundle bundle) {
OrderPartListBean partDetail = (OrderPartListBean) bundle.getSerializable(Constants.PART_DETAIL);
if (partDetail != null) {
mView.setPartDetail(partDetail);
remark.set(partDetail.getComment());
if (!canEdit) {
List<String> imgs = CommonUtils.string2ListF(partDetail.getReceiverPicUrl());
if (imgs.size() > 0)
mView.setImgs(imgs);
}
}
} }
//获取发货详情 //获取发货详情
...@@ -91,7 +103,7 @@ public class PartRecievePresenter extends PartReceiveContract.Presenter { ...@@ -91,7 +103,7 @@ public class PartRecievePresenter extends PartReceiveContract.Presenter {
pics.add(item); pics.add(item);
} }
} }
ReceivePartData receivedData = new ReceivePartData(partId, remark.get(),pics); ReceivePartData receivedData = new ReceivePartData(partId, remark.get(), pics);
Api.getService(OrderService.class).receivePart(receivedData).compose(Api.applySchedulers()) Api.getService(OrderService.class).receivePart(receivedData).compose(Api.applySchedulers())
.subscribe(baseObserver(success -> { .subscribe(baseObserver(success -> {
if (success) { if (success) {
......
...@@ -15,6 +15,7 @@ import com.dayu.order.api.OrderService; ...@@ -15,6 +15,7 @@ import com.dayu.order.api.OrderService;
import com.dayu.order.api.protocol.OrderDetail; import com.dayu.order.api.protocol.OrderDetail;
import com.dayu.order.api.protocol.ShipperCompany; import com.dayu.order.api.protocol.ShipperCompany;
import com.dayu.order.api.protocol.bean.OrderPardDeatilBean; import com.dayu.order.api.protocol.bean.OrderPardDeatilBean;
import com.dayu.order.api.protocol.bean.OrderPartListBean;
import com.dayu.order.api.protocol.data.PartSendData; import com.dayu.order.api.protocol.data.PartSendData;
import com.dayu.order.api.protocol.data.SendPartData; import com.dayu.order.api.protocol.data.SendPartData;
import com.dayu.order.common.PartSendEvent; import com.dayu.order.common.PartSendEvent;
...@@ -54,7 +55,8 @@ public class PartSendPresenter extends PartSendContract.Presenter { ...@@ -54,7 +55,8 @@ public class PartSendPresenter extends PartSendContract.Presenter {
mView.setCanEdit(canEdit); mView.setCanEdit(canEdit);
if (!canEdit) { if (!canEdit) {
int partId = bundle.getInt(Constants.ID); int partId = bundle.getInt(Constants.ID);
getDetailData(partId); // getDetailData(partId);
initPartDetail(bundle);
return; return;
} }
if (mDetail.getSource() == 1) { if (mDetail.getSource() == 1) {
...@@ -81,17 +83,34 @@ public class PartSendPresenter extends PartSendContract.Presenter { ...@@ -81,17 +83,34 @@ public class PartSendPresenter extends PartSendContract.Presenter {
private void getUserAddrData() { private void getUserAddrData() {
Api.getService(APIService.class).getAddressInfo(Integer.parseInt(mUser.getAccountId())).compose(Api.applySchedulers()) Api.getService(APIService.class).getAddressInfo(Integer.parseInt(mUser.getAccountId())).compose(Api.applySchedulers())
.subscribe(baseObserver(data -> { .subscribe(baseObserver(data -> {
useAddress = data.getProvinceName()+" "+data.getCityName() useAddress = data.getProvinceName() + data.getCityName()
+" "+data.getDistrictName()+" "+data.getAddress(); + data.getDistrictName() + data.getAddress();
})); }));
} }
//详情
private void initPartDetail(Bundle bundle) {
OrderPartListBean data = (OrderPartListBean) bundle.getSerializable(Constants.PART_DETAIL);
if (data != null) {
// company.set(data.getReceiverName());
address.set(data.getReceiverAddress());
contacter.set(data.getReceiverName());
contactPhone.set(data.getReceiverMobile());
goodsListStr.set(data.getSparePartName());
courierNum.set(data.getSendCourierNumber());
courierCompany.set(data.getSendCourierCompany());
List<String> imgs = CommonUtils.string2ListF(data.getSendPicUrl());
if (imgs.size() > 0)
mView.setImgs(imgs);
}
}
//获取发货详情 //获取发货详情
private void getDetailData(int partId) { private void getDetailData(int partId) {
mView.showDialog(); mView.showDialog();
Api.getService(OrderService.class).getPartDetail(partId).compose(Api.applySchedulers()) Api.getService(OrderService.class).getPartDetail(partId).compose(Api.applySchedulers())
.subscribe(baseObserver(data->{ .subscribe(baseObserver(data -> {
if (data != null){ if (data != null) {
company.set(data.getReceiveOrg()); company.set(data.getReceiveOrg());
address.set(data.getReceiverAddress()); address.set(data.getReceiverAddress());
contacter.set(data.getReceiverName()); contacter.set(data.getReceiverName());
...@@ -99,9 +118,9 @@ public class PartSendPresenter extends PartSendContract.Presenter { ...@@ -99,9 +118,9 @@ public class PartSendPresenter extends PartSendContract.Presenter {
goodsListStr.set(data.getSendItems()); goodsListStr.set(data.getSendItems());
courierNum.set(data.getCourierNumber()); courierNum.set(data.getCourierNumber());
courierCompany.set(data.getCourierCompany()); courierCompany.set(data.getCourierCompany());
if (data.getPics() != null && data.getPics().size()>0){ if (data.getPics() != null && data.getPics().size() > 0) {
List<String> imgs = new ArrayList<>(); List<String> imgs = new ArrayList<>();
for (OrderPardDeatilBean.PicsBean picsBean : data.getPics()){ for (OrderPardDeatilBean.PicsBean picsBean : data.getPics()) {
if (!TextUtils.isEmpty(picsBean.getPicUrl())) if (!TextUtils.isEmpty(picsBean.getPicUrl()))
imgs.add(picsBean.getPicUrl()); imgs.add(picsBean.getPicUrl());
} }
...@@ -143,10 +162,10 @@ public class PartSendPresenter extends PartSendContract.Presenter { ...@@ -143,10 +162,10 @@ public class PartSendPresenter extends PartSendContract.Presenter {
if (data != null) { if (data != null) {
courierCompany.set(data.getShipperName()); courierCompany.set(data.getShipperName());
mShipperCode = data.getShipperCode(); mShipperCode = data.getShipperCode();
}else { } else {
getTransCompanys(); getTransCompanys();
} }
},responeThrowable -> getTransCompanys())); }, responeThrowable -> getTransCompanys()));
} }
...@@ -204,7 +223,7 @@ public class PartSendPresenter extends PartSendContract.Presenter { ...@@ -204,7 +223,7 @@ public class PartSendPresenter extends PartSendContract.Presenter {
.subscribe(baseObserver(imgs -> { .subscribe(baseObserver(imgs -> {
sendPart(imgs); sendPart(imgs);
})); }));
}else { } else {
sendPart(null); sendPart(null);
} }
} }
...@@ -215,9 +234,9 @@ public class PartSendPresenter extends PartSendContract.Presenter { ...@@ -215,9 +234,9 @@ public class PartSendPresenter extends PartSendContract.Presenter {
private void sendPart(List<String> imgs) { private void sendPart(List<String> imgs) {
String picUrl = CommonUtils.list2String(imgs); String picUrl = CommonUtils.list2String(imgs);
mView.showDialog(); mView.showDialog();
PartSendData sendData = new PartSendData(mDetail.getId(),mDetail.getOrderNum(),address.get(),contactPhone.get(), PartSendData sendData = new PartSendData(mDetail.getId(), mDetail.getOrderNum(), address.get(), contactPhone.get(),
contacter.get(),picUrl,useAddress,courierNum.get(),courierCompany.get(),mShipperCode, contacter.get(), picUrl, useAddress, courierNum.get(), courierCompany.get(), mShipperCode,
mUser.getMobile(),mUser.getAccountName(),mUser.getAccountName(),goodsListStr.get(),sendStoreId,sendStoreType); mUser.getMobile(), mUser.getAccountName(), mUser.getAccountName(), goodsListStr.get(), sendStoreId, sendStoreType);
Api.getService(OrderService.class).sendPart(sendData).compose(Api.applySchedulers()) Api.getService(OrderService.class).sendPart(sendData).compose(Api.applySchedulers())
.subscribe(baseObserver(success -> { .subscribe(baseObserver(success -> {
if (success) { if (success) {
......
...@@ -10,6 +10,7 @@ import com.dayu.base.ui.adapter.PhotoViewAdapter; ...@@ -10,6 +10,7 @@ import com.dayu.base.ui.adapter.PhotoViewAdapter;
import com.dayu.base.ui.adapter.SpacesItemDecoration; import com.dayu.base.ui.adapter.SpacesItemDecoration;
import com.dayu.order.R; import com.dayu.order.R;
import com.dayu.order.api.protocol.bean.OrderPardDeatilBean; import com.dayu.order.api.protocol.bean.OrderPardDeatilBean;
import com.dayu.order.api.protocol.bean.OrderPartListBean;
import com.dayu.order.databinding.ActivityOrderPartReceiveBinding; import com.dayu.order.databinding.ActivityOrderPartReceiveBinding;
import com.dayu.order.presenter.orderpart_receive.PartReceiveContract; import com.dayu.order.presenter.orderpart_receive.PartReceiveContract;
import com.dayu.order.presenter.orderpart_receive.PartRecievePresenter; import com.dayu.order.presenter.orderpart_receive.PartRecievePresenter;
...@@ -118,4 +119,15 @@ public class OrderPartReceiveActivity extends BaseActivity<PartRecievePresenter, ...@@ -118,4 +119,15 @@ public class OrderPartReceiveActivity extends BaseActivity<PartRecievePresenter,
mBind.tvPhone.setText(data.getReceiverMobile()); mBind.tvPhone.setText(data.getReceiverMobile());
mBind.tvList.setText(data.getSendItems()); mBind.tvList.setText(data.getSendItems());
} }
@Override
public void setPartDetail(OrderPartListBean data) {
mBind.tvCode.setText(data.getSendCourierNumber());
mBind.tvCompany.setText(data.getSendCourierCompany());
mBind.tvDate.setText(data.getCreateTime());
mBind.tvAddress.setText(data.getReceiverAddress());
mBind.tvName.setText(data.getReceiverName());
mBind.tvPhone.setText(data.getReceiverMobile());
mBind.tvList.setText(data.getSparePartName());
}
} }
...@@ -35,7 +35,7 @@ public class OrderPartListAdapter extends CoreAdapter<OrderPartListBean,ItemOrde ...@@ -35,7 +35,7 @@ public class OrderPartListAdapter extends CoreAdapter<OrderPartListBean,ItemOrde
if (type == 1 && item.getStatus() == 2){ if (type == 1 && item.getStatus() == 2){
holder.btnStatus.setBackgroundResource(R.drawable.btn_blue_commom); holder.btnStatus.setBackgroundResource(R.drawable.btn_blue_commom);
holder.btnStatus.setTextColor(mContext.getResources().getColor(R.color.white)); holder.btnStatus.setTextColor(mContext.getResources().getColor(R.color.white));
holder.btnStatus.setOnClickListener(view -> presenter.toDetail(true,item.getId())); holder.btnStatus.setOnClickListener(view -> presenter.toDetail(true,item));
}else{ }else{
holder.btnStatus.setTextColor(mContext.getResources().getColor(R.color.common_text_color)); holder.btnStatus.setTextColor(mContext.getResources().getColor(R.color.common_text_color));
holder.btnStatus.setBackgroundResource(R.drawable.btn_black_react); holder.btnStatus.setBackgroundResource(R.drawable.btn_black_react);
......
...@@ -51,9 +51,9 @@ public class ApplicationOrderPartFragment extends BaseFragment<OrderPartPresente ...@@ -51,9 +51,9 @@ public class ApplicationOrderPartFragment extends BaseFragment<OrderPartPresente
if (item.getStatus() == 1) if (item.getStatus() == 1)
return; return;
if (mType == 1 && item.getStatus() ==2 ){ if (mType == 1 && item.getStatus() ==2 ){
mPresenter.toDetail(true,item.getId()); mPresenter.toDetail(true,item);
}else{ }else{
mPresenter.toDetail(false,item.getId()); mPresenter.toDetail(false,item);
} }
}); });
} }
......
...@@ -174,7 +174,7 @@ ...@@ -174,7 +174,7 @@
<android.support.v7.widget.RecyclerView <android.support.v7.widget.RecyclerView
android:id="@+id/photo" android:id="@+id/photo"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="80dp"
android:layout_marginLeft="10dp" android:layout_marginLeft="10dp"
android:layout_marginRight="10dp" android:layout_marginRight="10dp"
android:layout_marginBottom="15dp" /> android:layout_marginBottom="15dp" />
......
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 sign in to comment