def create_artist(self):
        email = self.request.unauthenticated_userid
        party = WebUser.current_party(self.request)

        _artist = {
            'party': party,
            'group': False,
            'name': self.appstruct['artist']['name'],
            'description': self.appstruct['artist']['description'] or ''
        }
        if self.appstruct['artist']['picture']:
            picture_data = self.appstruct['artist']['picture']['fp'].read()
            mimetype = self.appstruct['artist']['picture']['mimetype']
            _artist['picture_data'] = picture_data
            _artist['picture_data_mime_type'] = mimetype

        artists = Artist.create([_artist])

        if not artists:
            log.info("artist add failed for %s: %s" % (email, _artist))
            self.request.session.flash(
                _(u"Artist could not be added: ") + _artist['name'],
                'main-alert-danger'
            )
            self.redirect(ArtistResource, 'list')
            return
        artist = artists[0]

        if self.appstruct['bank_account']['type']:
            _bank_account_number = {
                'bic': self.appstruct['bank_account']['bic'],
                'type': self.appstruct['bank_account']['type'],
            }
            if self.appstruct['bank_account']['type'] == 'iban':
                number = self.appstruct['bank_account']['number']
                _bank_account_number['number'] = number
            bank_account_number = BankAccountNumber.create(
                artist.party, [_bank_account_number]
            )[0]
            artist.bank_account_number = bank_account_number
            artist.save()

        log.info("artist add successful for %s: %s" % (email, artist))
        self.request.session.flash(
            _(u"Artist added: ") + artist.name + " (" + artist.code + ")",
            'main-alert-success'
        )

        self.redirect(ArtistResource, 'list')
    def create_artist(self):
        email = self.request.unauthenticated_userid
        party = WebUser.current_party(self.request)

        _artist = {
            'party': party,
            'group': False,
            'name': self.appstruct['artist']['name'],
            'description': self.appstruct['artist']['description'] or ''
        }
        if self.appstruct['artist']['picture']:
            picture_data = self.appstruct['artist']['picture']['fp'].read()
            mimetype = self.appstruct['artist']['picture']['mimetype']
            _artist['picture_data'] = picture_data
            _artist['picture_data_mime_type'] = mimetype

        artists = Artist.create([_artist])

        if not artists:
            log.info("artist add failed for %s: %s" % (email, _artist))
            self.request.session.flash(
                _(u"Artist could not be added: ") + _artist['name'],
                'main-alert-danger')
            self.redirect(ArtistResource, 'list')
            return
        artist = artists[0]

        if self.appstruct['bank_account']['type']:
            _bank_account_number = {
                'bic': self.appstruct['bank_account']['bic'],
                'type': self.appstruct['bank_account']['type'],
            }
            if self.appstruct['bank_account']['type'] == 'iban':
                number = self.appstruct['bank_account']['number']
                _bank_account_number['number'] = number
            bank_account_number = BankAccountNumber.create(
                artist.party, [_bank_account_number])[0]
            artist.bank_account_number = bank_account_number
            artist.save()

        log.info("artist add successful for %s: %s" % (email, artist))
        self.request.session.flash(
            _(u"Artist added: ") + artist.name + " (" + artist.code + ")",
            'main-alert-success')

        self.redirect(ArtistResource, 'list')
    def create_artist(self):
        email = self.request.unauthenticated_userid
        party = WebUser.current_party(self.request)

        # generate vlist
        _artist = {
            'group': self.appstruct['group'],
            'party': party,
            'entity_creator': party,
            'entity_origin': 'direct',
            'claim_state': 'claimed',
            'name': self.appstruct['name'],
            'description': self.appstruct['description'] or '',
        }

        # picture
        if self.appstruct['picture']:
            with open(self.appstruct['picture']['fp'].name,
                      mode='rb') as picfile:
                picture_data = picfile.read()
            mimetype = self.appstruct['picture']['mimetype']
            _artist['picture_data'] = picture_data
            _artist['picture_data_mime_type'] = mimetype

        # members
        if self.appstruct['group']:
            members_add = []
            members_create = []
            for member in self.appstruct['members']:

                # add existing artists
                if member['mode'] == "add":
                    member_artist = Artist.search_by_oid(member['oid'])
                    # sanity checks
                    if not member_artist:
                        continue
                    if member_artist.group:
                        continue
                    # append artist id
                    members_add.append(member_artist.id)

                # create new artists
                if member['mode'] == "create":
                    # create new party
                    member_party = Party.create([{
                        'name': member['name'],
                        'contact_mechanisms': [(
                            'create',
                            [{
                                'type': 'email',
                                'value': member['email']
                            }]
                        )]
                    }])
                    member_party = member_party[0]
                    # append member data
                    members_create.append({
                        'group': False,
                        'description': "",
                        'party': member_party.id,
                        'entity_creator': party.id,
                        'entity_origin': 'indirect',
                        'claim_state': 'unclaimed',
                        'name': member['name']
                    })

            # append actions
            _artist['solo_artists'] = []
            if members_create:
                _artist['solo_artists'].append(('create', members_create))
            if members_add:
                _artist['solo_artists'].append(('add', members_add))

        # create artist
        artists = Artist.create([_artist])

        # user feedback
        if not artists:
            log.info("artist add failed for %s: %s" % (email, _artist))
            self.request.session.flash(
                _(u"Artist could not be added: ${arna}",
                  mapping={'arna':  _artist['name']}),
                'main-alert-danger'
            )
            self.redirect()
            return
        artist = artists[0]
        log.info("artist add successful for %s: %s" % (email, artist))
        self.request.session.flash(
            _(u"Artist added:  ${arna} (${arco})",
              mapping={'arna': artist.name, 'arco': artist.code}),
            'main-alert-success'
        )

        # redirect
        self.redirect(artist.code)
