コード例 #1
0
    def next_check(self):
        checks = []

        extend_next_check_by_complaint_period_ends(self, checks)

        if cancellation_block_tender(self):
            return min(checks).isoformat() if checks else None

        # Add checks here if needed

        return min(checks).isoformat() if checks else None
コード例 #2
0
    def next_check(self):
        now = get_now()
        checks = []
        if (self.status == "active.tendering" and self.tenderPeriod.endDate
                and not has_unanswered_complaints(self)
                and not has_unanswered_questions(self)):
            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))
        elif (not self.lots and self.status == "active.awarded" and not any(
            [i.status in self.block_complaint_status for i in self.complaints])
              and not any([
                  i.status in self.block_complaint_status for a in self.awards
                  for i in a.complaints
              ])):
            standStillEnds = [
                a.complaintPeriod.endDate.astimezone(TZ) for a in self.awards
                if a.complaintPeriod.endDate
            ]
            last_award_status = self.awards[-1].status if self.awards else ""
            if standStillEnds and last_award_status == "unsuccessful":
                checks.append(max(standStillEnds))
        elif (self.lots
              and self.status in ["active.qualification", "active.awarded"]
              and not any([
                  i.status in self.block_complaint_status
                  and i.relatedLot is None for i in self.complaints
              ])):
            for lot in self.lots:
                if lot["status"] != "active":
                    continue
                lot_awards = [i for i in self.awards if i.lotID == lot.id]
                pending_complaints = any([
                    i["status"] in self.block_complaint_status
                    and i.relatedLot == lot.id for i in self.complaints
                ])
                pending_awards_complaints = any([
                    i.status in self.block_complaint_status for a in lot_awards
                    for i in a.complaints
                ])
                standStillEnds = [
                    a.complaintPeriod.endDate.astimezone(TZ)
                    for a in lot_awards if a.complaintPeriod.endDate
                ]
                last_award_status = lot_awards[-1].status if lot_awards else ""
                if (not pending_complaints and not pending_awards_complaints
                        and standStillEnds
                        and last_award_status == "unsuccessful"):
                    checks.append(max(standStillEnds))
        if self.status.startswith("active"):
            for award in self.awards:
                if award.status == "active" and not any(
                    [i.awardID == award.id for i in self.contracts]):
                    checks.append(award.date)

        extend_next_check_by_complaint_period_ends(self, checks)

        return min(checks).isoformat() if checks else None
コード例 #3
0
    def __call__(self, obj):
        now = get_now()
        checks = []
        configurator = getAdapter(obj, IContentConfigurator)
        if (obj.status == "active.tendering" and obj.tenderPeriod.endDate
                and not has_unanswered_complaints(obj)
                and not has_unanswered_questions(obj)):
            checks.append(obj.tenderPeriod.endDate.astimezone(configurator.tz))
        elif (obj.status == "active.pre-qualification.stand-still"
              and obj.qualificationPeriod and obj.qualificationPeriod.endDate):
            active_lots = [
                lot.id for lot in obj.lots if lot.status == "active"
            ] if obj.lots else [None]
            if not any([
                    i.status in obj.block_complaint_status
                    for q in obj.qualifications
                    for i in q.complaints if q.lotID in active_lots
            ]):
                checks.append(
                    obj.qualificationPeriod.endDate.astimezone(
                        configurator.tz))
        elif (not obj.lots and obj.status == "active.auction"
              and obj.auctionPeriod and obj.auctionPeriod.startDate
              and not obj.auctionPeriod.endDate):
            if now < obj.auctionPeriod.startDate:
                checks.append(
                    obj.auctionPeriod.startDate.astimezone(configurator.tz))
            elif now < calc_auction_end_time(
                    obj.numberOfBids, obj.auctionPeriod.startDate).astimezone(
                        configurator.tz):
                checks.append(
                    calc_auction_end_time(
                        obj.numberOfBids,
                        obj.auctionPeriod.startDate).astimezone(
                            configurator.tz))
        elif obj.lots and obj.status == "active.auction":
            for lot in obj.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(
                            configurator.tz))
                elif now < calc_auction_end_time(
                        lot.numberOfBids,
                        lot.auctionPeriod.startDate).astimezone(
                            configurator.tz):
                    checks.append(
                        calc_auction_end_time(
                            lot.numberOfBids,
                            lot.auctionPeriod.startDate).astimezone(
                                configurator.tz))
        elif obj.status == "active.qualification.stand-still" and obj.awardPeriod and obj.awardPeriod.endDate:
            active_lots = [
                lot.id for lot in obj.lots if lot.status == "active"
            ] if obj.lots else [None]
            if not any([
                    i.status in obj.block_complaint_status
                    for q in obj.qualifications
                    for i in q.complaints if q.lotID in active_lots
            ]):
                checks.append(
                    obj.awardPeriod.endDate.astimezone(configurator.tz))

        extend_next_check_by_complaint_period_ends(obj, checks)

        return min(checks).isoformat() if checks else None
コード例 #4
0
ファイル: models.py プロジェクト: lttga/openprocurement.api
 def next_check(self):
     checks = []
     extend_next_check_by_complaint_period_ends(self, checks)
     return min(checks).isoformat() if checks else None