def zerarLinha(request, valor):
    if UserPermission(request, nivel_min=1):
        servico.dxm.write_multiple_registers(108 + valor * 13, [1])
        sleep(3)
        return HttpResponse('ok')
    else:
        return HttpResponse('você não possui permissão')
def emula(request, valor):
    if UserPermission(request, nivel_min=1):
        servico.dxm.write_multiple_registers(88, [valor])
        sleep(2)
        return HttpResponse('ok')
    else:
        return HttpResponse('erro')
def get_linha(request, id):
    if UserPermission(request, 3):
        l = servico.oee.linhas[id]
        ret = f'{{\"nome\":\"{l.nome}\",\"estado\":\"{l.estado}\",\"oee\":{l.oee},\"dis\":{l.dis},\"q\":{l.q},\"per\":{l.per}, \"t_prod\":{l.t_prod},\"t_par\":{l.t_par},\"t_p_prog\":{l.t_p_prog},\"cont_in\":{l.cont_in},\"cont_out\":{l.cont_out},\"vel_atu\":{l.vel_atu},\"vel_esp\":{l.vel_esp}}}'
        return HttpResponse(ret)
    else:
        return HttpResponse('falha')
def relatorio(request, inis, fims, valor):
    if UserPermission(request, nivel_min=2):
        ini = datetime(int(inis[0:4]), int(inis[5:7]), int(inis[8:10]),
                       int(inis[11:13]), int(inis[14:16]), 0)
        fim = datetime(int(fims[0:4]), int(fims[5:7]), int(fims[8:10]),
                       int(fims[11:13]), int(fims[14:16]), 0)
        dado = Hist.objects.filter(
            Q(linha__exact=valor) & Q(time__gt=ini)
            & Q(time__lt=fim)).order_by('time')
        arquiv = f"{servico.oee.linhas[valor].nome};iniciada em :;{ini}; terminado em :; {fim}\n"
        arquiv = f"{arquiv}hora;OEE;Disponibilidade;Qualidade;Preformance;Rodando;Parado;Produzido;ruins/bons;velocidade\n"
        for h in dado:
            hr = h.time.hour - 5
            if hr < 0:
                hr += 23
            m = h.time.minute
            y = h.time.year
            mh = h.time.month
            d = h.time.day
            arquiv = f"{arquiv}{d}/{mh}/{y}  {hr}:{m};{h.oee}%;{h.dis}%;{h.q}%;{h.per}%;{int(h.t_prod/60)}:{h.t_prod%60};{int(h.t_par/60)}:{h.t_par%60};{h.bons};{h.ruins_total};{h.vel_atu}p/m\n"
        response = HttpResponse(arquiv, content_type=f'text/csv')
        response[
            'Content-Disposition'] = f'attachment; filename="relatorio.csv"'
        return response
    else:
        return HttpResponse('falha')
def fileDelete(request, file):
    if UserPermission(request, nivel_min=1):
        dxm = Protocolo(servico.oee.DXM_Endress)
        if dxm.deleteFile(file):
            return HttpResponse('ok')
        else:
            return HttpResponse('falha')
    else:
        return HttpResponse('falha')
def sendXml(request):
    if UserPermission(request, nivel_min=1):
        dxm = Protocolo(servico.oee.DXM_Endress)
        if dxm.enviaArquivo('DXM_OEE.xml', ''):
            return HttpResponse('ok')
        else:
            return HttpResponse('falha')
    else:
        return HttpResponse('falha')
def destravar(request):
    if UserPermission(request, nivel_min=1):
        dxm = Protocolo(servico.oee.DXM_Endress)
        if dxm.destravar():
            return HttpResponse('ok')
        else:
            return HttpResponse('falha')
    else:
        return HttpResponse('falha')
def getRelogio(request):
    if UserPermission(request, nivel_min=1):
        dxm = Protocolo(servico.oee.DXM_Endress)
        ret = dxm.getRelogio()
        return HttpResponse(
            f'{ret.day}/{ret.month}/{ret.year}  {ret.hour}:{ret.minute}:{ret.second}'
        )
    else:
        return HttpResponse('falha')
