Exemplo n.º 1
0
 def __call__(self, request, cancellation):
     if cancellation.status == "active":
         validate_absence_of_pending_accepted_satisfied_complaints(request, cancellation)
         if cancellation.relatedLot:
             self.cancel_lot(request, cancellation)
         else:
             self.cancel_tender(request)
Exemplo n.º 2
0
    def patch(self):
        cancellation = self.request.context
        prev_status = cancellation.status
        apply_patch(self.request, save=False, src=cancellation.serialize())
        new_rules = get_first_revision_date(
            self.request.tender, default=get_now()) > RELEASE_2020_04_19

        if new_rules:
            if prev_status == "draft" and cancellation.status == "pending":
                validate_absence_of_pending_accepted_satisfied_complaints(
                    self.request)
                tender = self.request.validated["tender"]
                now = get_now()
                cancellation.complaintPeriod = {
                    "startDate":
                    now.isoformat(),
                    "endDate":
                    calculate_complaint_business_date(now, timedelta(days=10),
                                                      tender).isoformat()
                }
        if cancellation.status == "active" and prev_status != "active":
            self.cancel_tender_lot_method(self.request, cancellation)

        if save_tender(self.request):
            self.LOGGER.info(
                "Updated tender cancellation {}".format(cancellation.id),
                extra=context_unpack(
                    self.request, {"MESSAGE_ID": "tender_cancellation_patch"}),
            )
            return {"data": cancellation.serialize("view")}
Exemplo n.º 3
0
    def collection_post(self):
        cancellation = self.request.validated["cancellation"]
        cancellation.date = get_now()

        if get_first_revision_date(self.request.tender, default=get_now()) > RELEASE_2020_04_19 \
                and cancellation.cancellationOf == "tender":
            cancellation.status = None

        if cancellation.status == "active":
            validate_absence_of_pending_accepted_satisfied_complaints(
                self.request)
            if cancellation.relatedLot:
                self.cancel_lot(cancellation)
            else:
                self.cancel_tender_method(self.request)

        self.request.context.cancellations.append(cancellation)
        if save_tender(self.request):
            self.LOGGER.info(
                "Created tender cancellation {}".format(cancellation.id),
                extra=context_unpack(
                    self.request, {"MESSAGE_ID": "tender_cancellation_create"},
                    {"cancellation_id": cancellation.id}),
            )
            self.request.response.status = 201
            self.request.response.headers["Location"] = self.request.route_url(
                "{}:Tender Cancellations".format(
                    self.request.validated["tender"].procurementMethodType),
                tender_id=self.request.validated["tender_id"],
                cancellation_id=cancellation.id,
            )
            return {"data": cancellation.serialize("view")}
Exemplo n.º 4
0
def test_validation_qualification_complaint(complaint_status):
    request = mock.Mock(validated=dict(
        tender={
            "qualifications": [
                {
                    "complaints": [
                        {
                            "status": complaint_status,
                        }
                    ]
                }
            ]
        },
        cancellation={},
    ))
    with mock_release_date():
        with mock.patch("openprocurement.tender.core.validation.raise_operation_error") as error_mock:
            validate_absence_of_pending_accepted_satisfied_complaints(request)

    if complaint_status in affected_complaint_statuses:
        error_mock.assert_called_once_with(
            request,
            "Can't perform operation for there is a qualification complaint in {} status".format(complaint_status)
        )
    else:
        error_mock.assert_not_called()
Exemplo n.º 5
0
def test_award_lot_cancellation_complaint(complaint_status, cancellation_lot, complaint_lot):

    request = mock.Mock(validated=dict(
        tender={
            "awards": [
                {
                    "complaints": [
                        {
                            "status": complaint_status,
                            "relatedLot": complaint_lot,
                        }
                    ]
                }
            ]
        },
        cancellation={
            "relatedLot": cancellation_lot,
        }
    ))
    with mock_release_date():
        with mock.patch("openprocurement.tender.core.validation.raise_operation_error") as error_mock:
            validate_absence_of_pending_accepted_satisfied_complaints(request)

    error_mock.assert_called_once_with(
        request,
        "Can't perform operation for there is an award complaint in {} status".format(complaint_status)
    )
Exemplo n.º 6
0
 def __call__(self, request, cancellation):
     if cancellation.status == "active":
         from openprocurement.tender.core.validation import (
             validate_absence_of_pending_accepted_satisfied_complaints, )
         validate_absence_of_pending_accepted_satisfied_complaints(
             request, cancellation)
         if cancellation.relatedLot:
             self.cancel_lot(request, cancellation)
         else:
             self.cancel_tender(request)
Exemplo n.º 7
0
def test_validation_before_release(complaint_status):
    request = mock.Mock(validated=dict(
        tender={
            "complaints": [
                {
                    "status": complaint_status,
                }
            ]
        },
        cancellation={},
    ))
    with mock_release_date(get_now() + timedelta(1)):
        with mock.patch("openprocurement.tender.core.validation.raise_operation_error") as error_mock:
            validate_absence_of_pending_accepted_satisfied_complaints(request)

    error_mock.assert_not_called()
Exemplo n.º 8
0
def test_tender_lot_cancellation_complaint_pass(complaint_status):
    request = mock.Mock(validated=dict(
        tender={
            "complaints": [
                {
                    "status": complaint_status,
                    "relatedLot": a_lot,
                }
            ]
        },
        cancellation={
            "relatedLot": b_lot,
        }
    ))
    with mock_release_date():
        with mock.patch("openprocurement.tender.core.validation.raise_operation_error") as error_mock:
            validate_absence_of_pending_accepted_satisfied_complaints(request)

    error_mock.assert_not_called()
    def patch(self):
        cancellation = self.request.context
        prev_status = cancellation.status
        apply_patch(self.request, save=False, src=cancellation.serialize())
        if cancellation.status == "active":
            if prev_status != "active":
                validate_absence_of_pending_accepted_satisfied_complaints(
                    self.request)
            if cancellation.relatedLot:
                self.cancel_lot(cancellation)
            else:
                self.cancel_tender()

        if save_tender(self.request):
            self.LOGGER.info(
                "Updated tender cancellation {}".format(cancellation.id),
                extra=context_unpack(
                    self.request, {"MESSAGE_ID": "tender_cancellation_patch"}),
            )
            return {"data": cancellation.serialize("view")}