~wxl/loco-team-portal/more-details

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
import pytz

from django.db import models
from django.utils.translation import ugettext_lazy as _

from common.mixins import LocalTimeMixin
from userprofiles.models import UserProfile


class Language(models.Model):
    class Meta:
        ordering = ('name',)
    name = models.CharField(_("Language"), max_length=150, null=True)
    code = models.CharField(_("Language Code"), max_length=20, null=True)

    def __unicode__(self):
        return u'%s' % (self.name)


class TeamManager(models.Manager):
    pass


class Continent(models.Model):
    name = models.TextField(_("Name"), max_length=50)

    class Meta:
        ordering = ('name',)

    def __unicode__(self):
        return u'%s' % (self.name)

    @property
    def related_countries(self):
        return self.country_set.all()

    @property
    def related_venues(self):
        from venues.models import Venue
        return Venue.objects.filter(country__continents=self).distinct()

    @property
    def related_teams(self):
        return Team.objects.filter(countries__continents=self).distinct()


class Country(models.Model):
    name = models.TextField(_("Name"), max_length=100)
    continents = models.ManyToManyField(Continent)

    class Meta:
        ordering = ('name',)

    def __unicode__(self):
        return u'%s' % (self.name)

    @property
    def related_teams(self):
        return self.team_set.all()

    @property
    def related_venues(self):
        return self.venue_set.all()

    @property
    def slug(self):
        if self.name is not None:
            return self.name.replace(',', '').replace(' ', '_')
        else:
            return 'no_country'


def countries_without_continent():
    return Country.objects.filter(continents__isnull=True)


def countries_without_continent_have_venues():
    for country in countries_without_continent():
        if country.venue_set.count() > 0:
            return True
    return False


def countries_without_continent_have_teams():
    for country in countries_without_continent():
        if country.team_set.count() > 0:
            return True
    return False


class Team(models.Model, LocalTimeMixin):
    lp_name = models.CharField(_("Launchpad Team ID"), max_length=40, null=True)
    name = models.CharField(_("Team Name"), max_length=80, null=False, default='')
    override_name = models.CharField(_("Override Imported Team Name"), max_length=80, null=True, blank=True)
    countries = models.ManyToManyField(Country)
    spr = models.CharField(_("State/Province/Region"), max_length=50, null=True, blank=True)
    city = models.CharField(_("City"), max_length=50, null=True, blank=True)
    wiki_url = models.URLField(_("Ubuntu Wiki Page"), verify_exists=False, null=True, blank=True)
    web_url = models.URLField(_("Website"), verify_exists=False, null=True, blank=True)
    ml_url = models.URLField(_("Mailing List URL"), verify_exists=False, null=True, blank=True)
    forum_url = models.URLField(_("Forums URL"), verify_exists=False, null=True, blank=True)
    email = models.EmailField(_("Email Address"), null=True, blank=True)
    irc_chan = models.CharField(_("IRC Channel"),
                                max_length=25, null=True, blank=True,
                                help_text=_("IRC Channel name that is hosted on "
                                "the freenode IRC network. Ex. #ubuntu-us-fl"))
    provides_support = models.BooleanField(_("Provides local support"),
                                           default=True)
    approved = models.BooleanField(_("Approved Team"), default=False)
    approved_date = models.DateField(_("Date Approved"), null=True, blank=True)
    expires_date = models.DateField(_("Reapproval Date"), null=True, blank=True)
    owner_profile = models.ForeignKey(UserProfile, related_name='owner', null=True)
    admin_profiles = models.ManyToManyField(UserProfile, related_name='admins')
    contact_profiles = models.ManyToManyField(UserProfile, related_name='contacts')
    mugshot_url = models.URLField(_("Team Logo"), verify_exists=False, null=True, blank=True)
    languages = models.ManyToManyField(Language)
    flickr_id = models.CharField(_("Flickr User/Group ID"), max_length=20, null=True, blank=True,
                                help_text=_("To get your Flickr user id go to http://idgettr.com. Ex. 47353004@N03"))
    picasa_id = models.CharField(_("Picasa User ID"), max_length=30, null=True, blank=True,
                                help_text=_("Ex. toto@gmail.com, so your Picasa id is : toto"))
    pixie_id = models.CharField(_("Pix.ie User ID"), max_length=20, null=True, blank=True,
                                help_text=_("Your Pix.ie Username"))
    microbloghashtag = models.CharField(max_length=50, help_text=_('Hash Tag used for microbloggers to mention this team'), verbose_name=_('Microblogging Hash Tag'), null=True, blank=True)
    active = models.BooleanField(_("Active Team"), default=True)
    tz = models.CharField(max_length=32, verbose_name=_('Default Timezone'), default='UTC', choices=[(tz, tz) for tz in pytz.all_timezones], blank=False, null=False, help_text=_('The most commonly used timezone for this Team.'))

    objects = TeamManager()

    class Meta:
        db_table = 'teams'
        ordering = ('-approved', 'name',)

    def __unicode__(self):
        return self.lp_name

    @property
    def display_name(self):
        return self.override_name or self.name

    @models.permalink
    def get_absolute_url(self):
        return ('team-detail', [str(self.lp_name)])

    def next_5_events_and_meetings(self):
        """ a list with all upcoming team meetings """
        events_and_meetings = []
        events = self.teamevent_set.next_5_events().iterator()
        meetings = self.teammeeting_set.next_meetings()[:5].iterator()
        for event in events:
            events_and_meetings.append(event)
        for meeting in meetings:
            events_and_meetings.append(meeting)

        events_and_meetings.sort(key=lambda event: event.date_begin)

        if len(events_and_meetings) > 5:
            events_and_meetings = events_and_meetings[:5]
        return events_and_meetings


def teams_without_country():
    return Team.objects.filter(countries__isnull=True).exclude(lp_name="ubuntu-lococouncil")