def collection_post(self):
     """Post a complaint
     """
     tender = self.request.validated['tender']
     if tender.status not in ['active.enquiries', 'active.tendering']:
         self.request.errors.add('body', 'data', 'Can\'t add complaint in current ({}) tender status'.format(tender.status))
         self.request.errors.status = 403
         return
     complaint_data = self.request.validated['data']
     complaint = Complaint(complaint_data)
     complaint.__parent__ = self.request.context
     tender.complaints.append(complaint)
     if save_tender(self.request):
         LOGGER.info('Created tender complaint {}'.format(complaint.id),
                     extra=context_unpack(self.request, {'MESSAGE_ID': 'tender_complaint_create'}, {'complaint_id': complaint.id}))
         self.request.response.status = 201
         self.request.response.headers['Location'] = self.request.route_url('Tender Complaints', tender_id=tender.id, complaint_id=complaint.id)
         return {'data': complaint.serialize("view")}
 def collection_post(self):
     """Post a complaint for award
     """
     tender = self.request.validated["tender"]
     if tender.status not in ["active.qualification", "active.awarded"]:
         self.request.errors.add(
             "body", "data", "Can't add complaint in current ({}) tender status".format(tender.status)
         )
         self.request.errors.status = 403
         return
     if any([i.status != "active" for i in tender.lots if i.id == self.request.context.lotID]):
         self.request.errors.add("body", "data", "Can add complaint only in active lot status")
         self.request.errors.status = 403
         return
     if self.request.context.complaintPeriod and (
         self.request.context.complaintPeriod.startDate
         and self.request.context.complaintPeriod.startDate > get_now()
         or self.request.context.complaintPeriod.endDate
         and self.request.context.complaintPeriod.endDate < get_now()
     ):
         self.request.errors.add("body", "data", "Can add complaint only in complaintPeriod")
         self.request.errors.status = 403
         return
     complaint_data = self.request.validated["data"]
     complaint = Complaint(complaint_data)
     complaint.__parent__ = self.request.context
     self.request.context.complaints.append(complaint)
     if save_tender(self.request):
         LOGGER.info(
             "Created tender award complaint {}".format(complaint.id),
             extra=context_unpack(
                 self.request, {"MESSAGE_ID": "tender_award_complaint_create"}, {"complaint_id": complaint.id}
             ),
         )
         self.request.response.status = 201
         self.request.response.headers["Location"] = self.request.route_url(
             "Tender Award Complaints",
             tender_id=tender.id,
             award_id=self.request.validated["award_id"],
             complaint_id=complaint["id"],
         )
         return {"data": complaint.serialize("view")}