def _do_update_with_patch(self, session, order, resource, expected_version): self._validate_patch_update(order, resource, expected_version) order.lastModified = clock.CLOCK.now() order.logPosition = LogPosition() order.version += 1 if resource['status'].lower() == 'cancelled': order.amendedReason = resource['amendedReason'] order.cancelledUsername = resource['cancelledInfo']['author'][ 'value'] order.cancelledSiteId = get_site(resource['cancelledInfo']) order.cancelledTime = clock.CLOCK.now() order.orderStatus = BiobankOrderStatus.CANCELLED elif resource['status'].lower() == 'restored': order.amendedReason = resource['amendedReason'] order.restoredUsername = resource['restoredInfo']['author'][ 'value'] order.restoredSiteId = get_site(resource['restoredInfo']) order.restoredTime = clock.CLOCK.now() order.orderStatus = BiobankOrderStatus.UNSET else: raise BadRequest( 'status must be restored or cancelled for patch request.') super(BiobankOrderDao, self)._do_update(session, order, resource) self._update_history(session, order) self._refresh_participant_summary(session, order) return order
def _do_update(self, session, order, existing_obj): order.lastModified = clock.CLOCK.now() order.biobankOrderId = existing_obj.biobankOrderId order.orderStatus = BiobankOrderStatus.AMENDED if hasattr(existing_obj, 'amendedInfo' ) and existing_obj.amendedInfo.get('author') is not None: order.amendedUsername = existing_obj.amendedInfo.get('author').get( 'value') if hasattr(existing_obj, 'amendedInfo'): order.amendedSiteId = get_site(existing_obj.amendedInfo) order.amendedTime = clock.CLOCK.now() order.logPosition = LogPosition() order.version += 1 # Ensure that if an order was previously cancelled/restored those columns are removed. self._clear_cancelled_and_restored_fields(order) super(BiobankOrderDao, self)._do_update(session, order, existing_obj) session.add(order.logPosition) self._refresh_participant_summary(session, order) self._update_history(session, order)