def collection_post(self): """Post a cancellation """ tender = self.request.validated['tender'] if tender.status in ['complete', 'cancelled', 'unsuccessful']: self.request.errors.add('body', 'data', 'Can\'t add cancellation in current ({}) tender status'.format(tender.status)) self.request.errors.status = 403 return cancellation_data = self.request.validated['data'] if any([i.status != 'active' for i in tender.lots if i.id == cancellation_data.get('relatedLot')]): self.request.errors.add('body', 'data', 'Can add cancellation only in active lot status') self.request.errors.status = 403 return cancellation = Cancellation(cancellation_data) cancellation.__parent__ = self.request.context if cancellation.relatedLot and cancellation.status == 'active': [setattr(i, 'status', 'cancelled') for i in tender.lots if i.id == cancellation.relatedLot] check_tender_status(self.request) elif cancellation.status == 'active': tender.status = 'cancelled' tender.cancellations.append(cancellation) if save_tender(self.request): 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', tender_id=tender.id, cancellation_id=cancellation.id) return {'data': cancellation.serialize("view")}
def collection_post(self): """Post a cancellation """ tender = self.request.validated['tender'] if tender.status in ['complete', 'cancelled', 'unsuccessful']: self.request.errors.add('body', 'data', 'Can\'t add cancellation in current ({}) tender status'.format(tender.status)) self.request.errors.status = 403 return cancellation_data = self.request.validated['data'] cancellation = Cancellation(cancellation_data) if cancellation.status == 'active': tender.status = 'cancelled' tender.cancellations.append(cancellation) if save_tender(self.request): update_journal_handler_params({'cancellation_id': cancellation.id}) LOGGER.info('Created tender cancellation {}'.format(cancellation.id), extra={'MESSAGE_ID': 'tender_cancellation_create'}) self.request.response.status = 201 self.request.response.headers['Location'] = self.request.route_url('Tender Cancellations', tender_id=tender.id, cancellation_id=cancellation.id) return {'data': cancellation.serialize("view")}