Coverage for apps/report/bulk_import/SOI.py : 100%
Hot-keys on this page
r m x p toggle line displays
j k next/prev highlighted chunk
0 (zero) top of page
1 (one) first highlighted chunk
1from datetime import datetime
3from report.utils import DATE_PATTERN
4from report.models import ProjectSOI
5from report.utils import convert_to_int
7from .common import get_or_create_project
10def extract(xml_data, _generated_on):
11 report = xml_data['Report']
12 project_collection = (
13 report['Tablix1']['Details_Collection']['Details']
14 ['table1']['table1_CountryId_Collection']['table1_CountryId']
15 ['table1_ProjectId_Collection']['table1_ProjectId']
16 )
18 # Sample string 'Generated on 6/12/2019 10:22:06 AM'
19 generated_on_str = report['Tablix1']['Details_Collection']['Details']['table1']['@Textbox172']
20 matched = DATE_PATTERN.match(generated_on_str).group(1)
21 generated_on = _generated_on or datetime.strptime(matched, '%m/%d/%Y').date()
23 for pj in project_collection:
24 number = pj['@ProjectId_1'].replace('Total:', '').strip()
25 total_closed = convert_to_int(pj['@TotalClosed_1'])
26 closed_on_time = convert_to_int(pj['@ClosedOnTime_1'])
28 project_details = pj['Detail_Collection']['Detail']
29 project = get_or_create_project(
30 number,
31 name=(
32 # project_details can be both array and dict
33 project_details[0] if isinstance(project_details, list) else
34 project_details
35 )['@ProjectName']
36 )
37 project_soi, _ = ProjectSOI.objects.get_or_create(project=project, date=generated_on)
38 project_soi.total_closed = total_closed
39 project_soi.closed_on = closed_on_time
40 project_soi.save()