Пример #1
0
    def save(self, *args, **kwargs):
        if not self.instance.id:
            if not self.request_user.is_anonymous():
                self.instance.creator = self.request_user
                self.instance.creator_username = self.request_user.username
            self.instance.status = True
            self.instance.status_detail = 'active'
        if not self.request_user.is_anonymous():
            self.instance.owner = self.request_user
            self.instance.owner_username = self.request_user.username
        for field_key in self.fields.keys():
            if self.fields[field_key].widget.needs_multipart_form:
                value = self.cleaned_data[field_key]
                if value and hasattr(value, 'name'):
                    value = default_storage.save(join("corporate_memberships",
                                                      str(uuid4()),
                                                      value.name),
                                                 value)
                    setattr(self.instance, field_key, value)

        super(CorpProfileForm, self).save(*args, **kwargs)

        # update authorized domain if needed
        if self.corpmembership_app.authentication_method == 'email':
            update_authorized_domains(self.instance,
                            self.cleaned_data['authorized_domain'])
        return self.instance
Пример #2
0
    def save(self, *args, **kwargs):
        if not self.instance.id:
            if not self.request_user.is_anonymous():
                self.instance.creator = self.request_user
                self.instance.creator_username = self.request_user.username
            self.instance.status = True
            self.instance.status_detail = 'active'
        if not self.request_user.is_anonymous():
            self.instance.owner = self.request_user
            self.instance.owner_username = self.request_user.username
        for field_key in self.fields.keys():
            if self.fields[field_key].widget.needs_multipart_form:
                value = self.cleaned_data[field_key]
                if value and hasattr(value, 'name'):
                    value = default_storage.save(
                        join("corporate_memberships", str(uuid4()),
                             value.name), value)
                    setattr(self.instance, field_key, value)

        super(CorpProfileForm, self).save(*args, **kwargs)

        # update authorized domain if needed
        if self.corpmembership_app.authentication_method == 'email':
            update_authorized_domains(self.instance,
                                      self.cleaned_data['authorized_domain'])
        return self.instance
Пример #3
0
    def save(self, *args, **kwargs):
        from tendenci.apps.files.models import File
        if not self.instance.id:
            if not self.request_user.is_anonymous():
                self.instance.creator = self.request_user
                self.instance.creator_username = self.request_user.username
            self.instance.status = True
            self.instance.status_detail = 'active'
        if not self.request_user.is_anonymous():
            self.instance.owner = self.request_user
            self.instance.owner_username = self.request_user.username
        for field_key in self.fields.keys():
            if self.fields[field_key].widget.needs_multipart_form:
                value = self.cleaned_data[field_key]
                if value and hasattr(value, 'name'):
                    value = default_storage.save(join("corporate_memberships",
                                                      str(uuid4()),
                                                      value.name),
                                                 value)
                    setattr(self.instance, field_key, value)

        super(CorpProfileForm, self).save(*args, **kwargs)

        # update authorized domain if needed
        if self.corpmembership_app.authentication_method == 'email':
            update_authorized_domains(self.instance,
                            self.cleaned_data['authorized_domain'])

        content_type = ContentType.objects.get(
            app_label=self.instance._meta.app_label,
            model=self.instance._meta.model_name)
        logo_file = self.cleaned_data.get('logo_file', None)
        if logo_file:
            file_object, created = File.objects.get_or_create(
                file=logo_file,
                defaults={
                    'name': logo_file.name,
                    'content_type': content_type,
                    'object_id': self.instance.pk,
                    'is_public': True,
                })
            self.instance.logo = file_object
            self.instance.save(log=False)
        else:
            self.instance.logo = None
            self.instance.save(log=False)
            File.objects.filter(
                        content_type=content_type,
                        object_id=self.instance.pk).delete()

        return self.instance
