Пример #1
0
def diario(plugin_name, project_id, resource_id, resource_type, document_hash):
    result_status = PluginResultStatus.STARTED
    result = {"is_document": False}

    try:
        if not (APP_ID and SECRET_KEY):
            print("No App ID key...!")
            result_status = PluginResultStatus.NO_API_KEY

        else:
            diariosdk = Diario(APP_ID, SECRET_KEY)
            response = diariosdk.search(document_hash)

            if response.data:
                result = get_result(diariosdk, response.data)
                result_status = PluginResultStatus.COMPLETED
            else:
                result_status = PluginResultStatus.RETURN_NONE

            PluginManager.set_plugin_results(resource_id, plugin_name,
                                             project_id, result, result_status)

    except Exception as e:
        tb1 = traceback.TracebackException.from_exception(e)
        print("".join(tb1.format()))
        result = None
Пример #2
0
def old_diario(document_hash):
    result = {"is_document": False}
    try:
        if not APP_ID:
            print("No App ID key...!")
            return None

        if not SECRET_KEY:
            print("No secret key...!")
            return None

        diariosdk = Diario(APP_ID, SECRET_KEY)
        response = diariosdk.get_pdf_info(document_hash)

        if not response.data:
            response = diariosdk.get_office_info(document_hash)
            if response.data:
                result = get_result(diariosdk, response.data)
        else:
            result = get_result(diariosdk, response.data)

    except Exception as e:
        tb1 = traceback.TracebackException.from_exception(e)
        print("".join(tb1.format()))
        result = None

    return result
 def __init__(self):
     Analyzer.__init__(self)
     self.service = self.get_param('config.service', None,
                                   'Service parameter is missing')
     self.client_id = self.get_param('config.client_id', None,
                                     'Missing Client ID')
     self.secret = self.get_param('config.secret', None, 'Missing Secret')
     self.polling_interval = self.get_param('config.polling_interval', 60)
     self.api = Diario(self.client_id, self.secret)
Пример #4
0
def check(data):
    api = Diario('API - ID', 'API - SECRETS')
    result = api.search(data[1])
    if result.error is None:
        return result.data
    elif result.json['error']['code'] == 406:
        api.upload(data[0])
        result = {'prediction': 'U', 'status': 'Q', 'sha256': data[1]}
        return result

    else:
        result = {'prediction': 'E'}
        return result
Пример #5
0
def run(args, app_id, secret):
    """
    main loop
    """

    document_type = args.document_type
    if document_type not in supported_types:
        print("[!] Unknown document type specified. Supported types ({0})".
              format(supported_types))

    # Create the main object for dealing with diario
    if args.ip and args.port:
        diario = Diario(app_id, secret, args.ip, args.port)
    else:
        diario = Diario(app_id, secret)

    hashes = []
    counter = 0
    log = None

    # Single hash search
    if args.hash:
        hashes.append(args.hash)
    else:
        try:
            with open(args.hashes_file, "r") as f:
                hashes.extend(f.read().split("\n"))
                hashes = [n for n in hashes if n]
        except Exception as err:
            print("[!] Error trying to read file {0}".format(args.hashes_file))
            print(err)
            sys.exit(1)

    if args.log:
        log = open(args.log, "w")
    try:
        for hash_to_get in hashes:
            print("[i] Getting {0}".format(hash_to_get))
            report, error = get_hash_from_diario(diario, hash_to_get,
                                                 document_type)
            print(report)
            if args.log:
                log.write(report)
            if not error:
                counter += 1
    finally:
        if log:
            log.close()

    print("[*] Found {0} of {1} hashes".format(counter, len(hashes)))
