def save_sponsors_from_json(json, event_id=None):
    event_id = event_id if event_id else json['event_id']
    event = DataGetter.get_event(event_id)
    sponsors_enabled = json['sponsors_enabled']

    if sponsors_enabled:
        ids = []
        for sponsor in json['sponsors']:
            if sponsor['id'] and represents_int(sponsor['id']):
                item = Sponsor.query.get(sponsor['id'])
            else:
                item = Sponsor(event_id=event_id)

            if sponsor['name'].strip() == '':
                continue

            item.name = sponsor['name']
            item.level = sponsor['level']
            item.sponsor_type = sponsor['type']
            item.url = sponsor['url']
            item.description = sponsor['description']

            save_to_db(item)

            if item.logo != sponsor['logo']:
                if sponsor['logo'] and sponsor['logo'] != '':
                    item.logo = save_event_image(
                        sponsor['logo'],
                        UPLOAD_PATHS['sponsors']['logo'].format(
                            event_id=int(event.id), id=int(item.id)))
                else:
                    item.logo = ''

            save_to_db(item)
            ids.append(item.id)

        if len(ids) > 0:
            Sponsor.query.filter(~Sponsor.id.in_(ids)).filter_by(
                event_id=event_id).delete(synchronize_session='fetch')
    else:
        Sponsor.query.filter_by(event_id=event_id).delete(
            synchronize_session='fetch')

    event.state = json['state'] if event.location_name.strip(
    ) != '' else 'Draft'
    save_to_db(event)
    return {'event_id': event.id}
예제 #2
0
def create_services():
    track = Track.get_service_name()
    session = Session.get_service_name()
    speaker = Speaker.get_service_name()
    sponsor = Sponsor.get_service_name()
    microlocation = Microlocation.get_service_name()

    get_or_create(Service, name=track)
    get_or_create(Service, name=session)
    get_or_create(Service, name=speaker)
    get_or_create(Service, name=sponsor)
    get_or_create(Service, name=microlocation)
예제 #3
0
def create_services(event_id, serial_no=''):
    """Creates services and associates them with `event_id`. Service names
    have an optional `serial_no` that can be used to make them unique.
    """
    test_micro = 'TestMicrolocation{}_{}'.format(serial_no, event_id)
    test_track = 'TestTrack{}_{}'.format(serial_no, event_id)
    test_session = 'TestSession{}_{}'.format(serial_no, event_id)
    test_speaker = 'TestSpeaker{}_{}'.format(serial_no, event_id)
    test_sponsor = 'TestSponsor{}_{}'.format(serial_no, event_id)
    test_sponsor_type = 'TestSponsorType{}_{}'.format(serial_no, event_id)
    test_session_type = 'TestSessionType{}_{}'.format(serial_no, event_id)
    test_social_link = 'TestSocialLink{}_{}'.format(serial_no, event_id)

    microlocation = Microlocation(name=test_micro, event_id=event_id)
    track = Track(
        name=test_track,
        description='descp',
        event_id=event_id,
        color='#caf034'
    )
    session_type = SessionType(
        name=test_session_type,
        length=30,
        event_id=event_id
    )
    session = Session(title=test_session,
                      long_abstract='descp',
                      start_time=datetime(2014, 8, 4, 12, 30, 45),
                      end_time=datetime(2014, 8, 4, 13, 00, 00),
                      event_id=event_id,
                      session_type=session_type)
    speaker = Speaker(name=test_speaker,
                      email='*****@*****.**',
                      organisation='org',
                      country='japan',
                      event_id=event_id)
    sponsor = Sponsor(name=test_sponsor, sponsor_type=test_sponsor_type,
                      event_id=event_id, level='level')
    social_link = SocialLink(
        name=test_social_link,
        link='http://fb.com',
        event_id=event_id
    )

    save_to_db(social_link, 'SocialLink saved')
    save_to_db(session_type, 'SessionType saved')
    save_to_db(microlocation, 'Microlocation saved')
    save_to_db(track, 'Track saved')
    save_to_db(session, 'Session saved')
    save_to_db(speaker, 'Speaker saved')
    save_to_db(sponsor, 'Sponsor saved')