Пример #4
0
    def save(self, *args, **kwargs):
        from tendenci.apps.files.models import File
        if not self.instance.id:
            if not self.request_user.is_anonymous:
                self.instance.creator = self.request_user
                self.instance.creator_username = self.request_user.username
            self.instance.status = True
            self.instance.status_detail = 'active'
        if not self.request_user.is_anonymous:
            self.instance.owner = self.request_user
            self.instance.owner_username = self.request_user.username
        for field_key in self.fields:
            if self.fields[field_key].widget.needs_multipart_form:
                value = self.cleaned_data[field_key]
                if value and hasattr(value, 'name'):
                    value = default_storage.save(join("corporate_memberships",
                                                      str(uuid4()),
                                                      value.name),
                                                 value)
                    setattr(self.instance, field_key, value)

        super(CorpProfileForm, self).save(*args, **kwargs)

        # update authorized domain if needed
        if self.corpmembership_app.authentication_method == 'email':
            update_authorized_domains(self.instance,
                            self.cleaned_data['authorized_domain'])

        content_type = ContentType.objects.get(
            app_label=self.instance._meta.app_label,
            model=self.instance._meta.model_name)
        logo_file = self.cleaned_data.get('logo_file', None)
        if logo_file:
            file_object, created = File.objects.get_or_create(
                file=logo_file,
                defaults={
                    'name': logo_file.name,
                    'content_type': content_type,
                    'object_id': self.instance.pk,
                    'is_public': True,
                })
            self.instance.logo = file_object
            self.instance.save(log=False)
        else:
            self.instance.logo = None
            self.instance.save(log=False)
            File.objects.filter(
                        content_type=content_type,
                        object_id=self.instance.pk).delete()

        return self.instance
Пример #5
0
    def process_corp_membership(self, cmemb_data, **kwargs):
        """
        Check if it's insert or update. If dry_run is False,
        do the import to the corpmembership.

        :param cmemb_data: a dictionary that includes the info
        of a corp_membership
        """
        self.cmemb_data = cmemb_data
        if 'id' not in self.cmemb_data:
            if 'id' in self.corp_membership_fields:
                del self.corp_membership_fields['id']
        self.cmemb_data['name'] = self.cmemb_data['company_name']
        del self.cmemb_data['company_name']
        self.field_names = cmemb_data.keys()  # csv field names
        corp_memb_display = {}
        corp_memb_display['error'] = ''
        corp_memb_display['user'] = None
        status_detail = self.cmemb_data.get('status_detail', 'active')
        if status_detail == 'archived':
            status_detail = 'archive'
        if status_detail not in CorpMembership.VALID_STATUS_DETAIL:
            status_detail = 'active'
        self.cmemb_data['status_detail'] = status_detail
        expiration_dt = self.cmemb_data.get('expiration_dt', None)
        if expiration_dt:
            expiration_dt = dparser.parse(expiration_dt)

        error_msg = self.validate_fields(self.cmemb_data, self.key)

        # don't process if we have missing value of required fields
        if error_msg:
            corp_memb_display['error'] = error_msg
            corp_memb_display['action'] = 'skip'
            if not self.dry_run:
                self.summary_d['invalid'] += 1
        else:
            #if self.key == 'name':
            [corp_profile] = CorpProfile.objects.filter(
                name=self.cmemb_data['name'])[:1] or [None]
            if corp_profile:
                corp_membs = CorpMembership.objects.filter(
                    corp_profile=corp_profile, status_detail=status_detail)
                # there might be multiple archives, pick the one that
                # matches with the expiration_dt
                if status_detail == 'archive' and expiration_dt:
                    corp_membs = corp_membs.filter(
                        expiration_dt__year=expiration_dt.year,
                        expiration_dt__month=expiration_dt.month,
                        expiration_dt__day=expiration_dt.day)
                [corp_memb] = corp_membs.order_by('-id')[:1] or [None]
            else:
                corp_memb = None

            if corp_profile:
                if corp_memb:
                    corp_memb_display['action'] = 'update'
                    corp_memb_display['corp_profile_action'] = 'update'
                    corp_memb_display['corp_memb_action'] = 'update'
                else:
                    corp_memb_display['action'] = 'mixed'
                    corp_memb_display['corp_profile_action'] = 'update'
                    corp_memb_display['corp_memb_action'] = 'insert'
            else:
                corp_memb_display['action'] = 'insert'
                corp_memb_display['corp_profile_action'] = 'insert'
                corp_memb_display['corp_memb_action'] = 'insert'

            if not self.dry_run:
                if corp_memb_display['action'] == 'insert':
                    self.summary_d['insert'] += 1
                elif corp_memb_display['action'] == 'update':
                    self.summary_d['update'] += 1
                else:
                    self.summary_d['update_insert'] += 1

                # now do the update or insert
                self.do_import_corp_membership(corp_profile, corp_memb,
                                               corp_memb_display)
                # handle authorized_domain
                if 'authorized_domains' in self.field_names:
                    update_authorized_domains(
                        corp_profile, self.cmemb_data['authorized_domains'])

                # handle dues_rep
                if 'dues_rep' in self.field_names:
                    self.update_dues_reps(corp_profile,
                                          self.cmemb_data['dues_rep'])

                return

        corp_memb_display.update({
            'company_name':
            self.cmemb_data.get('name', ''),
            'email':
            self.cmemb_data.get('email', ''),
            'address':
            self.cmemb_data.get('address', ''),
            'address2':
            self.cmemb_data.get('address2', ''),
            'city':
            self.cmemb_data.get('city', ''),
            'state':
            self.cmemb_data.get('state', ''),
            'zip':
            self.cmemb_data.get('zip', ''),
            'status_detail':
            self.cmemb_data.get('status_detail', ''),
        })
        return corp_memb_display
