Exemplo n.º 1
0
    def serialize(self, detailed=False, include_statuses=False):
        self.check_expiration()

        res = {
            'id': self.id,
            'name': self.name,
            'organization_id': self.organization_id,
            'tracking_device_id': self.tracking_device_id,
            'product_type_id': self.product_type_id,
            'status_en': self.status,
            'status': _l(self.status),
            'date_created': str(self.date_created)
        }
        if detailed:
            res['organization_name'] = app.logic.organization.Organization.get_organization(
                self.organization_id).name
            res['product_type_name'] = app.logic.product_type.ProductType.get_product_type(
                self.product_type_id).name

        if include_statuses:
            res['tracking_statuses'] = [
                s.serialize() for s in app.logic.tracking_status.
                TrackingStatus.get_statuses_by_product_id(self.id)
            ]
            res['conditions'] = [
                c.serialize()
                for c in app.logic.condition.Condition.get_conditions(
                    self.product_type_id)
            ]
        return res
Exemplo n.º 2
0
 def decorated_view(*args, **kwargs):
     data = request.get_json(silent=True) or {}
     data = Validator.validate(data, fields, optional)
     if not data:
         return bad_request(101, _l('must include all required fields'))
     request.passed_data = data
     return fn(*args, **kwargs)
Exemplo n.º 3
0
def product_assign_device():
    product = Product.get_product(request.passed_data['product_id'])
    if not product:
        return bad_request(103, _l('product is not found'))
    product.assign_tracking_device(request.passed_data['tracking_device_id'])
    response = jsonify({'product': product.serialize(detailed=True)})
    response.status_code = 200
    return response
Exemplo n.º 4
0
def product_description():
    product = Product.get_product(request.passed_data['product_id'])
    if not product:
        return bad_request(103, _l('product is not found'))
    response = jsonify(
        {'product': product.serialize(detailed=True, include_statuses=True)})
    response.status_code = 200
    return response
Exemplo n.º 5
0
def login_device():
    device = TrackingDevice.get_device(request.passed_data['key'])
    if not device or not device.check_password(
            request.passed_data['password']):
        return bad_request(103, _l('device is not found'))

    token = device.get_token()
    return jsonify({'token': token})
Exemplo n.º 6
0
def organization_description():
    organization = Organization.get_organization(
        request.passed_data['organization_id'])
    if not organization:
        return bad_request(103, _l('organization is not found'))
    response = jsonify({'organization': organization.serialize()})
    response.status_code = 200
    return response
Exemplo n.º 7
0
def product_type_description():
    product_type = ProductType.get_product_type(
        request.passed_data['product_type_id'])
    if not product_type:
        return bad_request(103, _l('product type is not found'))
    response = jsonify({'product_type': product_type.serialize()})
    response.status_code = 200
    return response
Exemplo n.º 8
0
def register_device():
    if TrackingDevice.get_device(request.passed_data['key']):
        return bad_request(102, _l('device is already registered'))

    TrackingDevice.add_device(request.passed_data)

    response = jsonify({'success': True})
    response.status_code = 200
    return response
Exemplo n.º 9
0
def change_status():
    user = User.get_user(request.passed_data['user_id'])
    if not user:
        return bad_request(103, _l('user is not found'))
    user.disabled = request.passed_data['active'] == False
    db.session.commit()
    response = jsonify({'user': user.serialize()})
    response.status_code = 200
    return response
Exemplo n.º 10
0
def product_tracks():
    from_date = None
    if 'from_date' in request.passed_data and request.passed_data['from_date']:
        from_date = parser.parse(request.passed_data['from_date'])
    product = Product.get_product(request.passed_data['product_id'])
    if not product:
        return bad_request(103, _l('product is not found'))
    response = jsonify({'product': product.get_statuses(from_date)})
    response.status_code = 200
    return response
Exemplo n.º 11
0
def organization_change_status():
    organization = Organization.get_organization(
        request.passed_data['organization_id'])
    if not organization:
        return bad_request(103, _l('organization is not found'))
    organization.disabled = request.passed_data['active'] == False
    db.session.commit()
    response = jsonify({'organization': organization.serialize()})
    response.status_code = 200
    return response
