Example #1
0
 def updateBox(self, event=None):
     self.DBs = dbu.getDBs()
     self.dbbox['values'] = self.DBs['Database'].unique().tolist()
     self.confidence['values'] = [
         "All" if x is None else x
         for x in self.DBs['ExpertConfidence'].loc[
             self.DBs['Database'] == self.dbbox.get()].tolist()
     ]
     try:
         self.confidence.current(self.DBs['ExpertConfidence'].loc[
             self.DBs['Database'] == self.dbbox.get()].tolist().index(
                 "High"))
     except:
         self.confidence.current(self.DBs['ExpertConfidence'].loc[
             self.DBs['Database'] == self.dbbox.get()].tolist().index(None))
     self.lAll.delete(0, END)
     self.pms = dbu.getAll(Database=self.dbbox.get())
     self.pmTargets = []
     for item in sorted([
             "{}/{} ({})".format(pm.StandardName, pm.SystematicName,
                                 pm.MotifID) for pm in self.pms
             if pm.EC == self.confidence.get()
             or self.confidence.get() == "All"
     ]):
         self.lAll.insert(END, item)
Example #2
0
def get_report_score_by_cplist_paper(cplist, paper):
    query = Report.objects.filter(respondent=paper.respondent)
    if len(query) == 0:
        return None
    else:
        report = query[0]
    
    cps = []
    for cp in cplist:
        if cp.name == 'Total':
            cps.append('total')
        else:
            cps.append(cp.name)
    cps_str = ','.join(cps)
    sql = 'select %s from mc_reportdata where id=%s;' % (cps_str, report.id)
    try:
        c, con = DbUtils.cursor()
        c.execute(sql)
        ret = c.fetchone()
    finally:
        if c:
            c.close()
        if con:
            con.close() 
    if ret:
        return [score or 0 for score in ret]
    
    return None
Example #3
0
def get_brand_report_sub_score(report, sub_checkpoint_list):
    project = report.project
    report_id = report.id
    columstr = ','.join (sub_checkpoint_list)
    if project.id == constant.competition_project_id:
        columstr = columstr.replace(',B12,', ',S1,')
        columstr = columstr.replace(',B14a,', ',S2,')
        columstr = columstr.replace(',D32,', ',S3,')
        columstr = columstr.replace(',D33,', ',S4,')
        columstr = columstr.replace(',D41a,', ',S5,')
        columstr = columstr.replace(',D40a,', ',S6,')
    elif project.id == constant.current_mini_project_id:
        columstr = columstr.replace(',D63,', ',T1,')
        columstr = columstr.replace(',D40a,', ',T2,')
        columstr = columstr.replace(',G51,', ',T3,')
        
    sql = 'select %s from mc_reportdata where id=%s;' % (columstr, report_id)
    try:
        c, con = DbUtils.cursor()
        c.execute(sql)
        cur = c.fetchone()
    finally:
        if c:
            c.close()
        if con:
            con.close() 
    return cur
Example #4
0
    def removeTarget(self):
        try:
            selection = self.ltargets.curselection()
            self.ltargets.delete(selection[0])

            targets = []
            for item in self.vtargets.get():
                target = int(item[item.find("(") + 1:item.find(")")])
                targets.append(target)

            self.lparalogs.config(text='')
            paralogs = [
                x for x in dbu.getParalogs(targets,
                                           type="Order",
                                           EC=self.confidence.get(),
                                           Database=self.dbbox.get())
                if x != None
            ]
            aux = []
            if (paralogs != []):
                if (any(isinstance(i, list) for i in paralogs)):
                    paralogs = [
                        item for sublist in paralogs for item in sublist
                    ]
                for item in set(paralogs):
                    if item not in targets:
                        aux.append(item)
            self.lparalogs.config(text="Paralogs: {" + ', '.join(sorted(aux)) +
                                  "}")
        except:
            pass
Example #5
0
def add_reportdata_column(project_id):
    checkpoint_list = []
    project = Project.objects.get(id=project_id)
    sql = 'select * from mc_otherreportdata where id = 1'
    try:
        c, con = DbUtils.cursor()
        c.execute(sql)
        column_names = [d[0] for d in c.description]
        cp_list = CheckPoint.objects.filter(project=project)

        for cp in cp_list:
            if cp.name not in column_names:
                checkpoint_list.append(cp.name)

        print checkpoint_list
        for cid in checkpoint_list:
            sql = 'alter table mc_otherreportdata add column \'%s\' float;' % cid
            c.execute(sql)
            if con:
                con.commit()
    finally:
        if c:
            c.close()
        if con:
            con.close()
Example #6
0
def get_reportdata_by_paper(paper):
    cp_list = _checkpoint.get_checkpoint_list_by_project(paper.project)
    cp_str_list = ','.join([str(cp.name) for cp in cp_list])
    report = Report.objects.filter(respondent=paper.respondent)[0]
    if report:
        report_id = '%s' % report.id
        sql = 'select %(cp_str_list)s from mc_reportdata where id = %(report_id)s;' % vars()
        try:
            c, con = DbUtils.cursor()
            c.execute(sql)
            cp_score_list = c.fetchone()
        finally:
            if c:
                c.close()
            if con:
                con.close() 
        results = []
        for cp_score in cp_score_list:
            if cp_score:
                results.append(cp_score)
            else:
                results.append(u'不适用')
        return results
    else:
        return None
Example #7
0
 def get_answer(self, respondent_id):
     rid = respondent_id
     column_list = self.get_column_list()
     import DbUtils
     try:
         c, con = DbUtils.cursor()
         if len(column_list) == 2:
             sql = 'select %s,%s from survey_respondentdata where id=%s' % (column_list[0]['name'], column_list[1]['name'], respondent_id)
             c.execute(sql)
             aid, alt_open = c.fetchone()
             if not aid:
                 return (None, None)
             cid = get_alt_cid_by_id(aid)
             return (cid, alt_open)
         else:
             sql = 'select %s from survey_respondentdata where id=%s' % (column_list[0]['name'], respondent_id)
             c.execute(sql)
             aid = c.fetchone()[0]
             if not aid:
                 return (None, None)
             cid = get_alt_cid_by_id(aid)
             return (cid, '')
     finally:
             if c:
                 c.close()
             if con:
                 con.close()
Example #8
0
def auto_add_respondentdata(sender, **kwargs):
    respondent = kwargs['instance']
    created = kwargs['created']
    import DbUtils
    c, db = DbUtils.cursor()
    if created:
        import DbUtils
        try:
            c, con = DbUtils.cursor()
            c.execute('insert into survey_respondentdata (id) values(%s);' % respondent.id)
            if con:
                con.commit()
        finally:
            if c:
                c.close()
            if con:
                con.close() 