예제 #4
0
def create_permissions():
    ownr = Role.query.filter_by(name=Role.OWNER).first()
    orgr = Role.query.filter_by(name=Role.ORGANIZER).first()
    coorgr = Role.query.filter_by(name=Role.COORGANIZER).first()
    track_orgr = Role.query.filter_by(name=TRACK_ORGANIZER).first()
    mod = Role.query.filter_by(name=MODERATOR).first()
    regist = Role.query.filter_by(name=REGISTRAR).first()
    track = Service.query.filter_by(name=Track.get_service_name()).first()
    session = Service.query.filter_by(name=Session.get_service_name()).first()
    speaker = Service.query.filter_by(name=Speaker.get_service_name()).first()
    sponsor = Service.query.filter_by(name=Sponsor.get_service_name()).first()
    microlocation = Service.query.filter_by(
        name=Microlocation.get_service_name()).first()

    # For ORGANIZER and OWNER
    # All four permissions set to True
    services = [track, session, speaker, sponsor, microlocation]
    for service in services:
        perm, _ = get_or_create(Permission, role=ownr, service=service)
        db.session.add(perm)

    for service in services:
        perm, _ = get_or_create(Permission, role=orgr, service=service)
        db.session.add(perm)

    # For COORGANIZER
    for service in services:
        perm, _ = get_or_create(Permission, role=coorgr, service=service)
        perm.can_create, perm.can_delete = False, False
        db.session.add(perm)

    # For TRACK_ORGANIZER
    for service in services:
        perm, _ = get_or_create(Permission, role=track_orgr, service=service)
        if not service == track:
            perm.can_create, perm.can_update, perm.can_delete = False, False, False
        db.session.add(perm)

    # For MODERATOR
    for service in services:
        perm, _ = get_or_create(Permission, role=mod, service=service)
        perm.can_create, perm.can_update, perm.can_delete = False, False, False
        db.session.add(perm)

    # For REGISTRAR
    services = [track, session, speaker, sponsor, microlocation]
    for service in services:
        perm, _ = get_or_create(Permission, role=regist, service=service)
        perm.can_create, perm.can_update, perm.can_delete = False, False, False
        db.session.add(perm)
예제 #5
0
def save_sponsors_from_json(json, event_id=None):
    event_id = event_id if event_id else json['event_id']
    event = DataGetter.get_event(event_id)
    sponsors_enabled = json['sponsors_enabled']

    if sponsors_enabled:
        ids = []
        for sponsor in json['sponsors']:
            if sponsor['id'] and represents_int(sponsor['id']):
                item = Sponsor.query.get(sponsor['id'])
            else:
                item = Sponsor(event_id=event_id)

            if sponsor['name'].strip() == '':
                continue

            item.name = sponsor['name']
            item.level = sponsor['level']
            item.sponsor_type = sponsor['type']
            item.url = sponsor['url']
            item.description = sponsor['description']

            save_to_db(item)

            if item.logo != sponsor['logo']:
                if sponsor['logo'] and sponsor['logo'] != '':
                    item.logo = save_event_image(sponsor['logo'], UPLOAD_PATHS['sponsors']['logo'].format(
                        event_id=int(event.id), id=int(item.id)
                    ))
                else:
                    item.logo = ''

            save_to_db(item)
            ids.append(item.id)

        if len(ids) > 0:
            Sponsor.query.filter(~Sponsor.id.in_(ids)).filter_by(event_id=event_id).delete(synchronize_session='fetch')
    else:
        Sponsor.query.filter_by(event_id=event_id).delete(synchronize_session='fetch')

    event.state = json['state'] if event.location_name.strip() != '' else 'Draft'
    save_to_db(event)
    return {
        'event_id': event.id
    }
예제 #6
0
    def setUp(self):
        self.app = Setup.create_app()
        with app.test_request_context():
            event = Event(name=UNICODE_STRING,
                          start_time=datetime(2013, 8, 4, 12, 30, 45),
                          end_time=datetime(2016, 9, 4, 12, 30, 45))
            event.owner = 1

            microlocation = Microlocation(name=UNICODE_STRING)
            session = Session(title=UNICODE_STRING,
                              long_abstract='descp',
                              start_time=datetime(2014, 8, 4, 12, 30, 45),
                              end_time=datetime(2015, 9, 4, 12, 30, 45))
            speaker = Speaker(name=UNICODE_STRING,
                              email='*****@*****.**',
                              organisation='org',
                              country='japan')
            sponsor = Sponsor(name=UNICODE_STRING)

            save_to_db(event, "Event saved")
            save_to_db(microlocation, 'Microlocation saved')
            save_to_db(session, 'Session saved')
            save_to_db(speaker, 'Speaker saved')
            save_to_db(sponsor, 'Sponsor saved')
