Skip to content

Commit

Permalink
Fix generate_milestones func
Browse files Browse the repository at this point in the history
Replace for `cycle` to `while` in generate_milestones func.
  • Loading branch information
VDigitall committed Jun 18, 2018
1 parent 5b8fb62 commit d890db3
Show file tree
Hide file tree
Showing 2 changed files with 18 additions and 18 deletions.
4 changes: 0 additions & 4 deletions openprocurement/bridge/contracting/tests/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -280,16 +280,12 @@ def test_generate_accelerated_milestones(self, *mocks):
tender = deepcopy(self.tender)
handle_esco_tenders(contract, tender)

# contract['mode'] = 'test'
# contract['procurementMethodDetails'] = "quick, accelerator=1440"

re_obj = ACCELERATOR_RE.search(contract['procurementMethodDetails'])
accelerator = int(re_obj.groupdict()['accelerator'])

contract_start_date = parse_date(contract['period']['startDate']) \
if 'period' in contract and 'startDate' in contract['period'] \
else parse_date(contract['dateSigned'])
# milestones = generate_milestones(contract, tender)
milestones = contract['milestones']
last_scheduled_milestone = [m for m in milestones if m['status'] == 'scheduled'][-1]

Expand Down
32 changes: 18 additions & 14 deletions openprocurement/bridge/contracting/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -78,12 +78,12 @@ def generate_milestones(contract, tender):
)

milestones = []
years_before_contract_start = contract_start_date.year - announcement_date.year

last_milestone_sequence_number = 16 + years_before_contract_start

logger.info("Generate milestones for esco tender {}".format(tender['id']))
for sequence_number in xrange(1, last_milestone_sequence_number + 1):
max_contract_end_date = contract_start_date + timedelta(days=DAYS_PER_YEAR * 15)

sequence_number = 1
while True:
date_modified = datetime.now(TZ)
milestone = {
'id': uuid4().hex,
Expand All @@ -101,34 +101,38 @@ def generate_milestones(contract, tender):
"valueAddedTaxIncluded": contract['value']['valueAddedTaxIncluded']
},
}

if sequence_number == 1:
milestone_start_date = announcement_date
milestone_end_date = TZ.localize(datetime(announcement_date.year + sequence_number, 1, 1))
milestone['status'] = 'pending'
elif sequence_number == last_milestone_sequence_number:
milestone_start_date = TZ.localize(datetime(announcement_date.year + sequence_number - 1, 1, 1))
milestone_end_date = contract_start_date + timedelta(days=DAYS_PER_YEAR * 15)
else:
milestone_start_date = TZ.localize(datetime(announcement_date.year + sequence_number - 1, 1, 1))
milestone_end_date = TZ.localize(datetime(announcement_date.year + sequence_number, 1, 1))

if contract_end_date.year >= milestone_start_date.year and sequence_number != 1:
milestone['status'] = 'scheduled'
elif contract_end_date.year < milestone_start_date.year:
milestone['status'] = 'spare'

if contract_end_date.year == announcement_date.year + sequence_number - 1:
if contract_end_date.year == milestone_start_date.year:
milestone_end_date = contract_end_date

if milestone_start_date > max_contract_end_date:
break

milestone['period'] = {
'startDate': milestone_start_date.isoformat(),
'endDate': milestone_end_date.isoformat()
}

if contract_end_date.year >= milestone_start_date.year and sequence_number != 1:
milestone['status'] = 'scheduled'
elif contract_end_date.year < milestone_start_date.year:
milestone['status'] = 'spare'

title = "Milestone #{} of year {}".format(sequence_number, milestone_start_date.year)
milestone['title'] = title
milestone['description'] = title

milestones.append(milestone)
sequence_number += 1
milestones[-1]['period']['endDate'] = max_contract_end_date.isoformat()

if accelerator:
accelerate_milestones(milestones, DAYS_PER_YEAR, accelerator)
# restore accelerated contract.dateSigned
Expand Down

0 comments on commit d890db3

Please sign in to comment.