Skip to content
Toggle navigation
P
Projects
G
Groups
S
Snippets
Help
Marat Pavlov
/
AlexAdapter
This project
Loading...
Sign in
Toggle navigation
Go to a project
Project
Repository
Issues
0
Merge Requests
0
Pipelines
Wiki
Snippets
Members
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Commit
5fe0353f
authored
Mar 25, 2022
by
AlexNasyr
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
repository cleaning
parent
ce501e84
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
68 additions
and
115 deletions
SocialMinistryDataExchange/Controllers/apiController.cs
SocialMinistryDataExchange/Model/ISMRepository.cs
SocialMinistryDataExchange/Model/SMRepository.cs
SocialMinistryDataExchange/Controllers/apiController.cs
View file @
5fe0353f
...
@@ -13,24 +13,10 @@ namespace SocialMinistryDataExchange.Controllers {
...
@@ -13,24 +13,10 @@ namespace SocialMinistryDataExchange.Controllers {
}
}
[
HttpGet
]
[
Route
(
"[controller]/getpersonFixID"
)]
public
async
Task
<
List
<
SMResponce
>>
GetPersonFixID
()
{
var
result
=
await
_repository
.
GetPersonByID
(
"27373577-4234-43B2-A969-8D95B9384171"
);
return
result
;
}
//[HttpPost]
[
HttpGet
]
[
Route
(
"[controller]/getpersonByID/{PersonID}"
)]
public
async
Task
<
List
<
SMResponce
>>
GetPersonByID
(
string
PersonID
)
{
var
result
=
await
_repository
.
GetPersonByID
(
PersonID
);
return
result
;
}
// тестовый запрос с фиксированным документом личности
// тестовый запрос с фиксированным документом личности
[
HttpGet
]
[
HttpGet
]
[
Route
(
"[controller]/getpersonFixDoc"
)]
[
Route
(
"[controller]/getpersonFixDoc"
)]
public
async
Task
<
List
<
SMResponce
>
>
GetPersonFixDoc
()
{
public
async
Task
<
SMResponce
>
GetPersonFixDoc
()
{
var
result
=
await
_repository
.
GetPersonByDoc
(
JsonSerializer
.
Serialize
(
new
SMPersonRequest
()
{
rowguid_eais
=
"223322"
,
document_seria
=
"V-II"
,
document_number
=
"123456"
}));
var
result
=
await
_repository
.
GetPersonByDoc
(
JsonSerializer
.
Serialize
(
new
SMPersonRequest
()
{
rowguid_eais
=
"223322"
,
document_seria
=
"V-II"
,
document_number
=
"123456"
}));
return
result
;
return
result
;
}
}
...
@@ -38,7 +24,7 @@ namespace SocialMinistryDataExchange.Controllers {
...
@@ -38,7 +24,7 @@ namespace SocialMinistryDataExchange.Controllers {
//[HttpPost]
//[HttpPost]
[
HttpGet
]
[
HttpGet
]
[
Route
(
"[controller]/getpersonByDoc/{Rowguid}/{Seria}/{Number}"
)]
[
Route
(
"[controller]/getpersonByDoc/{Rowguid}/{Seria}/{Number}"
)]
public
async
Task
<
List
<
SMResponce
>>
GetPersonFix
Doc
(
string
Rowguid
,
string
Seria
,
string
Number
)
{
public
async
Task
<
SMResponce
>
GetPersonBy
Doc
(
string
Rowguid
,
string
Seria
,
string
Number
)
{
var
result
=
await
_repository
.
GetPersonByDoc
(
JsonSerializer
.
Serialize
(
new
SMPersonRequest
()
{
rowguid_eais
=
Rowguid
,
document_seria
=
Seria
,
document_number
=
Number
}));
var
result
=
await
_repository
.
GetPersonByDoc
(
JsonSerializer
.
Serialize
(
new
SMPersonRequest
()
{
rowguid_eais
=
Rowguid
,
document_seria
=
Seria
,
document_number
=
Number
}));
return
result
;
return
result
;
}
}
...
...
SocialMinistryDataExchange/Model/ISMRepository.cs
View file @
5fe0353f
...
@@ -3,8 +3,7 @@ using System.Threading.Tasks;
...
@@ -3,8 +3,7 @@ using System.Threading.Tasks;
namespace
SocialMinistryDataExchange.Model
{
namespace
SocialMinistryDataExchange.Model
{
public
interface
ISMRepository
{
public
interface
ISMRepository
{
Task
<
List
<
SMResponce
>>
GetPersonByID
(
string
ID
);
Task
<
SMResponce
>
GetPersonByDoc
(
string
Document
);
Task
<
List
<
SMResponce
>>
GetPersonByDoc
(
string
Document
);
Task
<
SMDefenceDemandResponce
>
GetPersonDefenceDemandByID
(
string
PersonID
);
Task
<
SMDefenceDemandResponce
>
GetPersonDefenceDemandByID
(
string
PersonID
);
}
}
}
}
SocialMinistryDataExchange/Model/SMRepository.cs
View file @
5fe0353f
...
@@ -21,10 +21,10 @@ namespace SocialMinistryDataExchange.Model {
...
@@ -21,10 +21,10 @@ namespace SocialMinistryDataExchange.Model {
return
Task
.
FromResult
(
status
);
return
Task
.
FromResult
(
status
);
}
}
public
Task
<
List
<
SMResponce
>
>
GetPersonByDoc
(
string
document
)
{
public
Task
<
SMResponce
>
GetPersonByDoc
(
string
document
)
{
var
doc
=
JsonSerializer
.
Deserialize
<
SMPersonRequest
>(
document
);
var
doc
=
JsonSerializer
.
Deserialize
<
SMPersonRequest
>(
document
);
try
{
try
{
var
record
s
=
(
from
pd
in
_contingentContext
.
ДокументЛичности
s
var
record
=
(
from
pd
in
_contingentContext
.
ДокументЛичности
s
where
pd
.
СерияДокумента
==
doc
.
document_seria
&&
pd
.
НомерДокумента
==
doc
.
document_number
where
pd
.
СерияДокумента
==
doc
.
document_seria
&&
pd
.
НомерДокумента
==
doc
.
document_number
join
lp
in
_contingentContext
.
ЛичностьПодразделения
s
on
pd
.
Личность
equals
lp
.
Личность
into
lps
join
lp
in
_contingentContext
.
ЛичностьПодразделения
s
on
pd
.
Личность
equals
lp
.
Личность
into
lps
from
lp
in
lps
.
DefaultIfEmpty
()
from
lp
in
lps
.
DefaultIfEmpty
()
...
@@ -32,7 +32,7 @@ namespace SocialMinistryDataExchange.Model {
...
@@ -32,7 +32,7 @@ namespace SocialMinistryDataExchange.Model {
from
op
in
ops
.
DefaultIfEmpty
()
from
op
in
ops
.
DefaultIfEmpty
()
join
cp
in
_contingentContext
.
ТекущаяЛичностьПодразделения
s
on
pd
.
Личность
equals
cp
.
Личность
into
cps
join
cp
in
_contingentContext
.
ТекущаяЛичностьПодразделения
s
on
pd
.
Личность
equals
cp
.
Личность
into
cps
from
cp
in
cps
.
DefaultIfEmpty
()
from
cp
in
cps
.
DefaultIfEmpty
()
orderby
lp
.
НачальнаяДата
descending
select
new
SMResponceTemp
{
select
new
SMResponceTemp
{
rowguid_eais
=
doc
.
rowguid_eais
rowguid_eais
=
doc
.
rowguid_eais
// СерияДокумента, НомерДокумента, КогдаВыданДокумент, ВидУдостоверяющегоДокумента, НаименованиеУдостоверяющегоДокумента, КодУдостоверяющегоДокумента
// СерияДокумента, НомерДокумента, КогдаВыданДокумент, ВидУдостоверяющегоДокумента, НаименованиеУдостоверяющегоДокумента, КодУдостоверяющегоДокумента
...
@@ -53,16 +53,17 @@ namespace SocialMinistryDataExchange.Model {
...
@@ -53,16 +53,17 @@ namespace SocialMinistryDataExchange.Model {
,
ОбразовательнаяПрограммаТип
=
op
.
ТипОп
,
ОбразовательнаяПрограммаКод
=
op
.
ТипОп
Navigation
.
Код
,
ОбразовательнаяПрограммаТип
=
op
.
ТипОп
,
ОбразовательнаяПрограммаКод
=
op
.
ТипОп
Navigation
.
Код
// ФормаОбученияКод, ФормаОбученияНаименование
// ФормаОбученияКод, ФормаОбученияНаименование
,
ФормаОбученияКод
=
cp
.
ФормаОбучения
Navigation
.
Код
,
ФормаОбученияНаименование
=
cp
.
ФормаОбучения
Navigation
.
Наименование
,
ФормаОбученияКод
=
cp
.
ФормаОбучения
Navigation
.
Код
,
ФормаОбученияНаименование
=
cp
.
ФормаОбучения
Navigation
.
Наименование
}).
ToLi
st
();
}).
Fir
st
();
// записи не найдены
// записи не найдены
if
(
record
s
.
Count
==
0
)
{
if
(
record
==
null
)
{
record
s
.
Add
(
new
SMResponceTemp
()
{
rowguid_eais
=
doc
.
rowguid_eais
,
СерияДокумента
=
doc
.
document_seria
,
НомерДокумента
=
doc
.
document_number
})
;
record
=
new
SMResponceTemp
()
{
rowguid_eais
=
doc
.
rowguid_eais
,
СерияДокумента
=
doc
.
document_seria
,
НомерДокумента
=
doc
.
document_number
}
;
}
}
return
Task
.
FromResult
(
FormatResponce
(
_contingentContext
,
records
));
var
responce
=
FormatResponce
(
_contingentContext
,
record
);
return
Task
.
FromResult
(
responce
);
}
}
catch
(
Exception
ex
)
{
catch
(
Exception
ex
)
{
// TODO log exception
// TODO log exception
return
Task
.
FromResult
(
FormatResponce
(
_contingentContext
,
new
List
<
SMResponceTemp
>()
{
new
SMResponceTemp
()
{
rowguid_eais
=
doc
.
rowguid_eais
,
СерияДокумента
=
doc
.
document_seria
,
НомерДокумента
=
doc
.
document_number
}
}));
return
Task
.
FromResult
(
FormatResponce
(
_contingentContext
,
new
SMResponceTemp
()
{
rowguid_eais
=
doc
.
rowguid_eais
,
СерияДокумента
=
doc
.
document_seria
,
НомерДокумента
=
doc
.
document_number
}));
}
}
}
}
...
@@ -86,105 +87,72 @@ namespace SocialMinistryDataExchange.Model {
...
@@ -86,105 +87,72 @@ namespace SocialMinistryDataExchange.Model {
}
}
static
List
<
SMResponce
>
FormatResponce
(
IContingentContext
context
,
List
<
SMResponceTemp
>
records
)
{
static
SMResponce
FormatResponce
(
IContingentContext
context
,
SMResponceTemp
record
)
{
List
<
SMResponce
>
responce
=
new
();
SMResponce
responce
=
new
();
foreach
(
SMResponceTemp
record
in
records
)
{
if
(
record
.
Личность
!=
Guid
.
Empty
)
{
// записи найдены
var
SMRecord
=
new
SMResponce
();
responce
.
rowguid_eais
=
record
.
rowguid_eais
;
if
(
record
.
Личность
!=
Guid
.
Empty
)
{
// записи найдены
responce
.
TerritoryName
=
record
.
Территория
Shortname
;
SMRecord
.
rowguid_eais
=
record
.
rowguid_eais
;
responce
.
PersonFamilyName
=
record
.
Фамилия
;
SMRecord
.
TerritoryName
=
record
.
Территория
Shortname
;
responce
.
PersonName
=
record
.
Имя
;
SMRecord
.
PersonFamilyName
=
record
.
Фамилия
;
responce
.
PersonSurname
=
record
.
Отчество
;
SMRecord
.
PersonName
=
record
.
Имя
;
responce
.
PersonBirthday
=
record
.
ДатаРождения
;
SMRecord
.
PersonSurname
=
record
.
Отчество
;
responce
.
PersonDocumentType
=
record
.
КодУдостоверяющегоДокумента
==
12
||
record
.
КодУдостоверяющегоДокумента
==
13
||
record
.
КодУдостоверяющегоДокумента
==
21
?
SMRecord
.
PersonBirthday
=
record
.
ДатаРождения
;
"1"
SMRecord
.
PersonDocumentType
=
record
.
КодУдостоверяющегоДокумента
==
12
||
record
.
КодУдостоверяющегоДокумента
==
13
||
record
.
КодУдостоверяющегоДокумента
==
21
?
:
record
.
КодУдостоверяющегоДокумента
==
11
||
record
.
КодУдостоверяющегоДокумента
==
31
?
"1"
"2"
:
record
.
КодУдостоверяющегоДокумента
==
11
||
record
.
КодУдостоверяющегоДокумента
==
31
?
:
String
.
Empty
;
"2"
responce
.
PersonDocumentSeria
=
record
.
СерияДокумента
;
:
String
.
Empty
;
responce
.
PersonDocumentNumber
=
record
.
НомерДокумента
;
SMRecord
.
PersonDocumentSeria
=
record
.
СерияДокумента
;
responce
.
PersonDocumentDate
=
record
.
КогдаВыданДокумент
;
SMRecord
.
PersonDocumentNumber
=
record
.
НомерДокумента
;
responce
.
PersonSnils
=
record
.
Снилс
;
SMRecord
.
PersonDocumentDate
=
record
.
КогдаВыданДокумент
;
responce
.
rowguid_contingent
=
record
.
Личность
.
ToString
();
SMRecord
.
PersonSnils
=
record
.
Снилс
;
SMRecord
.
rowguid_contingent
=
record
.
Личность
.
ToString
();
SMRecord
.
Status
=
record
.
ПриказОтчисления
==
null
?
record
.
ПриказЗачисления
==
null
?
"3"
:
"1"
:
"2"
;
responce
.
Status
=
record
.
ПриказОтчисления
==
null
?
record
.
ПриказЗачисления
==
null
?
"3"
:
"1"
:
"2"
;
SMRecord
.
StatusDate
=
SMRecord
.
Status
switch
{
responce
.
StatusDate
=
responce
.
Status
switch
{
"1"
=>
record
.
НачальнаяДата
,
"1"
=>
record
.
НачальнаяДата
,
"2"
=>
record
.
КонечнаяДата
,
"2"
=>
record
.
КонечнаяДата
,
_
=>
DateTime
.
Now
,
_
=>
DateTime
.
Now
,
};
};
if
(
SMRecord
.
Status
==
"1"
)
{
if
(
responce
.
Status
==
"1"
)
{
SMRecord
.
FounderType
=
record
.
ВидУчредителяКод
.
ToString
()
??
String
.
Empty
;
responce
.
FounderType
=
record
.
ВидУчредителяКод
.
ToString
()
??
String
.
Empty
;
SMRecord
.
OrganizationType
=
GetOrganizationType
(
context
,
record
.
ТипОрганизации
).
ToString
()
switch
{
responce
.
OrganizationType
=
GetOrganizationType
(
context
,
record
.
ТипОрганизации
).
ToString
()
switch
{
"29025A0D-7C7F-457B-9E14-0A6C16CBF94D"
=>
"1"
,
"29025A0D-7C7F-457B-9E14-0A6C16CBF94D"
=>
"1"
,
"CF85F418-FFAD-4C86-8937-B2D4FBF4B661"
=>
"2"
,
"CF85F418-FFAD-4C86-8937-B2D4FBF4B661"
=>
"2"
,
"1EB33F46-5A7C-4117-97EB-D3DFE4C3A7B2"
=>
"3"
,
"1EB33F46-5A7C-4117-97EB-D3DFE4C3A7B2"
=>
"3"
,
"BB88E168-D124-462B-8870-2D9A35755561"
=>
"4"
,
"BB88E168-D124-462B-8870-2D9A35755561"
=>
"4"
,
_
=>
"5"
,
_
=>
"5"
,
};
};
SMRecord
.
EducationProgram
=
GetProgramType
(
context
,
record
.
ОбразовательнаяПрограммаТип
).
ToString
()
switch
{
responce
.
EducationProgram
=
GetProgramType
(
context
,
record
.
ОбразовательнаяПрограммаТип
).
ToString
()
switch
{
"5BE7BD7C-1202-45E2-8E9E-7247070EA7B6"
=>
"1"
,
"5BE7BD7C-1202-45E2-8E9E-7247070EA7B6"
=>
"1"
,
"C09D82B4-CC8D-4EB8-9703-C95AEA53E044"
=>
"2"
,
"C09D82B4-CC8D-4EB8-9703-C95AEA53E044"
=>
"2"
,
"8E674FDF-32CF-4080-B062-85C41A067A6F"
=>
"3"
,
"8E674FDF-32CF-4080-B062-85C41A067A6F"
=>
"3"
,
_
=>
"4"
,
_
=>
"4"
,
};
};
SMRecord
.
EducationForm
=
record
.
ФормаОбученияКод
switch
{
responce
.
EducationForm
=
record
.
ФормаОбученияКод
switch
{
11
=>
"1"
,
11
=>
"1"
,
12
=>
"2"
,
12
=>
"2"
,
13
=>
"3"
,
13
=>
"3"
,
21
=>
"4"
,
21
=>
"4"
,
22
=>
"5"
,
22
=>
"5"
,
_
=>
String
.
Empty
_
=>
String
.
Empty
};
};
}
}
else
{
// записи не найдены
SMRecord
.
rowguid_eais
=
record
.
rowguid_eais
;
SMRecord
.
PersonDocumentSeria
=
record
.
СерияДокумента
;
SMRecord
.
PersonDocumentNumber
=
record
.
НомерДокумента
;
SMRecord
.
Status
=
"3"
;
SMRecord
.
StatusDate
=
DateTime
.
Now
;
}
}
responce
.
Add
(
SMRecord
);
}
else
{
// записи не найдены
responce
.
rowguid_eais
=
record
.
rowguid_eais
;
responce
.
PersonDocumentSeria
=
record
.
СерияДокумента
;
responce
.
PersonDocumentNumber
=
record
.
НомерДокумента
;
responce
.
Status
=
"3"
;
responce
.
StatusDate
=
DateTime
.
Now
;
}
}
return
responce
;
return
responce
;
}
}
//форма обучения в GetPersonByID не исправлена
public
Task
<
List
<
SMResponce
>>
GetPersonByID
(
string
ID
)
{
var
records
=
_contingentContext
.
ЛичностьПодразделения
s
.
Where
(
persondepartment
=>
persondepartment
.
Личность
==
new
Guid
(
ID
))
.
Join
(
_contingentContext
.
Личность
s
,
persondepartment
=>
persondepartment
.
Личность
,
person
=>
person
.
PrimaryKey
,
(
persondepartment
,
person
)
=>
new
{
persondepartment
,
person
})
.
Join
(
_contingentContext
.
Территория
s
,
up
=>
up
.
person
.
ТерриторияФактическогоМестаЖительства
New
,
location
=>
location
.
PrimaryKey
,
(
up
,
location
)
=>
new
{
up
.
persondepartment
,
up
.
person
,
location
})
.
Join
(
_contingentContext
.
ОбразовательнаяОрганизация
s
,
up
=>
up
.
persondepartment
.
Организация
,
organization
=>
organization
.
PrimaryKey
,
(
up
,
organization
)
=>
new
{
up
.
persondepartment
,
up
.
person
,
up
.
location
,
organization
})
.
Join
(
_contingentContext
.
ВидУчредителя
s
,
up
=>
up
.
organization
.
ВидУчредителя
,
organizationfounder
=>
organizationfounder
.
PrimaryKey
,
(
up
,
organizationfounder
)
=>
new
{
up
.
persondepartment
,
up
.
person
,
up
.
location
,
up
.
organization
,
organizationfounder
})
.
Join
(
_contingentContext
.
ДокументЛичности
s
,
up
=>
up
.
persondepartment
.
Личность
,
doc
=>
doc
.
Личность
,
(
up
,
doc
)
=>
new
{
up
.
persondepartment
,
up
.
person
,
up
.
location
,
up
.
organization
,
up
.
organizationfounder
,
doc
})
.
Join
(
_contingentContext
.
ВидУдостоверяющегоДокумента
s
,
up
=>
up
.
doc
.
ВидУдостоверяющегоДокумента
,
doctype
=>
doctype
.
PrimaryKey
,
(
up
,
doctype
)
=>
new
{
up
.
persondepartment
,
up
.
person
,
up
.
location
,
up
.
organization
,
up
.
organizationfounder
,
up
.
doc
,
doctype
})
.
Join
(
_contingentContext
.
ОбразовательнаяПрограммаОрганизации
s
,
up
=>
up
.
organization
.
PrimaryKey
,
educationprogram
=>
educationprogram
.
Организация
,
(
up
,
educationprogram
)
=>
new
{
up
.
persondepartment
,
up
.
person
,
up
.
location
,
up
.
organization
,
up
.
organizationfounder
,
up
.
doc
,
up
.
doctype
,
educationprogram
})
.
Join
(
_contingentContext
.
ТипОбразовательнойПрограммы
s
,
up
=>
up
.
educationprogram
.
ТипОп
,
programtype
=>
programtype
.
PrimaryKey
,
(
up
,
programtype
)
=>
new
{
up
.
persondepartment
,
up
.
person
,
up
.
location
,
up
.
organization
,
up
.
organizationfounder
,
up
.
doc
,
up
.
doctype
,
up
.
educationprogram
,
programtype
})
.
Join
(
_contingentContext
.
ФормаОбучения
s
,
up
=>
up
.
programtype
.
Иерархия
,
eduform
=>
eduform
.
Иерархия
,
(
up
,
eduform
)
=>
new
{
up
.
persondepartment
,
up
.
person
,
up
.
location
,
up
.
organization
,
up
.
organizationfounder
,
up
.
doc
,
up
.
doctype
,
up
.
educationprogram
,
up
.
programtype
,
eduform
})
.
Select
(
result
=>
new
SMResponceTemp
()
{
Личность
=
result
.
persondepartment
.
Личность
,
ПриказЗачисления
=
result
.
persondepartment
.
ПриказЗачисления
,
ПриказОтчисления
=
result
.
persondepartment
.
ПриказОтчисления
,
НачальнаяДата
=
result
.
persondepartment
.
НачальнаяДата
,
КонечнаяДата
=
result
.
persondepartment
.
КонечнаяДата
,
Подразделение
=
result
.
persondepartment
.
Подразделение
,
Организация
=
result
.
persondepartment
.
Организация
,
Имя
=
result
.
person
.
Имя
,
Отчество
=
result
.
person
.
Отчество
,
Фамилия
=
result
.
person
.
Фамилия
,
БезОтчества
=
result
.
person
.
БезОтчества
,
ДатаРождения
=
result
.
person
.
ДатаРождения
,
ТерриторияФактическогоМестаЖительства
New
=
result
.
person
.
ТерриторияФактическогоМестаЖительства
New
,
Снилс
=
result
.
person
.
Снилс
,
Территория
Shortname
=
result
.
location
.
Наименование
,
ТипОрганизации
=
result
.
organization
.
ТипОрганизации
,
ПолноеНаименованиеОрганизации
=
result
.
organization
.
ПолноеНаименование
,
ВидУчредителя
=
result
.
organization
.
ВидУчредителя
,
ВидУчредителяКод
=
result
.
organizationfounder
.
Код
,
СерияДокумента
=
result
.
doc
.
СерияДокумента
,
НомерДокумента
=
result
.
doc
.
НомерДокумента
,
КогдаВыданДокумент
=
result
.
doc
.
КогдаВыданДокумент
,
ВидУдостоверяющегоДокумента
=
result
.
doc
.
ВидУдостоверяющегоДокумента
,
НаименованиеУдостоверяющегоДокумента
=
result
.
doctype
.
Наименование
,
КодУдостоверяющегоДокумента
=
result
.
doctype
.
Код
,
ОбразовательнаяПрограммаТип
=
result
.
educationprogram
.
ТипОп
,
ОбразовательнаяПрограммаКод
=
result
.
programtype
.
Код
,
ОбразовательнаяПрограммаИерархия
=
result
.
programtype
.
Иерархия
,
ФормаОбученияНаименование
=
result
.
eduform
.
Наименование
,
ФормаОбученияКод
=
result
.
eduform
.
Код
,
rowguid_eais
=
result
.
person
.
PrimaryKey
.
ToString
()
}).
ToList
();
return
Task
.
FromResult
(
FormatResponce
(
_contingentContext
,
records
));
}
}
}
}
}
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