Example #9
0
def auto_add_respondentdata(sender, **kwargs):
    respondent = kwargs['instance']
    created = kwargs['created']
    import DbUtils
    c, db = DbUtils.cursor()
    if created:
        import DbUtils
        try:
            c, con = DbUtils.cursor()
            c.execute('insert into survey_respondentdata (id) values(%s);' %
                      respondent.id)
            if con:
                con.commit()
        finally:
            if c:
                c.close()
            if con:
                con.close()
Example #10
0
def get_otherreport_sub_score(report_id, project_id):
    sql = 'select %s from mc_otherreportdata where id=%s;' % (get_sub_score_column_str(project_id), report_id)
    try:
        c, con = DbUtils.cursor()
        c.execute(sql)
        cur = c.fetchone()
    finally:
        if c:
            c.close()
        if con:
            con.close() 
    return cur
Example #11
0
def get_report_sub_score(report_id):
    sql = 'select %s from mc_reportdata where id=%s;' % (get_sub_score_column_str(), report_id)
    try:
        c, con = DbUtils.cursor()
        c.execute(sql)
        ret = c.fetchone()
    finally:
        if c:
            c.close()
        if con:
            con.close() 
    return ret
Example #12
0
def calculate_paper_total_score(paper):
    #该project下检查点的选项(id,得分)字典
    cp_alt_score_dict = _alternative.get_project_cp_alt_score_dict(paper.project)
    #样卷答案字典,以resp_col为key
    respond_dict = survey_utils.get_respondentdata_dict_by_paper(paper)
    print respond_dict
    sub_cp_list = _checkpoint.get_project_sub_cp_list(paper.project)
    paper_score_dict = {}
    cp_group_id_map = {}
    cal_cp_list = []  #有效检查点
    for cp in sub_cp_list:
        value = respond_dict.get(cp.resp_col) #respondent_data,列有� 此值为alternative_id
        if value is None or value == '':
            continue
        alternative = []
        if isinstance(value, (int, long, float)):
            alternative = Alternative.objects.filter(id=value, question=cp.question)
        #打分题特殊处理(老题号G51,新题号G50--即name_abbr)
        if cp.name == 'G51':
            cal_cp_list.append(cp)
        elif len(alternative) > 0:
            #剔除选择'不适用'的检查点
            if alternative[0].cid == 'A3':
                paper_score_dict[cp.name] = 'null'
                continue
            cal_cp_list.append(cp)
        if cp.name == 'G51':
            #G51打分题目
            paper_score_dict[cp.name] = value
        else:
            paper_score_dict[cp.name] = map_score(value, cp_alt_score_dict)
        if cp.name == 'T3':
                paper_score_dict[cp.name] = '"%s"' % value
    #生成环节及检查点结构
    for cp in cal_cp_list:
        grp = cp_group_id_map.get(cp.parent.id, None)
        if grp is None:
            grp = cp.parent
            grp.child_lists = []
            cp_group_id_map[cp.parent.id] = grp
        grp.child_lists.append(cp)
    checkpoint_group = get_avg_for_checkpoint_group(paper, paper_score_dict, cp_group_id_map.values())
    paper_score_dict.update(checkpoint_group) 
    paper.score = checkpoint_group.get('total')
    try:
        c, con = DbUtils.cursor()
        update_one_project_papers_report(paper, paper_score_dict, c, con, True) #生成report及report_data,更新paper.score
    finally:
        if c:
            c.close()
        if con:
            con.close() 
Example #13
0
 def __inner():
     u'''仅取有检查点的问题的选项id,得分字字典(检查点中可能还有题目不计分,这里先不管'''
     sql = 'select sa.id, sa.score from survey_checkpoint sc, survey_alternative sa, survey_question sq where sa.question_id = sq.id and sc.question_id = sq.id and sq.project_id=%d and sa.score is not null ' % project.id
     try:
         c, con = DbUtils.cursor()
         c.execute(sql)
         results = c.fetchall()
     finally:
         if c:
             c.close()
         if con:
             con.close() 
     return dict([(data[0], data[1])    for data in results])
Example #14
0
 def __inner():
     u'''仅取有检查点的问题的选项id,得分字字典(检查点中可能还有题目不计分,这里先不管'''
     sql = 'select sa.id, sa.score from survey_checkpoint sc, survey_alternative sa, survey_question sq where sa.question_id = sq.id and sc.question_id = sq.id and sq.project_id=%d and sa.score is not null ' % project.id
     try:
         c, con = DbUtils.cursor()
         c.execute(sql)
         results = c.fetchall()
     finally:
         if c:
             c.close()
         if con:
             con.close()
     return dict([(data[0], data[1]) for data in results])
Example #15
0
def get_report_score(report_id):
    sql = 'select %s from mc_reportdata where id=%s;' % (get_main_score_column_str(), report_id)
    try:
        c, con = DbUtils.cursor()
        c.execute(sql)
        ret = c.fetchone()
    finally:
        if c:
            c.close()
        if con:
            con.close()
    if ret:
        return [score or 0 for score in ret]
    return None
Example #16
0
def create_otherreportdata_table(project_id):
    field_list = get_other_report_field_list(project_id)
    field_str = ','.join(str(field) for field in field_list)
    sql = 'create table if not exists mc_otherreportdata (%s);' % (field_str)
    try:
        c, con = DbUtils.cursor()
        c.execute(sql)
        if con:
            con.commit()
    finally:
        if c:
            c.close()
        if con:
            con.close()
Example #17
0
def create_respodentdata_table(project_id):
    field_list = get_respondent_field_list(project_id)
    field_str = ','.join(str(field) for field in field_list)
    sql = 'create table if not exists survey_respondentdata (%s);' % (field_str)
#    print sql
    try:
        c, con = DbUtils.cursor()
        c.execute(sql)
        if con:
            con.commit()
    finally:
        if c:
            c.close()
        if con:
            con.close() 
Example #18
0
def get_bmw_top_score(term, report, checkpoint=None):
    column = checkpoint.name if checkpoint else 'total'
    term_id = term.id
    dealertype_id = report.dealer.dealertype.id
    sql = 'select max(data.%(column)s) from mc_report r,mc_reportdata data where r.term_id=%(term_id)s and r.id=data.id and r.dealertype_id=%(dealertype_id)s;' % vars()
    try:
        c, con = DbUtils.cursor()
        c.execute(sql)
        cur = c.fetchone()
    finally:
        if c:
            c.close()
        if con:
            con.close() 
    return cur[0]
Example #19
0
 def get_answer(self, respondent_id):
     rid = respondent_id
     column_list = self.get_column_list()
     sql = 'select %s from survey_respondentdata where id=%s' % (column_list[0]['name'], respondent_id)
     import DbUtils
     try:
         c, con = DbUtils.cursor()
         c.execute(sql)
         result = c.fetchone()
     finally:
         if c:
             c.close()
         if con:
             con.close() 
     return result[0]
