Commit d9a16cee by lixinming

1.5

parent 2fd40af6
......@@ -137,8 +137,8 @@ export async function payCallback(body) {
paymentMethod:PAYMENTTYPE.微信支付,
payTime:new Date().valueOf(),
weChartState:WEICHARTPAYSTATE.已支付,
confirmReceipt:RECEIPTCONFIRMATION.待确认
};
if (!oldInfo.isFirst) updateInfo.confirmReceipt = RECEIPTCONFIRMATION.待确认;
await updateOneData(TABLEENUM.订单表, {weChartPR:wechartCallbackData.out_trade_no}, updateInfo);
......
......@@ -32,25 +32,25 @@ import { getCityNameByCode } from "../../config/cityConfig";
export async function pendingReviewList({name, memberType, documentId, phone, mail, sheng, shi, pageNumber}) {
/**查询条件 */
let selectParam:any = {
"$and":[{
"$or":[
{ memberType:MEMBERTYPE.个人会员, userRegisterState:USERREGISTERSTATE.待审核, registerFlow:REGISTERFLOW.完成第二步 },
{ memberType:MEMBERTYPE.个人会员, userRegisterState:USERREGISTERSTATE.驳回修改, registerFlow:REGISTERFLOW.完成第一步 },
{ memberType:MEMBERTYPE.个人会员, userRegisterState:USERREGISTERSTATE.重新提交, registerFlow:REGISTERFLOW.完成第二步 },
{ memberType:MEMBERTYPE.单位会员, userRegisterState:USERREGISTERSTATE.待审核, registerFlow:REGISTERFLOW.完成第三步 },
{ memberType:MEMBERTYPE.单位会员, userRegisterState:USERREGISTERSTATE.驳回修改, registerFlow:REGISTERFLOW.完成第一步 },
{ memberType:MEMBERTYPE.单位会员, userRegisterState:USERREGISTERSTATE.重新提交, registerFlow:REGISTERFLOW.完成第三步 },
]
}],
"$or":[{ memberType:MEMBERTYPE.个人会员, userRegisterState:USERREGISTERSTATE.待审核, registerFlow:REGISTERFLOW.完成第二步 },
{ memberType:MEMBERTYPE.个人会员, userRegisterState:USERREGISTERSTATE.驳回修改, registerFlow:REGISTERFLOW.完成第一步 },
{ memberType:MEMBERTYPE.个人会员, userRegisterState:USERREGISTERSTATE.重新提交, registerFlow:REGISTERFLOW.完成第二步 },
{ memberType:MEMBERTYPE.单位会员, userRegisterState:USERREGISTERSTATE.待审核, registerFlow:REGISTERFLOW.完成第三步 },
{ memberType:MEMBERTYPE.单位会员, userRegisterState:USERREGISTERSTATE.驳回修改, registerFlow:REGISTERFLOW.完成第一步 },
{ memberType:MEMBERTYPE.单位会员, userRegisterState:USERREGISTERSTATE.重新提交, registerFlow:REGISTERFLOW.完成第三步 }
],
isAdmin:STATE.
}; //审批列表展示状态除通过外的数据
if (name) selectParam["$and"].push({
"$or":[
{unitName:name},
{name},
]
});
if (memberType) {
if (name) {
selectParam["$and"] = [
{"$or":[
{unitName:{"$regex":`${name}`}},
{name:{"$regex":`${name}`}}
]}
];
}
if (memberType.length) {
if (memberType < UNITMEMBERTYPE.院校) {
selectParam.individualMemberType = {"$in":memberType};
} else {
......
......@@ -69,7 +69,7 @@ export async function getMemberData({userId}) {
topInfo.integral = 0;
if(topInfo.joinTime) topInfo.joinTime = moment(topInfo.joinTime).format("YYYY-MM-DD");
if(topInfo.lifespanEndTime) {
if(topInfo.isFirstPay) topInfo.lifespanEndTime = "欠费中";
if(!topInfo.isFirstPay) topInfo.lifespanEndTime = "欠费中";
else topInfo.lifespanEndTime = moment(topInfo.lifespanEndTime).format("YYYY-MM-DD");
}
......
......@@ -34,25 +34,28 @@ import { eccFormParam } from "../../util/verificationParam";
* @param pageNumber 当前页
*/
export async function unitMemberList({unitName, mail, phone, joinStartTime, joinEndTime, unitMemberType, memberLevel, session, memberState, sheng, shi, pageNumber}) {
let selectParam:any = {isAdmin:STATE.};
let selectParam:any = {
isAdmin:STATE.,
memberType : MEMBERTYPE.单位会员,
userRegisterState : USERREGISTERSTATE.通过
};
if (unitName) selectParam.unitName = unitName;
if (mail) selectParam.mail = mail;
if (phone) selectParam.phone = phone;
if (joinStartTime) {
selectParam["$and"].push( { "joinTime":{"$gt":joinStartTime} } )
selectParam["joinTime"] = {"$gt":joinStartTime};
}
if (joinEndTime) {
selectParam["$and"].push( { "joinTime":{"$lt":joinEndTime} } )
if (!selectParam["joinTime"]) selectParam["joinTime"] = {};
selectParam["joinTime"]["$lt"] = joinEndTime;
}
if (unitMemberType) selectParam.unitMemberType = {"$in":unitMemberType};
if (memberLevel) selectParam.memberLevel = {"$in":memberLevel};
if (unitMemberType.length) selectParam.unitMemberType = {"$in":unitMemberType};
if (memberLevel.length) selectParam.memberLevel = {"$in":memberLevel};
if (session) selectParam.session = session;
if (memberState) selectParam.memberState = memberState;
if (sheng) selectParam.sheng = sheng;
if (shi) selectParam.shi = shi;
selectParam.memberType = MEMBERTYPE.单位会员;
selectParam.userRegisterState = USERREGISTERSTATE.通过;
selectParam.isFirstPay = true;
const SelectFiles = ["userId", "memberState", "unitName", "loginId", "phone", "joinTime", "unitMemberLevel", "sheng", "shi", "qu"];
let dbList = await findToPage(TABLEENUM.用户表, selectParam, SelectFiles, pageNumber);
......@@ -218,27 +221,29 @@ export async function delResearch({id}) {
* @param shi 市
*/
export async function individualMemberList({name, documentId, phone, mail, joinStartTime, joinEndTime, memberLevel, session, profCategory, memberState, sheng, shi, pageNumber}) {
let selectParam:any = {};
let selectParam:any = {
memberType : MEMBERTYPE.个人会员,
userRegisterState : USERREGISTERSTATE.通过
};
if (name) selectParam.name = name;
if (documentId) selectParam.documentId = documentId;
if (phone) selectParam.phone = phone;
if (mail) selectParam.mail = mail;
if (joinStartTime) {
selectParam["$and"].push( { "joinTime":{"$gt":joinStartTime} } )
selectParam["joinTime"] = {"$gt":joinStartTime};
}
if (joinEndTime) {
selectParam["$and"].push( { "joinTime":{"$lt":joinEndTime} } )
if (!selectParam["joinTime"]) selectParam["joinTime"] = {};
selectParam["joinTime"]["$lt"] = joinEndTime;
}
if (memberLevel) selectParam.memberLevel = {"$in":memberLevel};
if (memberLevel && memberLevel.length) selectParam.memberLevel = {"$in":memberLevel};
if (session) selectParam.session = session;
if (profCategory) selectParam.profCategory = {"$in":profCategory};
if (profCategory && profCategory.length) selectParam.profCategory = {"$in":profCategory};
if (memberState) selectParam.memberState = memberState;
if (sheng) selectParam.sheng = sheng;
if (shi) selectParam.shi = shi;
selectParam.memberType = MEMBERTYPE.个人会员;
selectParam.userRegisterState = USERREGISTERSTATE.通过;
selectParam.isFirstPay = true;
let selectConf = ["userId", "memberState", "unitName", "name", "sex", "nation", "loginId", "phone", "joinTime", "memberLevel", "sheng", "shi", "qu"];
let dbList = await findToPage(TABLEENUM.用户表, selectParam, selectConf, pageNumber);
......@@ -360,8 +365,7 @@ export async function outPutIndividualMembers({exportColumns}) {
let selectParam = {
isAdmin:STATE.,
memberType: MEMBERTYPE.个人会员,
userRegisterState: USERREGISTERSTATE.通过,
isFirstPay:true
userRegisterState: USERREGISTERSTATE.通过
};
// let selectTitle = ["入会时间", "是否是导入用户", "会员状态", "证书类型", "个人会员类型", "会员等级/职务", "是否处于宽限期", "用户名", "联系电话", "邮箱", "真实姓名", "性别", "证件号码",
// "证件类型", "出生年月", "民族", "省", "市", "区", "通信地址", "学历", "职务", "职称", "学习简历", "工作简历", "专业成果/教研成果", "其他任职情况", "其他专业情况", "专业类别", "工作单位"];
......@@ -421,8 +425,7 @@ export async function outPutUnitMembers({exportColumns}) {
let selectParam = {
isAdmin:STATE.,
memberType: MEMBERTYPE.单位会员,
userRegisterState: USERREGISTERSTATE.通过,
isFirstPay:true
userRegisterState: USERREGISTERSTATE.通过
};
// let selectTitle = ["入会时间", "是否是导入用户", "会员状态", "证书类型", "个人会员类型", "会员等级/职务", "是否处于宽限期", "用户名", "联系电话", "单位电子邮箱", "单位名称", "统一信用代码",
// "法人代表", "法人代表联系电话", "法人邮箱", "日常联系人", "日常联系人职务", "日常联系人手机号码", "营业执照", "单位会员类型", "院校办学类型", "院校主管部门", "院校主要负责人", "院校主要负责人职务", "院校主要负责人电话", "院校办公负责人", "院校办公负责人电话", "主要负责人邮箱", "院校科研负责人", "院校科研负责人电话", "教学负责人姓名", "院校学生总人数", "教职工总人数", "教学负责人电话", "开设专业", "单位简介"];
......
......@@ -33,21 +33,19 @@ export async function getPaid({name, memberType, documentId, phone, mail, joinSt
const NowMs = new Date().valueOf();
/**到期时间距离今天大于90天 */
let selectParam:any = {
"$and":[
{ "lifespanEndTime":{"$gt":NowMs + (90 * 24 * 3600 * 1000)}},
{ "lifespanEndTime":{"$gt":NowMs}},
],
lifespanEndTime:{"$gt":NowMs + (90 * 24 * 3600 * 1000)},
isAdmin:STATE.,
isGracePeriod:STATE.
isGracePeriod:STATE.,
userRegisterState:USERREGISTERSTATE.通过
}
if (name) selectParam["$and"].push({
"$or":[
{unitName:name},
{name},
if (name) {
selectParam["$or"] = [
{unitName:{"$regex":`${name}`}},
{name:{"$regex":`${name}`}}
]
});
if (memberType) {
}
if (memberType.length) {
if (memberType < UNITMEMBERTYPE.院校) {
selectParam.individualMemberType = {"$in":memberType};
} else {
......@@ -58,12 +56,13 @@ export async function getPaid({name, memberType, documentId, phone, mail, joinSt
if (phone) selectParam.phone = phone;
if (mail) selectParam.mail = mail;
if (joinStartTime) {
selectParam["$and"].push( { "joinTime":{"$gt":joinStartTime} } )
selectParam["joinTime"] = {"$gt":joinStartTime};
}
if (joinEndTime) {
selectParam["$and"].push( { "joinTime":{"$lt":joinEndTime} } )
if (!selectParam["joinTime"]) selectParam["joinTime"] = {};
selectParam["joinTime"]["$lt"] = joinEndTime;
}
if (memberLevel) selectParam.memberLevel = {"$in":memberLevel};
if (memberLevel.length) selectParam.memberLevel = {"$in":memberLevel};
const SelectFiles = ["userId", "memberState", "unitName", "name", "loginId", "phone", "joinTime", "memberType", "lifespanStartTime", "lifespanEndTime", "memberLevel"];
let dbList = await findToPage(TABLEENUM.用户表, selectParam, SelectFiles, pageNumber);
......@@ -111,7 +110,7 @@ export async function paidOrderList({id}) {
/**
* 待缴费列表 success
* 待缴费列表 success 缴费期列表
* @param name 名称关键字:个人会员匹配真实姓名,单位会员匹配单位名称
* @param memberType 会员类别 unitMemberType、individualMemberType 多选
* 会员类别:个人【个人会员、专业会员】单位【院校、机构、其他】返回前端枚举:MEMBERTYPEECCENUM
......@@ -122,43 +121,43 @@ export async function paidOrderList({id}) {
* @param joinEndTime 入会结束时间
* @param memberLevel 会员级别/职务 多选
* 会员级别/职务:【普通会员、理事会员、常务理事会员】
* @param pageNumber 当前页
* @param pageNumber 当前页
*/
export async function unpaidList({name, memberType, documentId, phone, mail, joinStartTime, joinEndTime, memberLevel, pageNumber}) {
const NowMs = new Date().valueOf();
/**到期时间距离今天小于90天 */
let selectParam:any = {
"$and":[
{lifespanEndTime:{"$lt":NowMs + (90 * 24 * 3600 * 1000)}},
{lifespanEndTime:{"$gt":NowMs}}
],
lifespanEndTime:{"$lt":NowMs + (90 * 24 * 3600 * 1000), "$gt":NowMs},
isAdmin:STATE.,
isGracePeriod:STATE.,
userRegisterState:USERREGISTERSTATE.通过
}
if (name) selectParam["$and"].push({
"$or":[
{unitName:name},
{name},
if (documentId) selectParam.documentId = documentId;
if (phone) selectParam.phone = phone;
if (mail) selectParam.mail = mail;
if (memberLevel.length) selectParam.memberLevel = {"$in":memberLevel};
if (name) {
if (!selectParam["$and"]) selectParam["$and"] = [];
selectParam["$or"] = [
{unitName:{"$regex":`${name}`}},
{name:{"$regex":`${name}`}}
]
});
}
if (joinStartTime) {
selectParam["$and"].push( { "joinTime":{"$gt":joinStartTime} } )
selectParam["joinTime"] = {"$gt":joinStartTime};
}
if (joinEndTime) {
selectParam["$and"].push( { "joinTime":{"$lt":joinEndTime} } )
if (!selectParam["joinTime"]) selectParam["joinTime"] = {};
selectParam["joinTime"]["$lt"] = joinEndTime;
}
if (memberType) {
if (memberType.length) {
if (memberType < UNITMEMBERTYPE.院校) {
selectParam.individualMemberType = {"$in":memberType};
} else {
selectParam.unitMemberType = {"$in":memberType};
}
}
if (documentId) selectParam.documentId = documentId;
if (phone) selectParam.phone = phone;
if (mail) selectParam.mail = mail;
if (memberLevel) selectParam.memberLevel = {"$in":memberLevel};
const SelectFiles = ["userId", "memberState", "unitName", "loginId", "phone", "joinTime", "memberType", "lifespanStartTime", "lifespanEndTime"];
let dbList = await findToPage(TABLEENUM.用户表, selectParam, SelectFiles, pageNumber, 10);
......@@ -208,25 +207,31 @@ export async function getRenewalPeriod({name, memberType, documentId, phone, mai
isGracePeriod:STATE.,
lifespanEndTime:{"$lt":NowMs},
gracePeriodEndTime:{"$lt":NowMs}
}],
isFirstPay:true,
},
{
isFirstPay:true,
}
],
userRegisterState:USERREGISTERSTATE.通过,
isAdmin:STATE.,
}
if (name) selectParam["$and"].push({
"$or":[
{unitName:name},
{name},
]
});
if (joinStartTime) {
if (name){
if (!selectParam["$and"]) selectParam["$and"] = [];
selectParam["$and"].push( { "joinTime":{"$gt":joinStartTime} } )
selectParam["$and"].push({
"$or":[
{unitName:{"$regex":`${name}`}},
{name:{"$regex":`${name}`}}
]
});
}
if (joinStartTime) {
selectParam["joinTime"] = {"$gt":joinStartTime};
}
if (joinEndTime) {
if (!selectParam["$and"]) selectParam["$and"] = [];
selectParam["$and"].push( { "joinTime":{"$lt":joinEndTime} } )
if (!selectParam["joinTime"]) selectParam["joinTime"] = {};
selectParam["joinTime"]["$lt"] = joinEndTime;
}
if (memberType) {
if (memberType.length) {
if (memberType < UNITMEMBERTYPE.院校) {
selectParam.individualMemberType = {"$in":memberType};
} else {
......@@ -236,7 +241,7 @@ export async function getRenewalPeriod({name, memberType, documentId, phone, mai
if (documentId) selectParam.documentId = documentId;
if (phone) selectParam.phone = phone;
if (mail) selectParam.mail = mail;
if (memberLevel) selectParam.memberLevel = {"$in":memberLevel};
if (memberLevel.length) selectParam.memberLevel = {"$in":memberLevel};
const SelectFiles = ["userId", "memberState", "unitName", "loginId", "phone", "joinTime", "memberType", "lifespanStartTime", "lifespanEndTime"];
let dbList = await findToPage(TABLEENUM.用户表, selectParam, SelectFiles, pageNumber, 10);
......@@ -349,20 +354,22 @@ export async function getGracePeriod({name, memberType, documentId, phone, mail,
isGracePeriod:STATE.,
gracePeriodEndTime:{"$gt":NowMs},
isAdmin:STATE.,
userRegisterState:USERREGISTERSTATE.通过
}
if (name) selectParam["$and"].push({
"$or":[
{unitName:name},
{name},
if (name) {
selectParam["$or"] = [
{unitName:{"$regex":`${name}`}},
{name:{"$regex":`${name}`}}
]
});
}
if (joinStartTime) {
selectParam["$and"].push( { "joinTime":{"$gt":joinStartTime} } )
selectParam["joinTime"] = {"$gt":joinStartTime};
}
if (joinEndTime) {
selectParam["$and"].push( { "joinTime":{"$lt":joinEndTime} } )
if (!selectParam["joinTime"]) selectParam["joinTime"] = {};
selectParam["joinTime"]["$lt"] = joinEndTime;
}
if (memberType) {
if (memberType.length) {
if (memberType < UNITMEMBERTYPE.院校) {
selectParam.individualMemberType = {"$in":memberType};
} else {
......@@ -372,7 +379,7 @@ export async function getGracePeriod({name, memberType, documentId, phone, mail,
if (documentId) selectParam.documentId = documentId;
if (phone) selectParam.phone = phone;
if (mail) selectParam.mail = mail;
if (memberLevel) selectParam.memberLevel = {"$in":memberLevel};
if (memberLevel.length) selectParam.memberLevel = {"$in":memberLevel};
const SelectFiles = [ "userId", "memberState", "unitName", "loginId", "phone", "joinTime", "memberType", "joinTime", "lifespanEndTime"];
let dbList = await findToPage(TABLEENUM.用户表, selectParam, SelectFiles, pageNumber, 10);
......
......@@ -2,7 +2,7 @@
* 注册流程 success
*/
import { BANXUELEIXING, CODETYPE, DOCUMENTTYPE, MEMBERLEVEL, MEMBERTYPE, NATION, OPERATIONREHAVIOR, PROFCATEGORY, REGISTERFLOW, SEX, STATE, UNITMEMBERTYPE, USERREGISTERSTATE } from "../config/enum";
import { BANXUELEIXING, CODETYPE, DOCUMENTTYPE, INDIVIDUALMEMBERTYPE, MEMBERLEVEL, MEMBERTYPE, NATION, OPERATIONREHAVIOR, PROFCATEGORY, REGISTERFLOW, SEX, STATE, UNITMEMBERTYPE, USERREGISTERSTATE } from "../config/enum";
import { ERRORENUM } from "../config/errorEnum";
import { addManyData, addOneData } from "../data/add";
import { deleteManyData } from "../data/delete";
......@@ -51,9 +51,9 @@ export async function memberRegister1({form}) {
memberType:MEMBERTYPE.个人会员,
isAdmin:STATE.,
registerFlow:REGISTERFLOW.完成第一步,//会员注册流程状态
askForTime:NowMs,//申请时间
loginId, mail, pwd, phone,
token
token,
individualMemberType:INDIVIDUALMEMBERTYPE.普通会员
};
await addOneData(TABLEENUM.用户表, addInfo);
......@@ -98,6 +98,7 @@ export async function memberRegister2({form, id}) {
//更新注册流程
form.registerFlow = REGISTERFLOW.完成第二步;
form.askForTime = new Date().valueOf();
await updateOneData(TABLEENUM.用户表, {userId:id}, form);
/**提交审批历史信息 */
......@@ -236,7 +237,7 @@ export async function unitMemberRegister3({application, id}) {
remarks = "重新提交";
}
await updateOneData(TABLEENUM.用户表, {userId:id}, {userRegisterState, applicationForm:application, registerFlow:REGISTERFLOW.完成第三步});
await updateOneData(TABLEENUM.用户表, {userId:id}, {userRegisterState, applicationForm:application, registerFlow:REGISTERFLOW.完成第三步, askForTime : new Date().valueOf()});
/**提交审批历史信息 */
let addApprovalHistory = {
......@@ -244,7 +245,7 @@ export async function unitMemberRegister3({application, id}) {
userId:id,
operationTime: new Date().valueOf(),
operationBehavior:operationBehavior,
remarks:`单位会员${remarks}`
remarks:`单位会员${remarks}`,
};
await addManyData(TABLEENUM.审批历史表, addApprovalHistory);
......
......@@ -3,7 +3,7 @@ import { initSMS } from "./biz/sms";
import { initSystemTask } from "./biz/task";
import { initConfig, systemConfig} from "./config/serverConfig";
import { initDataBaseModel } from "./data/db/db";
import { test1, initOrderData } from "./dataScript";
import { test1 } from "./dataScript";
import { httpServer } from "./net/http_server";
async function lanuch() {
......
......@@ -277,7 +277,7 @@ export const Config = {
{key:"name", type:"String", desc:"姓名", isNull:true},
{key:"documentId", type:"String", desc:"身份证", isNull:true},
{key:"phone", type:"String", desc:"手机号", isNull:true},
{key:"mail", type:"Number", desc:"个人邮箱", isNull:true},
{key:"mail", type:"String", desc:"个人邮箱", isNull:true},
{key:"joinStartTime", type:"Number", desc:"入会开始时间", isNull:true},
{key:"joinEndTime", type:"Number", desc:"入会结束时间", isNull:true},
{key:"memberLevel", type:"[Number]", desc:"会员等级", isNull:true},
......
......@@ -4,36 +4,36 @@ export const FirstName = '会费相关';
export const FirstRouter = '/manage/cost';
export const Config = {
"审批管理":[
{
apiName:"待支付列表",
subUrl:'/order/fist/list',
param:[
{key:"unitName", type:"String", desc:"单位名称", isNull:true},
{key:"joinTime", type:"Number", desc:"入会时间 时间戳", isNull:true},
{key:"memberType", type:"Number", desc:"会员类别 枚举参考公用组件", isNull:true},
{key:"orderState", type:"Number", desc:"支付状态", isNull:true},
{key:"pageNumber", type:"Number", desc:"分页-当前页面"}
],
bindBiz:orderBiz.firstOrderList
},
{
apiName:"确认待支付",
subUrl:'/order/fist/pass',
param:[
{key:"id", type:"String", desc:"订单标识"},
],
bindBiz:orderBiz.checkOrder
},
{
apiName:"待支付线下支付",
subUrl:'/order/fist/offlinepayment',
param:[
{key:"orderId", type:"String", desc:"订单标识"},
{key:"paymentNum", type:"String", desc:"转账单号"},
{key:"offlinePaymentUrl", type:"String", desc:"转账截图"},
],
bindBiz:orderBiz.offlinePayment
}
// {
// apiName:"待支付列表",
// subUrl:'/order/fist/list',
// param:[
// {key:"unitName", type:"String", desc:"单位名称", isNull:true},
// {key:"joinTime", type:"Number", desc:"入会时间 时间戳", isNull:true},
// {key:"memberType", type:"Number", desc:"会员类别 枚举参考公用组件", isNull:true},
// {key:"orderState", type:"Number", desc:"支付状态", isNull:true},
// {key:"pageNumber", type:"Number", desc:"分页-当前页面"}
// ],
// bindBiz:orderBiz.firstOrderList
// },
// {
// apiName:"确认待支付",
// subUrl:'/order/fist/pass',
// param:[
// {key:"id", type:"String", desc:"订单标识"},
// ],
// bindBiz:orderBiz.checkOrder
// },
// {
// apiName:"待支付线下支付",
// subUrl:'/order/fist/offlinepayment',
// param:[
// {key:"orderId", type:"String", desc:"订单标识"},
// {key:"paymentNum", type:"String", desc:"转账单号"},
// {key:"offlinePaymentUrl", type:"String", desc:"转账截图"},
// ],
// bindBiz:orderBiz.offlinePayment
// }
],
"发票管理":[
{
......
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