def add_by_user_loyalty_id(user_id, loyalty_id):
        answer = -1
        loyalty = PaymentLoyalty.query.filter_by(
            id=loyalty_id).first()
        if not loyalty:
            return False

        user_wallets = PaymentWallet.query.filter_by(user_id=user_id).all()

        for wallet in user_wallets:
            wl = WalletLoyalty.query.filter_by(
                loyalty_id=loyalty_id, status=WalletLoyalty.STATUS_ON, wallet_id=wallet.id).first()

            if not wl:
                continue

            person = Person.query.filter_by(
                firm_id=loyalty.firm_id, payment_id=wallet.payment_id).first()

            if not person:
                person = Person()
                person.name = 'Участник промо-кампании'
                person.firm_id = loyalty.firm_id
                person.hard_id = wallet.hard_id
                person.payment_id = wallet.payment_id
                person.save()

            if not loyalty.terms_id:
                continue

            timeout = PersonEvent.LIKE_TIMEOUT
            if loyalty.timeout:
                timeout = loyalty.timeout

            terms = json.loads(loyalty.terms_id)
            for term in terms:
                event = PersonEvent.query.filter_by(
                    person_id=person.id, term_id=term, event_id=loyalty.event_id, firm_id=loyalty.firm_id).first()

                if event:
                    if event.timeout > timeout:
                        event.status = PersonEvent.STATUS_BANNED
                        event.save()
                else:
                    event = PersonEvent()
                    event.person_id = person.id
                    event.term_id = term
                    event.event_id = loyalty.event_id
                    event.firm_id = loyalty.firm_id
                    event.timeout = PersonEvent.LIKE_TIMEOUT
                    if loyalty.timeout:
                        event.timeout = loyalty.timeout
                    event.save()
                    answer = event.id

        return answer
Exemple #2
0
def person_save(person_id):
    """Добавляем или редактируем человека"""

    answer = dict(error='yes', message=u'Произошла ошибка', person_id=0)
    arg = json.loads(request.stream.read())
    form = PersonAddForm.from_json(arg)

    if person_id == 0:
        code = arg['card_code'] if 'card_code' in arg else False
        card_hard_id = arg['card_hard_id'] if 'card_hard_id' in arg else False
        person = Person()

        if code or card_hard_id:
            if code:
                bind_card = set_person_card(code)
            else:
                bind_card = set_person_card_by_hid(card_hard_id)
                
            if not bind_card['wallet']:
                answer['message'] = bind_card['message']
                return jsonify(answer)
            else:
                wallet = bind_card['wallet']
                person.hard_id = wallet.hard_id
                person.payment_id = bind_card['payment_id']
                
    else:
        person = Person.query.get(person_id)
        if not person:
            abort(404)

    if not form.validate():
        answer['message'] = u"""Форма заполнена неверно,
                            проверьте формат полей"""
        return jsonify(answer)

    form.populate_obj(person)
    if person.save():
        answer['person_id'] = person.id
        answer['error'] = 'no'
        answer['message'] = u'Данные сохранены'
        return jsonify(answer)

    return jsonify(answer)
Exemple #3
0
def person_import():
    """Импорт списка сотрудников из json"""
    answer = dict(
        error='yes',
        wrong_forms=[],
        wrong_cards=[],
        added_forms=0
    )

    data = json.loads(request.stream.read())
    employers = data['employers']
    for json_employer in employers:

        if not len(json_employer['name']):
            answer['wrong_forms'].append(json_employer)
            continue

        employer = request_helper.name_together(json_employer)
        if employer['birthday'] and len(employer['birthday']):
            try:
                employer['birthday'] = datetime.strptime(
                    employer['birthday'], '%d.%m.%Y')
                employer['birthday'] = employer[
                    'birthday'].strftime('%Y-%m-%d %H:%M:%S')
            except ValueError:
                answer['wrong_forms'].append(json_employer)
                continue

        if 'tabel_id' not in employer:
            employer['tabel_id'] = None
        elif not len(employer['tabel_id']):
            employer['tabel_id'] = None

        employer['firm_id'] = g.firm_info['id']
        employer['csrf_token'] = data['csrf_token']
        person = Person()

        form = PersonAddForm.from_json(employer)
        if not form.validate():
            answer['wrong_forms'].append(json_employer)
            continue

        form.populate_obj(person)
        code = employer['code'] if 'code' in employer else False
        if code and len(code) == 10:
            bind_card = set_person_card(code)
            if bind_card['wallet']:
                wallet = bind_card['wallet']
                person.payment_id = wallet.payment_id
                person.hard_id = wallet.hard_id
            else:
                answer['wrong_cards'].append(json_employer)
        else:
            answer['wrong_cards'].append(json_employer)

        answer['added_forms'] = answer['added_forms'] + 1
        db.session.add(person)

    if db.session.commit():
        answer['error'] = 'no'

    return jsonify(answer)