Example #20
0
def get_otherreport_group_score_0(report_id, cp_group_list_str):
    sql = 'select %s from mc_otherreportdata where id=%s;' % (cp_group_list_str, report_id)
    try:
        c, con = DbUtils.cursor()
        c.execute(sql)
        ret = c.fetchone()
    finally:
        if c:
            c.close()
        if con:
            con.close() 
    if ret:
        return [score or 0 for score in ret]
    
    return None
Example #21
0
def create_respodentdata_table(project_id):
    field_list = get_respondent_field_list(project_id)
    field_str = ','.join(str(field) for field in field_list)
    sql = 'create table if not exists survey_respondentdata (%s);' % (
        field_str)
    #    print sql
    try:
        c, con = DbUtils.cursor()
        c.execute(sql)
        if con:
            con.commit()
    finally:
        if c:
            c.close()
        if con:
            con.close()
Example #22
0
 def get_answer(self, respondent_id):
     rid = respondent_id
     column_list = self.get_column_list()
     sql = 'select %s from survey_respondentdata where id=%s' % (
         column_list[0]['name'], respondent_id)
     import DbUtils
     try:
         c, con = DbUtils.cursor()
         c.execute(sql)
         result = c.fetchone()
     finally:
         if c:
             c.close()
         if con:
             con.close()
     return result[0]
Example #23
0
def get_bmw_top_score(term, checkpoint=None):
    column = checkpoint.name if checkpoint else 'total'
    term_id = term.id
    
    dealertype_id = get_dealertype_BMW().id
    sql = 'select max(data.%(column)s) from mc_report r,mc_reportdata data where r.term_id=%(term_id)s and r.id=data.id and r.dealertype_id=%(dealertype_id)s;' % vars()
    try:
        c, con = DbUtils.cursor()
        c.execute(sql)
        ret = c.fetchone()[0]
    finally:
        if c:
            c.close()
        if con:
            con.close() 
    return ret
Example #24
0
 def get_data(self, column_name):
     sql = 'select %s from survey_respondentdata where id=%s;' % (column_name, self.id)
     import DbUtils
     try:
         c, con = DbUtils.cursor()
         c.execute(sql)
         result = c.fetchone()
     finally:
         if c:
             c.close()
         if con:
             con.close() 
     if not result:
         return None
     else:
         return result[0]
Example #25
0
 def get_data(self, column_name):
     sql = 'select %s from survey_respondentdata where id=%s;' % (
         column_name, self.id)
     import DbUtils
     try:
         c, con = DbUtils.cursor()
         c.execute(sql)
         result = c.fetchone()
     finally:
         if c:
             c.close()
         if con:
             con.close()
     if not result:
         return None
     else:
         return result[0]
Example #26
0
 def set_answer(self, respondent_id, answer):
     rid = respondent_id
     answer = self.parse_answer(answer)
     column_list = self.get_column_list()
     name_value_str = "%s='%s'" % (column_list[0]['name'], answer)
     sql = 'update survey_respondentdata set %(name_value_str)s where id = %(rid)s;' % vars()
     import DbUtils
     try:
         c, con = DbUtils.cursor()
         c.execute(sql)
         if con:
             con.commit();
     finally:
         if c:
             c.close()
         if con:
             con.close() 
Example #27
0
def get_respondentdata_dict_by_paper(paper):
    respondentdata_id = paper.respondent.id
    sql = 'select * from survey_respondentdata where id = %s' % respondentdata_id
    try:
        c, con = DbUtils.cursor()
        c.execute(sql)
        column_names = [d[0] for d in c.description]
        list = []
        row = c.fetchone()
        for index, r in enumerate(row):
            list.append((column_names[index], r))
    finally:
        if c:
            c.close()
        if con:
            con.close()
    return dict(list)
Example #28
0
def get_respondentdata_dict_by_paper(paper):
    respondentdata_id = paper.respondent.id
    sql = 'select * from survey_respondentdata where id = %s' % respondentdata_id
    try:
        c, con = DbUtils.cursor()
        c.execute(sql)
        column_names = [d[0] for d in c.description]
        list = []
        row = c.fetchone()
        for index, r in enumerate(row):
            list.append((column_names[index], r))
    finally:
        if c:
            c.close()
        if con:
            con.close() 
    return dict(list)
Example #29
0
def aggreate_otherreportdata(resp_id_list, project, term, other_report, create):
    total_cp_name_list = _checkpoint.get_project_cp_name_list_with_total(project, False)
    #total_cp_name_list_str = ','.join(total_cp_name_list)
    cp_avg_list_str = ','.join(['avg(%s)' % name for name in total_cp_name_list])
    resp_id_list_str = ','.join(map(str, resp_id_list))
    project_id = project.id
    paper_type = enums.BMW_PAPER_TYPE
    if project.id == constant.competition_project_id:
        paper_type = enums.FW_PAPER_TYPE
    try:
        c, con = DbUtils.cursor()
        term_id = term.id
        
        #只取bmw终审得分或竞品取fw问卷
        sql = 'select min(total), max(total), %(cp_avg_list_str)s from mc_reportdata data,mc_report report where report.project_id=%(project_id)s and report.paper_type=\'%(paper_type)s\' and report.term_id=%(term_id)s and data.id=report.id and report.respondent_id in (%(resp_id_list_str)s);' % vars()
        c.execute(sql)
        data_list = c.fetchone()
        score_list = map(handle_sql_data, data_list)
        paper_score_dict = {}
    #    paper_score_dict['min_total'] = score_list[0]
    #    paper_score_dict['max_total'] = score_list[1]
        for i, score in enumerate(score_list[2:]):
            paper_score_dict[total_cp_name_list[i]] = score
        if term.is_finished():
            if create:
                #新建的otherreport,主动插入条mc_otherreportdata,仅有id, 以下全只要更新列
                insert_reportdt_sql = 'insert into mc_otherreportdata (id) values(%s)' % str(other_report.id)
                c.execute(insert_reportdt_sql)
                if con:
                    con.commit()
            #print u'%d-%d-%s: %s >> %s' % (dealer.id, dealer.level, dealertype.name_en, report.score, dealer_id_list_str)
            sql_str = ','.join(['%s=%%(%s)s' % (key, key) for key in paper_score_dict])
            sql = "update mc_otherreportdata set %s where id=%s" % (sql_str, other_report.id)    
            sql = sql % paper_score_dict
            c.execute(sql)
            if con:
                con.commit()
        else:
            #print u'%s 尚未结束, 不予统计平均� % term.name
            pass
    finally:
            if c:
                c.close()
            if con:
                con.close() 