def conjunto_linhas(request):
    if UserPermission(request, 3):
        dado = ''
        for l in servico.oee.linhas:
            dado = f'{dado}{{\"nome\":\"{l.nome}\",\"estado\":\"{l.estado}\",\"oee\":{l.oee}}},'
        dado = dado[0:len(dado) - 1]
        return HttpResponse('[' + dado + ']')
    else:
        return HttpResponse('falha')
def set_t_p_prog(request, index, valor):
    if UserPermission(request, 1):
        try:
            servico.dxm.write_multiple_registers(110 + index * 13, [valor])
            return HttpResponse('ok')
        except Exception as ex:
            return HttpResponse(str(ex))
    else:
        return HttpResponse('falha')
def fileDownload(request, file: str):
    if UserPermission(request, nivel_min=1):
        dxm = Protocolo(servico.oee.DXM_Endress)
        tipo = str(file.split('.')[1])
        arquiv = dxm.getFile(file)
        response = HttpResponse(arquiv, content_type=f'text/{tipo}')
        response['Content-Disposition'] = f'attachment; filename="{file}"'
        return response
    else:
        return HttpResponse('falha')
def setRelogio(request):
    if UserPermission(request, nivel_min=1):
        dxm = Protocolo(servico.oee.DXM_Endress)
        ret = dxm.setRelogio()
        if ret == True:
            return HttpResponse('ok')
        else:
            return HttpResponse('falha')
    else:
        return HttpResponse('falha')
def online(request):
    if UserPermission(request, nivel_min=3):
        if servico.statusTcp.find('OnLine') >= 0:
            return HttpResponse(
                f'{{\"dxm_online\":\"True\",\"script\":\"{servico.statusScript}\"}}'
            )
        else:
            return HttpResponse(
                f'{{\"dxm_online\":\"False\",\"script\":\"{servico.statusScript}\"}}'
            )
    else:
        return HttpResponse('falha')
def baixaLog(request):
    if UserPermission(request, nivel_min=1):
        dxm = Protocolo(servico.oee.DXM_Endress)
        if servico.statusTcp.find('OnLine') >= 0:
            try:
                if dxm.fileExist('sbfile1.dat') == False:
                    return HttpResponse('falha - Nenhum log existente no dxm')
                dxm.destravar()
                arqui = dxm.getFile('sbfile1.dat')
                dados = ''
                for x in arqui:
                    dados = f'{dados}{x}'
                dados = dados.replace('\n', ',')
                dados = '[' + dados + ']'
                dados = dados.replace('\t', '')
                dados = dados.replace(':,', ':0,')
                dados = dados.replace('\'', '')
                dados = dados.replace('\n', '')
                dados = dados.replace(',}', '}')
                dados = dados.replace(',]', ']')
                arm = open(f'file.dat', 'w')
                arm.write(dados.replace(',{', ',\n{'))
                arm.close()
                j = json.loads(dados)
                banco = []
                for x in j:
                    banco.append(dict_to_obj(x))
                for x in banco:
                    calender = datetime.strptime(x.time, '%Y-%m-%d %H:%M:%S')
                    H = Hist(linha=x.id,
                             time=calender - timedelta(hours=3),
                             oee=x.oee,
                             dis=x.dis,
                             q=x.q,
                             per=x.per,
                             vel_atu=x.vel_atu,
                             bons=x.bons,
                             ruins_total=x.ruins_total,
                             t_par=x.t_par,
                             t_prod=x.t_prod)
                    H.save()
                    print(f'salvei o historico {H.id}')
                dxm.deleteFile('sbfile1.dat')
                dxm.travar()
                return HttpResponse('ok')
            except Exception as ex:
                return HttpResponse(f'falha - {str(ex)}')
        else:
            return HttpResponse('falha - DXM esta desconectado')
    else:
        return HttpResponse(
            'falha - Você não permissão para executar esta ação')