Beispiel #1
0
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')
                                  })
Beispiel #2
0
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
Beispiel #3
0
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
Beispiel #4
0
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)
Beispiel #5
0
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
Beispiel #6
0
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
Beispiel #7
0
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')
                                  })
Beispiel #8
0
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"),
        },
    )
Beispiel #9
0
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
Beispiel #10
0
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"),
        },
    )
Beispiel #11
0
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)
Beispiel #12
0
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