예제 #1
0
def insertTestsAccToProtocol(idres):
    """
    Вставляет в результат пустые результаты испытаний, согласно протоколу
    @idres - айди результата
    """
    resultt = bmr.getResultFromDatabase(idres)
    if resultt[0] == None:
        return 1, "Ошибка получения результата из БД idres=" + str(idres)

    result = resultt[0]
    protocolt = bck.getProtocolFromDatabaseParams(result.model, result.typeOfTest)

    if protocolt[0] == None:
        return 2, "Ошибка получения протокола из БД idres=" + protocolt[1]

    protocol = protocolt[0]

    for procedurekey in protocol.procedures:  # для каждой процедуры из списка оных в протоколе
        if (
            not procedurekey in result.proceduresResults.keys()
        ):  # если процедура прописана в протоколе, но не имеется  в результате
            protocolitem = protocol.procedures[procedurekey]  # получаем описание процедуры в протоколе
            newrp = resultsOfProcedure()  # создаём объект результата процедуры
            newrp.number = procedurekey  # копируем номер
            newrp.hasPassedProcedure = False  # устанавливаем флаг, успешна ли процедура
            newrp.values1 = dict()  # объявляем значения словарём

            newrp.values_common = dict()  # словарь название параметра-значение для общих величин

            # заполнение значений у общих величин
            for possibleres in protocolitem.listOfPossibleResultsCommon:
                newrp.values_common[possibleres] = 0

            # заполнение значений у поканальных величин
            for channel in protocolitem.normal_values:  # для каждого канала
                newrp.values1[channel] = dict()  # объявляем  словарём
                for possibleres in protocolitem.listOfPossibleResults:  # и для каждого возможного  результата
                    newrp.values1[channel][possibleres] = 0  # впихиваем нулевое значение

            result.proceduresResults[procedurekey] = newrp  # теперь вгоняем новый результат в процидурку
    return bmr.writeResultToDatabase(result, idres)  # и пишем в базу!
예제 #2
0
reslist=list()
for resid in residlist:
    res = bmr.getResultFromDatabase(resid)  # Получить результат из базы данных
    if res[0]==None:
        errlog+="Ошибка: такого результата нет в базе данных"
    else:
        reslist.append(res[0])

if len(reslist)==0: #если список результатов пуст, это из-за всяких ошибок может быть
    closeAsError ("Список результатов пуст")

for result in reslist: #проверяем список результатов на однородность, то есть все результаты должны быть от одного протокола
    if not result.model==reslist[0].model or not result.typeOfTest==reslist[0].typeOfTest:

        closeAsError ("Ошибка: в выборке присутствуют результаты от разных протоколов")
prot = bck.getProtocolFromDatabaseParams (reslist[0].model, reslist[0].typeOfTest)
if prot[0]==None:
     closeAsError("Ошибка: в базе данных нет протокола под такой результат")


protocol=prot[0]

if not protocol.dictOfReportFormParameters:
    closeAsError("Список возможных параметров отчётов у данного протокола совершенно пуст")


htmg.out(list(protocol.dictOfReportFormParameters.keys()).__str__())



예제 #3
0
def process():
    global watchfolder, putfolder



    #получить список файлов
    files = os.listdir(watchfolder)
    textfilter = lambda x: x.endswith('.TXT') or x.endswith('.txt')
    xmlfilter=lambda x: x.endswith('.XML') or x.endswith('.xml')
    #textfiles = list(filter(lambda x: x.endswith('.TXT') or x.endswith('.txt'), files))
    report="[INFO] Process {0} {1}\n".format(watchfolder, putfolder)

    for name in files:

        #print (prs.parseToResult (watchfolder+name))
        #отсылка к бакенду - добавление результата в базу данных
        report+=name + "\n"
        st = datetime.datetime.fromtimestamp(time.time()).strftime('%Y-%m-%d %H:%M:%S')

        rs=None,'Invalid file extension'
        if textfilter(name):
            rs=prs.basicParserTextFormFilename (watchfolder+name)
        elif xmlfilter (name):
            rs = xprs.parceXml(watchfolder+name)

        if rs[0]==None:
            report+="[ERROR] "+st+" Не удалось распарсить результат имя файла="+name+"\n"+"Потому что "+rs[1]
            continue

        #сперва попробуем перенести файл
        #Из теперь неизвестных соображений, сначала пытаемся перенести в другую папку, а потом записать в базу данных
        mvs=1
        try:
            shutil.move(watchfolder+name, putfolder)
        except BaseException:
            log ("[ERROR]"+st+"Проблема при перемещении файла, возможно дублирование отчёта")
            print ("[ERROR]"+st+"Проблема при перемещении файла, возможно дублирование отчёта")
            mvs=0
        if mvs:
            wr=bmr.writeResultToDatabase(rs[0]);
            if wr:
                report+="[ERROR] "+st+" При записи в БД произошла ошибка код="+str(wr)+"\n"
            else:
                report+="\t"+st+"Запись в БД произошла успешно "+name+"\n"
                #код поиска подходящего протокола, если не найдёт - то запишет и в протокол


                if bck.getProtocolFromDatabaseParams (rs[0].model, rs[0].typeOfTest)[0]==None: #если нет протокола такого в базе данных
                    if textfilter (name):
                        ap = prs.basicParserTextFormFilename (putfolder+name, type='protocol')
                    elif xmlfilter (name):
                        with open(putfolder+name, 'rt') as file:
                            ap = xprs.parceXml(file,'prc') #распарсили протокол

                    if ap[0] is not None:
                        err=bck.writeProtocolToDatabase(ap[0], idprotocol=None)
                        if err:
                            log ("[ERROR]"+st+"Проблема при добавлении протокола в базу данных на этапе включения в БД {0}".format(err))
                    else:
                        log ("[ERROR]"+st+"Проблема при добавлении протокола в базу данных на этапе парсинга {0}".format(ap[1]))

    log (report)
    print (report)
예제 #4
0
def outreportsgroup (residlist, form, name):
    """
    residlist - список айди результатов
    form - дескриптор принятых параметрво формы
    name - имя набора парметров отчёта
    """
    residlist.sort()

    res=str()
    err=str()

    errlog=str()

    reslist=list()
    for resid in residlist:
        res = bmr.getResultFromDatabase(resid)  # Получить результат из базы данных
        if res[0]==None:
            errlog+="Ошибка: такого результата нет в базе данных"
        else:
            reslist.append(res[0])

    if len(reslist)==0: #если список результатов пуст, это из-за всяких ошибок может быть
        return errlog



    for result in reslist: #проверяем список результатов на однородность, то есть все результаты должны быть от одного протокола
        if not result.model==reslist[0].model or not result.typeOfTest==reslist[0].typeOfTest:
            errlog+="Ошибка: в выборке присутствуют результаты от разных протоколов"
            return  errlog


    prot = bck.getProtocolFromDatabaseParams (reslist[0].model, reslist[0].typeOfTest)
    if prot[0]==None:
         errlog+="Ошибка: в базе данных нет протокола под такой результат"
         return errlog

    protocol=prot[0]



    step=int(form.getfirst("field_step", ""))
    now = datetime.datetime.now()
    typeofthetest=form.getfirst("field_testtype", "")
    field_repformnumber = form.getfirst("field_repformnumber", "")


    res="<div align='center'> <p>ПРОТОКОЛ №{0} от {1}</p>".format (field_repformnumber, now.strftime("%Y-%m-%d"))



    #res="<div align='center'> <p>ПРОТОКОЛ №   от "+now.strftime("%Y-%m-%d")+"</p>  "


    res+="<p>"+typeofthetest+"</p>"
    res+="<p>"+result.model+"</p>"




    for i in range (0, len(reslist), step):
        outr=outreport(reslist[i:i+step], form, protocol, name)
        res+=outr[0]#+"<br style='page-break-after: always'> "

    res+=generateOneReportFooter (form, reslist)

    return res + err
예제 #5
0
def outEditFormForResult(result: AResult, id):

    """
    Выводит форму отображения и редакции результата.
    в этой версии выводит вместе с данными из протокола,  такими, как название и такое прочее
    """

    protocolt = bck.getProtocolFromDatabaseParams(result.model, result.typeOfTest)

    if protocolt[0] == None:
        htmg.out(
            htmg.throwError(
                "FR_resultedit.py", "Ошибка при поиске протокола, соответствующего данному результату " + protocolt[1]
            )
        )
        return outEditFormForResultOld(result, id)

    protocol = protocolt[0]

    res = str()
    res += "<h1>Правка результата</h1>"
    # вывод справочной части
    st = "<b>{0}<b>: {1}<br/>\n"
    res += st.format("Модель", result.model)
    res += st.format("Вид теста", result.typeOfTest)
    res += st.format("Оператор", result.operator)
    res += st.format("Дата и время теста", result.testDateTime)
    res += st.format("Номер изделия", str(result.numOfProduct))
    res += st.format("Номер партии", str(result.numOfBatch))
    res += st.format("Прошёл ли тест", str(result.hasPassedTest))
    # вывод таблицы результатов
    res += "<br/><br/>"
    res += "<form action='FR_resultedit.py?id={0}&saveid={1}' method='post'> <table border=1>\n".format(
        str(id), str(id)
    )
    res += """
    <tr>
    <th>Название испытания</th>
    <th>Режим испытания</th>
    <th>Нормы на испытание</th>
    <th>Пройдено ли испытание</th>
    <th>Результаты испытания</th>

    <th>Удаление</th>
    </tr>"""

    klist = list(result.proceduresResults.keys())
    klist.sort()

    for key in klist:

        # for key, val in result.proceduresResults.items():
        val = result.proceduresResults[key]
        res += "<tr>\n"
        interactive_form = outResultsOfProcedureForm(val, key)
        delbtn = (
            " <input type='button' onclick=\"destroy('Вы уверенно хотите удалить данный результат?', 'FR_resultedit.py?id="
            + str(id)
            + "&delid="
            + str(key)
            + "' ) \"   value='Удаление'  >"
        )
        res += """{0} <td> {1} </td> <td> {2} </td> <td> {3} </td>
        """.format(
            protocol.procedures[key].toHTML(0),
            outfilledformforpassed(key, val.hasPassedProcedure),
            interactive_form,
            delbtn,
        )

        # {True: "Пройдено", False: "Не пройдено"}[val.hasPassedProcedure]

        res += "</tr>\n"
    res += "</table> <br/> <input type='submit' value='Сохранить'>    </form>"
    res += "<a href='FR_resultedit.py?id={0}&magic={1}'> Добавить надостающие испытания в результат из протокола </a>".format(
        id, id
    )
    return res