Пример #6
0
    def process_corp_membership(self, cmemb_data, **kwargs):
        """
        Check if it's insert or update. If dry_run is False,
        do the import to the corpmembership.

        :param cmemb_data: a dictionary that includes the info
        of a corp_membership
        """
        self.cmemb_data = cmemb_data
        self.cmemb_data['name'] = self.cmemb_data['company_name']
        del self.cmemb_data['company_name']
        self.field_names = cmemb_data.keys()  # csv field names
        corp_memb_display = {}
        corp_memb_display['error'] = ''
        corp_memb_display['user'] = None
        status_detail = self.cmemb_data.get('status_detail', 'active')
        if status_detail == 'archived':
            status_detail = 'archive'
        if not status_detail in CorpMembership.VALID_STATUS_DETAIL:
            status_detail = 'active'
        self.cmemb_data['status_detail'] = status_detail
        expiration_dt = self.cmemb_data.get('expiration_dt', None)
        if expiration_dt:
            expiration_dt = dparser.parse(expiration_dt)

        error_msg = self.validate_fields(self.cmemb_data, self.key)

        # don't process if we have missing value of required fields
        if error_msg:
            corp_memb_display['error'] = error_msg
            corp_memb_display['action'] = 'skip'
            if not self.dry_run:
                self.summary_d['invalid'] += 1
        else:
            #if self.key == 'name':
            [corp_profile] = CorpProfile.objects.filter(
                    name=self.cmemb_data['name'])[:1] or [None]
            if corp_profile:
                corp_membs = CorpMembership.objects.filter(
                            corp_profile=corp_profile,
                            status_detail=status_detail)
                # there might be multiple archives, pick the one that
                # matches with the expiration_dt
                if status_detail == 'archive' and expiration_dt:
                    corp_membs = corp_membs.filter(
                            expiration_dt__year=expiration_dt.year,
                            expiration_dt__month=expiration_dt.month,
                            expiration_dt__day=expiration_dt.day
                            )
                [corp_memb] = corp_membs.order_by('-id')[:1] or [None]
            else:
                corp_memb = None

            if corp_profile:
                if corp_memb:
                    corp_memb_display['action'] = 'update'
                    corp_memb_display['corp_profile_action'] = 'update'
                    corp_memb_display['corp_memb_action'] = 'update'
                else:
                    corp_memb_display['action'] = 'mixed'
                    corp_memb_display['corp_profile_action'] = 'update'
                    corp_memb_display['corp_memb_action'] = 'insert'
            else:
                corp_memb_display['action'] = 'insert'
                corp_memb_display['corp_profile_action'] = 'insert'
                corp_memb_display['corp_memb_action'] = 'insert'

            if not self.dry_run:
                if corp_memb_display['action'] == 'insert':
                    self.summary_d['insert'] += 1
                elif corp_memb_display['action'] == 'update':
                    self.summary_d['update'] += 1
                else:
                    self.summary_d['update_insert'] += 1

                # now do the update or insert
                self.do_import_corp_membership(corp_profile, corp_memb,
                                                  corp_memb_display)
                # handle authorized_domain
                if 'authorized_domains' in self.field_names:
                    update_authorized_domains(corp_profile,
                                        self.cmemb_data['authorized_domains'])

                # handle dues_rep
                if 'dues_rep' in self.field_names:
                    self.update_dues_reps(corp_profile,
                                          self.cmemb_data['dues_rep'])

                return

        corp_memb_display.update({
                    'company_name': self.cmemb_data.get('name', ''),
                    'email': self.cmemb_data.get('email', ''),
                    'address': self.cmemb_data.get('address', ''),
                    'address2': self.cmemb_data.get('address2', ''),
                    'city': self.cmemb_data.get('city', ''),
                    'state': self.cmemb_data.get('state', ''),
                    'zip': self.cmemb_data.get('zip', ''),
                    'status_detail': self.cmemb_data.get('status_detail', ''),
                             })
        return corp_memb_display