def collection_post(self): auction = self.context.serialize() adapter = self.request.registry.getAdapter(self.context, IAuctionManager) merge_auction_results(auction, self.request) apply_patch(self.request, save=False, src=self.request.validated['auction_src']) remove_draft_bids(self.request) auction = self.request.validated['auction'] invalidate_empty_bids(auction) if any([i.status == 'active' for i in auction.bids]): self.request.content_configurator.start_awarding() else: adapter.pendify_auction_status('unsuccessful') if save_auction(self.request): self.LOGGER.info( 'Report auction results', extra=context_unpack(self.request, {'MESSAGE_ID': 'auction_auction_post'})) return { 'data': self.request.validated['auction'].serialize( self.request.validated['auction'].status) }
def check_status(request): auction = request.validated['auction'] now = get_now() for complaint in auction.complaints: check_complaint_status(request, complaint, now) for award in auction.awards: request.content_configurator.check_award_status(request, award, now) for complaint in award.complaints: check_complaint_status(request, complaint, now) if not auction.lots and auction.status == 'active.tendering' and auction.tenderPeriod.endDate <= now: auction.status = 'active.auction' remove_draft_bids(request) check_bids(request) log_auction_status_change(request, auction, auction.status) if auction.numberOfBids < 2 and auction.auctionPeriod: auction.auctionPeriod.startDate = None return elif auction.lots and auction.status == 'active.tendering' and auction.tenderPeriod.endDate <= now: auction.status = 'active.auction' remove_draft_bids(request) check_bids(request) log_auction_status_change(request, auction, auction.status) [ setattr(i.auctionPeriod, 'startDate', None) for i in auction.lots if i.numberOfBids < 2 and i.auctionPeriod ] return elif not auction.lots and auction.status == 'active.awarded': standStillEnds = [ a.complaintPeriod.endDate.astimezone(TZ) for a in auction.awards if a.complaintPeriod.endDate ] if not standStillEnds: return standStillEnd = max(standStillEnds) if standStillEnd <= now: check_auction_status(request) elif auction.lots and auction.status in [ 'active.qualification', 'active.awarded' ]: if any([ i['status'] in auction.block_complaint_status and i.relatedLot is None for i in auction.complaints ]): return for lot in auction.lots: if lot['status'] != 'active': continue lot_awards = [i for i in auction.awards if i.lotID == lot.id] standStillEnds = [ a.complaintPeriod.endDate.astimezone(TZ) for a in lot_awards if a.complaintPeriod.endDate ] if not standStillEnds: continue standStillEnd = max(standStillEnds) if standStillEnd <= now: check_auction_status(request) return
def check_status(request): auction = request.validated['auction'] now = get_now() for complaint in auction.complaints: check_complaint_status(request, complaint, now) for award in auction.awards: for complaint in award.complaints: check_complaint_status(request, complaint, now) if not auction.lots and auction.status == 'active.tendering' and auction.tenderPeriod.endDate <= now: LOGGER.info('Switched auction {} to {}'.format(auction['id'], 'active.auction'), extra=context_unpack(request, {'MESSAGE_ID': 'switched_auction_active.auction'})) auction.status = 'active.auction' remove_draft_bids(request) check_bids(request) if auction.numberOfBids < 2 and auction.auctionPeriod: auction.auctionPeriod.startDate = None return elif auction.lots and auction.status == 'active.tendering' and auction.tenderPeriod.endDate <= now: LOGGER.info('Switched auction {} to {}'.format(auction['id'], 'active.auction'), extra=context_unpack(request, {'MESSAGE_ID': 'switched_auction_active.auction'})) auction.status = 'active.auction' remove_draft_bids(request) check_bids(request) [setattr(i.auctionPeriod, 'startDate', None) for i in auction.lots if i.numberOfBids < 2 and i.auctionPeriod] return elif not auction.lots and auction.status == 'active.awarded': standStillEnds = [ a.complaintPeriod.endDate.astimezone(TZ) for a in auction.awards if a.complaintPeriod.endDate ] if not standStillEnds: return standStillEnd = max(standStillEnds) if standStillEnd <= now: check_auction_status(request) elif auction.lots and auction.status in ['active.qualification', 'active.awarded']: if any([i['status'] in auction.block_complaint_status and i.relatedLot is None for i in auction.complaints]): return for lot in auction.lots: if lot['status'] != 'active': continue lot_awards = [i for i in auction.awards if i.lotID == lot.id] standStillEnds = [ a.complaintPeriod.endDate.astimezone(TZ) for a in lot_awards if a.complaintPeriod.endDate ] if not standStillEnds: continue standStillEnd = max(standStillEnds) if standStillEnd <= now: check_auction_status(request) return
def collection_post(self): auction = self.context.serialize() merge_auction_results(auction, self.request) apply_patch(self.request, save=False, src=self.request.validated['auction_src']) remove_draft_bids(self.request) auction = self.request.validated['auction'] invalidate_empty_bids(auction) if any([i.status == 'active' for i in auction.bids]): create_awards(self.request) else: auction.status = 'unsuccessful' if save_auction(self.request): self.LOGGER.info('Report auction results', extra=context_unpack(self.request, {'MESSAGE_ID': 'auction_auction_post'})) return {'data': self.request.validated['auction'].serialize(self.request.validated['auction'].status)}
def check_status(request): auction = request.validated['auction'] now = get_now() for award in auction.awards: check_award_status(request, award, now) if auction.status == 'active.tendering' and auction.tenderPeriod.endDate <= now: LOGGER.info('Switched auction {} to {}'.format(auction['id'], 'active.auction'), extra=context_unpack( request, {'MESSAGE_ID': 'switched_auction_active.auction'})) auction.status = 'active.auction' remove_draft_bids(request) check_bids(request) # if auction.numberOfBids < 2 and auction.auctionPeriod: # auction.auctionPeriod.startDate = None return