Пример #6
0
 def Confirmar(self, key, window_id):
     #ainda não esta 100% ver com calma outro dia
     # Gera movimento contabilistico (conta de materias primas contra conta de gastos e entrada de produto acabado em armazem)
     # Gera movimento de Stock (sai materia prima do armazem por contrapartida de produto acabado)
     if key in ['None', None]:
         key = get_actions(action='save', key=None, model_name=model.__model_name__, internal=True)
     record_id = key
     record = model.get(key=record_id)[0]
     record['user'] = session['user']
     record['estado'] = 'Confirmado'
     record['numero'] = base_models.Sequence().get_sequence('prato')
     from diario import Diario
     diario = Diario(where="tipo='stock'").get()[0]['id']
     periodo = None
     from periodo import Periodo
     periodos = Periodo().get()
     for p in periodos:
         lista_datas = generate_dates(start_date=p['data_inicial'], end_date=p['data_final'])
         if str(format_date(record['data'])) in lista_datas:
             periodo = p['id']
     if not periodo:
         return error_message('não existe periodo definido para a data em questão! \n')
     from armazem import Armazem
     armazem_cliente = Armazem(where="tipo='cliente'").get()[0]['id']
     from movimento import Movimento
     movimento = Movimento(data=record['data'], numero=base_models.Sequence().get_sequence('movimento'), num_doc=record['numero'], descricao='Nossa Guia de Produção', diario=diario, documento='prato', periodo=periodo, estado='Confirmado', user=session['user'], active=False).put()
     from stock import Stock
     stock = Stock(data=record['data'], numero=base_models.Sequence().get_sequence('stock'), num_doc=record['numero'], descricao='Nossa Guia de Produção', documento='prato', periodo=periodo, estado='Confirmado', user=session['user']).put()
     Prato(**record).put()
     from linha_prato import LinhaPrato
     record_lines = LinhaPrato(where="prato = '{prato}'".format(prato=record['id'])).get()
     if record_lines:
         from linha_movimento import LinhaMovimento
         from linha_stock import LinhaStock
         from produto import Produto
         from familia_produto import FamiliaProduto
         for line in record_lines:
             # tambem depois considerar a verificação se o total está bem calculado e logs se o preço unitário for modificado
             quantidade = to_decimal(line['quantidade'])
             product = Produto().get(key=line['produto'])[0]
             conta_mercadorias = product['conta_mercadorias']
             conta_gastos = product['conta_gastos']
             taxa_iva = product['iva']
             armazem_vendas = None
             familia = FamiliaProduto().get(key=product['familia'])
             if familia:
                 familia = familia[0]
                 if familia['armazem_vendas']:
                     armazem_vendas = familia['armazem_vendas']
             descricao = product['nome']
             #total_sem_iva = line['valor_total']/(1+taxa_iva)
             #Aqui ver a contabilização
             LinhaMovimento(movimento=movimento, descricao=descricao, conta=conta_gastos, quant_debito=quantidade, debito=line['valor_total'], quant_credito=to_decimal(0), credito=to_decimal(0), user=session['user']).put()
             LinhaMovimento(movimento=movimento, descricao=descricao, conta=conta_mercadorias, quant_debito=to_decimal(0), debito=to_decimal(0), quant_credito=quantidade, credito=line['valor_total'], user=session['user']).put()
             # o movimento é no armazem cozinha e sai materia-prima entra produto acabado
             LinhaStock(stock=stock, descricao=descricao, produto=line['produto'], armazem=armazem_materia_prima, quant_saida=quantidade, quant_entrada=0.0, user=session['user']).put()
             LinhaStock(stock=stock, descricao=descricao, produto=line['produto'], armazem=armazem_produto, quant_saida=0.0, quant_entrada=quantidade, user=session['user']).put()
         return form_edit(key = key, window_id = window_id)
     else:
         return error_message('Não pode confirmar talões sem linhas de Talão! \n')
Пример #7
0
def check(hash):

    diario_id = '' [id diario]
    diario_key = '' [api key]
#diario_id='iTQGd8PuHkVCCDEiZef9'# The MISP auth key can be found on the MISP web interface under the automation section
  
    api = Diario(diario_id, diario_key)
        #Poner aca las keys que obtengas en https://diario.elevenpaths.com)

    result = api.search(hash)
    print(result.data)
    print(result.error)

    if result.error is None:
        return result.data
    else:
        res = {}
        res['prediction'] = 'E'
        return res
Пример #8
0
 def efectuar_pagamento(self, key, window_id):
     """Esta acção efectua o pagamento"""
     active = False
     record_id = key
     record = model.get(key=record_id)[0]
     record['user'] = session['user']
     record['estado'] = 'Pago'
     from terceiro import Terceiro
     terceiro = Terceiro(where="nome='Clientes Gerais'").get()[0]
     cliente = terceiro['id']
     conta_cliente = terceiro['a_receber']
     #Verifica se tem caixa aberta, se não tiver abre
     #Faz o pagamento em caixa
     from caixa import Caixa
     from linha_caixa import LinhaCaixa
     from terminal import Terminal
     terminal = Terminal(where="""name='Distribuicao'""").get(
     )  # substituir esta bosta para get_terminal
     if len(terminal) > 0:
         terminal = terminal[0]['id']
     caixa = Caixa(
         where=
         "estado = 'Aberta' AND terminal='{terminal}' AND data_inicial <= '{today}'"
         .format(terminal=terminal, today=record['data'])).get()
     if not caixa:
         caixa = Caixa(data_inicial=record['data'],
                       hora_inicial=time.strftime('%H:%M:%S'),
                       valor_inicial=0,
                       valor_final=0,
                       estado='Aberta',
                       user=session['user'],
                       vendedor=session['user'],
                       terminal=terminal).put()
     else:
         caixa = caixa[0]['id']
     from metodo_pagamento import MetodoPagamento
     metodos_pagamento = MetodoPagamento().get_options()
     first = True
     total_entregue = to_decimal('0')
     for metodo in metodos_pagamento:
         if bottle.request.forms.get(metodo[1]):
             method = to_decimal(str(bottle.request.forms.get(metodo[1])))
         else:
             method = to_decimal('0')
         if method > to_decimal('0'):
             total_entregue += to_decimal(
                 str(bottle.request.forms.get(metodo[1])))
     if total_entregue >= to_decimal(
             str(bottle.request.forms.get('total_a_pagar'))):
         for metodo in metodos_pagamento:
             if first == True:
                 default_metodo = metodo
                 first = False
             if bottle.request.forms.get(metodo[1]):
                 method = to_decimal(
                     str(bottle.request.forms.get(metodo[1])))
             else:
                 method = to_decimal('0')
             if method > to_decimal('0'):
                 linha_caixa = LinhaCaixa(
                     caixa=caixa,
                     descricao='Nossa Guia de Distribuição',
                     documento='distribuicao',
                     num_doc=record['numero'],
                     valor_documento=to_decimal(
                         str(bottle.request.forms.get('total_a_pagar'))),
                     terceiro=cliente,
                     metodo=metodo[0],
                     entrada=bottle.request.forms.get(metodo[1]),
                     saida=0,
                     active=active,
                     user=session['user']).put()
         troco = total_entregue - to_decimal(
             str(bottle.request.forms.get('total_a_pagar')))
         if troco > to_decimal('0'):
             linha_caixa = LinhaCaixa(
                 caixa=caixa,
                 descricao='Nossa Guia de Distribuição',
                 documento='distribuicao',
                 num_doc=record['numero'],
                 valor_documento=to_decimal(
                     str(bottle.request.forms.get('total_a_pagar'))),
                 terceiro=cliente,
                 metodo=default_metodo[0],
                 entrada=0,
                 saida=troco,
                 active=active,
                 user=session['user']).put()
         else:
             troco = to_decimal('0')
         record['residual'] = to_decimal(
             str(bottle.request.forms.get(
                 'total_a_pagar'))) - total_entregue + troco
         #Faz o lançamento contabilistico se tiver factura como movimento activo, se não como movimento geral
         #Vê o metodo de pagamento e lança na conta adequada
         from diario import Diario
         diario = Diario(where="tipo='caixa'").get()[0]['id']
         periodo = None
         from periodo import Periodo
         periodos = Periodo().get()
         for p in periodos:
             lista_datas = generate_dates(start_date=p['data_inicial'],
                                          end_date=p['data_final'])
             if str(format_date(record['data'])) in lista_datas:
                 periodo = p['id']
         if not periodo:
             return error_message(
                 'não existe periodo definido para a data em questão! \n')
         from movimento import Movimento
         from linha_movimento import LinhaMovimento
         movimento = Movimento(
             data=record['data'],
             numero=base_models.Sequence().get_sequence('movimento'),
             num_doc=record['numero'],
             descricao='Pagamento de Guia de Distribuição',
             diario=diario,
             documento='distribuicao',
             periodo=periodo,
             estado='Rascunho',
             user=session['user'],
             active=active).put()
         #print (record)
         Distribuicao(**record).put()
         for metodo in metodos_pagamento:
             if bottle.request.forms.get(metodo[1]):
                 method = to_decimal(
                     str(bottle.request.forms.get(metodo[1])))
             else:
                 method = to_decimal('0')
             if method > to_decimal('0'):
                 conta_pagamento = MetodoPagamento().get(
                     key=metodo[0])[0]['conta']
                 LinhaMovimento(movimento=movimento,
                                descricao='Pagamento de Talão de Venda',
                                conta=conta_pagamento,
                                quant_debito=to_decimal('0'),
                                debito=to_decimal(
                                    str(bottle.request.forms.get(
                                        metodo[1]))),
                                quant_credito=to_decimal('0'),
                                credito=to_decimal('0'),
                                user=session['user']).put()
                 LinhaMovimento(
                     movimento=movimento,
                     descricao='Pagamento de Guia de Distribuição',
                     conta=conta_cliente,
                     quant_debito=to_decimal('0'),
                     debito=to_decimal('0'),
                     quant_credito=to_decimal('0'),
                     credito=to_decimal(
                         str(bottle.request.forms.get(metodo[1]))),
                     user=session['user']).put()
         return form_edit(key='None', window_id=self.window_id)
     else:
         return error_message(
             'Segundo as Regras da Empresa não é possivel receber valores inferiores ao valor a Pagar, Torne a efectuar o pagamento por Favor!'
         )  #depois ver a possibilidade de ficar no mesmo sitio
Пример #9
0
 def Confirmar(
         self, key,
         window_id):  #não tinha self nem key eu acrescentei mas não testei
     # Gera movimento contabilistico (conta de mercadorias contra conta de gastos)
     # Gera movimento de Stock (sai de armazem por contrapartida de cliente)
     #print ('Hello!!!')
     if key in ['None', None]:
         m_action = model_action(obj=self)
         m_action.save(key=None, internal=True)
     record_id = key
     #print ('model_get begin!')
     record = model.get(key=record_id)[0]
     #print (record)
     record['user'] = session['user']
     record['estado'] = 'Confirmado'
     record['numero'] = base_models.Sequence().get_sequence('distribuicao')
     from diario import Diario
     diario = Diario(where="tipo='stock'").get()[0]['id']
     periodo = None
     from periodo import Periodo
     periodos = Periodo().get()
     for p in periodos:
         lista_datas = generate_dates(start_date=p['data_inicial'],
                                      end_date=p['data_final'])
         if str(format_date(record['data'])) in lista_datas:
             periodo = p['id']
     if not periodo:
         return error_message(
             'não existe periodo definido para o data em questão! \n')
     from armazem import Armazem
     armazem_cliente = Armazem(where="tipo='cliente'").get()[0]['id']
     #Valida se o cliente é sujeito a iva
     from terceiro import Terceiro
     sujeito_iva = Terceiro(
         where="nome='Clientes Gerais'").get()[0]['sujeito_iva']
     from movimento import Movimento
     movimento = Movimento(
         data=record['data'],
         numero=base_models.Sequence().get_sequence('movimento'),
         num_doc=record['numero'],
         descricao='Nossa Guia de distribuição',
         diario=diario,
         documento='distribuicao',
         periodo=periodo,
         estado='Confirmado',
         user=session['user']).put()
     from stock import Stock
     stock = Stock(data=record['data'],
                   numero=base_models.Sequence().get_sequence('stock'),
                   num_doc=record['numero'],
                   descricao='Nossa Guia de Distribuição',
                   documento='distribuicao',
                   periodo=periodo,
                   estado='Confirmado',
                   user=session['user']).put()
     Distribuicao(**record).put()
     from linha_distribuicao import LinhaDistribuicao
     record_lines = LinhaDistribuicao(
         where="distribuicao = '{distribuicao}'".format(
             distribuicao=record['id'])).get()
     if record_lines:
         from linha_movimento import LinhaMovimento
         from linha_stock import LinhaStock
         from produto import Produto
         from familia_produto import FamiliaProduto
         for line in record_lines:
             # aqui depois considerar a contabilização do desconto
             # tambem depois considerar a verificação se o total está bem calculado e logs se o preço unitário for modificado
             quantidade = to_decimal(line['quant_out']) - to_decimal(
                 line['quant_in'])
             product = Produto().get(key=line['produto'])[0]
             contas = Produto().get_accounts(line['produto'])
             conta_mercadorias = contas['conta_mercadorias']
             conta_gastos = contas['conta_gastos']
             if sujeito_iva:
                 taxa_iva = product['iva']
             else:
                 taxa_iva = to_decimal('0')
             armazem_vendas = None
             familia = FamiliaProduto().get(key=product['familia'])
             if familia:
                 familia = familia[0]
                 if familia['armazem_vendas']:
                     armazem_vendas = familia['armazem_vendas']
             descricao = product['nome']
             total_sem_iva = line['valor_total'] / (1 + taxa_iva)
             LinhaMovimento(movimento=movimento,
                            descricao=descricao,
                            conta=conta_gastos,
                            quant_debito=quantidade,
                            debito=line['valor_total'],
                            quant_credito=to_decimal('0'),
                            credito=to_decimal('0'),
                            user=session['user']).put()
             LinhaMovimento(movimento=movimento,
                            descricao=descricao,
                            conta=conta_mercadorias,
                            quant_debito=to_decimal('0'),
                            debito=to_decimal('0'),
                            quant_credito=quantidade,
                            credito=line['valor_total'],
                            user=session['user']).put()
             LinhaStock(stock=stock,
                        descricao=descricao,
                        produto=line['produto'],
                        armazem=armazem_vendas,
                        quant_saida=quantidade,
                        quant_entrada=to_decimal('0'),
                        user=session['user']).put()
             LinhaStock(stock=stock,
                        descricao=descricao,
                        produto=line['produto'],
                        armazem=armazem_cliente,
                        quant_saida=to_decimal('0'),
                        quant_entrada=quantidade,
                        user=session['user']).put()
         #print ('See You!!!')
         return form_edit(key=key, window_id=window_id)
     else:
         return error_message(
             'Não pode confirmar guias de Distribuição sem linhas de Distribuição! \n'
         )
