Commit f9bc24fa by 刘鹏飞

Merge remote-tracking branch 'remotes/origin/feature/coco-payGift-刘鹏飞' into develop

# Conflicts:
#	assortment-ordercenter-sdk/pom.xml
#	order-application-service/pom.xml
#	order-application-service/src/main/java/cn/freemud/enums/ResponseResult.java
#	order-application-service/src/main/java/cn/freemud/service/impl/CheckOrder.java
#	order-application-service/src/main/java/cn/freemud/service/impl/OrderServiceImpl.java
#	ordercenter-sdk/pom.xml
#	shopping-cart-application-service/src/main/java/cn/freemud/service/impl/ShoppingCartNewServiceImpl.java
parents 2a55595b a5dadfc0
......@@ -10,7 +10,7 @@
<modelVersion>4.0.0</modelVersion>
<artifactId>assortment-ordercenter-sdk</artifactId>
<version>2.2.18-SNAPSHOT</version>
<version>2.2.19-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
......@@ -38,7 +38,7 @@
<dependency>
<groupId>cn.freemud</groupId>
<artifactId>ordercenter-sdk</artifactId>
<version>1.7.3-SNAPSHOT</version>
<version>1.7.4-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>com.freemud.application.service.sdk</groupId>
......
......@@ -107,3 +107,4 @@
| 2.2.15-SNAPSHOT| 拼单 | 缪晖 | 2020-12-2 |
| 2.2.17-SNAPSHOT| 带券订单下单直接锁券 | 李小二 | 2020-12-2 |
| 2.2.18-SNAPSHOT| 抖音支付新增抖音单号和openId | 张志恒 | 2020-12-4 |
| 2.2.19-SNAPSHOT| 买一赠一寄件 | 刘鹏飞 | 2020-12-11 |
\ No newline at end of file
......@@ -40,7 +40,7 @@
<dependency>
<groupId>cn.freemud</groupId>
<artifactId>assortment-ordercenter-sdk</artifactId>
<version>2.2.18-SNAPSHOT</version>
<version>2.2.19-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>com.freemud.application.service.sdk</groupId>
......
......@@ -9,6 +9,8 @@ public class ResponseCodeConstant {
public final static String RESPONSE_SUCCESS_STR = "100";
public final static String COCO_RESPONSE_COUPON_ERR_STR = "49000";
public final static String RESPONSE_SUCCESS_OK = "ok";
public final static Integer RESPONSE_SUCCESS_1 = 1;
public final static String RESPONSE_SUCCESS_0_STR = "0";
......
......@@ -13,6 +13,8 @@
package cn.freemud.entities.dto.activity;
import cn.freemud.entities.vo.PayGiftCouponVo;
import cn.freemud.entities.vo.PayGiftGoodsConfigVo;
import cn.freemud.entities.vo.PayGiftMicroProgramConfigVo;
import cn.freemud.entities.vo.PayGiftWechatCouponInfoVo;
import lombok.Data;
......@@ -35,4 +37,34 @@ public class PayGiftCheckAndJoinResponseDto {
private String type;
private List<PayGiftCouponVo> coupons;
private PayGiftWechatCouponInfoVo wechatCouponInfo;
/**
* 奖励类型:1-非码券,2-微信商家券,3-弹窗奖励
*/
private String syncWechat;
/**
* 活动配图
*/
private String activityPicture;
/**
* 跳转设置(跳转类型) 0:无 5:跳转页面 10:外部小程序 15:跳转商品 20:跳转H5
*/
private String redirectType;
/**
* 跳转商品
*/
private PayGiftGoodsConfigVo goodsConfig;
/**
* 跳转小程序
*/
private PayGiftMicroProgramConfigVo microProgramConfig;
/**
* 跳转页面5和20跳转外部H5对应的路径或者URL
*/
private String redirectPage;
}
......@@ -167,7 +167,7 @@ public class CreateOrderVo {
/**
* 券码列表
*/
private List<String> couponCodes;
private List<couponCode> couponCodes;
/**
* 运费券code
......@@ -440,4 +440,21 @@ public class CreateOrderVo {
*/
private Boolean sendCoupon;
}
@Data
public final static class couponCode {
/**
* 优惠券
*/
private String couponCode;
/**
* 活动号
*/
private String activityCode;
/**
* 顺序
*/
private Integer index;
}
}
package cn.freemud.entities.vo;
import lombok.Data;
@Data
public class PayGiftGoodsConfigVo {
/**
* 跳转商品ID
*/
private String goodsId;
/**
* 跳转商品名称
*/
private String goodsName;
/**
* 跳转商品价格,单位分
*/
private Integer price;
}
package cn.freemud.entities.vo;
import lombok.Data;
@Data
public class PayGiftMicroProgramConfigVo {
/**
* 跳转小程序ID
*/
private String appId;
/**
* 跳转小程序跳转路径
*/
private String redirectUrl;
}
......@@ -371,6 +371,37 @@ public class QueryOrderResponseVo {
private List<PayGiftCouponVo> coupons;
private PayGiftWechatCouponInfoVo wechatCouponInfo;
/**
* 支付有礼奖励类型:1-非码券,2-微信商家券,3-弹窗奖励
*/
private String syncWechat;
/**
* 支付有礼活动配图
*/
private String activityPicture;
/**
* 支付有礼跳转设置(跳转类型) 0:无 5:跳转页面 10:外部小程序 15:跳转商品 20:跳转H5
*/
private String redirectType;
/**
* 支付有礼跳转商品
*/
private PayGiftGoodsConfigVo goodsConfig;
/**
* 支付有礼跳转小程序
*/
private PayGiftMicroProgramConfigVo microProgramConfig;
/**
* 支付有礼跳转页面5和20跳转外部H5对应的路径或者URL
*/
private String redirectPage;
/**
* 收件人省份
*/
......
......@@ -207,6 +207,11 @@ public class ShoppingCartInfoRequestVo {
* 活动号
*/
private String activityCode;
/**
* 顺序
*/
private Integer index;
}
}
......@@ -227,6 +227,12 @@ public enum ResponseResult {
DELIVERY_INFO_NOT_DELIVERY("60001", "当前地址不可配送"),
DELIVERY_INFO_ERROR("60002","配送地址不正确"),
DELIVERY_CREATE_ERROR("60003","运单不足,配送失败"),
/**
* coco券验证失败
*/
COCO_COUPON_VALIDATOR_FAIL("70000", "优惠券验证错误"),
;
......
......@@ -579,7 +579,7 @@ public class CheckOrder {
// 校验couponCode
GetCouponDetailResponseDto getCouponDetailResponseDto = couponService.getMemberCoupon(GetMemberCouponRequestVo.builder()
.partnerId(createOrderVo.getPartnerId())
.couponCode(couponCode).build());
.couponCode(couponCode.getCouponCode()).build());
if (Objects.equals(getCouponDetailResponseDto, null) || CollectionUtils.isEmpty(getCouponDetailResponseDto.getDetails())
|| getCouponDetailResponseDto.getDetails().get(0).getActive() == null
|| getCouponDetailResponseDto.getDetails().get(0).getActive().getActiveCode() == null) {
......@@ -594,8 +594,9 @@ public class CheckOrder {
}
String activeCode = getCouponDetailResponseDto.getDetails().get(0).getActive().getActiveCode();
ShoppingCartInfoRequestVo.couponCode coupon = new ShoppingCartInfoRequestVo.couponCode();
coupon.setCouponCode(couponCode);
coupon.setCouponCode(couponCode.getCouponCode());
coupon.setActivityCode(activeCode);
coupon.setIndex(couponCode.getIndex());
couponCodes.add(coupon);
});
......@@ -620,6 +621,12 @@ public class CheckOrder {
} else {
apportionResponse = shoppingCartClient.getShoppingCartGoodsApportionNew(requestDto);
}
// 这个是专门的给coco使用的验证券的逻辑
if (ObjectUtils.equals(ResponseCodeConstant.COCO_RESPONSE_COUPON_ERR_STR, apportionResponse.getCode())) {
throw new ServiceException(ResponseResult.COCO_COUPON_VALIDATOR_FAIL,apportionResponse.getMessage());
}
if (!ObjectUtils.equals(ResponseCodeConstant.RESPONSE_SUCCESS_STR, apportionResponse.getCode())) {
ResponseResult responseResult = ResponseResult.getResponseResult(apportionResponse.getCode());
throw new ServiceException(responseResult != null ? responseResult : ResponseResult.SHOPPING_CART_GETINFO_ERROR);
......
......@@ -1281,6 +1281,14 @@ public class OrderServiceImpl implements Orderservice {
queryOrderResponseVo.setActivityName(payGiftResponse.getActivityName());
queryOrderResponseVo.setCoupons(payGiftResponse.getCoupons());
queryOrderResponseVo.setWechatCouponInfo(payGiftResponse.getWechatCouponInfo());
queryOrderResponseVo.setActivitySendType(payGiftResponse.getSendType());
queryOrderResponseVo.setSyncWechat(payGiftResponse.getSyncWechat());
queryOrderResponseVo.setActivityPicture(payGiftResponse.getActivityPicture());
queryOrderResponseVo.setRedirectType(payGiftResponse.getRedirectType());
queryOrderResponseVo.setGoodsConfig(payGiftResponse.getGoodsConfig());
queryOrderResponseVo.setMicroProgramConfig(payGiftResponse.getMicroProgramConfig());
queryOrderResponseVo.setRedirectPage(payGiftResponse.getRedirectPage());
queryOrderResponseVo.setActivitySendType(payGiftResponse.getSendType());
}
}
......
......@@ -120,10 +120,7 @@ public class CocoOrderRelationServiceImpl implements OrderRelationService {
if(null != masterProducts && !masterProducts.isEmpty()){
masterProducts.forEach(product -> {
Integer giftQty = product.getQty();
if(giftQty == 0){
return;
}
Integer giftQty = giftMap.get(product.getCid()) == null ? 0 : giftMap.get(product.getCid());
product.setQty(product.getQty() + giftQty);
});
}
......
......@@ -8,7 +8,7 @@
<version>1.0.0</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<version>1.7.3-SNAPSHOT</version>
<version>1.7.4-SNAPSHOT</version>
<artifactId>ordercenter-sdk</artifactId>
<dependencies>
......
......@@ -44,4 +44,5 @@
| 1.7.0-SNAPSHOT | 买一赠一寄件 | 刘鹏飞 | 2020-12-1 |
| 1.7.1-SNAPSHOT | 拼单 | 缪晖 | 2020-12-02 |
| 1.7.2-SNAPSHOT | coco订单详情赠品合并 | 刘鹏飞 | 2020-12-3 |
| 1.7.3-SNAPSHOT| 抖音支付新增抖音单号和openId | 张志恒 | 2020-12-4 |
\ No newline at end of file
| 1.7.3-SNAPSHOT| 抖音支付新增抖音单号和openId | 张志恒 | 2020-12-4 |
| 1.7.4-SNAPSHOT| 买一赠一寄件 | 刘鹏飞 | 2020-12-11 |
\ No newline at end of file
......@@ -31,5 +31,5 @@ public class OrderSendCouponReq {
/**
* 买一赠一寄件信息
*/
private List<OrderSendCouponUpdateReq> chooseGoods;
private List<OrderSendCouponUpdateReq> orderSendCouponRespList;
}
......@@ -9,6 +9,9 @@ public class ResponseCodeConstant {
public final static String RESPONSE_SUCCESS_STR = "100";
// coco券校验异常的错误
public final static String COCO_RESPONSE_COUPON_ERR_STR = "700";
public final static String RESPONSE_SUCCESS_OK = "ok";
public final static Integer RESPONSE_SUCCESS_1 = 1;
public final static String RESPONSE_SUCCESS_0_STR = "0";
......
......@@ -89,6 +89,11 @@ public class CalculationSharingDiscountRequestDto {
* 活动号
*/
private String activityCode;
/**
* 下标
*/
private Integer useIndex;
}
@Data
......
......@@ -217,6 +217,11 @@ public class ShoppingCartInfoRequestVo extends BaseRequestVo {
* 活动号
*/
private String activityCode;
/**
* 顺序
*/
private Integer index;
}
}
......@@ -146,6 +146,7 @@ public enum ResponseResult {
COUPON_SHOP_NOTSUPPORT("46010", "优惠券在当前门店不可用"),
COUPON_ORDER_WAY_ERROR("46011", "您选择得优惠券不适用该点餐方式"),
COUPON_VERIFICATION_FAIL("46012", "优惠券核销失败"),
/**
* 加价购商品
*/
......@@ -176,7 +177,13 @@ public enum ResponseResult {
*/
WEICHAT_SHOP_NOTSUPPORT("48001", "当前门店不可用"),
WEICHAT_NOT_PRODUCTCARD("48002", "不是商品券不用加入购物车"),
WEICHAT_PRODUCT_NOEXIST("48003", "商品不存在");
WEICHAT_PRODUCT_NOEXIST("48003", "商品不存在"),
/**
* coco验证券错误
*/
COCO_COUPON_VALIDATOR_FAIL("49000", "优惠券验证错误")
;
private String code;
......
......@@ -51,6 +51,7 @@ import com.alibaba.fastjson.JSONObject;
import com.freemud.api.assortment.datamanager.entity.db.AssortmentOpenPlatformPartnerStoreDeliveryConfig;
import com.freemud.api.assortment.datamanager.manager.AssortmentOpenPlatformPartnerStoreDeliveryConfigManager;
import com.freemud.api.assortment.datamanager.manager.customer.AssortmentCustomerInfoManager;
import com.freemud.application.sdk.api.log.ApiLog;
import com.freemud.application.sdk.api.log.ErrorLog;
import com.freemud.application.sdk.api.log.LogThreadLocal;
import com.freemud.application.sdk.api.membercenter.request.QueryReceiveAddressRequest;
......@@ -345,7 +346,7 @@ public class ShoppingCartNewServiceImpl implements ShoppingCartNewService {
, partnerId
, null);
buildShoppingCartGoodsResponse(shoppingCartGoodsResponseVo,discountResult,partnerId);
buildShoppingCartGoodsResponse(shoppingCartGoodsResponseVo,discountResult,null,partnerId);
}
else {
// 获取优惠信息
......@@ -469,7 +470,7 @@ public class ShoppingCartNewServiceImpl implements ShoppingCartNewService {
, partnerId
, null);
buildShoppingCartGoodsResponse(shoppingCartGoodsResponseVo,discountResult,partnerId);
buildShoppingCartGoodsResponse(shoppingCartGoodsResponseVo,discountResult,null,partnerId);
}
else {
// 获取优惠信息
......@@ -587,6 +588,9 @@ public class ShoppingCartNewServiceImpl implements ShoppingCartNewService {
coupon.setActivityCode(activityCode);
coupons.add(coupon);
}
buildCoupons(coupons,shoppingCartInfoRequestVo.getCouponCodes());
List<ShoppingCartInfoRequestVo.SendGoods> sendGoodsList = shoppingCartInfoRequestVo.getSendGoods();
List<ShoppingCartInfoRequestVo.SendGoods> sendGoods = new ArrayList<>();
if (CollectionUtils.isNotEmpty(sendGoodsList)) {
......@@ -624,7 +628,7 @@ public class ShoppingCartNewServiceImpl implements ShoppingCartNewService {
, partnerId
,shoppingCartInfoRequestVo.getFlag());
buildShoppingCartGoodsResponse(shoppingCartGoodsResponseVo,calculationSharingDiscountResult,partnerId);
buildShoppingCartGoodsResponse(shoppingCartGoodsResponseVo,calculationSharingDiscountResult,shoppingCartInfoRequestVo.getFlag(),partnerId);
}
else {
List<ActivityCalculationDiscountRequestDto.CalculationDiscountCoupon> coupons = new ArrayList<>();
......@@ -817,6 +821,9 @@ public class ShoppingCartNewServiceImpl implements ShoppingCartNewService {
coupon.setActivityCode(activityCode);
coupons.add(coupon);
}
// 当couponCodes不为空时,需参与价格计算,同时排除单券入参
buildCoupons(coupons,shoppingCartInfoRequestVo.getCouponCodes());
CalculationSharingDiscountResponseDto.CalculationDiscountResult discountResult = sharingDiscountService.getCalculationSharingDiscountResult(menuType
, partnerId
, storeId
......@@ -2131,10 +2138,11 @@ public class ShoppingCartNewServiceImpl implements ShoppingCartNewService {
*/
private void buildShoppingCartGoodsResponse(ShoppingCartGoodsResponseVo shoppingCartGoodsResponseVo,
CalculationSharingDiscountResponseDto.CalculationDiscountResult discountResult,
Integer flag,
String partnerId) {
ShoppingCartRelationService shoppingCartRelationService = shoppingCartRelationFactory.getBuildShoppingCartGoodsResponseService(partnerId);
shoppingCartRelationService.buildShoppingCartGoodsResponse(shoppingCartGoodsResponseVo,discountResult);
shoppingCartRelationService.buildShoppingCartGoodsResponse(shoppingCartGoodsResponseVo,discountResult,flag);
}
......@@ -2178,4 +2186,37 @@ public class ShoppingCartNewServiceImpl implements ShoppingCartNewService {
return false;
}
}
private List<CalculationSharingDiscountRequestDto.CalculationDiscountCoupon> buildCoupons(List<CalculationSharingDiscountRequestDto.CalculationDiscountCoupon> oldCoupons, List<ShoppingCartInfoRequestVo.couponCode> coupons){
ApiLog.info("批量使用优惠券前,oldCoupons,coupons",oldCoupons,coupons);
for(int i = 0 ; i < oldCoupons.size() ; i++){
CalculationSharingDiscountRequestDto.CalculationDiscountCoupon oldCoupon = oldCoupons.get(i);
oldCoupon.setUseIndex(i);
}
List<String> codes = oldCoupons.stream().map(CalculationSharingDiscountRequestDto.CalculationDiscountCoupon::getCode).collect(toList());
if (coupons != null) {
for(int x = 0 ; x < coupons.size() ; x++){
ShoppingCartInfoRequestVo.couponCode cp = coupons.get(x);
if(codes.contains(cp.getCouponCode())){
continue;
}
CalculationSharingDiscountRequestDto.CalculationDiscountCoupon coupon = new CalculationSharingDiscountRequestDto.CalculationDiscountCoupon();
coupon.setCode(cp.getCouponCode());
coupon.setActivityCode(cp.getActivityCode());
coupon.setUseIndex(cp.getIndex() == null ? x + oldCoupons.size(): cp.getIndex() + oldCoupons.size());
oldCoupons.add(coupon);
}
}
ApiLog.info("批量使用优惠券后,oldCoupons,coupons",oldCoupons,coupons);
return oldCoupons;
}
}
......@@ -198,6 +198,11 @@ public class CalculationSharingDiscountService {
return result;
}
// 这个是专门给coco使用的券验证错误的异常,message要抛出去
if(sharingDiscountResponseDto != null && StringUtils.equals(sharingDiscountResponseDto.getStatusCode(), ResponseCodeConstant.COCO_RESPONSE_COUPON_ERR_STR)){
throw new ServiceException(ResponseResult.COCO_COUPON_VALIDATOR_FAIL,sharingDiscountResponseDto.getMsg());
}
// 支付宝华莱士紧急修改代码,当促销返回103错误码时,需要报券不适用于该门店,且清空购物车
//throw new ServiceException(ResponseResult.OPERATE_TOO_OFTEN);
return null;
......
......@@ -13,6 +13,9 @@ import cn.freemud.entities.vo.ShoppingCartGoodsResponseVo;
import cn.freemud.enums.ActivityTypeEnum;
import cn.freemud.service.ActivityService;
import cn.freemud.utils.WebUtil;
import com.alibaba.fastjson.JSONObject;
import com.freemud.application.sdk.api.log.LogThreadLocal;
import com.freemud.card.sdk.log.ApiLog;
import org.apache.commons.collections4.CollectionUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
......@@ -45,7 +48,48 @@ public class FullSharingService {
, ShoppingCartGoodsResponseVo shoppingCartGoodsResponseVo
, ActivityQueryDto activityQueryDto) {
List<ActivityTypeEnum> activityTypeEnums = new LinkedList<>();
/**
* 每满减 TYPE_11\ 阶梯满减 TYPE_12
*/
activityTypeEnums.add(ActivityTypeEnum.TYPE_11);
activityTypeEnums.add(ActivityTypeEnum.TYPE_12);
activityTypeEnums.add(ActivityTypeEnum.TYPE_3);
activityTypeEnums.add(ActivityTypeEnum.TYPE_31);
if (discountResult == null || CollectionUtils.isEmpty(discountResult.getGoods())) {
/**
* 调用促销统一活动查询,过滤出参与的满减(目前只有每满减和阶梯满减)
*/
ActivityQueryResponseDto activityQueryResponseDto = activityService.queryActivityByType(activityQueryDto, activityTypeEnums, null);
if (null==activityQueryResponseDto || CollectionUtils.isEmpty(activityQueryResponseDto.getResult())) {
return;
}
Optional<ActivityResponseDto> first = activityQueryResponseDto.getResult().stream().findFirst();
PromotionMessageDto promotionMessageDto = new PromotionMessageDto();
ActivityResponseDto activityResponseDto = first.get();
promotionMessageDto.setActivityId(activityResponseDto.getActivityCode());
promotionMessageDto.setActivityName(activityResponseDto.getActivityName());
promotionMessageDto.setActivityType(activityResponseDto.getActivityType());
promotionMessageDto.setPromotionAmount(0L);
StringBuilder messageBuilder = new StringBuilder();
ArrayList<ActivityList> activityList = new ArrayList<>();
List<BenefitBeanDto> benefitBeanDtos = activityResponseDto.getBenefits();
BenefitBeanDto benefitBeanDto = benefitBeanDtos.get(0);
//调用没有加入购物车的提示语的方法
setMessageNotInShoppingCart(messageBuilder, activityResponseDto, benefitBeanDtos, benefitBeanDto, activityList);
promotionMessageDto.setPromotionMessage(messageBuilder.toString());
ActivityTip activityTip = new ActivityTip();
activityTip.setActivityCode(promotionMessageDto.getActivityId());
activityTip.setActivityType(promotionMessageDto.getActivityType());
activityTip.setActivityName(promotionMessageDto.getPromotionMessage());
activityTip.setActivityList(activityList);
shoppingCartGoodsResponseVo.setActivityTip(activityTip);
return;
}
......@@ -65,14 +109,7 @@ public class FullSharingService {
}
shoppingCartGoodsResponseVo.setActivityTip(new ActivityTip());
List<ActivityTypeEnum> activityTypeEnums = new LinkedList<>();
/**
* 每满减 TYPE_11\ 阶梯满减 TYPE_12
*/
activityTypeEnums.add(ActivityTypeEnum.TYPE_11);
activityTypeEnums.add(ActivityTypeEnum.TYPE_12);
activityTypeEnums.add(ActivityTypeEnum.TYPE_3);
activityTypeEnums.add(ActivityTypeEnum.TYPE_31);
List<Integer> typeEnums = activityTypeEnums.stream().map(ActivityTypeEnum::getCode).collect(Collectors.toList());
/**
* 还原满减折扣到行记录上
......
......@@ -147,7 +147,7 @@ public class GiftSharingService {
, List<ShoppingCartGoodsDto.CartGoodsDetailDto> cartGoodsDetailDtoList
, ActivityQueryDto activityQueryDto
, String menuType) {
if (CollectionUtils.isEmpty(discountResult.getGoods())) {
if (discountResult == null || CollectionUtils.isEmpty(discountResult.getGoods())) {
return;
}
List<ProductBeanDTO> beanDTOList = this.drawGiftInfo(discountResult, activityQueryDto, menuType);
......
......@@ -21,7 +21,8 @@ public interface ShoppingCartRelationService {
* 获取购物车查询出参构建实现
*/
void buildShoppingCartGoodsResponse(ShoppingCartGoodsResponseVo shoppingCartGoodsResponseVo,
CalculationSharingDiscountResponseDto.CalculationDiscountResult discountResult);
CalculationSharingDiscountResponseDto.CalculationDiscountResult discountResult,
Integer flag);
}
......@@ -22,7 +22,8 @@ public class PlatformShoppingCartRelationServiceImpl implements ShoppingCartRela
@Override
public void buildShoppingCartGoodsResponse(ShoppingCartGoodsResponseVo shoppingCartGoodsResponseVo,
CalculationSharingDiscountResponseDto.CalculationDiscountResult discountResult) {
CalculationSharingDiscountResponseDto.CalculationDiscountResult discountResult,
Integer flag) {
}
}
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