def _transfer_venue_events_to_owner(venue_account, owner, user): """ Transfer events to another owner (venue account). @type venue_account: accounts.models.VenueAccount @type owner: unicode @type user: django.contrib.auth.models.User """ owner_data = owner.split('_') owner_name, owner_link = '', '' venue_events = Event.events.filter(venue_account_owner=venue_account) if owner_data[0] == 'user': owner_name = user.username owner_link = reverse('userena_profile_detail', kwargs={'username': user.username}) for event in venue_events: event.venue_account_owner = None event.save(update_fields=['venue_account_owner']) elif owner_data[0] == 'venue': venue_account_owner = VenueAccount.objects.get(id=owner_data[1]) if venue_account_owner and venue_account_owner.account.user == user: owner_name = venue_account_owner.venue.name owner_link = reverse('public_venue_account', kwargs={'slug': venue_account_owner.slug}) for event in venue_events: event.venue_account_owner = venue_account_owner event.save(update_fields=['venue_account_owner']) notice_service.create_notice(notice_type='venue_unlinking_and_events_transferring', user=user, notice_data={ 'unlinked_venue_name': venue_account.venue.name, 'unlinked_venue_link': reverse('public_venue_account', kwargs={'slug': venue_account.slug}), 'owner_name': owner_name, 'owner_link': owner_link, 'date': datetime.datetime.now().strftime('%A, %b. %d, %I:%M %p') })
def reject_events_transferring(transferring_id, notice_id): """ Reject events transferring. @type transferring_id: int @type notice_id: int @rtype: bool """ result = False try: transferring = EventTransferring.objects.get(pk=transferring_id) except EventTransferring.DoesNotExist: transferring = None if transferring and transferring.target: event_list = list(transferring.events.all()) from_user = event_list[0].owner if len(event_list) else None target = transferring.target for event in transferring.events.all(): transferring.events.remove(event) transferring.delete() try: notice = Notice.objects.get(pk=notice_id) except Notice.DoesNotExist: notice = None if notice: notice_data = json.loads(notice.log) notice_data['state'] = 'Rejected' notice.log = json.dumps(notice_data) notice.read = True notice.save() event_links = [] for event_item in event_list: date = event_item.next_day().start_time.strftime('%Y-%m-%d') link = reverse('event_view', kwargs={'slug': event_item.slug, 'date': date}) event_links.append((event_item.name, link)) target_name = target.username target_link = reverse('userena_profile_detail', kwargs={'username': target.username}) notice_service.create_notice('transferring_rejecting', from_user, { 'subject': 'Cityfusion: transferring of your events has been rejected.', 'user': from_user, 'events': event_list, 'target_name': target_name, 'target_link': target_link, }, { 'event_count': len(event_list), 'event_links': event_links, 'date': datetime.datetime.now().strftime('%A, %b. %d, %I:%M %p'), 'target_name': target_name, 'target_link': target_link, }) result = True return result
def accept_venue_transferring(venue_transferring_id, notice_id): """ Accept a venue transferring. @type venue_transferring_id: int @type notice_id: int @rtype: bool """ result = False try: venue_transferring = VenueAccountTransferring.objects.get(pk=venue_transferring_id) except VenueAccountTransferring.DoesNotExist: venue_transferring = None if venue_transferring and venue_transferring.target: venue_account = venue_transferring.venue_account from_user = venue_transferring.venue_account.account.user target = venue_transferring.target.user venue_account.account = venue_transferring.target venue_account.save() venue_account.venue.user = venue_transferring.target.user venue_account.venue.save() Event.events.filter(venue_account_owner_id=venue_account.id).update(owner=venue_transferring.target.user.id) venue_transferring.delete() try: notice = Notice.objects.get(pk=notice_id) except Notice.DoesNotExist: notice = None if notice: notice_data = json.loads(notice.log) notice_data['state'] = 'Accepted' notice.log = json.dumps(notice_data) notice.read = True notice.save() target_name = target.username target_link = reverse('userena_profile_detail', kwargs={'username': target.username}) notice_service.create_notice('venue_transferring_accepting', from_user, { 'subject': 'Cityfusion: transferring of your venue has been accepted.', 'user': from_user, 'venue_account': venue_account, 'target_name': target_name, 'target_link': target_link, }, { 'venue_name': venue_account.venue.name, 'venue_link': reverse('public_venue_account', kwargs={'slug': venue_account.slug}), 'target_name': target_name, 'target_link': target_link, 'date': datetime.datetime.now().strftime('%A, %b. %d, %I:%M %p'), }) result = True return result
def change_venues_owner(venue_account_ids, owner_id): """ Change owner of venues list. @type venue_account_ids: list @type owner_id: int @param owner_id: a new owner id @rtype: int """ transferred_accounts, counter = [], 0 for venue_account_id in venue_account_ids: counter += 1 try: venue_account = VenueAccount.objects.get(pk=venue_account_id) target = Account.objects.get(user_id=owner_id) if venue_account.account == target: raise Exception('The venue is already belongs to this account') if VenueAccountTransferring.objects.filter(target=target, venue_account=venue_account).count() > 0: raise Exception('The venue is already in the transfer process') venue_account_transferring = VenueAccountTransferring.objects.create(target=target, venue_account=venue_account) transferred_accounts.append(venue_account) target_name = target.user.username target_link = reverse('userena_profile_detail', kwargs={'username': target.user.username}) notice_service.create_notice(notice_type='venue_transferring_to_owner', user=venue_account.account.user, notice_data={ 'venue_name': venue_account.venue.name, 'venue_link': reverse('public_venue_account', kwargs={'slug': venue_account.slug}), 'target_name': target_name, 'target_link': target_link, 'date': datetime.datetime.now().strftime('%A, %b. %d, %I:%M %p'), }) if counter == len(venue_account_ids): mail_data = {'subject': 'CityFusion: venues has been transferred to you.', 'user': target.user, 'venue_accounts': transferred_accounts } else: mail_data = {} notice_service.create_notice('venue_transferring', target.user, mail_data, { 'venue_name': venue_account.venue.name, 'venue_link': reverse('public_venue_account', kwargs={'slug': venue_account.slug}), 'date': datetime.datetime.now().strftime('%A, %b. %d, %I:%M %p'), 'accept_link': reverse('accept_venue_transferring', kwargs={ 'venue_transferring_id': venue_account_transferring.id}), 'reject_link': reverse('reject_venue_transferring', kwargs={ 'venue_transferring_id': venue_account_transferring.id}) }, mail_template='mail/venues_transferring.txt') except Exception as e: raise Exception(e.message) return len(transferred_accounts)
def reject_venue_transferring(venue_transferring_id, notice_id): """ Reject a venue transferring. @type venue_transferring_id: int @type notice_id: int @rtype: bool """ result = False try: venue_transferring = VenueAccountTransferring.objects.get(pk=venue_transferring_id) except VenueAccountTransferring.DoesNotExist: venue_transferring = None if venue_transferring and venue_transferring.target: venue_account = venue_transferring.venue_account from_user = venue_transferring.venue_account.account.user target = venue_transferring.target.user venue_transferring.delete() try: notice = Notice.objects.get(pk=notice_id) except Notice.DoesNotExist: notice = None if notice: notice_data = json.loads(notice.log) notice_data["state"] = "Rejected" notice.log = json.dumps(notice_data) notice.read = True notice.save() target_name = target.username target_link = reverse("userena_profile_detail", kwargs={"username": target.username}) notice_service.create_notice( "venue_transferring_rejecting", from_user, { "subject": "Cityfusion: transferring of your venue has been rejected.", "user": from_user, "venue_account": venue_account, "target_name": target_name, "target_link": target_link, }, { "venue_name": venue_account.venue.name, "venue_link": reverse("public_venue_account", kwargs={"slug": venue_account.slug}), "target_name": target_name, "target_link": target_link, "date": datetime.datetime.now().strftime("%A, %b. %d, %I:%M %p"), }, ) result = True return result
def change_venue_owner(venue_account_id, owner_id): """ Change owner of a venue with the given id. @type venue_account_id: int @type owner_id: int @param owner_id: a new owner id @rtype: bool """ result = False target = Account.objects.get(user_id=owner_id) venue_account = VenueAccount.objects.get(id=venue_account_id) if target and venue_account: venue_account_transferring = VenueAccountTransferring.objects.create(target=target, venue_account=venue_account) target_name = target.user.username target_link = reverse("userena_profile_detail", kwargs={"username": target.user.username}) notice_service.create_notice( notice_type="venue_transferring_to_owner", user=venue_account.account.user, notice_data={ "venue_name": venue_account.venue.name, "venue_link": reverse("public_venue_account", kwargs={"slug": venue_account.slug}), "target_name": target_name, "target_link": target_link, "date": datetime.datetime.now().strftime("%A, %b. %d, %I:%M %p"), }, ) notice_service.create_notice( "venue_transferring", target.user, { "subject": "CityFusion: venue has been transferred to you.", "user": target.user, "venue_account": venue_account, }, { "venue_name": venue_account.venue.name, "venue_link": reverse("public_venue_account", kwargs={"slug": venue_account.slug}), "date": datetime.datetime.now().strftime("%A, %b. %d, %I:%M %p"), "accept_link": reverse( "accept_venue_transferring", kwargs={"venue_transferring_id": venue_account_transferring.id} ), "reject_link": reverse( "reject_venue_transferring", kwargs={"venue_transferring_id": venue_account_transferring.id} ), }, ) result = True return result
def _delete_venue_events(venue_account, user): """ Delete all venue events. @type venue_account: accounts.models.VenueAccount @type user: django.contrib.auth.models.User """ venue_events = Event.events.filter(venue_account_owner=venue_account) for event in venue_events: event.delete() notice_service.create_notice(notice_type='venue_unlinking_and_events_deleting', user=user, notice_data={ 'unlinked_venue_name': venue_account.venue.name, 'unlinked_venue_link': reverse('public_venue_account', kwargs={'slug': venue_account.slug}), 'date': datetime.datetime.now().strftime('%A, %b. %d, %I:%M %p') })
def _delete_venue_events(venue_account, user): """ Delete all venue events. @type venue_account: accounts.models.VenueAccount @type user: django.contrib.auth.models.User """ venue_events = Event.events.filter(venue_account_owner=venue_account) for event in venue_events: event.delete() notice_service.create_notice( notice_type="venue_unlinking_and_events_deleting", user=user, notice_data={ "unlinked_venue_name": venue_account.venue.name, "unlinked_venue_link": reverse("public_venue_account", kwargs={"slug": venue_account.slug}), "date": datetime.datetime.now().strftime("%A, %b. %d, %I:%M %p"), }, )
def change_venue_owner(venue_account_id, owner_id): """ Change owner of a venue with the given id. @type venue_account_id: int @type owner_id: int @param owner_id: a new owner id @rtype: bool """ result = False target = Account.objects.get(user_id=owner_id) venue_account = VenueAccount.objects.get(id=venue_account_id) if target and venue_account: venue_account_transferring = VenueAccountTransferring.objects.create(target=target, venue_account=venue_account) target_name = target.user.username target_link = reverse('userena_profile_detail', kwargs={'username': target.user.username}) notice_service.create_notice(notice_type='venue_transferring_to_owner', user=venue_account.account.user, notice_data={ 'venue_name': venue_account.venue.name, 'venue_link': reverse('public_venue_account', kwargs={'slug': venue_account.slug}), 'target_name': target_name, 'target_link': target_link, 'date': datetime.datetime.now().strftime('%A, %b. %d, %I:%M %p'), }) notice_service.create_notice('venue_transferring', target.user, { 'subject': 'CityFusion: venue has been transferred to you.', 'user': target.user, 'venue_account': venue_account }, { 'venue_name': venue_account.venue.name, 'venue_link': reverse('public_venue_account', kwargs={'slug': venue_account.slug}), 'date': datetime.datetime.now().strftime('%A, %b. %d, %I:%M %p'), 'accept_link': reverse('accept_venue_transferring', kwargs={ 'venue_transferring_id': venue_account_transferring.id}), 'reject_link': reverse('reject_venue_transferring', kwargs={ 'venue_transferring_id': venue_account_transferring.id}) }) result = True return result
def _transfer_venue_events_to_owner(venue_account, owner, user): """ Transfer events to another owner (venue account). @type venue_account: accounts.models.VenueAccount @type owner: unicode @type user: django.contrib.auth.models.User """ owner_data = owner.split("_") owner_name, owner_link = "", "" venue_events = Event.events.filter(venue_account_owner=venue_account) if owner_data[0] == "user": owner_name = user.username owner_link = reverse("userena_profile_detail", kwargs={"username": user.username}) for event in venue_events: event.venue_account_owner = None event.save(update_fields=["venue_account_owner"]) elif owner_data[0] == "venue": venue_account_owner = VenueAccount.objects.get(id=owner_data[1]) if venue_account_owner and venue_account_owner.account.user == user: owner_name = venue_account_owner.venue.name owner_link = reverse("public_venue_account", kwargs={"slug": venue_account_owner.slug}) for event in venue_events: event.venue_account_owner = venue_account_owner event.save(update_fields=["venue_account_owner"]) notice_service.create_notice( notice_type="venue_unlinking_and_events_transferring", user=user, notice_data={ "unlinked_venue_name": venue_account.venue.name, "unlinked_venue_link": reverse("public_venue_account", kwargs={"slug": venue_account.slug}), "owner_name": owner_name, "owner_link": owner_link, "date": datetime.datetime.now().strftime("%A, %b. %d, %I:%M %p"), }, )
def change_venues_owner(venue_account_ids, owner_id): """ Change owner of venues list. @type venue_account_ids: list @type owner_id: int @param owner_id: a new owner id @rtype: int """ transferred_accounts, counter = [], 0 for venue_account_id in venue_account_ids: counter += 1 try: venue_account = VenueAccount.objects.get(pk=venue_account_id) target = Account.objects.get(user_id=owner_id) if venue_account.account == target: raise Exception("The venue is already belongs to this account") if VenueAccountTransferring.objects.filter(target=target, venue_account=venue_account).count() > 0: raise Exception("The venue is already in the transfer process") venue_account_transferring = VenueAccountTransferring.objects.create( target=target, venue_account=venue_account ) transferred_accounts.append(venue_account) target_name = target.user.username target_link = reverse("userena_profile_detail", kwargs={"username": target.user.username}) notice_service.create_notice( notice_type="venue_transferring_to_owner", user=venue_account.account.user, notice_data={ "venue_name": venue_account.venue.name, "venue_link": reverse("public_venue_account", kwargs={"slug": venue_account.slug}), "target_name": target_name, "target_link": target_link, "date": datetime.datetime.now().strftime("%A, %b. %d, %I:%M %p"), }, ) if counter == len(venue_account_ids): mail_data = { "subject": "CityFusion: venues has been transferred to you.", "user": target.user, "venue_accounts": transferred_accounts, } else: mail_data = {} notice_service.create_notice( "venue_transferring", target.user, mail_data, { "venue_name": venue_account.venue.name, "venue_link": reverse("public_venue_account", kwargs={"slug": venue_account.slug}), "date": datetime.datetime.now().strftime("%A, %b. %d, %I:%M %p"), "accept_link": reverse( "accept_venue_transferring", kwargs={"venue_transferring_id": venue_account_transferring.id} ), "reject_link": reverse( "reject_venue_transferring", kwargs={"venue_transferring_id": venue_account_transferring.id} ), }, mail_template="mail/venues_transferring.txt", ) except Exception as e: raise Exception(e.message) return len(transferred_accounts)
def change_event_owner(event_id, owner_id, identifier, is_last, session): """ Change owner of the event with the given id. @type event_id: int @type owner_id: int @param owner_id: new event's owner id @type identifier: unicode @param identifier: current transferring process identifier @type is_last: bool @param is_last: if the event is last in the transfer queue @type session: django.contrib.sessions.backends.db.SessionStore @rtype: bool """ success = False try: if event_id and owner_id and identifier: event = Event.events.get(pk=event_id) owner = User.objects.get(id=owner_id) stored_identifier = session.get('transfer_identifier', '') if not stored_identifier or identifier != stored_identifier: event_transferring = EventTransferring.objects.create(target=owner) session['transfer_identifier'] = identifier session['transfer_id'] = event_transferring.id else: event_transferring = EventTransferring.objects.get(pk=int(session['transfer_id'])) event_transferring.events.add(event) success = True except Exception: success = False finally: if is_last and owner and event_transferring: events = list(event_transferring.events.all()) event_links = [] for event_item in events: date = event_item.next_day().start_time.strftime('%Y-%m-%d') link = reverse('event_view', kwargs={'slug': event_item.slug, 'date': date}) event_links.append((event_item.name, link)) target_name = owner.username target_link = reverse('userena_profile_detail', kwargs={'username': owner.username}) notice_service.create_notice(notice_type='transferring_to_owner', user=event.owner, notice_data={ 'event_count': len(events), 'event_links': event_links, 'date': datetime.datetime.now().strftime('%A, %b. %d, %I:%M %p'), 'target_name': target_name, 'target_link': target_link, }) notice_service.create_notice('transferring', owner, { 'subject': 'CityFusion: events have been transferred to you.', 'user': owner, 'events': events }, { 'event_count': len(events), 'event_links': event_links, 'date': datetime.datetime.now().strftime('%A, %b. %d, %I:%M %p'), 'accept_link': reverse('accept_transferring', kwargs={'transferring_id': event_transferring.id}), 'reject_link': reverse('reject_transferring', kwargs={'transferring_id': event_transferring.id}) }) return success