Exemplo n.º 4
0
    def create_artist(self):
        email = self.request.unauthenticated_userid
        party = WebUser.current_party(self.request)

        # generate vlist
        _artist = {
            'group': self.appstruct['group'],
            'party': party,
            'entity_creator': party,
            'entity_origin': 'direct',
            'claim_state': 'claimed',
            'name': self.appstruct['name'],
            'description': self.appstruct['description'] or '',
        }

        # picture
        if self.appstruct['picture']:
            with open(self.appstruct['picture']['fp'].name,
                      mode='rb') as picfile:
                picture_data = picfile.read()
            mimetype = self.appstruct['picture']['mimetype']
            _artist['picture_data'] = picture_data
            _artist['picture_data_mime_type'] = mimetype

        # members
        if self.appstruct['group']:
            members_add = []
            members_create = []
            for member in self.appstruct['members']:

                # add existing artists
                if member['mode'] == "add":
                    member_artist = Artist.search_by_oid(member['oid'])
                    # sanity checks
                    if not member_artist:
                        continue
                    if member_artist.group:
                        continue
                    # append artist id
                    members_add.append(member_artist.id)

                # create new artists
                if member['mode'] == "create":
                    # create new party
                    member_party = Party.create([{
                        'name':
                        member['name'],
                        'contact_mechanisms': [('create', [{
                            'type':
                            'email',
                            'value':
                            member['email']
                        }])]
                    }])
                    member_party = member_party[0]
                    # append member data
                    members_create.append({
                        'group': False,
                        'description': "",
                        'party': member_party.id,
                        'entity_creator': party.id,
                        'entity_origin': 'indirect',
                        'claim_state': 'unclaimed',
                        'name': member['name']
                    })

            # append actions
            _artist['solo_artists'] = []
            if members_create:
                _artist['solo_artists'].append(('create', members_create))
            if members_add:
                _artist['solo_artists'].append(('add', members_add))

        # create artist
        artists = Artist.create([_artist])

        # user feedback
        if not artists:
            log.info("artist add failed for %s: %s" % (email, _artist))
            self.request.session.flash(
                _(u"Artist could not be added: ${arna}",
                  mapping={'arna': _artist['name']}), 'main-alert-danger')
            self.redirect()
            return
        artist = artists[0]
        log.info("artist add successful for %s: %s" % (email, artist))
        self.request.session.flash(
            _(u"Artist added:  ${arna} (${arco})",
              mapping={
                  'arna': artist.name,
                  'arco': artist.code
              }), 'main-alert-success')

        # redirect
        self.redirect(artist.code)
