Hide keyboard shortcuts

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 

2 

3from report.utils import DATE_PATTERN 

4from report.models import ProjectSOI 

5from report.utils import convert_to_int 

6 

7from .common import get_or_create_project 

8 

9 

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 ) 

17 

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() 

22 

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']) 

27 

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()