Example #30
0
 def set_answer(self, respondent_id, answer):
     rid = respondent_id
     answer = self.parse_answer(answer)
     column_list = self.get_column_list()
     name_value_str = "%s='%s'" % (column_list[0]['name'], answer)
     sql = 'update survey_respondentdata set %(name_value_str)s where id = %(rid)s;' % vars(
     )
     import DbUtils
     try:
         c, con = DbUtils.cursor()
         c.execute(sql)
         if con:
             con.commit()
     finally:
         if c:
             c.close()
         if con:
             con.close()
Example #31
0
    def createDB(self):
        dbname = self.newdb.get().strip()

        if (dbname != "" and dbname != None):
            if (dbname not in dbu.getDBs()):
                folder = filedialog.askdirectory()
                if (folder != "" and folder != None):
                    names = dbc.files2DB('TF.db',
                                         dbc.SearchFiles(folder, dbname),
                                         New=False)
                    #criar as outras tabelas
                    dbc.EmptyInfo('TF.db', names)
                    self.updateBox()
                    self.dialog("Database created!")
            else:
                self.dialog("Nome já existente.")
        else:
            self.dialog("Nome vazio.")
Example #32
0
def get_reportdata_dict_by_report(report):
    if report:
        sql = 'select * from mc_reportdata where id = %s' % report.id
        try:
            c, con = DbUtils.cursor()
            c.execute(sql)
            column_names = [d[0] for d in c.description]
            list = []
            row = c.fetchone()
            for index, r in enumerate(row):
                list.append((column_names[index], r))
        finally:
            if c:
                c.close()
            if con:
                con.close()
        return dict(list)
    else:
        return None
Example #33
0
def _get_field_list():
    no_fs_list = ['term_id', 'dealer_code', 'appraiser_code', 'customer_code', 'id']
    sql = 'select * from survey_respondentdata where id =1;'
    import DbUtils
    try:
        c, con = DbUtils.cursor()
        c.execute(sql)
        ret = c.fetchone()
        fields = []
        for i in c.description:
            f = i[0]
            if f not in no_fs_list:
                fields.append(f)
    finally:
        if c:
            c.close()
        if con:
            con.close() 
    return fields
Example #34
0
def get_reportdata_dict_by_report(report):
    if report:
        sql = 'select * from mc_reportdata where id = %s' % report.id
        try:
            c, con = DbUtils.cursor()
            c.execute(sql)
            column_names = [d[0] for d in c.description]
            list = []
            row = c.fetchone()
            for index, r in enumerate(row):
                list.append((column_names[index], r))
        finally:
            if c:
                c.close()
            if con:
                con.close() 
        return dict(list)
    else:
        return None
Example #35
0
    def changeInput(self):
        if (self.fcontainer.index(self.fcontainer.select()) == 0):
            self.fsac.pack(side=TOP, fill=X)

            if (self.genome == None):
                #carregar reguladores + None
                self.regulators = [None] + dbu.getRegulators()
                self.regulator['values'] = self.regulators
                self.regulator.current(self.regulators.index(None))
                #carregar fasta
                genome = Utils.getGenome(
                    "Genome/GCF_000146045.2_R64_genomic.fna")
                #carregar gff
                gff = Utils.getAnnotation(
                    "Genome/GCF_000146045.2_R64_genomic.gff")
                self.genome = [genome, gff]

            self.updateGenes()
            self.searchGenes()
Example #36
0
def get_detailed_fieldwork_status(dealer_type_tuple, term_id):
    '''提供某一种或多种类型的经销商执行进度的查询接口,返回值为(经销商代码,城市,省份,经销商名称,访问状态,访问日期,报告)类型的queryset
    @param dealer_type_tuple:经销商类型ID值组成的tuple
    @param term_id:期数ID值
    '''
    try:
        c, con = DbUtils.cursor()
        if len(dealer_type_tuple) == 1:
            dealer_type_tuple = dealer_type_tuple[0]
            c.execute('SELECT mc_dealer.name, mc_dealer.city_cn, mc_dealer.city_en, mc_dealer.province_cn, mc_dealer.province_en, mc_dealer.name_cn, mc_dealer.name_en, mc_report.status, survey_respondent.start_time, mc_report.survey_code FROM mc_dealer LEFT JOIN mc_report ON  mc_dealer.id = mc_report.dealer_id LEFT JOIN survey_respondent ON mc_report.respondent_id = survey_respondent.id AND mc_report.term_id= %s WHERE mc_dealer.dealertype_id = %s' % (term_id, dealer_type_tuple))
        else:
            c.execute('SELECT mc_dealer.name, mc_dealer.city_cn, mc_dealer.city_en, mc_dealer.province_cn, mc_dealer.province_en, mc_dealer.name_cn, mc_dealer.name_en, mc_report.status, survey_respondent.start_time, mc_report.survey_code FROM mc_dealer LEFT JOIN mc_report ON  mc_dealer.id = mc_report.dealer_id LEFT JOIN survey_respondent ON mc_report.respondent_id = survey_respondent.id AND mc_report.term_id= %s WHERE mc_dealer.dealertype_id IN %s' % (term_id, dealer_type_tuple))
        result = c.fetchall()
    finally:
        if c:
            c.close()
        if con:
            con.close() 
    return result
Example #37
0
    def addTF(self, orientation):
        try:
            item = self.lAll.get(self.lAll.curselection())

            x = item.split(" ")
            exist = False
            targets = []
            for target in self.vtargets.get():
                z = target.split(" ")
                if (x[0] == z[0] and x[1] == z[1] and orientation == z[2]):
                    exist = True

            if (not exist):
                aux = item[item.find("(") + 1:item.find(")")]
                targets.append(
                    int(aux) if aux != "None" else item.split("/")[0])
                if (orientation == "+"):
                    self.ltargets.insert(END, item + " +")
                elif (orientation == "-"):
                    self.ltargets.insert(END, item + " -")

            self.lparalogs.config(text='')
            paralogs = [
                x for x in dbu.getParalogs(targets,
                                           type="Order",
                                           EC=self.confidence.get(),
                                           Database=self.dbbox.get())
                if x != None
            ]
            aux = []
            if (paralogs != []):
                if (any(isinstance(i, list) for i in paralogs)):
                    paralogs = [
                        item for sublist in paralogs for item in sublist
                    ]
                for item in set(paralogs):
                    if item not in targets:
                        aux.append(item)
            self.lparalogs.config(text="Paralogs: {" + ', '.join(sorted(aux)) +
                                  "}")
        except:
            pass
Example #38
0
def get_report_score(report_id, project_id, column_list=None):
    project = _project.get_project_by_id(project_id)
    if not column_list:
        column_str = get_main_score_column_str(project)
    else:
        column_str = ','.join(column_list)
    sql = 'select %s from mc_reportdata where id=%s;' % (column_str, report_id)
    try:
        c, con = DbUtils.cursor()
        c.execute(sql)
        ret = c.fetchone()
    finally:
        if c:
            c.close()
        if con:
            con.close() 
    if ret:
        return [score or 0 for score in ret]
    
    return None
Example #39
0
def _get_field_list():
    no_fs_list = ['term_id', 'dealer_code', 'appraiser_code', 'customer_code', 'id']
    sql = 'select * from survey_respondentdata;'
    import DbUtils
    try:
        c, con = DbUtils.cursor()
        c.execute(sql)
        con.commit()
        ret = c.fetchone()
        fields = []
        for i in c.description:
            f = i[0]
            if f not in no_fs_list:
                fields.append(f)
    finally:
        if c:
            c.close()
        if con:
            con.close()   
    return fields
Example #40
0
def _get_dealer_data(dealer, term, fs):
    paper = mc.get_paper(dealer=dealer, term=term)
    if paper is None:
        return []
    
    resp = paper.respondent
    
    fs_str = ','.join(fs)
    sql = 'select %s from survey_respondentdata where id=%d;' % (fs_str, resp.id)
    import DbUtils
    try:
        c, con = DbUtils.cursor()
        c.execute(sql)
        con.commit()
        ret = c.fetchone()
    finally:
        if c:
            c.close()
        if con:
            con.close()   
    return ret
Example #41
0
def generate_report_by_paper(papers):
    u"""更新指定dealer的report数据"""
    project_dict = {} #同种类型的问卷字典分
    for p in papers:
        project = p.project
        paper_list = project_dict.get(project)
        if paper_list is None:
            paper_list = []
        paper_list.append(p)
        project_dict[project] = paper_list
    try:
        c, con = DbUtils.cursor()
        for project in project_dict.keys():
            papers = project_dict.get(project)
            gen_papers_score(project, papers, c, con)
    finally:
        if c:
            c.close()
        if con:
            con.close() 
    set_dirty()
Example #42
0
def get_dealer_score_info(dealer, curr_term, cp, paper):
    try:
        c, con = DbUtils.cursor()
        sql = 'select %s from survey_respondentdata where id=%d;' % (cp.name, paper.respondent_id)
        c.execute(sql)
        ret = c.fetchone()
    finally:
        if c:
            c.close()
        if con:
            con.close() 
    aid = ret[0]
    
    a = Alternative.objects.get(id=aid)
    #print 'a.title',a.title
    cp.dealer_score = a.title
    if cp.dealer_score == u'是':
        cp.zero_reason = ''
        cp.zero_reason_en = ''
    else:
        cp.zero_reason, cp.zero_reason_en = get_zero_reason(curr_term, dealer, cp)
Example #43
0
 def set_answer(self, respondent_id, answer):
     rid = respondent_id
     answer = self.parse_answer(answer)
     column_list = self.get_column_list()
     name_value_list = []
     for index, column in enumerate(column_list):
         name_value_list.append("%s='%s'" % (column['name'], answer[index]))
     name_value_str = ','.join(name_value_list)
     sql = 'update survey_respondentdata set %(name_value_str)s where id = %(rid)s;' % vars()
     
     import DbUtils
     try:
         c, con = DbUtils.cursor()
         c.execute(sql)
         if con:
             con.commit()
     finally:
         if c:
             c.close()
         if con:
             con.close() 
Example #44
0
    def set_answer(self, respondent_id, answer):
        rid = respondent_id
        answer = self.parse_answer(answer)
        column_list = self.get_column_list()
        name_value_list = []
        for index, column in enumerate(column_list):
            name_value_list.append("%s=%s" % (column['name'], answer[index]))
        name_value_str = ','.join(name_value_list)
        sql = 'update survey_respondentdata set %(name_value_str)s where id = %(rid)s;' % vars(
        )

        import DbUtils
        try:
            c, con = DbUtils.cursor()
            c.execute(sql)
            if con:
                con.commit()
        finally:
            if c:
                c.close()
            if con:
                con.close()
Example #45
0
def get_dealer_reports(dealer_type_tuple, regional, term_id):
    '''提供某一种或多种类型的经销商访问情况报告的查询接口,返回值为(经销商代码,城市,省份,经销商名称,经销商本期最终得分,报告)类型的queryset
    @param dealer_type_tuple:经销商类型ID值组成的tuple
    @param regional:区域对象
    @param term_id:期数ID值
    '''
    try:
        c, con = DbUtils.cursor()
        dealer_id_list = utils.get_sub_leaf_dealer_id_list(regional)
        dealer_id_list = tuple(dealer_id_list)
        if len(dealer_type_tuple) == 1:
            dealer_type_tuple = dealer_type_tuple[0]
            c.execute('SELECT mc_dealer.name, mc_dealer.city_cn, mc_dealer.city_en, mc_dealer.province_cn, mc_dealer.province_en, mc_dealer.name_cn, mc_dealer.name_en, mc_reportdata.total, mc_report.survey_code FROM mc_dealer LEFT JOIN mc_report ON mc_dealer.id = mc_report.dealer_id LEFT JOIN mc_reportdata ON mc_report.id = mc_reportdata.id AND mc_report.term_id= %s WHERE mc_dealer.id in %s AND mc_dealer.dealertype_id = %s' % (term_id, dealer_id_list, dealer_type_tuple))
        else:
            c.execute('SELECT mc_dealer.name, mc_dealer.city_cn, mc_dealer.city_en, mc_dealer.province_cn, mc_dealer.province_en, mc_dealer.name_cn, mc_dealer.name_en, mc_reportdata.total, mc_report.survey_code FROM mc_dealer LEFT JOIN mc_report ON mc_dealer.id = mc_report.dealer_id LEFT JOIN mc_reportdata ON mc_report.id = mc_reportdata.id AND mc_report.term_id= %s WHERE mc_dealer.id in %s AND mc_dealer.dealertype_id in %s' % (term_id, dealer_id_list, dealer_type_tuple))
        result = c.fetchall()
    finally:
        if c:
            c.close()
        if con:
            con.close() 
    return result
Example #46
0
    def Score(self, event=None):
        # create new elements
        targets = []
        for item in self.vtargets.get():
            aux = item[item.find("(") + 1:item.find(")")]
            targets.append(int(aux) if aux != "None" else item.split("/")[0])

        self.targets = {}
        if (targets != []):
            self.targets = {i: None for i in targets}

        for item in self.vtargets.get():
            x = item.split(" ")
            key = x[1][1:-1]
            key = int(key) if key != "None" else x[0].split("/")[0]
            if (self.targets[key] == None):
                self.targets[key] = (0 if x[2] == "-" else 1)
            else:
                self.targets[key] = 2

        self.maximize = list(self.targets.values())
        self.pmTargets = dbu.getAll(list(
            self.targets.keys()))[:len(self.targets)]
        targetNames = [
            "{}/{} ({})".format(pm.StandardName, pm.SystematicName,
                                str(pm.MotifID)) for pm in self.pmTargets
        ]
        self.pmNonTargets = [
            pm for pm in self.pms
            if ("{}/{} ({})".format(pm.StandardName, pm.SystematicName,
                                    str(pm.MotifID)) not in targetNames and (
                                        pm.EC == self.confidence.get()
                                        or self.confidence.get() == "All"))
        ]
        if (self.fcontOptions.index(self.fcontOptions.select()) == 0):
            self.SingleScore()
        elif (self.fcontOptions.index(self.fcontOptions.select()) == 1):
            self.MultiScore()
