Commit a2e04f38 by lizefeng

优化偏差分析

parent afe612c7
...@@ -20,9 +20,9 @@ namespace AutoTurnOver.DB ...@@ -20,9 +20,9 @@ namespace AutoTurnOver.DB
/// <exception cref="NotImplementedException"></exception> /// <exception cref="NotImplementedException"></exception>
public static async Task<int> AnaDeviation(t_task_queue taskDto) public static async Task<int> AnaDeviation(t_task_queue taskDto)
{ {
var now = DateTime.Now.ToDayHome(); var now = DateTime.Now.GetMonthFirstDay().ToDayHome();
var nowEdate = now.ToDayEnd(); var nowEdate = now.LastDayOfMonth().ToDayEnd();
var nowDateStr = now.ToString("yyyy-MM-dd"); var nowDateStr = now.ToString("yyyy-MM");
// 查询sku // 查询sku
var skuData = await _connection.QueryFirstOrDefaultAsync<dc_ana_deviation_sku>(" select * from dc_ana_deviation_sku where id=@id ", new { id = taskDto.id }); var skuData = await _connection.QueryFirstOrDefaultAsync<dc_ana_deviation_sku>(" select * from dc_ana_deviation_sku where id=@id ", new { id = taskDto.id });
// 确定仓库 // 确定仓库
...@@ -47,7 +47,7 @@ namespace AutoTurnOver.DB ...@@ -47,7 +47,7 @@ namespace AutoTurnOver.DB
}); });
var baseSkuData = _connection.QueryFirstOrDefault<dc_base_sku>(" select * from dc_base_sku where bailun_sku=@bailun_sku ", new { bailun_sku = skuData.sku }); var baseSkuData = _connection.QueryFirstOrDefault<dc_base_sku>(" select * from dc_base_sku where bailun_sku=@bailun_sku ", new { bailun_sku = skuData.sku });
var turnover_days = turnover_data.turnover_days; var turnover_days = turnover_data.turnover_days;
var endDate = now.AddDays(turnover_days).ToDayEnd(); var endDate = now.AddDays(turnover_days).LastDayOfMonth().ToDayEnd();
// 查询配置的销量 // 查询配置的销量
var salesDayConfigs = _connection.Query<sales_day_config>(" select * from sales_day_config where bailun_sku=@bailun_sku and warehouse_code=@warehouse_code and `date`>=@bdate and `date`<=@edate ", new var salesDayConfigs = _connection.Query<sales_day_config>(" select * from sales_day_config where bailun_sku=@bailun_sku and warehouse_code=@warehouse_code and `date`>=@bdate and `date`<=@edate ", new
{ {
...@@ -61,8 +61,8 @@ namespace AutoTurnOver.DB ...@@ -61,8 +61,8 @@ namespace AutoTurnOver.DB
while (thisDate <= endDate) while (thisDate <= endDate)
{ {
var thisBdate = thisDate.ToDayHome(); var thisBdate = thisDate.ToDayHome();
var thisEdate = thisDate.ToDayEnd(); var thisEdate = thisDate.LastDayOfMonth().ToDayEnd();
var dateStr = thisDate.ToString("yyyy-MM-dd"); var dateStr = thisDate.ToString("yyyy-MM");
var sales = (salesDayConfigs.FirstOrDefault(s => s.date_str == dateStr) ?? new sales_day_config { }).sales; var sales = (salesDayConfigs.FirstOrDefault(s => s.date_str == dateStr) ?? new sales_day_config { }).sales;
// 写入 【销售产品产品成本】、【销售产品数量】、【剩余可用库存金额】、【剩余可用库存数量】 // 写入 【销售产品产品成本】、【销售产品数量】、【剩余可用库存金额】、【剩余可用库存数量】
SaveDeviation(datas, new dc_ana_deviation { bdate = thisBdate, edate = thisEdate, date_str = dateStr, field_type = "预测值", field = "销售产品数量", project = skuData.project, sku = skuData.sku, warehouse_code = warehouse.warehouse_code, val = sales }); SaveDeviation(datas, new dc_ana_deviation { bdate = thisBdate, edate = thisEdate, date_str = dateStr, field_type = "预测值", field = "销售产品数量", project = skuData.project, sku = skuData.sku, warehouse_code = warehouse.warehouse_code, val = sales });
...@@ -70,7 +70,7 @@ namespace AutoTurnOver.DB ...@@ -70,7 +70,7 @@ namespace AutoTurnOver.DB
SaveDeviation(datas, new dc_ana_deviation { bdate = thisBdate, edate = thisEdate, date_str = dateStr, field_type = "预测值", field = "销售产品成本", project = skuData.project, sku = skuData.sku, warehouse_code = warehouse.warehouse_code, val = sales * baseSkuData.unit_price }); SaveDeviation(datas, new dc_ana_deviation { bdate = thisBdate, edate = thisEdate, date_str = dateStr, field_type = "预测值", field = "销售产品成本", project = skuData.project, sku = skuData.sku, warehouse_code = warehouse.warehouse_code, val = sales * baseSkuData.unit_price });
SaveDeviation(datas, new dc_ana_deviation { bdate = thisBdate, edate = thisEdate, date_str = dateStr, field_type = "预测值", field = "剩余可用库存金额", project = skuData.project, sku = skuData.sku, warehouse_code = warehouse.warehouse_code, val = sales * baseSkuData.unit_price }); SaveDeviation(datas, new dc_ana_deviation { bdate = thisBdate, edate = thisEdate, date_str = dateStr, field_type = "预测值", field = "剩余可用库存金额", project = skuData.project, sku = skuData.sku, warehouse_code = warehouse.warehouse_code, val = sales * baseSkuData.unit_price });
thisDate = thisDate.AddDays(1); thisDate = thisDate.AddMonths(1);
} }
...@@ -96,12 +96,31 @@ namespace AutoTurnOver.DB ...@@ -96,12 +96,31 @@ namespace AutoTurnOver.DB
SaveDeviation(datas, new dc_ana_deviation { bdate = now, edate = nowEdate, date_str = nowDateStr, field_type = "实际值", field = "销售产品成本", project = skuData.project, sku = skuData.sku, warehouse_code = warehouse.warehouse_code, val = omsSale * baseSkuData.unit_price }); SaveDeviation(datas, new dc_ana_deviation { bdate = now, edate = nowEdate, date_str = nowDateStr, field_type = "实际值", field = "销售产品成本", project = skuData.project, sku = skuData.sku, warehouse_code = warehouse.warehouse_code, val = omsSale * baseSkuData.unit_price });
// 推测值 【销售产品数量】【销售产品产品成本】【剩余可用库存数量】【剩余可用库存金额】【采购在途库存数量】【采购在途库存金额】 // 推测值 【销售产品数量】【销售产品产品成本】【剩余可用库存数量】【剩余可用库存金额】【采购在途库存数量】【采购在途库存金额】
// 推测值涉及实际数据,所以只能推测明天的数据 // 推测值涉及实际数据,所以只能推测下个月的数据
var nextBDay = now.AddDays(1).ToDayHome(); //var nextBDay = now.AddMonths(1).GetMonthFirstDay().ToDayHome();
var nextEDay = nextBDay.ToDayEnd(); //var nextEDay = nextBDay.LastDayOfMonth().ToDayEnd();
var nextDateStr = nextBDay.ToString("yyyy-MM-dd"); //var nextDateStr = nextBDay.ToString("yyyy-MM");
SaveDeviation(datas, new dc_ana_deviation { bdate = nextBDay, edate = nextEDay, date_str = nextDateStr, field_type = "推测值", field = "销售产品数量", project = skuData.project, sku = skuData.sku, warehouse_code = warehouse.warehouse_code, val = stockData.usable_stock }); //SaveDeviation(datas, new dc_ana_deviation { bdate = nextBDay, edate = nextEDay, date_str = nextDateStr, field_type = "推测值", field = "销售产品数量", project = skuData.project, sku = skuData.sku, warehouse_code = warehouse.warehouse_code, val = stockData.usable_stock });
SaveDeviation(datas, new dc_ana_deviation { bdate = nextBDay, edate = nextEDay, date_str = nextDateStr, field_type = "推测值", field = "销售产品成本", project = skuData.project, sku = skuData.sku, warehouse_code = warehouse.warehouse_code, val = stockData.usable_stock * baseSkuData.unit_price }); //SaveDeviation(datas, new dc_ana_deviation { bdate = nextBDay, edate = nextEDay, date_str = nextDateStr, field_type = "推测值", field = "销售产品成本", project = skuData.project, sku = skuData.sku, warehouse_code = warehouse.warehouse_code, val = stockData.usable_stock * baseSkuData.unit_price });
var lastMonthB = now.AddMonths(-1).GetMonthFirstDay().ToDayHome();
var lastMonthE = lastMonthB.LastDayOfMonth().ToDayEnd();
var lastMonthDateStr = lastMonthB.ToString("yyyy-MM");
//今日的推测值等于昨日的实际剩余
SaveDeviation(datas, new dc_ana_deviation { bdate = now, edate = nowEdate, date_str = nowDateStr, field_type = "推测值", field = "销售产品数量", project = skuData.project, sku = skuData.sku, warehouse_code = warehouse.warehouse_code,
val = _connection.QueryFirstOrDefault<decimal?>(" select `val` from dc_ana_deviation where sku=@sku and warehouse_code=@warehouse_code and project=@project and field=@field and date_str=@date_str and field_type=@field_type ",new {
sku = skuData.sku,
warehouse_code = warehouse.warehouse_code,
project = skuData.project,
field = "剩余可用库存数量",
date_str = lastMonthDateStr,
field_type = "实际值"
}, commandTimeout: 0) ??0
});
SaveDeviation(datas, new dc_ana_deviation { bdate = now, edate = nowEdate, date_str = nowDateStr, field_type = "推测值", field = "销售产品成本", project = skuData.project, sku = skuData.sku, warehouse_code = warehouse.warehouse_code,
val = datas.FirstOrDefault(s=>s.field== "销售产品数量" && s.field_type== "推测值" && s.date_str== nowDateStr).val * baseSkuData.unit_price
});
// 查询今日的预计到货数据 // 查询今日的预计到货数据
var baseTransExpectarrivaltimeDatas = _connection.Query<dc_base_trans_expectarrivaltime_temp>(" select * from dc_base_trans_expectarrivaltime where bailun_sku=@bailun_sku and warehouse_code=@warehouse_code and expectarrivaltime>=@btime and expectarrivaltime<=@etime ",new { var baseTransExpectarrivaltimeDatas = _connection.Query<dc_base_trans_expectarrivaltime_temp>(" select * from dc_base_trans_expectarrivaltime where bailun_sku=@bailun_sku and warehouse_code=@warehouse_code and expectarrivaltime>=@btime and expectarrivaltime<=@etime ",new {
...@@ -110,47 +129,51 @@ namespace AutoTurnOver.DB ...@@ -110,47 +129,51 @@ namespace AutoTurnOver.DB
etime = now, etime = now,
btime = nowEdate btime = nowEdate
}); });
SaveDeviation(datas, new dc_ana_deviation { bdate = nextBDay, edate = nextEDay, date_str = nextDateStr, field_type = "推测值", field = "剩余可用库存数量", project = skuData.project, sku = skuData.sku, warehouse_code = warehouse.warehouse_code, SaveDeviation(datas, new dc_ana_deviation { bdate = now, edate = nowEdate, date_str = nowDateStr, field_type = "推测值", field = "剩余可用库存数量", project = skuData.project, sku = skuData.sku, warehouse_code = warehouse.warehouse_code,
val = stockData.usable_stock + baseTransExpectarrivaltimeDatas.Sum(s=>s.count) - datas.FirstOrDefault(s=>s.field== "销售产品数量" && s.field_type== "预测值" && s.date_str== nowDateStr).val val = datas.FirstOrDefault(s => s.field == "销售产品数量" && s.field_type == "推测值" && s.date_str == nowDateStr).val + baseTransExpectarrivaltimeDatas.Sum(s=>s.count) - datas.FirstOrDefault(s=>s.field== "销售产品数量" && s.field_type== "预测值" && s.date_str== nowDateStr).val
}); });
SaveDeviation(datas, new dc_ana_deviation { bdate = nextBDay, edate = nextEDay, date_str = nextDateStr, field_type = "推测值", field = "剩余可用库存金额", project = skuData.project, sku = skuData.sku, warehouse_code = warehouse.warehouse_code, SaveDeviation(datas, new dc_ana_deviation { bdate = now, edate = nowEdate, date_str = nowDateStr, field_type = "推测值", field = "剩余可用库存金额", project = skuData.project, sku = skuData.sku, warehouse_code = warehouse.warehouse_code,
val = datas.FirstOrDefault(s=>s.field== "剩余可用库存数量" && s.field_type== "推测值" && s.date_str== nowDateStr).val * baseSkuData.unit_price val = datas.FirstOrDefault(s=>s.field== "剩余可用库存数量" && s.field_type== "推测值" && s.date_str== nowDateStr).val * baseSkuData.unit_price
}); });
SaveDeviation(datas, new dc_ana_deviation { bdate = nextBDay, edate = nextEDay, date_str = nextDateStr, field_type = "推测值", field = "采购在途库存数量", project = skuData.project, sku = skuData.sku, warehouse_code = warehouse.warehouse_code, val = turnover_data.quantity_final_advise }); SaveDeviation(datas, new dc_ana_deviation { bdate = now, edate = nowEdate, date_str = nowDateStr, field_type = "推测值", field = "采购在途库存数量", project = skuData.project, sku = skuData.sku, warehouse_code = warehouse.warehouse_code, val = turnover_data.quantity_final_advise });
SaveDeviation(datas, new dc_ana_deviation { bdate = nextBDay, edate = nextEDay, date_str = nextDateStr, field_type = "推测值", field = "采购在途库存金额", project = skuData.project, sku = skuData.sku, warehouse_code = warehouse.warehouse_code, val = turnover_data.quantity_final_advise * baseSkuData.unit_price }); SaveDeviation(datas, new dc_ana_deviation { bdate = now, edate = nowEdate, date_str = nowDateStr, field_type = "推测值", field = "采购在途库存金额", project = skuData.project, sku = skuData.sku, warehouse_code = warehouse.warehouse_code, val = turnover_data.quantity_final_advise * baseSkuData.unit_price });
// 偏差分析 【产品成本预计偏差值】、【销售数量预计偏差值】、【产品成本实际偏差值】、【销售数量实际偏差值】 // 偏差分析 【产品成本预计偏差值】、【销售数量预计偏差值】、【产品成本实际偏差值】、【销售数量实际偏差值】
SaveDeviation(datas, new dc_ana_deviation { bdate = nextBDay, edate = nextEDay, date_str = nextDateStr, field_type = "偏差分析", field = "产品成本预计偏差值", project = skuData.project, sku = skuData.sku, warehouse_code = warehouse.warehouse_code, SaveDeviation(datas, new dc_ana_deviation { bdate = now, edate = nowEdate, date_str = nowDateStr, field_type = "偏差分析", field = "产品成本预计偏差值", project = skuData.project, sku = skuData.sku, warehouse_code = warehouse.warehouse_code,
val = datas.FirstOrDefault(s=>s.field== "销售产品成本" && s.field_type== "推测值" && s.date_str== nowDateStr).val val = datas.FirstOrDefault(s=>s.field== "销售产品成本" && s.field_type== "推测值" && s.date_str== nowDateStr).val
- datas.FirstOrDefault(s => s.field == "销售产品成本" && s.field_type == "预测值" && s.date_str == nowDateStr).val - datas.FirstOrDefault(s => s.field == "销售产品成本" && s.field_type == "预测值" && s.date_str == nowDateStr).val
}); });
SaveDeviation(datas, new dc_ana_deviation { bdate = nextBDay, edate = nextEDay, date_str = nextDateStr, field_type = "偏差分析", field = "销售数量预计偏差值", project = skuData.project, sku = skuData.sku, warehouse_code = warehouse.warehouse_code, SaveDeviation(datas, new dc_ana_deviation { bdate = now, edate = nowEdate, date_str = nowDateStr, field_type = "偏差分析", field = "销售数量预计偏差值", project = skuData.project, sku = skuData.sku, warehouse_code = warehouse.warehouse_code,
val = datas.FirstOrDefault(s=>s.field== "销售产品数量" && s.field_type== "推测值" && s.date_str== nowDateStr).val val = datas.FirstOrDefault(s=>s.field== "销售产品数量" && s.field_type== "推测值" && s.date_str== nowDateStr).val
- datas.FirstOrDefault(s => s.field == "销售产品数量" && s.field_type == "预测值" && s.date_str == nowDateStr).val - datas.FirstOrDefault(s => s.field == "销售产品数量" && s.field_type == "预测值" && s.date_str == nowDateStr).val
}); });
SaveDeviation(datas, new dc_ana_deviation { bdate = nextBDay, edate = nextEDay, date_str = nextDateStr, field_type = "偏差分析", field = "产品成本实际偏差值", project = skuData.project, sku = skuData.sku, warehouse_code = warehouse.warehouse_code, SaveDeviation(datas, new dc_ana_deviation { bdate = now, edate = nowEdate, date_str = nowDateStr, field_type = "偏差分析", field = "产品成本实际偏差值", project = skuData.project, sku = skuData.sku, warehouse_code = warehouse.warehouse_code,
val = datas.FirstOrDefault(s=>s.field== "销售产品成本" && s.field_type== "实际值" && s.date_str== nowDateStr).val val = datas.FirstOrDefault(s=>s.field== "销售产品成本" && s.field_type== "实际值" && s.date_str== nowDateStr).val
- datas.FirstOrDefault(s => s.field == "销售产品成本" && s.field_type == "预测值" && s.date_str == nowDateStr).val - datas.FirstOrDefault(s => s.field == "销售产品成本" && s.field_type == "预测值" && s.date_str == nowDateStr).val
}); });
SaveDeviation(datas, new dc_ana_deviation { bdate = nextBDay, edate = nextEDay, date_str = nextDateStr, field_type = "偏差分析", field = "销售数量实际偏差值", project = skuData.project, sku = skuData.sku, warehouse_code = warehouse.warehouse_code, SaveDeviation(datas, new dc_ana_deviation { bdate = now, edate = nowEdate, date_str = nowDateStr, field_type = "偏差分析", field = "销售数量实际偏差值", project = skuData.project, sku = skuData.sku, warehouse_code = warehouse.warehouse_code,
val = datas.FirstOrDefault(s=>s.field== "销售产品数量" && s.field_type== "实际值" && s.date_str== nowDateStr).val val = datas.FirstOrDefault(s=>s.field== "销售产品数量" && s.field_type== "实际值" && s.date_str== nowDateStr).val
- datas.FirstOrDefault(s => s.field == "销售产品数量" && s.field_type == "预测值" && s.date_str == nowDateStr).val - datas.FirstOrDefault(s => s.field == "销售产品数量" && s.field_type == "预测值" && s.date_str == nowDateStr).val
}); });
SaveDeviation(datas, new dc_ana_deviation { bdate = nextBDay, edate = nextEDay, date_str = nextDateStr, field_type = "-", field = "超卖数量", project = skuData.project, sku = skuData.sku, warehouse_code = warehouse.warehouse_code, SaveDeviation(datas, new dc_ana_deviation { bdate = now, edate = nowEdate, date_str = nowDateStr, field_type = "-", field = "超卖数量", project = skuData.project, sku = skuData.sku, warehouse_code = warehouse.warehouse_code,
val = datas.FirstOrDefault(s=>s.field== "销售产品数量" && s.field_type== "实际值" && s.date_str== nowDateStr).val val = datas.FirstOrDefault(s=>s.field== "销售产品数量" && s.field_type== "实际值" && s.date_str== nowDateStr).val
- datas.FirstOrDefault(s => s.field == "销售产品数量" && s.field_type == "预测值" && s.date_str == nowDateStr).val - datas.FirstOrDefault(s => s.field == "销售产品数量" && s.field_type == "预测值" && s.date_str == nowDateStr).val
}); });
SaveDeviation(datas, new dc_ana_deviation { bdate = nextBDay, edate = nextEDay, date_str = nextDateStr, field_type = "-", field = "呆滞数量", project = skuData.project, sku = skuData.sku, warehouse_code = warehouse.warehouse_code, SaveDeviation(datas, new dc_ana_deviation { bdate = now, edate = nowEdate, date_str = nowDateStr, field_type = "-", field = "呆滞数量", project = skuData.project, sku = skuData.sku, warehouse_code = warehouse.warehouse_code,
val = datas.FirstOrDefault(s=>s.field== "剩余可用库存数量" && s.field_type== "实际值" && s.date_str== nowDateStr).val val = datas.FirstOrDefault(s=>s.field== "剩余可用库存数量" && s.field_type== "实际值" && s.date_str== nowDateStr).val
- datas.Where(s => s.field == "销售产品数量" && s.field_type == "预测值" && s.bdate<=endDate && s.edate>=now).Sum(s=>s.val) // 未来周转期的预测销量 - datas.Where(s => s.field == "销售产品数量" && s.field_type == "预测值" && s.bdate<=endDate && s.edate>=now).Sum(s=>s.val) // 未来周转期的预测销量
}); });
SaveDeviation(datas, new dc_ana_deviation { bdate = nextBDay, edate = nextEDay, date_str = nextDateStr, field_type = "-", field = "呆滞库存金额", project = skuData.project, sku = skuData.sku, warehouse_code = warehouse.warehouse_code, SaveDeviation(datas, new dc_ana_deviation { bdate = now, edate = nowEdate, date_str = nowDateStr, field_type = "-", field = "呆滞库存金额", project = skuData.project, sku = skuData.sku, warehouse_code = warehouse.warehouse_code,
val = datas.FirstOrDefault(s=>s.field== "呆滞数量" && s.field_type== "-" && s.date_str== nowDateStr).val * baseSkuData.unit_price val = datas.FirstOrDefault(s=>s.field== "呆滞数量" && s.field_type== "-" && s.date_str== nowDateStr).val * baseSkuData.unit_price
}); });
SaveDeviation(datas, new dc_ana_deviation { bdate = now, edate = nowEdate, date_str = nowDateStr, field_type = "-", field = "是否断货", project = skuData.project, sku = skuData.sku, warehouse_code = warehouse.warehouse_code,
val = stockData.usable_stock
});
return 1; return 1;
} }
...@@ -169,11 +192,11 @@ namespace AutoTurnOver.DB ...@@ -169,11 +192,11 @@ namespace AutoTurnOver.DB
}) ?? 0; }) ?? 0;
if (data.id <= 0) if (data.id <= 0)
{ {
_connection.Insert(data); _connection.Insert(data,commandTimeout:0);
} }
else else
{ {
_connection.Update(data); _connection.Update(data, commandTimeout: 0);
} }
datas.Add(data); datas.Add(data);
} }
......
...@@ -11,7 +11,7 @@ namespace ResetOutofstock ...@@ -11,7 +11,7 @@ namespace ResetOutofstock
class DeviationRabbitBackgroundService : RabbitWorkerBase<t_task_queue> class DeviationRabbitBackgroundService : RabbitWorkerBase<t_task_queue>
{ {
public DeviationRabbitBackgroundService() : base("差异分析服务", "aims:deviation:input", 10) public DeviationRabbitBackgroundService() : base("差异分析服务", "aims:deviation:input", 1)
{ {
} }
......
...@@ -50,7 +50,7 @@ namespace ResetOutofstock ...@@ -50,7 +50,7 @@ namespace ResetOutofstock
//report_invest_return_dao.ShareAdFee(); //report_invest_return_dao.ShareAdFee();
//report_invest_return_dao.SynchBtmOrderRefund(); //report_invest_return_dao.SynchBtmOrderRefund();
//report_invest_return_dao.CalculationStockScore("962073701"); //report_invest_return_dao.CalculationStockScore("962073701");
//dc_ana_deviation_dao.PushAnaTask(); dc_ana_deviation_dao.PushAnaTask();
} }
catch (Exception ex) catch (Exception ex)
{ {
...@@ -61,11 +61,12 @@ namespace ResetOutofstock ...@@ -61,11 +61,12 @@ namespace ResetOutofstock
var builder = new HostBuilder().ConfigureServices((hostContext, services) => var builder = new HostBuilder().ConfigureServices((hostContext, services) =>
{ {
services.AddHostedService<DeviationRabbitBackgroundService>();
services.AddHostedService<ResetOutofstockBackgrounService>(); services.AddHostedService<ResetOutofstockBackgrounService>();
services.AddHostedService<CaseFlowBackgrounService>(); services.AddHostedService<CaseFlowBackgrounService>();
services.AddHostedService<StockBackgrounService>(); services.AddHostedService<StockBackgrounService>();
services.AddHostedService<ReportFinanceBackgrounService>(); services.AddHostedService<ReportFinanceBackgrounService>();
services.AddHostedService<DeviationRabbitBackgroundService>();
}); });
await builder.RunConsoleAsync(); await builder.RunConsoleAsync();
......
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