Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
D
data-center-auto
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
bltdc
data-center-auto
Commits
9bd0ba8b
Commit
9bd0ba8b
authored
Aug 17, 2020
by
泽锋 李
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
fix
parent
a0759264
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
75 additions
and
9 deletions
+75
-9
report_cash_flow_forecast_dao.cs
AutoTurnOver.DB/report_cash_flow_forecast_dao.cs
+54
-3
dc_report_cash_flow_forecast_task.cs
...rnOver.Models/Report/dc_report_cash_flow_forecast_task.cs
+10
-0
dc_auto_turnover.cs
AutoTurnOver.Models/dc_auto_turnover.cs
+4
-0
ReportServices.cs
AutoTurnOver.Services/ReportServices.cs
+1
-0
ReportsController.cs
AutoTurnOver/Controllers/ReportsController.cs
+6
-6
No files found.
AutoTurnOver.DB/report_cash_flow_forecast_dao.cs
View file @
9bd0ba8b
...
@@ -73,7 +73,33 @@ namespace AutoTurnOver.DB
...
@@ -73,7 +73,33 @@ namespace AutoTurnOver.DB
task_data
.
error_stack_trace
=
"模拟计算销量"
;
task_data
.
error_stack_trace
=
"模拟计算销量"
;
conn
.
Update
(
task_data
);
conn
.
Update
(
task_data
);
// 找出有销量的第一天
var
f_date
=
turnover_list
.
Where
(
s
=>
s
.
type
==
(
int
)
invented_turnover_model
.
type_enum
.
销量
&&
s
.
val
>
0
).
OrderBy
(
s
=>
s
.
date
).
FirstOrDefault
();
if
(
f_date
!=
null
)
{
logs
.
Add
(
new
dc_report_cash_flow_forecast_task_log
()
{
warehouse_code
=
task_data
.
warehouse_code
,
bailun_sku
=
task_data
.
bailun_sku
,
data_type
=
(
int
)
dc_report_cash_flow_log_data_type_enum
.
上架费
,
is_delete
=
0
,
item
=
""
,
item_no
=
$"虚拟销售单 -
{
task_data
.
id
}
-
{
f_date
.
date_str
}
"
,
no
=
$"虚拟销售单 -
{
task_data
.
id
}
-
{
f_date
.
date_str
}
"
,
occur_time
=
f_date
.
date
,
pay_type
=
(
int
)
dc_report_cash_flow_log_pay_type_enum
.
实时
,
remarks
=
"模拟跑单"
,
task_id
=
task_data
.
id
,
platform_type
=
task_data
.
platform_type
,
val
=
task_data
.
pps_fee
??
0
,
update_time
=
now
,
web_site
=
task_data
.
web_site
,
pay_time_year_month_no
=
""
,
occur_time_year_month_no
=
""
,
pay_time
=
report_cash_flow_dao
.
CalculationPayTime
(
configs
,
f_date
.
date
,
(
int
)
dc_report_cash_flow_log_data_type_enum
.
销售金额
,
task_data
.
platform_type
,
task_data
.
web_site
)
});
}
// 模拟销销售额
// 模拟销销售额
logs
.
AddRange
(
turnover_list
.
Where
(
s
=>
s
.
type
==
(
int
)
invented_turnover_model
.
type_enum
.
销量
).
Select
((
s
,
index
)
=>
new
dc_report_cash_flow_forecast_task_log
()
logs
.
AddRange
(
turnover_list
.
Where
(
s
=>
s
.
type
==
(
int
)
invented_turnover_model
.
type_enum
.
销量
).
Select
((
s
,
index
)
=>
new
dc_report_cash_flow_forecast_task_log
()
{
{
...
@@ -142,6 +168,29 @@ namespace AutoTurnOver.DB
...
@@ -142,6 +168,29 @@ namespace AutoTurnOver.DB
occur_time_year_month_no
=
""
,
occur_time_year_month_no
=
""
,
pay_time
=
report_cash_flow_dao
.
CalculationPayTime
(
configs
,
s
.
date
,
(
int
)
dc_report_cash_flow_log_data_type_enum
.
销售数量
,
task_data
.
platform_type
,
task_data
.
web_site
)
pay_time
=
report_cash_flow_dao
.
CalculationPayTime
(
configs
,
s
.
date
,
(
int
)
dc_report_cash_flow_log_data_type_enum
.
销售数量
,
task_data
.
platform_type
,
task_data
.
web_site
)
}));
}));
// 模拟广告费
logs
.
AddRange
(
turnover_list
.
Where
(
s
=>
s
.
type
==
(
int
)
invented_turnover_model
.
type_enum
.
销量
).
Select
((
s
,
index
)
=>
new
dc_report_cash_flow_forecast_task_log
()
{
warehouse_code
=
task_data
.
warehouse_code
,
bailun_sku
=
task_data
.
bailun_sku
,
data_type
=
(
int
)
dc_report_cash_flow_log_data_type_enum
.
广告费
,
is_delete
=
0
,
item
=
""
,
item_no
=
$"虚拟销售单 -
{
task_data
.
id
}
-
{
s
.
date_str
}
-
{
index
}
"
,
no
=
$"虚拟销售单 -
{
task_data
.
id
}
-
{
s
.
date_str
}
-
{
index
}
"
,
occur_time
=
s
.
date
,
pay_type
=
(
int
)
dc_report_cash_flow_log_pay_type_enum
.
实时
,
remarks
=
"模拟跑单"
,
task_id
=
task_data
.
id
,
platform_type
=
task_data
.
platform_type
,
val
=
s
.
val
*
task_data
.
sale_unit_price_cny
*
(
task_data
.
ad_fee
??
0
),
update_time
=
now
,
web_site
=
task_data
.
web_site
,
pay_time_year_month_no
=
""
,
occur_time_year_month_no
=
""
,
pay_time
=
report_cash_flow_dao
.
CalculationPayTime
(
configs
,
s
.
date
,
(
int
)
dc_report_cash_flow_log_data_type_enum
.
销售数量
,
task_data
.
platform_type
,
task_data
.
web_site
)
}));
// 模拟fba费
// 模拟fba费
logs
.
AddRange
(
turnover_list
.
Where
(
s
=>
s
.
type
==
(
int
)
invented_turnover_model
.
type_enum
.
销量
).
Select
((
s
,
index
)
=>
new
dc_report_cash_flow_forecast_task_log
()
logs
.
AddRange
(
turnover_list
.
Where
(
s
=>
s
.
type
==
(
int
)
invented_turnover_model
.
type_enum
.
销量
).
Select
((
s
,
index
)
=>
new
dc_report_cash_flow_forecast_task_log
()
...
@@ -692,6 +741,8 @@ namespace AutoTurnOver.DB
...
@@ -692,6 +741,8 @@ namespace AutoTurnOver.DB
info_data
.
views
.
Add
(
new
report_cash_flow_view_dto
{
date_type
=
new
List
<
int
>
{
5
},
date_type_str
=
"平台费"
,
remarks
=
"平台费率 * 销售金额"
,
dates
=
new
List
<
report_cash_flow_view_dto
.
date_dto
>()
});
info_data
.
views
.
Add
(
new
report_cash_flow_view_dto
{
date_type
=
new
List
<
int
>
{
5
},
date_type_str
=
"平台费"
,
remarks
=
"平台费率 * 销售金额"
,
dates
=
new
List
<
report_cash_flow_view_dto
.
date_dto
>()
});
info_data
.
views
.
Add
(
new
report_cash_flow_view_dto
{
date_type
=
new
List
<
int
>
{
11
},
date_type_str
=
"fba 费"
,
remarks
=
"fba 费率 * 销售金额"
,
dates
=
new
List
<
report_cash_flow_view_dto
.
date_dto
>()
});
info_data
.
views
.
Add
(
new
report_cash_flow_view_dto
{
date_type
=
new
List
<
int
>
{
11
},
date_type_str
=
"fba 费"
,
remarks
=
"fba 费率 * 销售金额"
,
dates
=
new
List
<
report_cash_flow_view_dto
.
date_dto
>()
});
info_data
.
views
.
Add
(
new
report_cash_flow_view_dto
{
date_type
=
new
List
<
int
>
{
12
},
date_type_str
=
"pay pal 费"
,
remarks
=
"paypal 费率 * 销售金额"
,
dates
=
new
List
<
report_cash_flow_view_dto
.
date_dto
>()
});
info_data
.
views
.
Add
(
new
report_cash_flow_view_dto
{
date_type
=
new
List
<
int
>
{
12
},
date_type_str
=
"pay pal 费"
,
remarks
=
"paypal 费率 * 销售金额"
,
dates
=
new
List
<
report_cash_flow_view_dto
.
date_dto
>()
});
info_data
.
views
.
Add
(
new
report_cash_flow_view_dto
{
date_type
=
new
List
<
int
>
{
15
},
date_type_str
=
"广告费"
,
remarks
=
"广告 费率 * 销售金额"
,
dates
=
new
List
<
report_cash_flow_view_dto
.
date_dto
>()
});
info_data
.
views
.
Add
(
new
report_cash_flow_view_dto
{
date_type
=
new
List
<
int
>
{
16
},
date_type_str
=
"上架费"
,
remarks
=
"上架 费率 * 销售金额"
,
dates
=
new
List
<
report_cash_flow_view_dto
.
date_dto
>()
});
info_data
.
views
.
Add
(
new
report_cash_flow_view_dto
{
date_type
=
new
List
<
int
>
{
6
},
date_type_str
=
"释放销售成本"
,
remarks
=
""
,
dates
=
new
List
<
report_cash_flow_view_dto
.
date_dto
>()
});
info_data
.
views
.
Add
(
new
report_cash_flow_view_dto
{
date_type
=
new
List
<
int
>
{
6
},
date_type_str
=
"释放销售成本"
,
remarks
=
""
,
dates
=
new
List
<
report_cash_flow_view_dto
.
date_dto
>()
});
//info_data.views.Add(new report_cash_flow_view_dto { date_type = new List<int> { 7 }, date_type_str = "释放头程费用", remarks = "", dates = new List<report_cash_flow_view_dto.date_dto>() });
//info_data.views.Add(new report_cash_flow_view_dto { date_type = new List<int> { 7 }, date_type_str = "释放头程费用", remarks = "", dates = new List<report_cash_flow_view_dto.date_dto>() });
...
@@ -700,8 +751,8 @@ namespace AutoTurnOver.DB
...
@@ -700,8 +751,8 @@ namespace AutoTurnOver.DB
info_data
.
views
.
Add
(
new
report_cash_flow_view_dto
{
date_type
=
new
List
<
int
>
{
13
},
date_type_str
=
"新增采购费用_首单"
,
remarks
=
" "
,
dates
=
new
List
<
report_cash_flow_view_dto
.
date_dto
>()
});
info_data
.
views
.
Add
(
new
report_cash_flow_view_dto
{
date_type
=
new
List
<
int
>
{
13
},
date_type_str
=
"新增采购费用_首单"
,
remarks
=
" "
,
dates
=
new
List
<
report_cash_flow_view_dto
.
date_dto
>()
});
info_data
.
views
.
Add
(
new
report_cash_flow_view_dto
{
date_type
=
new
List
<
int
>
{
10
},
date_type_str
=
"新增头程费用"
,
remarks
=
" "
,
dates
=
new
List
<
report_cash_flow_view_dto
.
date_dto
>()
});
info_data
.
views
.
Add
(
new
report_cash_flow_view_dto
{
date_type
=
new
List
<
int
>
{
10
},
date_type_str
=
"新增头程费用"
,
remarks
=
" "
,
dates
=
new
List
<
report_cash_flow_view_dto
.
date_dto
>()
});
info_data
.
views
.
Add
(
new
report_cash_flow_view_dto
{
date_type
=
new
List
<
int
>
{
14
},
date_type_str
=
"新增头程费用_首单"
,
remarks
=
" "
,
dates
=
new
List
<
report_cash_flow_view_dto
.
date_dto
>()
});
info_data
.
views
.
Add
(
new
report_cash_flow_view_dto
{
date_type
=
new
List
<
int
>
{
14
},
date_type_str
=
"新增头程费用_首单"
,
remarks
=
" "
,
dates
=
new
List
<
report_cash_flow_view_dto
.
date_dto
>()
});
info_data
.
views
.
Add
(
new
report_cash_flow_view_dto
{
date_type
=
new
List
<
int
>
{
2
,
4
,
3
},
date_type_str
=
"汇总利润"
,
remarks
=
" ("
,
dates
=
new
List
<
report_cash_flow_view_dto
.
date_dto
>()
});
info_data
.
views
.
Add
(
new
report_cash_flow_view_dto
{
date_type
=
new
List
<
int
>
{
2
,
4
,
3
,
5
,
11
,
12
,
15
,
16
},
date_type_str
=
"汇总利润"
,
remarks
=
" ("
,
dates
=
new
List
<
report_cash_flow_view_dto
.
date_dto
>()
});
info_data
.
views
.
Add
(
new
report_cash_flow_view_dto
{
date_type
=
new
List
<
int
>
{
2
,
3
,
5
,
8
,
9
,
10
,
11
,
12
,
13
,
14
},
date_type_str
=
"现金流结余"
,
remarks
=
" "
,
dates
=
new
List
<
report_cash_flow_view_dto
.
date_dto
>()
});
info_data
.
views
.
Add
(
new
report_cash_flow_view_dto
{
date_type
=
new
List
<
int
>
{
2
,
3
,
5
,
8
,
9
,
10
,
11
,
12
,
13
,
14
,
15
,
16
},
date_type_str
=
"现金流结余"
,
remarks
=
" "
,
dates
=
new
List
<
report_cash_flow_view_dto
.
date_dto
>()
});
info_data
.
turnovers
.
Add
(
new
dc_report_cash_flow_forecast_task_info_dto
.
turnover_dto
{
types
=
new
List
<
int
>
{
(
int
)
invented_turnover_model
.
type_enum
.
销量
},
item_title
=
"销量"
,
dates
=
new
List
<
dc_report_cash_flow_forecast_task_info_dto
.
turnover_dto
.
date_dto
>
{
}
});
info_data
.
turnovers
.
Add
(
new
dc_report_cash_flow_forecast_task_info_dto
.
turnover_dto
{
types
=
new
List
<
int
>
{
(
int
)
invented_turnover_model
.
type_enum
.
销量
},
item_title
=
"销量"
,
dates
=
new
List
<
dc_report_cash_flow_forecast_task_info_dto
.
turnover_dto
.
date_dto
>
{
}
});
info_data
.
turnovers
.
Add
(
new
dc_report_cash_flow_forecast_task_info_dto
.
turnover_dto
{
types
=
new
List
<
int
>
{
(
int
)
invented_turnover_model
.
type_enum
.
入库数量
},
item_title
=
"入库"
,
dates
=
new
List
<
dc_report_cash_flow_forecast_task_info_dto
.
turnover_dto
.
date_dto
>
{
}
});
info_data
.
turnovers
.
Add
(
new
dc_report_cash_flow_forecast_task_info_dto
.
turnover_dto
{
types
=
new
List
<
int
>
{
(
int
)
invented_turnover_model
.
type_enum
.
入库数量
},
item_title
=
"入库"
,
dates
=
new
List
<
dc_report_cash_flow_forecast_task_info_dto
.
turnover_dto
.
date_dto
>
{
}
});
...
...
AutoTurnOver.Models/Report/dc_report_cash_flow_forecast_task.cs
View file @
9bd0ba8b
...
@@ -103,6 +103,16 @@ namespace AutoTurnOver.Models.Report
...
@@ -103,6 +103,16 @@ namespace AutoTurnOver.Models.Report
/// </summary>
/// </summary>
public
decimal
?
fba_fee
{
get
;
set
;
}
public
decimal
?
fba_fee
{
get
;
set
;
}
/// <summary>
/// 广告费率
/// </summary>
public
decimal
?
ad_fee
{
get
;
set
;
}
/// <summary>
/// 刊登费
/// </summary>
public
decimal
?
pps_fee
{
get
;
set
;
}
}
}
...
...
AutoTurnOver.Models/dc_auto_turnover.cs
View file @
9bd0ba8b
...
@@ -17,6 +17,10 @@ namespace AutoTurnOver.Models
...
@@ -17,6 +17,10 @@ namespace AutoTurnOver.Models
/// 建议单单号
/// 建议单单号
/// </summary>
/// </summary>
public
string
purchase_advice_id
{
get
;
set
;
}
public
string
purchase_advice_id
{
get
;
set
;
}
/// <summary>
/// 销量预测公式
/// </summary>
public
string
sales_details_formula
{
get
;
set
;
}
/// <summary>
/// <summary>
/// SKU
/// SKU
...
...
AutoTurnOver.Services/ReportServices.cs
View file @
9bd0ba8b
...
@@ -50,6 +50,7 @@ namespace AutoTurnOver.Services
...
@@ -50,6 +50,7 @@ namespace AutoTurnOver.Services
list
.
Add
(
sales
!=
null
?
sales
.
sales_details
.
ToObj
<
List
<
decimal
>>().
Select
(
s
=>
(
int
)
Math
.
Ceiling
(
s
)).
ToJson
()
:
"[]"
);
list
.
Add
(
sales
!=
null
?
sales
.
sales_details
.
ToObj
<
List
<
decimal
>>().
Select
(
s
=>
(
int
)
Math
.
Ceiling
(
s
)).
ToJson
()
:
"[]"
);
list
.
Add
(
sales
!=
null
&&
(!
string
.
IsNullOrWhiteSpace
(
sales
.
sales_details_formula
))
?
sales
.
sales_details_formula
.
ToObj
<
List
<
string
>>().
Select
(
s
=>
s
).
ToJson
()
:
"[]"
);
list
.
Add
(
sales
!=
null
?
sales
.
sales_explain_details
.
Replace
(
"["
,
""
).
Replace
(
"]"
,
""
).
Split
(
','
).
ToJson
()
:
"[]"
);
list
.
Add
(
sales
!=
null
?
sales
.
sales_explain_details
.
Replace
(
"["
,
""
).
Replace
(
"]"
,
""
).
Split
(
','
).
ToJson
()
:
"[]"
);
//list.Add(buyputin != null ? buyputin.details : "[]");
//list.Add(buyputin != null ? buyputin.details : "[]");
//list.Add(allotputin != null ? allotputin.details : "[]");
//list.Add(allotputin != null ? allotputin.details : "[]");
...
...
AutoTurnOver/Controllers/ReportsController.cs
View file @
9bd0ba8b
...
@@ -50,7 +50,7 @@ namespace AutoTurnOver.Controllers
...
@@ -50,7 +50,7 @@ namespace AutoTurnOver.Controllers
date
.
Add
(
today
.
AddDays
(
i
).
ToString
(
"MM/dd"
));
date
.
Add
(
today
.
AddDays
(
i
).
ToString
(
"MM/dd"
));
}
}
var
names
=
new
List
<
string
>()
{
"销量"
,
"计算规则"
,
"预计入库"
,
"可用库存"
,
"预计缺货数量"
,
"特殊销量"
,
"市场因素"
,
"建议下单数量"
,
"人工下单数量"
};
var
names
=
new
List
<
string
>()
{
"销量"
,
"计算公式"
,
"计算规则"
,
"预计入库"
,
"可用库存"
,
"预计缺货数量"
,
"特殊销量"
,
"市场因素"
,
"建议下单数量"
,
"人工下单数量"
};
var
turnoverData
=
new
Services
.
SkuAutoTurnServices
().
GetModel
(
sku
,
warehousecode
);
var
turnoverData
=
new
Services
.
SkuAutoTurnServices
().
GetModel
(
sku
,
warehousecode
);
var
saleVolumeData
=
new
Services
.
SaleVolumeServices
().
GetBySkuWarehouseCode
(
sku
,
warehousecode
);
var
saleVolumeData
=
new
Services
.
SaleVolumeServices
().
GetBySkuWarehouseCode
(
sku
,
warehousecode
);
var
averageTargets
=
PurchaseAverageTargetServices
.
GetListByWCode
(
sku
,
warehousecode
);
var
averageTargets
=
PurchaseAverageTargetServices
.
GetListByWCode
(
sku
,
warehousecode
);
...
@@ -68,7 +68,7 @@ namespace AutoTurnOver.Controllers
...
@@ -68,7 +68,7 @@ namespace AutoTurnOver.Controllers
// 累计预计到货
// 累计预计到货
decimal
turnoverDatepurchase
=
0
;
decimal
turnoverDatepurchase
=
0
;
var
purchaseList
=
result
[
2
].
ToObj
<
List
<
decimal
>>();
var
purchaseList
=
result
[
3
].
ToObj
<
List
<
decimal
>>();
for
(
int
i
=
7
;
i
<
turnoverData
.
turnover_days
+
7
;
i
++)
for
(
int
i
=
7
;
i
<
turnoverData
.
turnover_days
+
7
;
i
++)
{
{
turnoverDatepurchase
+=
purchaseList
[
i
];
turnoverDatepurchase
+=
purchaseList
[
i
];
...
@@ -80,14 +80,14 @@ namespace AutoTurnOver.Controllers
...
@@ -80,14 +80,14 @@ namespace AutoTurnOver.Controllers
{
{
turnoverDateStr
=
turnoverDate
.
ToString
(
"yyyy-MM-dd"
),
// 取值日期
turnoverDateStr
=
turnoverDate
.
ToString
(
"yyyy-MM-dd"
),
// 取值日期
turnoverDateSales
=
turnoverDateSales
,
// 当日预测销量
turnoverDateSales
=
turnoverDateSales
,
// 当日预测销量
turnoverDateStock
=
(
int
)
result
[
3
].
ToObj
<
List
<
decimal
>>()[
turnoverData
.
turnover_days
+
7
-
1
],
// 当日预测库存,
turnoverDateStock
=
(
int
)
result
[
4
].
ToObj
<
List
<
decimal
>>()[
turnoverData
.
turnover_days
+
7
-
1
],
// 当日预测库存,
turnoverDatecumulativeSales
=
(
int
)
turnoverDatecumulativeSales
,
// 累计销量
turnoverDatecumulativeSales
=
(
int
)
turnoverDatecumulativeSales
,
// 累计销量
nowStr
=
DateTime
.
Now
.
ToString
(
"yyyy-MM-dd"
),
// 今天的日期
nowStr
=
DateTime
.
Now
.
ToString
(
"yyyy-MM-dd"
),
// 今天的日期
nowShortage
=
(
int
)
result
[
4
].
ToObj
<
List
<
decimal
>>()[
7
],
// 今天的实际缺货
nowShortage
=
(
int
)
result
[
5
].
ToObj
<
List
<
decimal
>>()[
7
],
// 今天的实际缺货
cumulativeShortageDate
=
turnoverDate
.
AddDays
(-
1
).
ToString
(
"yyyy-MM-dd"
),
// 一直到周转期前一天的日期
cumulativeShortageDate
=
turnoverDate
.
AddDays
(-
1
).
ToString
(
"yyyy-MM-dd"
),
// 一直到周转期前一天的日期
cumulativeShortage
=
(
int
)
result
[
4
].
ToObj
<
List
<
decimal
>>()[
turnoverData
.
turnover_days
+
7
-
1
],
// 一直到周转期前一天的累计缺货
cumulativeShortage
=
(
int
)
result
[
5
].
ToObj
<
List
<
decimal
>>()[
turnoverData
.
turnover_days
+
7
-
1
],
// 一直到周转期前一天的累计缺货
average_overdue
=
Math
.
Max
(
0
,
turnoverData
.
average_overdue
),
average_overdue
=
Math
.
Max
(
0
,
turnoverData
.
average_overdue
),
nowDateStock
=
(
int
)
result
[
3
].
ToObj
<
List
<
decimal
>>()[
7
],
// 今天的预测库存
nowDateStock
=
(
int
)
result
[
4
].
ToObj
<
List
<
decimal
>>()[
7
],
// 今天的预测库存
turnoverDatepurchase
=
turnoverDatepurchase
// 累计预计到货
turnoverDatepurchase
=
turnoverDatepurchase
// 累计预计到货
};
};
return
new
JsonResult
(
new
return
new
JsonResult
(
new
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment