def outFilledForm (procid, name): """ Запускает ядерную функцию, предварительно вынув протокол из базы """ out = str() proc=bck.getProtocolFromDatabase(procid) # Возвращает объект испытания if proc[0]==None: out+=htmg.throwError("FR_ReportParametersEdit", proc[1]) return out else: return "<form method = 'POST' action = 'FR_ReportParametersEdit.py?id={0}&save=1 ' >".format (str(procid))+\ outFilledFormCore(proc[0], name, procid) + \ "<input type='submit' value='Сохранить'> "+"</form>"
def outNormalForm (id): """ Выводит пустую форму. @id - айди протокола, в который испытание надо будет добавить """ #получить протокол из базы #оттуда взять список каналов #на основе этого списка пстроить форму protocol = bck.getProtocolFromDatabase(id)[0]; if protocol==None: return htmg.throwError("FRtestedit", "Нет такого протокола, испытание которого намереваемся править") listchannels = protocol.channelname out=" <script> \n add_forms_to_table("+listchannels.__str__()+" ); </script>" return out
def outFilledFormResult(resultsOfProcedure): """ Выводит заполненную форму @resultsOfProcedure - результат процедуры, объект """ out=outNormalForm(id) proc=bck.getTestFromProtocol (id, procid) # Возвращает объект испытания if proc==None: out+=htmg.throwError("FRtestedit", "Нет такого испытания в протоколе, которое мы намереваемся править") return out out+="\n<script>\n"; # number=int() # номер порядковый # name="" # имя процедуры # mode_common=dict() # словарь общих режимов имя-значение # mode_channel=dict(dict()) # словарь словарей режимов по каналам (имя канала - имя параметра - значение) # normal_values=dict(dict()) # словарь словарей значений нормативов название канала-название параметра-строка больше-меньше (значение параметра) # listOfPossibleResults=list() # список полей результатов, каковые должны быть отражены в протоколе out+="var name=\""+proc.name+"\";\n" out+="var pars="+proc.listOfPossibleResults.__str__()+";\n" out+="var mode_common="+proc.mode_common.__str__()+";\n" out+="var mode_channel="+proc.mode_channel.__str__()+";\n" out+="var normal_values="+proc.normal_values.__str__()+";\n" out+=""" fillListform(pars, 'pars'); fillDictForm (mode_common, 'mode_common'); fillDict2DictForm (mode_channel, 'mode_channel'); fillDict2DictForm (normal_values, 'normal_values'); setname(name, 'name'); """ out+="</script>\n"; return out
def generateHTMLOLD (resultslist:list, protocol:AProtocol, form): """ @resultslist список результатов @protocol протокол Генерирует тело таблицы """ if (resultslist == None): htmg.throwError("makereports", "Ошибка, None как список резльутатов") return "" if (protocol == None): htmg.throwError("makereports", "Ошибка, None как протокол") return "" if (resultslist.__len__==0): htmg.throwError("makereports", "Нет результатов в списке!") return "" res=generageHTMLProtocolHeader(resultslist.__len__(), resultslist[0], form) #res+=generageHTMLProtocolHeader(resultslist[0]) #resultslist - это список результатов. Результатов всегда список, тогда как протокол - один #таблица пошла #Здесь можно напистаьпроверку на соответствие результатов протоколу for i in protocol.procedures.keys(): p=protocol.procedures[i] res+="<tr>"+p.toHTML(out3=0) for k in resultslist: if i in k.proceduresResults.keys(): res+="<td>{0}</td>".format(k.proceduresResults[i].toHTML()) else: res+="<td> </td>" res+="</tr>" #res+= """<tr> {0} <td> </td> <td> </td> <td> </td> </tr> """.format(p.toHTML()) res += htmg.generateHTMLFooterRep() return res
#у этой страницы могут быть три параметра - id, то есть айди протокола, есть всегда и может быть idtest - айди испытания #ещё параметр saveid - тогда значит надо сохранить (т. е. добавить или перезаписать) введённое испытание form = cgi.FieldStorage() if "saveid" in form: htmg.out ("Content-Type: text/html;charset=utf-8\n\n") htmg.out(writeTestFromInputParameters(form)) exit(0) #вызвать сохраение данных и выйти из скрипта! if "id" not in form: htmg.out(htmg.generateHTMLMetaHeader()) htmg.out(htmg.throwError("FR_oneresultedit.py", "Не получен ID результата")) htmg.out(htmg.generateHTMLFooter()) exit(0) #а можно ли вообще так выходить из cgi? id=int(form.getfirst("id", "")) htmg.out(outGeneral(id)) if "testedit" in form: testedit=int(form.getfirst("testedit", "")) htmg.out(outFilledForm (id, testedit)) else: htmg.out(outNormalForm (id)) htmg.out(htmg.generateHTMLFooter())
prot.dictOfReportFormParameters[name]=rfp #либо создаёт, либо перезаписывает параметры процедуры под таким названием return bck.writeProtocolToDatabase(prot, id) form = cgi.FieldStorage() htmg.out(htmg.generateHTMLMetaHeader()) if "id" not in form: htmg.out(htmg.throwError("FR_ReportParametersEdit.py", "Не получен ID протокола")) else: id=int(form.getfirst("id", "")) if "save" in form: #запрос на сохранение errcode=saveCameData(form) #сохранение if errcode: #если ошибка htmg.out(htmg.throwError("FR_ReportParametersEdit.py", "Ошибка при сохранении {0}".format('Не задано имя набора параметров' if errcode==2 else '') )) htmg.out("<br/><a href=\'FRprotocolViewEdit.py?id={0}\'>Вернуться к протоколу</a>".format(id)) htmg.out(htmg.generateHTMLFooter()) exit(0)
#у этой страницы могут быть три параметра - id, то есть айди протокола, есть всегда и может быть idtest - айди испытания #ещё параметр saveid - тогда значит надо сохранить (т. е. добавить или перезаписать) введённое испытание form = cgi.FieldStorage() if "saveid" in form: #если предлагается сохранить испытание в протокол. saveid - идентификатор протокола. htmg.out ("Content-Type: text/html;charset=utf-8\n\n") htmg.out(writeTestFromInputParameters(form)) exit(0) #вызвать сохраение данных и выйти из скрипта! if "id" not in form: htmg.out(htmg.generateHTMLMetaHeader()) htmg.out(htmg.throwError("FRtestedit.py", "Не получен ID протокола")) htmg.out(htmg.generateHTMLFooter()) exit(0) #а можно ли вообще так выходить из cgi? id=int(form.getfirst("id", "")) if "testedit" in form: testedit=int(form.getfirst("testedit", "")) htmg.out(outFilledForm (id, testedit)) else: htmg.out(outGeneral(id)) htmg.out(outNormalForm (id)) htmg.out(htmg.generateHTMLFooter())
def generateHTML (resultslist:list, protocol:AProtocol, form, name=None): """ @resultslist список результатов @protocol протокол @name - имя набора параметров отчёта Генерирует тело таблицы """ if (resultslist == None): htmg.throwError("makereports", "Ошибка, None как список резльутатов") return "" if (protocol == None): htmg.throwError("makereports", "Ошибка, None как протокол") return "" if (resultslist.__len__==0): htmg.throwError("makereports", "Нет результатов в списке!") return "" #отсортируем выводимые по серийничку resultslist.sort(key=sortResultsBySerial) res=generageHTMLProtocolHeader(resultslist.__len__(), resultslist[0], form, resultslist) #res+=generageHTMLProtocolHeader(resultslist[0]) #resultslist - это список результатов. Результатов всегда список, тогда как протокол - один #таблица пошла #Здесь можно напистаьпроверку на соответствие результатов протоколу #ReportFormParameters # try: # rfp=protocol.dictOfReportFormParameters[name] # except BaseException: # rfp=None #rfp - ReportFormParameters for i in protocol.procedures.keys(): p=protocol.procedures[i] prfp=None try: prfp=protocol.dictOfReportFormParameters[name].dictOfProceduresParameters[i] except BaseException: prfp=None #получили ProcedureReportFormParameters, если он есть res+="<tr style='page-break-inside: avoid' >"+p.toHTML(out3=0, prfp=prfp) for k in resultslist: if i in k.proceduresResults.keys(): res+="<td>{0}</td>".format(k.proceduresResults[i].toHTML(prfp)) else: res+="<td> </td>" res+="</tr>" #res+= """<tr> {0} <td> </td> <td> </td> <td> </td> </tr> """.format(p.toHTML()) res += """ </tbody> </table>""" return res
def view_protocol_by_id(id): gotval = bck.getProtocolFromDatabase (id) if gotval[0]==None: return htmg.throwError("FRProtocolViewEdit", "В базе данных нет такого протокола id="+str(id)) return make_html_view_edit_protocol(id, gotval[0], gotval[1], gotval[2]) + outReportsParametersCombo (gotval[0], id)
#out("Content-Type: text/html;charset=utf-8\n\n") #out("<html><head>\n\n") #out("</head><body>\n\n") #узнаём, есть ли айди в параметрах form = cgi.FieldStorage() #TODO: вызов добавления результата по протоколу htmg.out (htmg.generateHTMLMetaHeader("Обзор протокола")) if "id" not in form: htmg.out (htmg.throwError("FRprotocolViewEdit.py", "Ошибка: не предоставлен id протокола", errortype=None)) else: id=int(form.getfirst("id", "")) if ("delid") in form: delid=int(form.getfirst("delid", "")) bck.delTestFromProtocol(id, delid) htmg.out("Испытание удалено успешно!"+str(id)+" "+str(delid)) htmg.out("<script> document.location.replace('FRprotocolViewEdit.py?id="+str(id)+"');</script>") htmg.out (view_protocol_by_id(id)) htmg.out(htmg.generateHTMLFooter()) htmg.out(htmg.generateHTMLFooter())
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
else: return 5, "ошибка при записи значения (общего), возможно значение не задано" wrtdb = bmr.writeResultToDatabase(result, idresult=saveid) if wrtdb: return 4, "Ошибка записи р. в БД " + str(wrtdb) # inpstr="<input type='text' name='{0}' value='{1}' >".format(str(prefix)+"_"+channel+"_"+parameter, str(rop.values1[channel][parameter])) return 0, "" # признак успешности операции htmg.out(htmg.generateHTMLMetaHeader("Правка результата") + "<br/><br/>") form = cgi.FieldStorage() if "id" not in form: htmg.out(htmg.throwError("FR_resultedit.py", "Ошибка: не предоставлен id результата", errortype=None)) else: id = int(form.getfirst("id", "")) if "magic" in form: magicres = insertTestsAccToProtocol(id) if magicres: htmg.out( htmg.throwError( "FR_resultedit.py", "Ошибка при добавлении недостающих испытаний " + magicres, errortype=None ) ) if "delid" in form: # запустить сохранение delid = int(form.getfirst("delid", ""))