Пример #10
0
 def Confirmar(self, key, window_id):
     # Gera movimento contabilistico (conta de mercadorias contra conta de gastos)
     # Gera movimento de Stock (sai de armazem por contrapartida de cliente)
     #print (key)
     if key in ['None', None]:
         key = get_actions(action='save',
                           key=None,
                           model_name=model.__model_name__,
                           internal=True)
     #print (key)
     record_id = key
     record = model.get(key=record_id)[0]
     record['user'] = session.get('user', None)
     record['estado'] = 'Confirmado'
     record['numero'] = base_models.Sequence().get_sequence('talao')
     record['residual'] = model.get_total(key=record_id)
     from diario import Diario
     diario = Diario(where="tipo='stock'").get()[0]['id']
     periodo = None
     from periodo import Periodo
     periodos = Periodo().get()
     for p in periodos:
         lista_datas = generate_dates(start_date=p['data_inicial'],
                                      end_date=p['data_final'])
         if str(format_date(record['data'])) in lista_datas:
             periodo = p['id']
     from armazem import Armazem
     armazem_cliente = Armazem(where="tipo='cliente'").get()[0]['id']
     #Valida se o cliente é sujeito a iva
     from terceiro import Terceiro
     sujeito_iva = Terceiro(where="id='{cliente}'".format(
         cliente=str(record['cliente']))).get()[0]['sujeito_iva']
     from movimento import Movimento
     movimento = Movimento(
         data=record['data'],
         numero=base_models.Sequence().get_sequence('movimento'),
         num_doc=record['numero'],
         descricao='Nosso Talão de Venda',
         diario=diario,
         documento='talao',
         periodo=periodo,
         estado='Confirmado',
         user=session.get('user', None),
         active=False).put()
     from stock import Stock
     stock = Stock(data=record['data'],
                   numero=base_models.Sequence().get_sequence('stock'),
                   num_doc=record['numero'],
                   descricao='Nosso Talão de Venda',
                   documento='talao',
                   periodo=periodo,
                   estado='Confirmado',
                   user=session.get('user', None)).put()
     Talao(**record).put()
     from linha_talao import LinhaTalao
     record_lines = LinhaTalao(where="talao = '{talao}'".format(
         talao=record['id'])).get()
     if record_lines:
         from linha_movimento import LinhaMovimento
         from linha_stock import LinhaStock
         from produto import Produto
         from familia_produto import FamiliaProduto
         for line in record_lines:
             # aqui depois considerar a contabilização do desconto
             # tambem depois considerar a verificação se o total está bem calculado e logs se o preço unitário for modificado
             quantidade = to_decimal(str(line['quantidade']))
             product = Produto().get(key=line['produto'])[0]
             contas = Produto().get_accounts(line['produto'])
             conta_mercadorias = contas['conta_mercadorias']
             conta_gastos = contas['conta_gastos']
             if sujeito_iva:
                 taxa_iva = product['iva']
             else:
                 taxa_iva = to_decimal('0')
             armazem_vendas = None
             familia = FamiliaProduto().get(key=product['familia'])
             if familia:
                 familia = familia[0]
                 if familia['armazem_vendas']:
                     armazem_vendas = familia['armazem_vendas']
             descricao = product['nome']
             total_sem_iva = line['valor_total'] / (1 + taxa_iva)
             LinhaMovimento(movimento=movimento,
                            descricao=descricao,
                            conta=conta_gastos,
                            quant_debito=quantidade,
                            debito=line['valor_total'],
                            quant_credito=to_decimal('0'),
                            credito=to_decimal('0'),
                            user=session.get('user', None)).put()
             LinhaMovimento(movimento=movimento,
                            descricao=descricao,
                            conta=conta_mercadorias,
                            quant_debito=to_decimal('0'),
                            debito=to_decimal('0'),
                            quant_credito=quantidade,
                            credito=line['valor_total'],
                            user=session.get('user', None)).put()
             LinhaStock(stock=stock,
                        descricao=descricao,
                        produto=line['produto'],
                        armazem=armazem_vendas,
                        quant_saida=quantidade,
                        quant_entrada=to_decimal('0'),
                        user=session.get('user', None)).put()
             LinhaStock(stock=stock,
                        descricao=descricao,
                        produto=line['produto'],
                        armazem=armazem_cliente,
                        quant_saida=to_decimal('0'),
                        quant_entrada=quantidade,
                        user=session.get('user', None)).put()
         return form_edit(key=key, window_id=window_id)
     else:
         return error_message(
             'Não pode confirmar talões sem linhas de Talão! \n')