예제 #7
0
 def create(self, payload):
     response = ResponseBuilder()
     attachment = self.save_file(
         payload['attachment']
     ) if payload['attachment'] is not None else None
     sponsor = Sponsor()
     sponsor.name = payload['name']
     sponsor.phone = payload['phone']
     sponsor.email = payload['email']
     sponsor.note = payload['note']
     sponsor.stage = str(
         payload['stage']
     ) if payload['stage'] else '1'  # default to one as lead
     sponsor.type = str(
         payload['type']
     ) or '4' if sponsor.stage == '3' else None  # default to four if stage is official
     sponsor.attachment = attachment
     sponsor.url = payload['url']
     sponsor.callback_url = payload['callback_url']
     db.session.add(sponsor)
     try:
         db.session.commit()
         #add sponsor_template
         if payload['stage'] in [3, '3']:
             sponsor = db.session.query(Sponsor).filter_by(
                 stage=3).order_by(desc(Sponsor.id)).first()
             sponsor_template = SponsorTemplate()
             sponsor_template.sponsor_id = sponsor.id
             sponsor_template.attachment = sponsor.attachment
             db.session.add(sponsor_template)
             db.session.commit()
         return response.set_data(sponsor.as_dict()).set_message(
             'Data created succesfully').build()
     except SQLAlchemyError as e:
         data = e.orig.args
         return response.set_data(data).set_error(True).build()
예제 #8
0
    def update(self, id, payload):
        response = ResponseBuilder()
        sponsor = db.session.query(Sponsor).filter_by(id=id)
        data = sponsor.first().as_dict() if sponsor.first() else None
        if data['attachment'] is not None and payload['attachment']:
            Helper().silent_remove(current_app.config['STATIC_DEST'] +
                                   data['attachment'])
        if data is None:
            return response.set_error(True).set_message(
                'data not found').set_data(None).build()
        if data['stage'] != payload['stage']:
            log = SponsorInteractionLog()
            _from = SPONSOR_STAGES[data['stage']] if data['stage'] else None
            _to = SPONSOR_STAGES[str(
                payload['stage'])] if payload['stage'] else None
            log.description = 'Admin move stage from: ' + _from + ' to: ' + _to
            log.sponsor_id = id
            db.session.add(log)

        if (data['type'] != payload['type']):
            log = SponsorInteractionLog()
            if data['type'] not in ['null', None]:
                _from = SPONSOR_TYPES[data['type']]
            else:
                _from = 'None'
            if payload['type'] not in ['null', None]:
                _to = SPONSOR_TYPES[str(
                    payload['type'])] if payload['type'] != 'null' else None
            else:
                _to = 'None'

            log.description = 'Admin move stage from: ' + _from + ' to: ' + _to
            log.sponsor_id = id
            db.session.add(log)

        new_data = super().filter_update_payload(payload)

        if SPONSOR_STAGES[str(payload['stage'])] is not SPONSOR_STAGES['3']:
            new_data['type'] = None
        if payload['attachment']:
            attachment = self.save_file(
                payload['attachment']
            ) if payload['attachment'] is not None else None
            new_data['attachment'] = attachment
        new_data['updated_at'] = datetime.datetime.now()
        new_data['url'] = payload['url']
        new_data['callback_url'] = payload['callback_url']
        sponsor.update(new_data)
        try:
            db.session.commit()
            #when update sponsor to official, automatically create sponsor_template
            if new_data['stage'] in [3, '3']:
                check_sponsor_template = db.session.query(
                    SponsorTemplate).filter_by(sponsor_id=id).first()
                if check_sponsor_template is None:
                    sponsor_update = Sponsor()
                    sponsor_update = db.session.query(Sponsor).filter(
                        and_(Sponsor.stage == 3, Sponsor.id == id)).first()
                    sponsor_template = SponsorTemplate()
                    sponsor_template.sponsor_id = sponsor_update.id
                    sponsor_template.attachment = sponsor_update.attachment
                    db.session.add(sponsor_template)
                    db.session.commit()
            return response.set_data(sponsor.first().as_dict()).build()

        except SQLAlchemyError as e:
            data = e.orig.args
            return response.set_data(data).set_error(True).build()