예제 #1
0
    def test_get_by_reseller(self):
        purchase = PurchaseModel.get(1)
        assert purchase != None

        purchase = PurchaseModel.get_by_reseller('74936635057')

        assert purchase != None
예제 #2
0
    def get(self):
        current_user = jwt.decode(request.headers['Authorization'],
                                  environ.get('JWT_SECRET_KEY'),
                                  options={'verify_exp': False})

        if Roles().enum_to_name(current_user['sub']['role']) == 'admin':
            if 'id' in request.args:
                item = PurchaseModel.get(request.args['id'])
                item = serialize_model(item)
                item['cashback'] = calculate_unit_cashback(item['value'])
                return item
            elif 'cpf' in request.args:
                itens = PurchaseModel.get_by_reseller(request.args['cpf'])
                itens = serialize_model_list(itens)
                for item in itens:
                    item['cashback'] = calculate_unit_cashback(item['value'])
                return itens
            list = PurchaseModel.list()
            list = serialize_model_list(list)
            for item in list:
                item['cashback'] = calculate_unit_cashback(item['value'])
            return list
        else:
            if 'id' in request.args:
                item = PurchaseModel.get_by_reseller(current_user['sub']['id'])
                item = serialize_model(item)
                if item['id'] == request.args['id']:
                    return item
                else:
                    return
            list = PurchaseModel.get_by_reseller(current_user['sub']['id'])
            return list
예제 #3
0
    def test_new_purchase(self):
        assert len(PurchaseModel.list()) == 0

        purchase = PurchaseModel()
        purchase.code = 1
        purchase.value = 1000
        purchase.id_reseller = 2
        purchase.status = "Em validação"
        purchase.save()

        assert len(PurchaseModel.list()) != 0
예제 #4
0
 def delete(self):
     try:
         if 'id' in request.args:
             item = PurchaseModel.delete(request.args['id'])
             return "success", 201
         return "No ID", 401
     except:
         return "error", 401
 def post(self, name):
     company = CompanyModel.find_by_name(name)
     if company:
         data = Purchase.parser.parse_args()
         purchase_date = datetime.strptime(data['purchase_date'],
                                           "%Y-%m-%d")
         purchase = PurchaseModel(data['price'], data['quantity'],
                                  company.id, purchase_date)
         try:
             purchase.save()
         except:
             return {
                 "message": "An error occurred inserting the purchase."
             }, 500
     else:
         return {"message": "Company not found."}, 204
     return purchase.json(), 201
예제 #6
0
def first_purchase():
    if UserModel.get_by_cpf("74936635057") == None:
        first_reseller_user()

    if PurchaseModel.get_by_reseller(2) != None:
        return

    new_purchase = PurchaseModel()
    new_purchase.code = 1
    new_purchase.value = 1000
    new_purchase.id_reseller = 1
    new_purchase.status = "Em validação"
    new_purchase.save()
    return
예제 #7
0
    def post(self):
        try:
            data = request.get_json()
            item = PurchaseModel()

            current_user = jwt.decode(request.headers['Authorization'],
                                      environ.get('JWT_SECRET_KEY'),
                                      options={'verify_exp': False})

            if Roles().enum_to_name(current_user['sub']['role']) == 'admin':
                if check_params(['code', 'value', 'cpf'],
                                data.keys()) == False:
                    return "Parâmetros incorretos", 401

                if check_cpf(data['cpf']) is False:
                    return 'CPF incorreto', 401

                if UserModel.get_by_cpf(data['cpf']) == None:
                    return 'CPF não registrado', 401

                for parameter in data:
                    setattr(item, parameter, data[parameter])
                item.id_reseller = UserModel.get_by_cpf(data['cpf']).id
                item.status = "Em validação" if data['cpf'] not in [
                    '153.509.460-56', '15350946056'
                ] else "Aprovado"
                item.save()
                return "success", 201
            else:
                if check_params(['code', 'value'], data.keys()) == False:
                    return "Parâmetros incorretos", 401

                for parameter in data:
                    setattr(item, parameter, data[parameter])
                item.reseller = UserModel.get_by_cpf(
                    current_user['sub']['cpf'])
                item.status = "Em validação" if current_user['sub'][
                    'cpf'] not in ['153.509.460-56', '15350946056'
                                   ] else "Aprovado"
                item.save()
                return "success", 201
        except:
            return "error", 401
예제 #8
0
    def get(self):
        current_user = jwt.decode(request.headers['Authorization'], environ.get('JWT_SECRET_KEY'), options={'verify_exp': False})

        if Roles().enum_to_name(current_user['sub']['role']) == 'admin':
            if 'cpf' in request.args and 'month' in request.args and 'year' in request.args:
                user = UserModel.get_by_cpf(request.args['cpf'])
                if user == None:
                    return "Revendedor não encontrado"
                itens = PurchaseModel.get_by_reseller(user.id)
                itens = serialize_model_list(itens)
                itens = list(filter(lambda item: datetime.strptime(item['created_at'], "%Y-%m-%d %H:%M:%S.%f").month == int(request.args['month']) and datetime.strptime(item['created_at'], "%Y-%m-%d %H:%M:%S.%f").year == int(request.args['year']) and item['status'] == "Aprovado", itens))
                return {"purchases": itens, "cashback_by_month": calculate_multi_cashback(itens)}
        else:
            if 'month' in request.args and 'year' in request.args:
                itens = PurchaseModel.get_by_reseller(int(current_user['sub']['id']))
                itens = serialize_model_list(itens)
                itens = list(filter(lambda item: datetime.strptime(item['created_at'], "%Y-%m-%d %H:%M:%S.%f").month == int(request.args['month']) and datetime.strptime(item['created_at'], "%Y-%m-%d %H:%M:%S.%f").year == int(request.args['year']) and item['status'] == "Aprovado", itens))
                return {"purchases": itens, "cashback_by_month": calculate_multi_cashback(itens)}

        return "Parâmetros incorretos", 401
예제 #9
0
    def test_post_purchase_endpoint(self, client):
        auth = client.post(
            '/api/authentication',
            json={
                'email': '*****@*****.**',
                'password': '******'})
        access_decode = json.loads(auth.data.decode())

        purchases = len(PurchaseModel.get_by_reseller(2))

        res = client.post(
            '/api/purchase',
            json={
                'value': 1000,
                'code': 30},
            headers={
                'Authorization': access_decode['token']})

        assert res.status_code == 201
        assert json.loads(res.data) == 'success'

        assert len(PurchaseModel.get_by_reseller(2)) == purchases + 1
예제 #10
0
    def put(self):
        try:
            data = request.get_json()
            item = PurchaseModel.get(data['id'])

            if item == None:
                return "ID incorreto"

            if data['status'] not in ['Aprovado', 'Reprovado', 'Em validação']:
                return "Status informado incorreto. Deve ser: Aprovado, Reprovado ou Em validação"

            item.status = data['status']
            item.save()
            return "success", 201
        except:
            return "error", 401
예제 #11
0
    def test_delete_purchase(self):
        purchase = PurchaseModel()
        purchase.code = 2
        purchase.value = 1000
        purchase.id_reseller = 2
        purchase.status = "Em validação"
        purchase.save()

        purchases = len(PurchaseModel.list())

        PurchaseModel.delete(2)

        assert purchases - 1 == len(PurchaseModel.list())