Example #47
0
def export():
    sqls = 'select distinct mp.id, md.name as dealercode, md.name_cn,"  B18" as " B18" , sa1.title , sa1.score ,B21a__open, "  D39" as " D39" , sa2.title , sa2.score ,D63__open from survey_respondentdata srd, mc_paper mp, mc_dealer md, mc_term_dealers mtd LEFT JOIN survey_alternative sa1 ON sa1.id = B21a LEFT JOIN survey_alternative sa2 ON sa2.id = D63 where  mp.respondent_id = srd.id and mp.project_id = 2 and mp.paper_type in ("GFK") and md.id = mp.dealer_id and mtd.dealer_id = mp.dealer_id and mtd.term_id = mp.term_id'
    c, db = DbUtils.cursor()
    c.execute(sqls)
    result = c.fetchall()
    data_list = []
    b18 = Question.objects.get(cid='B21a', project__id=2)
    d39 = Question.objects.get(cid='D63', project__id=2)
    index = 0
    for data in result:
        item = Item()
        item.dealer_code = data[1]
        item.dealer_name = data[2]
        item.B18_name = data[3]
        item.B18_value = data[4]
        item.B18_score = data[5]
        B18_open = data[6]
        if B18_open is not None and B18_open != '':
            B18_open = restore_result(b18, B18_open)
            B18_open = B18_open.replace('<br>', '')
        else:
            B18_open = ''
        item.D39_name = data[7]
        item.D39_value = data[8]
        item.D39_score = data[9]
        D39_open = data[10]
        if D39_open is not None and D39_open != '':
            D39_open = restore_result(d39, D39_open)
            D39_open = D39_open.replace('<br>', '')
        else:
            D39_open = ''
        #print  data[1], ',', data[2], ',', data[3], ',', data[4], ',', data[5], ',', B18_open, ',', data[7], ',', data[8], ',', data[9], ',', D39_open

        msg = 'UserProfile and LoginLogout will be deleted. Sure? (y/n):'
        #        if  index % 100 == 0 and'y' == raw_input(msg):
        #            continue
        index += 1
Example #48
0
def export():
    sqls = 'select distinct mp.id, md.name as dealercode, md.name_cn,"  B18" as " B18" , sa1.title , sa1.score ,B21a__open, "  D39" as " D39" , sa2.title , sa2.score ,D63__open from survey_respondentdata srd, mc_paper mp, mc_dealer md, mc_term_dealers mtd LEFT JOIN survey_alternative sa1 ON sa1.id = B21a LEFT JOIN survey_alternative sa2 ON sa2.id = D63 where  mp.respondent_id = srd.id and mp.project_id = 2 and mp.paper_type in ("GFK") and md.id = mp.dealer_id and mtd.dealer_id = mp.dealer_id and mtd.term_id = mp.term_id'
    c, db = DbUtils.cursor()
    c.execute(sqls)
    result = c.fetchall()
    data_list = []
    b18 = Question.objects.get(cid='B21a', project__id=2)
    d39 = Question.objects.get(cid='D63', project__id=2)
    index = 0
    for data in result:
        item = Item()
        item.dealer_code = data[1]
        item.dealer_name = data[2]
        item.B18_name = data[3]
        item.B18_value = data[4]
        item.B18_score = data[5]
        B18_open = data[6]
        if B18_open is not  None and  B18_open != '':
            B18_open = restore_result(b18, B18_open)
            B18_open = B18_open.replace('<br>', '')
        else:
            B18_open = ''
        item.D39_name = data[7]
        item.D39_value = data[8]
        item.D39_score = data[9]
        D39_open = data[10]
        if D39_open is not  None and  D39_open != '':
            D39_open = restore_result(d39, D39_open)
            D39_open = D39_open.replace('<br>', '')
        else:
            D39_open = ''
        #print  data[1], ',', data[2], ',', data[3], ',', data[4], ',', data[5], ',', B18_open, ',', data[7], ',', data[8], ',', data[9], ',', D39_open
        
        msg = 'UserProfile and LoginLogout will be deleted. Sure? (y/n):'
#        if  index % 100 == 0 and'y' == raw_input(msg):
#            continue
        index += 1
Example #49
0
def add_respondentdata_column(project_id):
    project = Project.objects.get(id=project_id)
    sql = 'select * from survey_respondentdata where id = 1'
    try:
        c, con = DbUtils.cursor()
        c.execute(sql)
        column_names = [d[0] for d in c.description]
        q_list = Question.objects.filter(project=project)

        for q in q_list:
            if q.cid not in column_names:
                #屏蔽F49题的添加--原数据库中存在
                if 'F49' not in q.cid:
                    question_list.append(q.cid)

        print question_list
        for cid in question_list:
            if 'other' in cid or 'T3' or 'visitor_numb' == cid:
                sql = 'alter table survey_respondentdata add column \'%s\' varchar(1000);' % cid
                c.execute(sql)
                if con:
                    con.commit()
            else:
                sql = 'alter table survey_respondentdata add column \'%s\' integer;' % cid
                c.execute(sql)
                if con:
                    con.commit()
                sql = 'alter table survey_respondentdata add column \'%s__open\' varchar(1000);' % cid
                c.execute(sql)
                if con:
                    con.commit()
    finally:
        if c:
            c.close()
        if con:
            con.close()
Example #50
0
    def updateAll(self, event=None):
        targets = []
        for item in self.vtargets.get():
            aux = item[item.find("(") + 1:item.find(")")]
            targets.append(int(aux) if aux != "None" else item.split("/")[0])

        self.updateSBAll()

        self.lparalogs.config(text='')
        paralogs = [
            x for x in dbu.getParalogs(targets,
                                       type="Order",
                                       EC=self.confidence.get(),
                                       Database=self.dbbox.get()) if x != None
        ]
        aux = []
        if (paralogs != []):
            if (any(isinstance(i, list) for i in paralogs)):
                paralogs = [item for sublist in paralogs for item in sublist]
            for item in set(paralogs):
                if item not in targets:
                    aux.append(item)
        self.lparalogs.config(text="Paralogs: {" + ', '.join(sorted(aux)) +
                              "}")
