diff --git a/openprocurement/chronograph/scheduler.py b/openprocurement/chronograph/scheduler.py index 65eaff9..952958f 100644 --- a/openprocurement/chronograph/scheduler.py +++ b/openprocurement/chronograph/scheduler.py @@ -137,7 +137,14 @@ def planning_auction(tender, start, db, quick=False, lot_id=None): #_, dayStream = get_date(db, mode, date.date()) #set_date(db, mode, date.date(), WORKING_DAY_END, dayStream+1) set_date(db, plan, end.time(), stream, "_".join([tid, lot_id]) if lot_id else tid, dayStart) - return start + return (start, stream) + + +def skipped_days(days): + days_str = '' + if days: + days_str = ' Skipped {} full days.'.format(days) + return days_str def check_tender(tender, db): @@ -165,11 +172,12 @@ def check_tender(tender, db): quick = os.environ.get('SANDBOX_MODE', False) and u'quick' in tender.get('submissionMethodDetails', '') while not planned: try: - auctionPeriod = planning_auction(tender, tenderPeriodEnd, db, quick) + auctionPeriod, stream = planning_auction(tender, tenderPeriodEnd, db, quick) planned = True except ResourceConflict: planned = False auctionPeriod = randomize(auctionPeriod).isoformat() + days = skipped_days(skip_days) LOG.info('Planned auction for tender {} to {}'.format(tender['id'], auctionPeriod)) return {'auctionPeriod': {'startDate': auctionPeriod}}, now elif tender.get('lots') and tender['status'] == 'active.tendering' and not tender.get('auctionPeriod') and tenderPeriodEnd and tenderPeriodEnd > now: @@ -183,7 +191,7 @@ def check_tender(tender, db): planned = False while not planned: try: - auctionPeriod = planning_auction(tender, tenderPeriodEnd, db, quick, lot_id) + auctionPeriod, stream = planning_auction(tender, tenderPeriodEnd, db, quick, lot_id) planned = True except ResourceConflict: planned = False @@ -211,11 +219,12 @@ def check_tender(tender, db): quick = os.environ.get('SANDBOX_MODE', False) and u'quick' in tender.get('submissionMethodDetails', '') while not planned: try: - auctionPeriod = planning_auction(tender, tenderPeriodEnd, db, quick) + auctionPeriod, stream = planning_auction(tender, tenderPeriodEnd, db, quick) planned = True except ResourceConflict: planned = False auctionPeriod = randomize(auctionPeriod).isoformat() + days = skipped_days(skip_days) LOG.info('Planned auction for tender {} to {}'.format(tender['id'], auctionPeriod)) return {'auctionPeriod': {'startDate': auctionPeriod}}, now elif not tender.get('lots') and tender['status'] == 'active.auction' and tender.get('auctionPeriod'): @@ -226,11 +235,12 @@ def check_tender(tender, db): quick = os.environ.get('SANDBOX_MODE', False) and u'quick' in tender.get('submissionMethodDetails', '') while not planned: try: - auctionPeriod = planning_auction(tender, now, db, quick) + auctionPeriod, stream = planning_auction(tender, now, db, quick) planned = True except ResourceConflict: planned = False auctionPeriod = randomize(auctionPeriod).isoformat() + days = skipped_days(skip_days) LOG.info('Replanned auction for tender {} to {}'.format(tender['id'], auctionPeriod)) return {'auctionPeriod': {'startDate': auctionPeriod}}, now else: @@ -246,7 +256,7 @@ def check_tender(tender, db): planned = False while not planned: try: - auctionPeriod = planning_auction(tender, tenderPeriodEnd, db, quick, lot_id) + auctionPeriod,stream = planning_auction(tender, tenderPeriodEnd, db, quick, lot_id) planned = True except ResourceConflict: planned = False @@ -269,7 +279,7 @@ def check_tender(tender, db): planned = False while not planned: try: - auctionPeriod = planning_auction(tender, now, db, quick, lot_id) + auctionPeriod, stream = planning_auction(tender, now, db, quick, lot_id) planned = True except ResourceConflict: planned = False diff --git a/openprocurement/chronograph/tests/test.py b/openprocurement/chronograph/tests/test.py index 34fd9db..6ea9ee4 100644 --- a/openprocurement/chronograph/tests/test.py +++ b/openprocurement/chronograph/tests/test.py @@ -444,25 +444,25 @@ def test_auction_quick_planning(self): def test_auction_planning_overlow(self): now = datetime.now(TZ) - res = planning_auction(test_tender_data_test_quick, now, self.db) + res = planning_auction(test_tender_data_test_quick, now, self.db)[0] startDate = res.date() count = 0 while startDate == res.date(): count += 1 - res = planning_auction(test_tender_data_test_quick, now, self.db) + res = planning_auction(test_tender_data_test_quick, now, self.db)[0] self.assertEqual(count, 100) def test_auction_planning_buffer(self): some_date = datetime(2015, 9, 21, 6, 30) date = some_date.date() ndate = (some_date + timedelta(days=1)).date() - res = planning_auction(test_tender_data_test_quick, some_date, self.db) + res = planning_auction(test_tender_data_test_quick, some_date, self.db)[0] self.assertEqual(res.date(), date) some_date = some_date.replace(hour=10) - res = planning_auction(test_tender_data_test_quick, some_date, self.db) + res = planning_auction(test_tender_data_test_quick, some_date, self.db)[0] self.assertNotEqual(res.date(), date) self.assertEqual(res.date(), ndate) some_date = some_date.replace(hour=16) - res = planning_auction(test_tender_data_test_quick, some_date, self.db) + res= planning_auction(test_tender_data_test_quick, some_date, self.db)[0] self.assertNotEqual(res.date(), date) self.assertEqual(res.date(), ndate)