예제 #1
0
    def get_membership_count(self, days):
        from tendenci.addons.memberships.models import MembershipDefault

        now = datetime.now().replace(hour=23,
                                     minute=59,
                                     second=59,
                                     microsecond=999999)
        dt = datetime.now().replace(hour=0, minute=0, second=0,
                                    microsecond=0) - timedelta(days=days)

        active_qs = Q(status_detail__iexact='active')
        expired_qs = Q(status_detail__iexact='expired')
        active_memberships = MembershipDefault.QS_ACTIVE()
        pending_memberships = MembershipDefault.QS_PENDING()
        memberships = MembershipDefault.objects.filter(active_qs | expired_qs)

        # Total active memberships count
        active = active_memberships.count()
        # Latest active memberships
        new = active_memberships.filter(
            application_approved_dt__gte=dt).count()
        # Latest pending memberships
        pending = pending_memberships.filter(create_dt__gte=dt).count()
        # Latest expired memberships
        expired = memberships.filter(expire_dt__gte=dt,
                                     expire_dt__lte=now).count()
        # Memberships that are expiring soon
        dt = now + timedelta(days=days)
        now = now.replace(hour=0, minute=0, second=0, microsecond=0)
        expiring = memberships.filter(expire_dt__gte=now,
                                      expire_dt__lte=dt).count()

        return [[active, expiring, new, pending, expired]]
예제 #2
0
    def obj_create(self, bundle, request=None, **kwargs):
        data = bundle.data

        if data['create_user']:
            print "creating user"
            user = User.objects.create(username=data['username'])
            user.set_password(data['password'])
        else:
            user = User.objects.get(username=data['username'])

        mem = MembershipDefault()
        mem.user = user
        for key in data:
            setattr(mem, key, data[key])

        mem.save()

        bundle.obj = mem

        return bundle