Example #51
0
def add_respondentdata_column(project_id):
    project = Project.objects.get(id=project_id)
    sql = 'select * from survey_respondentdata where id = 1'
    try:
        c, con = DbUtils.cursor()
        c.execute(sql)
        column_names = [d[0] for d in c.description]
        q_list = Question.objects.filter(project=project)
        
        for q in q_list:
            if q.cid not in column_names:
                #屏蔽F49题的添加--原数据库中存在
                if 'F49' not in q.cid:
                    question_list.append(q.cid)
        
        print question_list
        for cid in question_list:
            if 'other' in cid or 'T3' or 'visitor_numb' == cid:
                sql = 'alter table survey_respondentdata add column \'%s\' varchar(1000);' % cid
                c.execute(sql)
                if con:
                    con.commit()
            else:
                sql = 'alter table survey_respondentdata add column \'%s\' integer;' % cid
                c.execute(sql)
                if con:
                    con.commit()
                sql = 'alter table survey_respondentdata add column \'%s__open\' varchar(1000);' % cid
                c.execute(sql)
                if con:
                    con.commit()
    finally:
        if c:
            c.close()
        if con:
            con.close() 
Example #52
0
def add_reportdata_column(project_id):
    project = Project.objects.get(id=project_id)
    sql = 'select * from mc_reportdata where id = 1'
    try:
        c, con = DbUtils.cursor()
        c.execute(sql)
        column_names = [d[0] for d in c.description]
        cp_list = CheckPoint.objects.filter(project=project)
        
        for cp in cp_list:
            if cp.name not in column_names:
                checkpoint_list.append(cp.name)
                
        print checkpoint_list
        for cid in checkpoint_list:
            sql = 'alter table mc_reportdata add column \'%s\' float;' % cid
            c.execute(sql)
            if con:
                con.commit()
    finally:
        if c:
            c.close()
        if con:
            con.close() 
Example #53
0
    def SingleScore(self, event=None, name=None):
        # remove old widgets
        if self.figure:
            self.figure.destroy()
        if self.toolbar:
            self.toolbar.destroy()
        for widget in self.fcSequence.winfo_children():
            widget.destroy()

        self.name = None
        self.seq = None

        try:
            if (self.fcontainer.index(self.fcontainer.select()) == 1):
                self.seq = self.sequence.get(1.0, END).rstrip(
                )  #rstrip remove quebras de linha #usar RE para verificar integridade da sequência
            else:
                tree, genes = [self.sactree, self.genes] if (
                    self.fcontainer.index(self.fcontainer.select())
                    == 0) else [self.seqtree, self.genesF]
                if (len(tree.get_children()) > 0):
                    if (self.fcontOptions.index(
                            self.fcontOptions.select()) == 0):
                        self.name = str(
                            tree.item(tree.selection())['values'][1])
                    else:
                        self.name = name
                        self.fcontOptions.select(0)
                    self.updateGenes()
                    self.searchGenes()
                    self.seq = list(genes.loc[genes['gene'] == self.name,
                                              'sequence'])[0]
        except:
            self.dialog("Please, select a sequence.")

        upstream,downstream=[int(self.supstream.get().strip()), -1 if(self.sfgState.get()) else int(self.sdownstream.get().strip())] if(self.fcontainer.index(self.fcontainer.select())==0) else \
            ([int(self.upstream.get().strip()), -1 if(self.fgState.get()) else int(self.downstream.get().strip())] if(self.fcontainer.index(self.fcontainer.select())==2) else [len(self.seq),0])
        if (self.seq is not None):
            cs.canvasSequence(self.seq,
                              self.fcSequence,
                              width=15,
                              height=9,
                              targets=[self.targets, self.pmTargets],
                              outOfRange=self.foorState.get(),
                              normalized=self.normalizedState.get(),
                              threshold=float(self.threshold.get()),
                              upstream=upstream,
                              downstream=downstream,
                              margin=60)
            paralogs = dbu.getParalogs(list(self.targets.keys()),
                                       type="MotifID",
                                       EC=self.confidence.get(),
                                       Database=self.dbbox.get()) if (
                                           self.paralogState.get()) else []
            paralogs = list(self.flatten(paralogs))

            self.master.update()
            square = min(
                self.master.winfo_height() -
                (self.fimg.winfo_rooty() - self.master.winfo_rooty()),
                self.master.winfo_width() -
                (self.fimg.winfo_rootx() - self.master.winfo_rootx()))

            plt = Utils.PlotAllScores(
                self.seq,
                outOfRange=self.foorState.get(),
                tfs=self.pmTargets + self.pmNonTargets,
                principalOnly=not (self.allLablesState.get()),
                save=False,
                normalized=self.normalizedState.get(),
                paralogs=paralogs,
                maximize=self.maximize,
                name=self.name,
                dpi=self.master.winfo_fpixels('1i'),
                square=square)
            canvas = FigureCanvasTkAgg(plt, self.fimg)
            #self.toolbar = NavigationToolbar2Tk(canvas, self.fimg)
            self.figure = canvas.get_tk_widget()
            self.figure.pack(fill=None)
Example #54
0
    def searchGenes(self, event=None):
        if (self.fcontainer.index(self.fcontainer.select()) == 2
                and self.genesF is not None):
            search = self.seqSearch.get().strip().upper()
            for row in self.seqtree.get_children():
                self.seqtree.delete(row)
            k = 0
            genesTemp = []
            for i in range(len(self.genesF)):
                name = self.genesF.iloc[i, 0]
                sequence = self.genesF.iloc[i, 1]
                up = self.genesF.iloc[i, 2]
                down = self.genesF.iloc[i, 3]
                check = self.genesF.iloc[i, 4]
                if (search in name.upper() or search == ""):
                    self.seqtree.insert(
                        "",
                        i,
                        iid=str(k),
                        values=(('☑' if (check) else '☐'), name,
                                (sequence[:30] +
                                 "..." if len(sequence) > 33 else sequence)))
                    genesTemp.append([name, sequence, up, down, check])
                    k += 1
            self.genesTempF = pd.DataFrame(genesTemp,
                                           columns=[
                                               "gene", "sequence", "upstream",
                                               "downstream", "check"
                                           ])
            if (k >= 1):
                self.seqtree.selection_set("0")
            self.lgenesF['text'] = str(k) + " genes found"
            total = len(self.genesTempF.loc[self.genesTempF['check'] == True])
            newStatus = "☑" if (total == len(
                self.genesTempF)) else ("☐" if total == 0 else "☒")
            self.seqtree.heading('check', text=newStatus)

        if (self.fcontainer.index(self.fcontainer.select()) == 0):
            search = self.sacSearch.get().strip().upper()
            targets = None if (self.regulator.get()
                               == 'None') else dbu.getTargets(
                                   self.regulator.get().split("/")[1])
            for row in self.sactree.get_children():
                self.sactree.delete(row)
            k = 0
            genesTemp = []
            for i in range(len(self.genes)):
                name = self.genes.iloc[i, 0]
                sequence = self.genes.iloc[i, 1]
                up = self.genes.iloc[i, 2]
                down = self.genes.iloc[i, 3]
                check = self.genes.iloc[i, 4]
                if(targets is None or name in targets['TargetSys'].tolist() or name in targets['TargetStd'].tolist()) \
                    and (search in name.upper() or search==""): # or search in sequence):
                    #self.sactree.insert("", i, iid=str(k), values=(name,(sequence[:30]+"..."+" ☐ ☑ ☒ " if len(sequence)>33 else sequence)))
                    self.sactree.insert(
                        "",
                        i,
                        iid=str(k),
                        values=(('☑' if (check) else '☐'), name,
                                (sequence[:30] +
                                 "..." if len(sequence) > 33 else sequence)))
                    genesTemp.append([name, sequence, up, down, check])
                    k += 1
            self.genesTemp = pd.DataFrame(genesTemp,
                                          columns=[
                                              "gene", "sequence", "upstream",
                                              "downstream", "check"
                                          ])
            if (k >= 1):
                self.sactree.selection_set("0")
            self.lgenes['text'] = str(k) + " genes found"
            total = len(self.genesTemp.loc[self.genesTemp['check'] == True])
            newStatus = "☑" if (total == len(
                self.genesTemp)) else ("☐" if total == 0 else "☒")
            self.sactree.heading('check', text=newStatus)