Пример #11
0
 def Cancelar(self, key, window_id):
     #Estorna movimento contabilistico
     #extorna caso confirmada ou simplesmente cancela se em rascunho
     record_id = key
     record = model.get(key=record_id)[0]
     record['user'] = session['user']
     record['estado'] = 'Cancelado'
     from diario import Diario
     diario = Diario(where="tipo='vendas'").get()[0]['id']
     periodo = None
     from periodo import Periodo
     periodos = Periodo().get()
     for p in periodos:
         lista_datas = generate_dates(start_date=p['data_inicial'],
                                      end_date=p['data_final'])
         if str(format_date(str(datetime.date.today()))) in lista_datas:
             periodo = p['id']
     if not periodo:
         return error_message(
             'não existe periodo definido para o data em questão! \n')
     #Valida se o cliente é sujeito a iva
     from terceiro import Terceiro
     terceiro = Terceiro(where="id='{cliente}'".format(
         cliente=record['cliente'])).get()[0]
     sujeito_iva = terceiro['sujeito_iva']
     conta_terceiro = terceiro['a_receber']
     #Tanto no movimento como no stock eu poderei ter vários movimentos, por exemplo o movimento em si e a anulação, além disso teremos que ter reconciliação de movimentos.
     from movimento import Movimento
     movimento = Movimento(
         data=datetime.date.today(),
         numero=base_models.Sequence().get_sequence('movimento'),
         num_doc=record['numero'],
         descricao='Anulação de Nossa Factura',
         documento='leitura_tecnica',
         diario=diario,
         periodo=periodo,
         estado='Confirmado',
         user=session['user']).put()
     record['movimento'] = movimento
     LeituraTecnica(**record).put()
     from linha_leitura_tecnica import LinhaLeituraTecnica
     record_lines = LinhaLeituraTecnica(
         where="leitura_tecnica = '{factura}'".format(
             factura=record['id'])).get()
     if record_lines:
         from linha_movimento import LinhaMovimento
         from produto import Produto
         from familia_produto import FamiliaProduto
         for line in record_lines:
             # aqui depois considerar a contabilização do desconto
             quantidade = float(line['quantidade'])
             product = Produto().get(key=line['produto'])[0]
             conta_receitas = product['conta_receitas']
             if sujeito_iva:
                 taxa_iva = product['iva']
             else:
                 taxa_iva = 0.0
             descricao = product['nome']
             total_sem_iva = line['valor_total'] / (1 + taxa_iva)
             LinhaMovimento(movimento=movimento,
                            descricao=descricao,
                            conta=conta_receitas,
                            quant_debito=quantidade,
                            debito=total_sem_iva,
                            quant_credito=0.0,
                            credito=0.0,
                            user=session['user']).put()
             LinhaMovimento(movimento=movimento,
                            descricao=descricao,
                            conta=conta_terceiro,
                            quant_debito=0.0,
                            debito=0.0,
                            quant_credito=quantidade,
                            credito=total_sem_iva,
                            user=session['user']).put()
         return form_edit(key=key, window_id=window_id)