예제 #3
0
    def get_top_corp_members(self, items):
        from tendenci.addons.corporate_memberships.models import CorpMembership
        from tendenci.addons.memberships.models import MembershipDefault

        total = MembershipDefault.QS_ACTIVE().exclude(
            corp_profile_id=0).count()
        corp_memberships = CorpMembership.objects.filter(status_detail='active').extra(select={
            'members': "SELECT COUNT(*) " + \
                           "FROM memberships_membershipdefault " + \
                           "WHERE memberships_membershipdefault.corp_profile_id = " + \
                               "corporate_memberships_corpmembership.corp_profile_id AND " +\
                               "memberships_membershipdefault.status_detail = 'active'"})
        corp_memberships = corp_memberships.order_by("-members")[:items]
        corp_mem_list = [['', '', total]]
        for corp_mem in corp_memberships:
            corp_mem_list.append([
                corp_mem.corp_profile.name,
                corp_mem.get_absolute_url(), corp_mem.members
            ])
        return corp_mem_list
    def handle(self, *args, **options):
        """
        Loops through AppEntry instances and ports the
        data over to MembershipDefault instances.
        """
        from tendenci.apps.entities.models import Entity
        from tendenci.addons.memberships.models import AppEntry, MembershipDefault
        from tendenci.apps.profiles.models import Profile
        verbosity = options['verbosity']

        for e in AppEntry.objects.all():

            if e.membership:
                # use guid to match records
                m_default = MembershipDefault.objects.first(
                    guid=e.membership.guid,
                )
            else:
                # use create_dt and membership_type
                m_default = MembershipDefault.objects.first(
                    create_dt=e.create_dt,
                    membership_type=e.membership_type,
                )

            if m_default:
                # found; already created
                m_default_created = True
            else:
                # not found; then creating
                m_default_created = False
                m_default = MembershipDefault()

            if e.membership:
                m_default.member_number = e.membership.member_number
                m_default.membership_type = e.membership.membership_type
                m_default.renewal = e.membership.renewal

                m_default.guid = e.membership.guid
                m_default.expire_dt = e.membership.expire_dt

                # m_default.certifications
                # m_default.work_experience
                # m_default.referral_source
                # m_default.referral_source_other
                # m_default.referral_source_member_name
                # m_default.referral_source_member_number
                # m_default.affiliation_member_number
                # m_default.primary_practice
                # m_default.how_long_in_practice
                # m_default.notes
                # m_default.admin_notes
                # m_default.newsletter_type
                # m_default.directory_type
                # m_default.bod_dt
                # m_default.personnel_notified_dt

                # m_default.payment_recieved_dt
                m_default.payment_method = e.membership.payment_method

                # m_default.override
                # m_default.override_price
                # m_default.exported

                # m_default.chapter
                # m_default.areas_of_expertise
                # m_default.organization_entity
                # m_default.corporate_entity

                if e.membership.corporate_membership_id:
                    m_default.corporate_membership_id = e.membership.corporate_membership_id
                else:
                    m_default.corporate_membership_id = None

                # m_default.home_state
                # m_default.year_left_native_country
                # m_default.network_sectors
                # m_default.networking
                # m_default.government_worker
                # m_default.government_agency
                # m_default.license_number
                # m_default.license_state
                # m_default.industry
                # m_default.region
                # m_default.company_size
                # m_default.promotion_code
                # m_default.directory

                if hasattr(e.membership, 'user'):
                    m_default.user = e.membership.user

            if not hasattr(m_default, 'user'):
                m_default.user, user_created = m_default.get_or_create_user(
                    email=e.email, first_name=e.first_name, last_name=e.last_name
                )

            if not hasattr(m_default, 'membership_type'):
                if e.membership.membership_type:
                    m_default.membership_type = e.memberships.membership_type

                if verbosity:
                    self.echo(
                        m_default, e,
                        created=m_default_created,
                        skipped=True,
                    )

                continue  # on to the next one

            m_default.application_complete_dt = e.create_dt
            m_default.entity = Entity.objects.first()
            m_default.organization_entity = m_default.entity
            m_default.corporate_entity = m_default.entity

            if e.is_approved:
                m_default.application_approved = True
                m_default.application_approved_dt = e.decision_dt
                m_default.application_approved_user = e.judge

                # is a join
                if not e.is_renewal:
                    m_default.join_dt = e.decision_dt
                    m_default.set_join_dt()

            if e.decision_dt:
                m_default.application_approved_denied_dt = e.decision_dt
                m_default.application_approved_denied_user = m_default.user

                m_default.action_taken = True
                m_default.action_taken_dt = e.decision_dt
                m_default.action_taken_user = e.judge

            m_default.set_renew_dt()
            if not m_default.expire_dt:
                m_default.set_expire_dt()

            if not hasattr(m_default.user, 'profile'):
                Profile.objects.create_profile(m_default.user)

            m_default.user.profile.refresh_member_number()

            self.set_owner_creator_fields(m_default, e)
            self.set_allow_fields(m_default, e.membership)
            self.set_status_fields(m_default, e.membership)

            m_default.save()

            self.set_invoice(m_default, e)

            # add user to [membership] group
            m_default.group_refresh()

            # reset create_dt
            self.set_owner_creator_fields(m_default, e)
            m_default.save()

            if verbosity:
                self.echo(m_default, e, created=m_default_created)
