Exemple #1
0
def buscar_categorias_produtos(id=None):
    """
        Busca as seções de produtos cadastradas no site e
        importadas para dentro do sistema

        Params
        ---------
        id: <int> (default=None)

        Returns
        ---------
        categorias: list<MagCategorias>

        Raises
        ---------
    """
    if not id:
        config = ConfigMagento.by_id(1)
        if not config:
            return None
        id = config.categoria_default

    secoes = MagCategorias.query.filter(
        MagCategorias.parent_id == id).order_by(MagCategorias.name).all()

    return secoes
Exemple #2
0
def importar():
    """
        Faz a importação das categorias criadas no site para
        serem usadas no envio de novos produtos
    """

    template = 'categorias/importar/form-importar.html'
    categorias = MagCategorias.by(parent_id=2)
    form = ImportarCategoriaForm()
    config = ConfigMagento.by_id(1)
    has_cat_default = config.categoria_default if config else None

    if form.validate_on_submit() and has_cat_default:
        Log.info(f'[CATEGORIAS] Iniciando a atualização das Categorias.')
        registrar_categorias()
        Log.info(f'[CATEGORIAS] Atualização das Categorias finalizado.')

    result = {
        'title': 'Categorias',
        'subtitle': 'Importar do Site',
        'categorias': categorias,
        'has_cat_default': has_cat_default,
        'tasks': True,
        'form': form
    }
    return render_template(template, **result)
Exemple #3
0
def atualiza_estoque():
    """
        Atualiza o estoque dos produtos no site
    """

    template = 'produtos/form-atualiza-estoque.html'
    form = EnviarProdutosNovosForm()
    config = ConfigMagento.by_id(1)

    task = current_app.atualiza_estoque_task
    clear_task = request.args.get('clear_task', None)
    if clear_task and clear_task == 'yes':
        if task and task.state == 'SUCCESS':
            current_app.atualiza_estoque_task = task = None
        return redirect(url_for('produtos.atualiza_estoque'))

    produtos = None
    if not task:
        produtos = buscar_estoque_produtos(dthr_sincr=config.dtsincr_estoque)

    if form.validate_on_submit() and produtos:
        task = atualiza_estoque_task.apply_async()
        current_app.atualiza_estoque_task = task

        success(f'Tarefa iniciada com sucesso')
        return redirect(url_for('produtos.atualiza_estoque'))

    result = {
        'title': 'Produtos',
        'subtitle': 'Atualizar Estoque',
        'form': form,
        'produtos': produtos,
        'task': task
    }
    return render_template(template, **result)
Exemple #4
0
def buscar_data_estoque_produtos():
    """
        Busca as datas de estoque de produtos
    """
    config = ConfigMagento.by_id(1)
    dtsincr = config.dtsincr_estoque if config else None

    produtos = CissProdutoGrade.query.join(
        CissProdutoEstoque.produto
    ).filter(
        CissProdutoGrade.flaginativo == 'F',
        CissProdutoGrade.idmodelo == 4,
        CissProdutoGrade.idtipo == 2
    )
    if dtsincr:
        produtos = produtos.filter(
            CissProdutoEstoque.dtalteracao > dtsincr
        )
    produtos = produtos.all()[:5]

    return produtos
Exemple #5
0
def magento():
    config = ConfigMagento.query.filter_by(id=1).first()
    if not config:
        config = ConfigMagento()
    
    form = ConfigMagentoForm()

    if config and config.id and not form.config_id.data:
        form.config_id.data = config.id
        form.api_url.data = config.api_url
        form.api_user.data = config.api_user
        form.api_pass.data = config.api_pass
        form.magento_version.data = config.magento_version
        form.categoria_default.data = config.categoria_default
        form.dtsincr_estoque.data = config.dtsincr_estoque
        form.dtsincr_preco.data = config.dtsincr_preco
        form.dtsincr_promocao.data = config.dtsincr_promocao
        form.dtsincr_inativos.data = config.dtsincr_inativos

    if form.validate_on_submit():
        config.api_url = form.api_url.data
        config.api_user = form.api_user.data
        config.api_pass = form.api_pass.data
        config.magento_version = form.magento_version.data
        config.categoria_default = form.categoria_default.data

        api = Api()
        api.url = form.api_url.data
        api.user = form.api_user.data
        api.passwd = form.api_pass.data
        api.magento_version = form.magento_version.data

        db.session.add(config)
        db.session.commit()

        success('Configurações atualizadas com sucesso.')

    content = {
        'title': 'Configurações do Magento',
        'form': form
    }
    return render_template('configurations/magento.html', **content)
Exemple #6
0
def buscar_categorias_site():
    """
        Busca do Site as Categorias de produtos cadastradas
    """
    def filtrar_categorias(categorias, data):

        if isinstance(categorias, list):
            for c in categorias:
                filtrar_categorias(c, data)

        if isinstance(categorias, dict):
            categoria = {
                'category_id': categorias['category_id'],
                'parent_id': categorias['parent_id'],
                'is_active': categorias['is_active'],
                'name': categorias['name'],
                'position': categorias['position'],
                'level': categorias['level']
            }
            data.append(categoria)

            if categorias['children']:
                filtrar_categorias(categorias['children'], data)

        return data

    params = ConfigMagento.by_id(1)

    if params:
        categorias = category_tree(parent_id=params.categoria_default)
        categorias = categorias['children']
        if not categorias:
            return None

    data = []
    categorias = filtrar_categorias(categorias, data)

    return categorias