Пример #12
0
 def Confirmar(self, key, window_id):
     # Gera movimento contabilistico (conta de receitas contra conta de terceiros)
     if key == 'None':
         #Grava o registo se ainda não estiver guardado
         key = get_actions(request=bottle.request,
                           action='save',
                           key=None,
                           model_name=model.__model_name__,
                           title=model.__title__,
                           name=model.__name__,
                           internal=True)
     record_id = key
     record = model.get(key=record_id)[0]
     record['user'] = session['user']
     record['estado'] = 'Confirmado'
     record['numero'] = base_models.Sequence().get_sequence(
         'leitura_tecnica')
     from diario import Diario
     diario = Diario(where="tipo='vendas'").get()[0]['id']
     periodo = None
     from periodo import Periodo
     periodos = Periodo().get()
     for p in periodos:
         lista_datas = generate_dates(start_date=p['data_inicial'],
                                      end_date=p['data_final'])
         if str(format_date(record['data'])) in lista_datas:
             periodo = p['id']
     if not periodo:
         return error_message(
             'não existe periodo definido para a data em questão! \n')
     #Valida se o cliente é sujeito a iva
     from terceiro import Terceiro
     terceiro = Terceiro(where="id='{cliente}'".format(
         cliente=record['cliente'])).get()[0]
     sujeito_iva = terceiro['sujeito_iva']
     conta_terceiro = terceiro['a_receber']
     from movimento import Movimento
     movimento = Movimento(
         data=record['data'],
         numero=base_models.Sequence().get_sequence('movimento'),
         num_doc=record['numero'],
         descricao='Nossa Factura',
         diario=diario,
         documento='leitura_tecnica',
         periodo=periodo,
         estado='Confirmado',
         user=session['user']).put()
     record['movimento'] = movimento
     LeituraTecnica(**record).put()
     from linha_leitura_tecnica import LinhaLeituraTecnica
     record_lines = LinhaLeituraTecnica(
         where="leitura_tecnica = '{factura}'".format(
             factura=record['id'])).get()
     if record_lines:
         from linha_movimento import LinhaMovimento
         from produto import Produto
         from familia_produto import FamiliaProduto
         for line in record_lines:
             # aqui depois considerar a contabilização do desconto
             quantidade = float(line['quantidade'])
             product = Produto().get(key=line['produto'])[0]
             conta_mercadorias = product['conta_receitas']
             if sujeito_iva:
                 taxa_iva = product['iva']
             else:
                 taxa_iva = 0.0
             #familia = FamiliaProduto().get(key=product['familia'])[1][0]
             descricao = product['nome']
             total_sem_iva = line['valor_total'] / (1 + taxa_iva)
             LinhaMovimento(movimento=movimento,
                            descricao=descricao,
                            conta=conta_terceiro,
                            quant_debito=quantidade,
                            debito=total_sem_iva,
                            quant_credito=0.0,
                            credito=0.0,
                            user=session['user']).put()
             LinhaMovimento(movimento=movimento,
                            descricao=descricao,
                            conta=conta_receitas,
                            quant_debito=0.0,
                            debito=0.0,
                            quant_credito=quantidade,
                            credito=total_sem_iva,
                            user=session['user']).put()
         return form_edit(key=key, window_id=window_id)
     else:
         return error_message(
             'Não pode confirmar facturas sem linhas de factura! \n')