예제 #5
0
파일: utils.py 프로젝트: githubber/tendenci
    def do_import_membership_default(self, user, memb, action_info):
        """
        Database import here - insert or update
        """
        # handle user
        if not user:
            user = User()
            username_before_assign = ''
        else:
            username_before_assign = user.username

        # exclude user
        if 'user' in self.field_names:
            self.field_names.remove('user')

        self.assign_import_values_from_dict(user, action_info['user_action'])

        # clean username
        if user.username:
            user.username = re.sub('[^+-.\w\d@]', '', user.username)
        # make sure username is unique.
        if action_info['user_action'] == 'insert':
            user.username = get_unique_username(user)
        else:
            # it's update but a new username is assigned
            # check if its unique
            if user.username != username_before_assign:
                user.username = get_unique_username(user)

        if 'password' in self.field_names and \
                self.mimport.override and user.password:
            user.set_password(user.password)

        if not user.password:
            user.set_password(User.objects.make_random_password(length=8))

        # set to active if is_active not present in the spreadsheet.
        if 'is_active' not in self.field_names:
            user.is_active = True

        user.save()

        # process profile
        try:  # get or create
            profile = user.get_profile()
        except Profile.DoesNotExist:
            profile = Profile.objects.create(user=user,
               creator=self.request_user,
               creator_username=self.request_user.username,
               owner=self.request_user,
               owner_username=self.request_user.username,
               **self.private_settings
            )
        self.assign_import_values_from_dict(profile,
                                            action_info['user_action'])
        profile.user = user
        if profile.status == None or profile.status == '' or \
            self.memb_data.get('status', '') == '':
            profile.status = True
        if not profile.status_detail:
            profile.status_detail = 'active'
        else:
            profile.status_detail = profile.status_detail.lower()

        profile.save()

        # membership
        if not memb:
            memb = MembershipDefault(
                    user=user,
                    creator=self.request_user,
                    creator_username=self.request_user.username,
                    owner=self.request_user,
                    owner_username=self.request_user.username,
                                     )

        self.assign_import_values_from_dict(memb, action_info['memb_action'])

        if memb.status == None or memb.status == '' or \
            self.memb_data.get('status', '') == '':
            memb.status = True
        if not memb.status_detail:
            memb.status_detail = 'active'
        else:
            memb.status_detail = memb.status_detail.lower()

        # membership type
        if not hasattr(memb, "membership_type") or not memb.membership_type:
            # last resort - pick the first available membership type
            memb.membership_type = MembershipType.objects.all(
                                            ).order_by('id')[0]

        # no join_dt - set one
        if not hasattr(memb, 'join_dt') or not memb.join_dt:
            if memb.status and memb.status_detail == 'active':
                memb.join_dt = datetime.now()

        # no expire_dt - get it via membership_type
        if not hasattr(memb, 'expire_dt') or not memb.expire_dt:
            if memb.membership_type:
                expire_dt = memb.membership_type.get_expiration_dt(
                                            join_dt=memb.join_dt)
                setattr(memb, 'expire_dt', expire_dt)
        memb.save()

        memb.is_active = self.is_active(memb)

        # member_number
        # TODO: create a function to assign a member number
        if not memb.member_number:
            if memb.is_active:
                memb.member_number = 5100 + memb.pk
        if memb.member_number:
            if not profile.member_number:
                profile.member_number = memb.member_number
                profile.save()
            else:
                if profile.member_number != memb.member_number:
                    profile.member_number = memb.member_number
                    profile.save()
        else:
            if profile.member_number:
                profile.member_number = ''
                profile.save()

        # add to group only for the active memberships
        if memb.is_active:
            # group associated to membership type
            params = {'creator_id': self.request_user.pk,
                      'creator_username': self.request_user.username,
                      'owner_id': self.request_user.pk,
                      'owner_username': self.request_user.username}
            memb.membership_type.group.add_user(memb.user, **params)
예제 #6
0
 def handle(self, *args, **kwargs):
     from tendenci.addons.memberships.models import MembershipDefault
     MembershipDefault.refresh_groups()
