public void returnTicket(Ticket ticket) {
    if (ticket == null) {
      throw new CashOfficeManipulationException("Cannot reserve NULL ticket");
    }
    if (ticket.getStatus() != TicketStatus.SOLD) {
      throw new CashOfficeManipulationException("Cannot return ticket which not SOLD");
    }
    switch (ticket.getSeance().getStatus()) {
      case OPENED:
        ticket.changeStatus(TicketStatus.ENABLE);
        break;
      case CANCELED:
        ticket.changeStatus(TicketStatus.NOT_FOR_SALE);
        break;
      case CLOSED:
        throw new CashOfficeManipulationException("Cannot return ticket for seance which already ended");
    }

    if ( !exists(ticket)) {
      addTicket(ticket);
    }
  }