Exemple #7
0
def atualiza_promocoes():
    """
        Envia os produtos em promoção para o site
    """

    template = 'produtos/form-envia-promocoes.html'
    config = ConfigMagento.by_id(1)

    task = current_app.atualiza_promocoes_task
    clear_task = request.args.get('clear_task', None)
    if clear_task and clear_task == 'yes':
        if task and task.state == 'SUCCESS':
            current_app.atualiza_promocoes_task = task = None
        return redirect(url_for('produtos.atualiza_promocoes'))

    produtos = None
    if not task:
        produtos = buscar_produtos_promocao(dthr_sincr=config.dtsincr_promocao)

    form = EnviarProdutosNovosForm()

    if form.validate_on_submit():
        task = atualiza_promocoes_task.apply_async()
        current_app.atualiza_promocoes_task = task

        success(f'Tarefa iniciada com sucesso')
        return redirect(url_for('produtos.atualiza_promocoes'))

    result = {
        'title': 'Produtos',
        'subtitle': 'Atualizar Promoções',
        'produtos': produtos,
        'task': task,
        'form': form
    }
    return render_template(template, **result)
Exemple #8
0
def inativar_task(self):
    """
        cria uma tarefa para atualizar os produtos inativos no site

        Raises
        -----------
        Fault<sku já existe no site>
            Exceção lançada quando o produto já existe no site
    """
    
    with app.app_context():
        Log.info(f'[INATIVAR] Iniciando o envio dos produtos.')
        db.engine.dispose()

        config = ConfigMagento.by_id(1)
        dthr_sincr = datetime.now()
        produtos_erp = buscar_produtos_inativos()
        # produtos = converte_produto_inativo(produtos)

        # Variáveis utilizadas para atualizar a barra de
        # progresso na tela do usuário
        concluidos = 0
        erros_count = 0
        erros = []
        count = 0
        total = len(produtos_erp)

        for produto_erp in produtos_erp:
            sku = produto_erp.idsubproduto
            
            self.update_state(
                state='PROGRESS',
                meta={
                    'name': format_task_name(self.name),
                    'complete': concluidos,
                    'errors_count': erros_count,
                    'errors': erros,
                    'current': count,
                    'total': total,
                    'status': f'Enviando o produto {sku}'
                }
            )

            try:
                Log.info(f'[INATIVAR] Iniciando o envio do item {sku}.')

                mag_produto = converte_produto_inativo(produto_erp)
                updateProduct(
                    mag_produto['sku'],
                    mag_produto['data']
                )
                Log.info(f'[INATIVAR]------ Enviado para o site')

                # pega o tipo e se esta inativo do ERP
                tipo, inativo = produto_erp.idtipo, produto_erp.flaginativo

                # verifica se o produto foi ativado ou inativado no site
                if tipo == 2 and inativo == 'T':
                    produto_erp.idtipo = 3
                elif tipo == 3 and inativo == 'F':
                    produto_erp.idtipo = 2

                produto_erp.update()

                Log.info(f'[INATIVAR]------ Gravado no ERP.')

                concluidos += 1

            except Exception as e:
                erros_count += 1
                erros.append(f'Produto: {sku} -------- Erro: {e}')

                Log.error(
                    f'[INATIVAR] Erro ao enviar o produto {sku} erro: {e}')

            count += 1

        Log.info(f'[INATIVAR] Envio de produtos finalizado.')
        Log.info(f'[INATIVAR] Salvando data e hora da sincronização.')

        config.dtsincr_inativos = dthr_sincr
        config.update()

    return {
        'name': format_task_name(self.name),
        'complete': concluidos,
        'errors_count': erros_count,
        'errors': erros,
        'current': total,
        'total': total,
        'status': 'complete'
    }
Exemple #9
0
def atualiza_promocoes_task(self):
    """
        cria uma tarefa para atualizar as promoções dos produtos no site

        Raises
        -----------
        Fault<sku já existe no site>
            Exceção lançada quando o produto já existe no site
    """

    Log.info(f'[PROMOÇÃO] Iniciando o envio dos produtos.')

    config = ConfigMagento.by_id(1)
    dthr_sincr = datetime.now()
    produtos = buscar_produtos_promocao(dthr_sincr=config.dtsincr_promocao)
    produtos = converte_produtos_promocao(produtos)

    concluidos = 0
    erros_count = 0
    erros = []
    count = 0
    total = len(produtos)

    for p in produtos:
        self.update_state(
            state='PROGRESS',
            meta={
                'name': format_task_name(self.name),
                'complete': concluidos,
                'errors_count': erros_count,
                'errors': erros,
                'current': count,
                'total': total,
                'status': f'Enviando o produto {p["sku"]}'
            }
        )

        try:
            Log.info(f'[PROMOÇÃO] Iniciando o envio do item {p["sku"]}.')
            updateProduct(
                p['sku'],
                p['data']
            )
            Log.info(f'[PROMOÇÃO]------ Enviado para o site')

            concluidos += 1

        except Exception as e:
            erros_count += 1
            erros.append(f'Produto: {p["sku"]} -------- Erro: {e}')

            Log.error(
                f'[PROMOÇÃO] Erro ao enviar o produto {p["sku"]} erro: {e}')

        count += 1

    Log.info(f'[PROMOÇÃO] Envio de produtos finalizado.')
    Log.info(f'[PROMOÇÃO] Salvando data e hora da sincronização.')

    with app.app_context():
        db.engine.dispose()  # corrigi o erro do postgres
        config.dtsincr_promocao = dthr_sincr
        config.update()

    return {
        'name': format_task_name(self.name),
        'complete': concluidos,
        'errors_count': erros_count,
        'errors': erros,
        'current': total,
        'total': total,
        'status': 'complete'
    }