Exemplo n.º 1
0
 def next_check(self):
     now = get_now()
     checks = []
     if self.status == 'active.tendering' and self.tenderPeriod and self.tenderPeriod.endDate:
         checks.append(self.tenderPeriod.endDate.astimezone(TZ))
     elif not self.lots and self.status == 'active.auction' and self.auctionPeriod and self.auctionPeriod.startDate and not self.auctionPeriod.endDate:
         if now < self.auctionPeriod.startDate:
             checks.append(self.auctionPeriod.startDate.astimezone(TZ))
         elif now < calc_auction_end_time(
                 self.numberOfBids,
                 self.auctionPeriod.startDate).astimezone(TZ):
             checks.append(
                 calc_auction_end_time(
                     self.numberOfBids,
                     self.auctionPeriod.startDate).astimezone(TZ))
     elif self.lots and self.status == 'active.auction':
         for lot in self.lots:
             if lot.status != 'active' or not lot.auctionPeriod or not lot.auctionPeriod.startDate or lot.auctionPeriod.endDate:
                 continue
             if now < lot.auctionPeriod.startDate:
                 checks.append(lot.auctionPeriod.startDate.astimezone(TZ))
             elif now < calc_auction_end_time(
                     lot.numberOfBids,
                     lot.auctionPeriod.startDate).astimezone(TZ):
                 checks.append(
                     calc_auction_end_time(
                         lot.numberOfBids,
                         lot.auctionPeriod.startDate).astimezone(TZ))
     # Use next_check part from awarding
     request = get_request_from_root(self)
     if request is not None:
         awarding_check = request.registry.getAdapter(
             self, IAwardingNextCheck).add_awarding_checks(self)
         if awarding_check is not None:
             checks.append(awarding_check)
     if self.status.startswith('active'):
         for complaint in self.complaints:
             if complaint.status == 'claim' and complaint.dateSubmitted:
                 checks.append(
                     calculate_business_date(complaint.dateSubmitted,
                                             COMPLAINT_STAND_STILL_TIME,
                                             self))
             elif complaint.status == 'answered' and complaint.dateAnswered:
                 checks.append(
                     calculate_business_date(complaint.dateAnswered,
                                             COMPLAINT_STAND_STILL_TIME,
                                             self))
         for award in self.awards:
             for complaint in award.complaints:
                 if complaint.status == 'claim' and complaint.dateSubmitted:
                     checks.append(
                         calculate_business_date(
                             complaint.dateSubmitted,
                             COMPLAINT_STAND_STILL_TIME, self))
                 elif complaint.status == 'answered' and complaint.dateAnswered:
                     checks.append(
                         calculate_business_date(
                             complaint.dateAnswered,
                             COMPLAINT_STAND_STILL_TIME, self))
     return min(checks).isoformat() if checks else None
Exemplo n.º 2
0
 def shouldStartAfter(self):
     if self.endDate:
         return
     auction = self.__parent__
     if auction.lots or auction.status not in ['active.tendering', 'active.auction']:
         return
     if self.startDate and get_now() > calc_auction_end_time(auction.numberOfBids, self.startDate):
         start_after = calc_auction_end_time(auction.numberOfBids, self.startDate)
     elif auction.tenderPeriod and auction.tenderPeriod.endDate:
         start_after = auction.tenderPeriod.endDate
     else:
         return
     return rounding_shouldStartAfter(start_after, auction).isoformat()