Example #55
0
def super_report(request):
    from django.db import connection
    
    def get_dealer_id_list(dealer):
        """
            得到指定dealer能看到的所有dealer的id
        """
        id_list = []
        if dealer.parent:
            id_list.extend(mc.utils.get_parent_dealer_id_list(dealer.parent))
        id_list.extend(mc.utils.get_sub_dealer_id_list(dealer))
        return id_list
    
    def float_format(afloat):
        if afloat is None:
            return '&nbsp'
        return '%.2f' % afloat

    #~ if not userpro.has_all_page_perm(request.user):
        #~ raise Http404()
    current_term = _term.get_cur_term()
    
    dealer = _user.get_dealer_by_user(request.user)
    if not dealer:
        return HttpResponseRedirect('/')
    
    total_cp_list = mc.get_total_cp_list()
    dealer_id_list = get_dealer_id_list(dealer)
    
    show_dealer_search_box = True
    LEAF_DEALER_ID_SET = set(mc.get_leaf_dealer_id_for_bm())
    #~ if user.role.name == 'customer_1': #全国但不显示经销商
        #~ dealer_id_list = [id for id in dealer_id_list if id not in LEAF_DEALER_ID_SET]
        #~ show_dealer_search_box = False
    
    where_list = ['dealer_id in (%s)' % (','.join([str(id) for id in dealer_id_list]))]

    term_list = mc.get_terms()
    total_term_id_list = [t.id for t in term_list]
    term_id_list = [t for t in request.POST.getlist('term_list') if t]
    terms = None
    if not term_id_list:
        terms = request.REQUEST.get('terms')
        if terms:
            term_id_list = [int(id) for id in terms.split(',')]
    if term_id_list:
        if not terms:
            terms = ','.join([str(id) for id in term_id_list])
        where_list.append('(term_id in (%s) or term_id is null)' % (','.join([str(id) for id in term_id_list])))
    
    fixed_head_list = ['dealer_id', 'dealer_name', 'term_id', 'term_name', 'Total']
    head_name_list = [h for h in request.POST.getlist('head_name_list') if h]
    if not head_name_list:
        heads = request.REQUEST.get('heads')
        if heads:
            if heads == 'all':
                head_list = total_cp_list
            else:
                tmp_name_set = set(heads.split(','))
                head_list = [cp for cp in total_cp_list if cp.name in tmp_name_set]
        else:
            head_list = [cp for cp in total_cp_list if cp.has_child]
    else:
        tmp_name_set = set(head_name_list)
        head_list = [cp for cp in total_cp_list if cp.name in tmp_name_set]
    if head_list:
        heads = ','.join([cp.name for cp in head_list])
        total_head_list = fixed_head_list + [cp.name for cp in head_list]
    else:
        total_head_list = fixed_head_list
    sql = 'select %s from mc_report r,mc_reportdata rd,mc_dealer d where %s and r.dealer_id=d.id and r.id=rd.id order by d.listorder,r.term_id;' % (','.join(total_head_list), ' and '.join(where_list))
    sql = """select %s 
from mc_report r 
inner join mc_dealer d 
on %s and r.dealer_id=d.id
left join mc_reportdata rd 
on rd.id=r.id 
order by d.listorder,r.term_id;""" % (','.join(total_head_list), ' and '.join(where_list))
    
    #print sql
    import DbUtils
    try:
        c, con = DbUtils.cursor()
        c.execute(sql)
        data_list = c.fetchall()
    finally:
        if c:
            c.close()
        if con:
            con.close() 
    row_list = []
    country_area_id_set = set([dealer.id for dealer in mc.get_regionals()])
    root_dealer = mc.get_root_dealer()
    country_area_id_set.add(root_dealer.id)
    
    DEALER_PARENT_DICT = mc.get_dealer_parent_dict()
    for data in data_list:
        dealer_id = data[0]
        term_id = data[2]
        
        dealer_disp = unicode(data[1] or '')

        leaf = ''
        term_str = ''
        if term_id:
            if dealer_id in LEAF_DEALER_ID_SET:
                leaf = ' leaf'
                dealer_disp = '<a href="/report/detail_report/%s/%s/" target="_blank">%s</a>' % (dealer_id, term_id, dealer_disp)
            td_dealer = '<td><input type="checkbox" name="dealer_%(dealer_id)s_%(term_id)s" id="dealer_%(dealer_id)s_%(term_id)s" class="cb_dealer"/></td><td class="dealer%(leaf)s nowrap">%(dealer_disp)s</td>' % vars()
            term_str = '_%s' % term_id
        else:
            td_dealer = '<td></td><td class="dealer" nowrap>%(dealer_disp)s<span class="fold closed">+</span></td>' % vars()
        td_term = '<td class="term" nowrap>%s</td>' % unicode(data[3] or '')        
        td_score_list = '</td><td>'.join(map(float_format, data[4:]))
        dealer_parent = DEALER_PARENT_DICT.get(dealer_id, '')
        if dealer_id in country_area_id_set:
            display_class = ''
        else:
            display_class = ' hide'
        
        row_list.append('<tr id="row_%(dealer_id)s%(term_str)s" class="sub_%(dealer_parent)s%(leaf)s%(display_class)s data">%(td_dealer)s%(td_term)s<td>%(td_score_list)s</td></tr>' % vars())
    cp_group_list = mc.get_checkpoint_group_list()
    #~ #判断是否显示雷达图按钮
    #~ if not settings.USE_FUSION_CHART:
        #~ c['show_radar'] = True
    return locals()