class DiarioAnalyzer(Analyzer):
    def __init__(self):
        Analyzer.__init__(self)
        self.service = self.get_param('config.service', None,
                                      'Service parameter is missing')
        self.client_id = self.get_param('config.client_id', None,
                                        'Missing Client ID')
        self.secret = self.get_param('config.secret', None, 'Missing Secret')
        self.polling_interval = self.get_param('config.polling_interval', 60)
        self.api = Diario(self.client_id, self.secret)

    _predictions = {
        "M": "Malware",
        "G": "Goodware",
        "NM": "No Macros present",  # Only applies to office documents
        "U": "Unknown"
    }

    _stages = {
        "A": "Analyzed",
        "Q": "Queued",
        "P": "Processing",
        "F": "Failed"
    }

    def check_response(self, document_hash):
        response = self.api.search(document_hash)
        if response.error:
            if response.error.code == 413:
                time.sleep(self.polling_interval)
                return self.check_response(document_hash)
            elif response.error.code in (406, 409):
                return dict(message=response.error.message)
            else:
                self.error(response.error)
        if response.data["status"] in ("P", "Q"):
            time.sleep(self.polling_interval)
            return self.check_response(document_hash)
        elif response.data["status"] == "F":
            self.error(response.data)

        data = response.data
        data["prediction"] = self._predictions.get(data["prediction"])
        data["status"] = self._stages.get(data["status"])
        return dict(data)

    def summary(self, raw):
        taxonomies = []
        level = "info"
        namespace = "Diario"
        predicate = "GetReport"
        value = "Not Found"

        if self.service == "scan":
            predicate = "Scan"

        verdicts = {
            "Goodware": "safe",
            "Malware": "malicious",
            "Unknown": "suspicious",
            "No Macros present": "info",
        }

        if "sha256" in raw:
            value = raw["prediction"]
            level = verdicts.get(value)

        taxonomies.append(
            self.build_taxonomy(level, namespace, predicate, value))
        return {"taxonomies": taxonomies}

    def run(self):

        if self.service == "scan":
            if self.data_type == "file":
                filepath = self.get_param('file', None, 'File is missing')
                response = self.api.upload(filepath)
                if response.error:
                    self.error(response.error["message"])
                data = response.data.get("hash", None)
            else:
                self.error("Data type has to be a File")
                return

        elif self.service == "get":
            # If we want to only get the report of a file we get the
            # SHA256 hash and check if there is a report
            if self.data_type == "file":
                filepath = self.get_param('file', None, 'File is missing')
                sha256_hash = hashlib.sha256()
                with open(filepath, "rb") as f:
                    # Read and update hash string value in blocks of 4K
                    for byte_block in iter(lambda: f.read(4096), b""):
                        sha256_hash.update(byte_block)
                data = sha256_hash.hexdigest()
            elif self.data_type == "hash":
                data = self.get_param('data', None, 'Data is missing')
            else:
                self.error("Data type has to be a File or Hash")
                return

        else:
            self.error("Service doesn't exists")
            return

        self.report(self.check_response(data))
Пример #14
0
    # Crea il symlink
    sorgente = os.path.abspath(__file__)
    os.symlink(sorgente, symlink)

    # Rende il file python eseguibile (spero)
    st = os.stat(sorgente)
    os.chmod(sorgente, st.st_mode | stat.S_IEXEC)

    # Informa l'utente che da questo momento in poi può
    # utilizzare il symlink per lanciare il programma
    print("Creato un symlink al programma su {}".format(symlink))
    print("Da questo momento in poi puoi richiamare")
    print("il programma semplicemente utilizzando il comando:")
    print("")
    print("diario <tag1> [<tag2> <tag3> ...]")

diario = Diario()

# Salta il primo elemento dell'array
# che tanto è il nome del programma stesso
argomenti = sys.argv[1:]
if len(argomenti) > 0:
    # Se è stato passato almeno un tag, crea un nuovo file
    diario.crea(None, *argomenti)
else:
    # Altrimenti tenta di aprire l'ultimo file
    if not diario.apri_ultimo_file():
        print("Utilizzo: diario <tag1> [<tag2> <tag3> ...]".format(
            sys.argv[0]))
        quit(0)