Exemplo n.º 5
0
    def update_artist(self):
        appstruct = self.appstruct
        artist = self.context.artist
        email = self.request.unauthenticated_userid
        party = WebUser.current_party(self.request)

        # group
        if artist.group != appstruct['group']:
            # if group status has changed
            if artist.group:
                # remove solo artists from current group artist
                artist.solo_artists = []
            else:
                # remove current solo artist from group artists
                artist.group_artists = []
            artist.group = appstruct['group']

        # name
        if artist.name != appstruct['name']:
            artist.name = appstruct['name']

        # description
        if artist.description != appstruct['description']:
            artist.description = appstruct['description']

        # picture
        if self.appstruct['picture']:
            with open(self.appstruct['picture']['fp'].name,
                      mode='rb') as picfile:
                picture_data = picfile.read()
            mimetype = self.appstruct['picture']['mimetype']
            artist.picture_data = picture_data
            artist.picture_data_mime_type = mimetype

        # members
        if artist.group:
            members_current = list(artist.solo_artists)
            members_future = []
            members_remove = members_current
            members_add = []
            members_create = []
            for member in appstruct['members']:

                # add existing artists
                if member['mode'] == "add":
                    member_artist = Artist.search_by_oid(member['oid'])
                    # sanity checks
                    if not member_artist:
                        continue
                    if member_artist.group:
                        continue
                    members_future.append(member_artist)
                    if member_artist in members_current:
                        members_remove.remove(member_artist)
                        continue
                    # append artist id
                    members_add.append(member_artist)

                # create new artists
                if member['mode'] == "create":
                    # create new party
                    member_party = Party.create([{
                        'name':
                        member['name'],
                        'contact_mechanisms': [('create', [{
                            'type':
                            'email',
                            'value':
                            member['email']
                        }])]
                    }])
                    member_party = member_party[0]
                    # create vlist
                    members_create.append({
                        'group': False,
                        'description': "",
                        'party': member_party.id,
                        'entity_creator': party.id,
                        'entity_origin': 'indirect',
                        'claim_state': 'unclaimed',
                        'name': member['name']
                    })

                # edit created artists
                if member['mode'] == "edit":
                    member_artist = Artist.search_by_code(member['code'])
                    member_party = member_artist.party
                    # sanity checks
                    if not member_artist:
                        continue
                    # security checks
                    if not Artist.is_foreign_member(self.request, artist,
                                                    member_artist):
                        continue
                    # edit artist
                    member_artist.name = member['name']
                    has_email = False
                    log.debug((
                        "member_artist.party.contact_mechanisms: {}\n").format(
                            member_artist.party.contact_mechanisms))
                    if member_party.contact_mechanisms:
                        for contact in member_party.contact_mechanisms:
                            if contact.type == 'email':
                                has_email = True
                                contact.email = member['email']
                                contact.save()
                    if not has_email:
                        # TODO: find out, how to create a new contact mechanism
                        # without triggering a user validation error on email
                        log.debug("warning: member email not created (TODO)")
                    member_artist.save()
                    members_future.append(member_artist)

            # create new artists
            if members_create:
                members_created = Artist.create(members_create)
                members_future += members_created

            # add new member list
            artist.solo_artists = members_future

        # update artist
        artist.save()

        # user feedback
        log.info("edit artist successful for %s: %s" % (email, artist))
        self.request.session.flash(
            _(u"Artist edited: ${arna} (${arco})",
              mapping={
                  'arna': artist.name,
                  'arco': artist.code
              }), 'main-alert-success')

        # redirect
        self.redirect()