예제 #7
0
    def handle(self, *args, **options):
        """
        Loops through AppEntry instances and ports the
        data over to MembershipDefault instances.
        """
        from tendenci.apps.entities.models import Entity
        from tendenci.addons.memberships.models import AppEntry, MembershipDefault
        from tendenci.apps.profiles.models import Profile
        verbosity = options['verbosity']

        for e in AppEntry.objects.all():

            if e.membership:
                # use guid to match records
                m_default = MembershipDefault.objects.first(
                    guid=e.membership.guid, )
            else:
                # use create_dt and membership_type
                m_default = MembershipDefault.objects.first(
                    create_dt=e.create_dt,
                    membership_type=e.membership_type,
                )

            if m_default:
                # found; already created
                m_default_created = True
            else:
                # not found; then creating
                m_default_created = False
                m_default = MembershipDefault()

            if e.membership:
                m_default.member_number = e.membership.member_number
                m_default.membership_type = e.membership.membership_type
                m_default.renewal = e.membership.renewal

                m_default.guid = e.membership.guid
                m_default.expire_dt = e.membership.expire_dt

                # m_default.certifications
                # m_default.work_experience
                # m_default.referral_source
                # m_default.referral_source_other
                # m_default.referral_source_member_name
                # m_default.referral_source_member_number
                # m_default.affiliation_member_number
                # m_default.primary_practice
                # m_default.how_long_in_practice
                # m_default.notes
                # m_default.admin_notes
                # m_default.newsletter_type
                # m_default.directory_type
                # m_default.bod_dt
                # m_default.personnel_notified_dt

                # m_default.payment_recieved_dt
                m_default.payment_method = e.membership.payment_method

                # m_default.override
                # m_default.override_price
                # m_default.exported

                # m_default.chapter
                # m_default.areas_of_expertise
                # m_default.organization_entity
                # m_default.corporate_entity

                if e.membership.corporate_membership_id:
                    m_default.corporate_membership_id = e.membership.corporate_membership_id
                else:
                    m_default.corporate_membership_id = None

                # m_default.home_state
                # m_default.year_left_native_country
                # m_default.network_sectors
                # m_default.networking
                # m_default.government_worker
                # m_default.government_agency
                # m_default.license_number
                # m_default.license_state
                # m_default.industry
                # m_default.region
                # m_default.company_size
                # m_default.promotion_code
                # m_default.directory

                if hasattr(e.membership, 'user'):
                    m_default.user = e.membership.user

            if not hasattr(m_default, 'user'):
                m_default.user, user_created = m_default.get_or_create_user(
                    email=e.email,
                    first_name=e.first_name,
                    last_name=e.last_name)

            if not hasattr(m_default, 'membership_type'):
                if verbosity:
                    self.echo(
                        m_default,
                        e,
                        created=m_default_created,
                        skipped=True,
                    )

                continue  # on to the next one

            m_default.application_complete_dt = e.create_dt
            m_default.entity = Entity.objects.first()
            m_default.organization_entity = m_default.entity
            m_default.corporate_entity = m_default.entity

            if e.is_approved:
                m_default.application_approved = True
                m_default.application_approved_dt = e.decision_dt
                m_default.application_approved_user = e.judge

                # is a join
                if not e.is_renewal:
                    m_default.join_dt = e.decision_dt
                    m_default.set_join_dt()

            if e.decision_dt:
                m_default.application_approved_denied_dt = e.decision_dt
                m_default.application_approved_denied_user = m_default.user

                m_default.action_taken = True
                m_default.action_taken_dt = e.decision_dt
                m_default.action_taken_user = e.judge

            m_default.set_renew_dt()
            if not m_default.expire_dt:
                m_default.set_expire_dt()

            if not hasattr(m_default.user, 'profile'):
                Profile.objects.create_profile(m_default.user)

            m_default.user.profile.refresh_member_number()

            self.set_owner_creator_fields(m_default, e)
            self.set_allow_fields(m_default, e.membership)
            self.set_status_fields(m_default, e.membership)

            m_default.save()

            self.set_invoice(m_default, e)

            # add user to [membership] group
            m_default.group_refresh()

            # reset create_dt
            self.set_owner_creator_fields(m_default, e)
            m_default.save()

            if verbosity:
                self.echo(m_default, e, created=m_default_created)