Exemplo n.º 12
0
def assign_device():
    device = TrackingDevice.get_device(request.passed_data['key'])
    if not device or not device.check_password(
            request.passed_data['password']):
        return bad_request(103, _l('device is not found'))

    product = Product.get_product(request.passed_data['product_id'])
    product.assign_tracking_device(device.id)

    response = jsonify({'success': True})
    response.status_code = 200
    return response
Exemplo n.º 13
0
def signup():
    if User.get_by_email(request.passed_data['email']):
        return bad_request(102, _l('please use a different email address'))

    user = User()
    user.from_dict(request.passed_data, new_user=True)
    user.role = 'admin'
    db.session.add(user)
    db.session.commit()

    response = jsonify(user.serialize())
    response.status_code = 200
    return response
Exemplo n.º 14
0
def login():
    user = User.get_by_email(request.passed_data['email'])
    if not user or not user.check_password(request.passed_data['password']):
        return bad_request(103, _l('user is not found'))
    g.current_user = user

    token = user.get_token()
    db.session.commit()
    return jsonify({
        'token': token,
        'role': user.role,
        'email': user.email,
        'organization_id': user.organization_id
    })
Exemplo n.º 15
0
def register():
    if User.get_by_email(request.passed_data['email']):
        return bad_request(102, _l('please use a different email address'))

    request.passed_data.setdefault('role', 'client')

    user = User()
    user.from_dict(request.passed_data, new_user=True)
    db.session.add(user)
    db.session.commit()

    response = jsonify(user.serialize())
    response.status_code = 200
    return response
Exemplo n.º 16
0
def organization_register():
    if User.query.filter_by(email=request.passed_data['email']).first():
        return bad_request(102, _l('please use a different email address'))

    request.passed_data.setdefault('role', 'manager')

    user = User()
    user.from_dict(request.passed_data, new_user=True)
    db.session.add(user)
    db.session.commit()

    response = jsonify(user.serialize())
    response.status_code = 200
    return response
Exemplo n.º 17
0
def track_statuses():
    tracks = []

    for track in request.passed_data['tracks']:
        track_data = Validator.validate(
            track, ['value', 'condition_id', 'date_recordered'], [])
        if not track_data:
            return bad_request(101, _l('must include all required fields'))
        tracks.append(track_data)

    for track in tracks:
        track.setdefault('tracking_device_id', g.current_device.id)
        TrackingStatus.add_status(track)

    response = jsonify({'success': True})
    response.status_code = 200
    return response
Exemplo n.º 18
0
    def get_statuses(self, from_date):
        self.check_expiration()

        res = {
            'id':
            self.id,
            'status_en':
            self.status,
            'status':
            _l(self.status),
            'tracking_statuses': [
                s.serialize()
                for s in app.logic.tracking_status.TrackingStatus.
                get_statuses_by_product_id(self.id, from_date=from_date)
            ],
            'conditions': [
                c.serialize()
                for c in app.logic.condition.Condition.get_conditions(
                    self.product_type_id)
            ]
        }
        return res
Exemplo n.º 19
0
from flask import Flask, request, current_app
from flask_sqlalchemy import SQLAlchemy
from flask_migrate import Migrate
from flask_login import LoginManager
from flask_mail import Mail
from flask_bootstrap import Bootstrap
from flask_moment import Moment
from flask_cors import CORS
from config import Config
from app.translate import Translator, translate as _l

db = SQLAlchemy()
migrate = Migrate()
login = LoginManager()
login.login_view = 'auth.login'
login.login_message = _l('Please log in to access this page.')
mail = Mail()
bootstrap = Bootstrap()
moment = Moment()
Translator.init()


def create_app(config_class=Config):
    app = Flask(__name__)
    app.config.from_object(config_class)

    db.init_app(app)
    migrate.init_app(app, db)
    login.init_app(app)
    mail.init_app(app)
    bootstrap.init_app(app)