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
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)
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)
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
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)
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
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)
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' }
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' }