Ejemplo n.º 1
0
class AnswerQuestionService(object):
    
    def __init__(self, mymodel=None):
        
        self.utility = Utility();
        self.urlUtility = URLUtility();
        
        self.UPLOAD_DIR = config['path_upload_file'] ;
        self.CONVERT_DIR = config['path_convert_file'] ;
        self.utility.createPathFile(self.CONVERT_DIR);
        self.utility.createPathFile(self.UPLOAD_DIR);
        if mymodel is None:
            self.mymodel = model
        self.mymodel = mymodel
        
        self.urlServer = self.mymodel.SystemEnvironment.getServerUrl()
        
        dh = LogDBHandler( config=config,request=request);        
        log.addHandler(dh)
        
    def getQuestionGroupWithReply(self, listReply=None):
        self.groups = {}
        if listReply:
            print "len : %s" %(len(listReply)) 
            for self.reply in listReply:
                if self.reply.question.id_question_group not in self.groups:
                    questiongroup = self.reply.question.questiongroup.tojsonviewdata()
                else:
                    questiongroup = self.groups[self.reply.question.id_question_group]
                questiongroup['questions'].append(self.reply.question.to_json(randomAnswer=True,showResult = None,initOrder=1) )
                self.groups[self.reply.question.id_question_group] = questiongroup
                del questiongroup
                del self.reply
        
        return [self.groups[group]  for group in self.groups ]
    
    def getQuestionGroupWithQuestionOption(self, questionOption=None):
        self.listquestion = []
        self.order =1
        if questionOption:
            self.questionGroups = self.mymodel.QuestionGroup.getByProject(questionOption.id_question_project )            
            groupaount = {str(amount.id_question_group) : amount.amount for amount in questionOption.numberquestion }
            print "-----"
            print groupaount
            for g in groupaount:
                print "id : %s" %g
            for self.group in self.questionGroups:    
                self.group, self.order = self.group.tojsonview(randomAnswer = questionOption.random_answer,initOrder = self.order) 
                print str(self.group['id_question_group'])                
                if str(self.group['id_question_group']) in groupaount:
                    self.value_amount = groupaount[str(self.group['id_question_group'])]
                    if (self.value_amount > 0):
                        self.group['questions']  = random.sample(self.group['questions'], self.value_amount );
                        self.listquestion.append(self.group)            
        return self.listquestion
    
    def createQuestionForUser(self, listQuestion=None, id_close_type=0):
        if listQuestion:
            if id_close_type not in [ClossType.start_new.value] :
                self.mymodel.RespondentReply.createQuestionForUser(self.listquestion,self.respondents.id_respondents)
                
    def genSeq(self, listQuestion=None):
        self.order=1    
        if listQuestion:
            for listquest in listQuestion:
                for question in listquest['questions']:
                    question['seq'] = str(self.order)                    
                    self.order = self.order+1
                    del question
                del listquest
        return listQuestion,(self.order -1)
    
    def renewQuestionForUser(self, respondents=None, id_close_type=0):      
        if respondents and (id_close_type in [ClossType.start_new.value]) :
            respondents.image_file = None
            respondents.full_score = None
            respondents.score_exam = 0
            respondents.personality_score = None
           
            for respreply in respondents.childenRespReply:
                for answer in respreply.childenAnswer:
                    self.mymodel.DBSession.delete(answer)
                self.mymodel.DBSession.delete(respreply)
                
    
    def checkFinish(self,respondent, urlUtility):
        self.redirect=urlUtility.URL_THANKYOU
        self.isredirect = False
        if(respondent  is not None and respondent.finished == CheckFinish.finished.value): #finished = 1
            log.info('voter finished in id public : %s'  %str(respondent.id_question_option) );
            self.redirect  = self.urlUtility.URL_GOODBYE.format( key= respondent.key_gen   ) 
            self.isredirect = True
        
        return self.isredirect, self.redirect
                
                
    def createScoreFile(self,idResp):
        
        self.respondent = self.mymodel.Respondents.getId(idResp);
        self.score = self.mymodel.Respondents.getScoreByIdRespondents(idResp)#self.idResp);
        self.voter = self.respondent.voter;
        
        self.convertHtml = ConvertHtml2Pdf();
        self.convertPNG = ConvertPdf2image();
        
        self.sourceHtml = self.mymodel.SystemEnvironment.getScoreViewHtml();

        values = {};
        values['name'] = str(self.voter.prefix + ' ' + self.voter.firstname + ' ' + self.voter.lastname);
        values['score'] = str(self.score);
        
        #self.outputPDFFilename = ("{0}\{1}-{2}-{3}-{4}.pdf").format(str(self.CONVERT_DIR), str(self.respondent.id_respondents), str(self.respondent.id_voter), str(self.respondent.id_question_project), str(self.respondent.id_question_option))  ;
        #self.outputPNGFilename = ("{0}\{1}-{2}-{3}-{4}.png").format(str(self.CONVERT_DIR), str(self.respondent.id_respondents), str(self.respondent.id_voter), str(self.respondent.id_question_project), str(self.respondent.id_question_option))  ;
        self.outputPDFFilename = ("{0}-{1}-{2}-{3}.pdf").format( str(self.respondent.id_respondents), str(self.respondent.id_voter), str(self.respondent.id_question_project), str(self.respondent.id_question_option))  ;
        self.outputPNGFilename = ("{0}-{1}-{2}-{3}.png").format( str(self.respondent.id_respondents), str(self.respondent.id_voter), str(self.respondent.id_question_project), str(self.respondent.id_question_option))  ;
        
        self.outputPDFFilename = os.path.join( str(self.CONVERT_DIR), self.outputPDFFilename)
        self.outputPNGFilename = os.path.join( str(self.CONVERT_DIR), self.outputPNGFilename)
        
        
        self.result = self.convertHtml.convertHtmlToPdf(values, self.sourceHtml, self.outputPDFFilename);
        log.info("convert file %s is %s" %(self.outputPDFFilename, self.result));
        print ("convert file %s is %s" %(self.outputPDFFilename, self.result));
        if(self.result == 0):
            self.result = self.convertPNG.convert(self.outputPDFFilename, self.outputPNGFilename)
            log.info("convert file %s is %s" %(self.outputPNGFilename, self.result));
            if(self.result):
                log.info("save image file %s is %s" %(self.outputPNGFilename, self.result));
                with open(self.outputPNGFilename,"rb") as f:
                    self.respondent.image_file = f.read(); 
        else:
            log.error("convert html to pdf error with id_resp=%s" %idResp)     
            
        del self.respondent
        del self.score
        del self.voter
        del self.convertHtml  
        del self.convertPNG
        del self.sourceHtml
        del values
        del self.outputPDFFilename
        
    def createScoreFileImage(self,idResp):
        
        self.respondent = self.mymodel.Respondents.getId(idResp);
        
        self.outputPDFFilename = ("{0}-{1}-{2}-{3}.pdf").format( str(self.respondent.id_respondents), str(self.respondent.id_voter), str(self.respondent.id_question_project), str(self.respondent.id_question_option))  ;
        self.outputPNGFilename = ("{0}-{1}-{2}-{3}.jpg").format( str(self.respondent.id_respondents), str(self.respondent.id_voter), str(self.respondent.id_question_project), str(self.respondent.id_question_option))  ;
        
        self.outputPDFFilename = os.path.join( str(self.CONVERT_DIR), self.outputPDFFilename)
        self.outputPNGFilename = os.path.join( str(self.CONVERT_DIR), self.outputPNGFilename)
         
        self.urlscore = ("http://{0}/ans/viewCertScore/{1}").format(str(self.urlServer ), str(self.respondent.id_respondents))
        
        self.converthtml2image = ConvertHTML2Image()
        self.result = self.converthtml2image.convertURL2Image(self.urlscore, self.outputPNGFilename)
        log.info( "convert : %s result %s" %(self.outputPNGFilename, self.result))
        with open(self.outputPNGFilename,"rb") as f:
            self.respondent.image_file = f.read(); 
        
        del self.respondent
        del self.urlscore
        del self.converthtml2image
        del self.result
        del self.outputPDFFilename    
Ejemplo n.º 2
0
class AnswerController(BaseController):#RestController): #
    
    def __init__(self):
        self.utility = Utility();
        self.urlUtility = URLUtility();
         
        self.UPLOAD_DIR = config['path_upload_file'] ;
        self.CONVERT_DIR = config['path_convert_file'] ;
        
        self.utility.createPathFile(self.CONVERT_DIR);
        self.utility.createPathFile(self.UPLOAD_DIR);
        self.sourceHtml = model.SystemEnvironment.getScoreViewHtml();
        
        dh = LogDBHandler( config=config,request=request);        
        log.addHandler(dh)
        
       
    
    @expose()
    def _default(self, *args, **kw):
        return 'This page is not ready'
    
    def _before(self, *args, **kw):
        tmpl_context.project_name = 'pollandsurvey'
    
        

    
    @expose('pollandsurvey.templates.view.multiquestion')
    def questionnaire(self,key=0,ready='no',**kw):
        reload(sys).setdefaultencoding('utf8')
        log.info("key %s",key);
        
        self.header = '';
        self.footer = '';
        self.nextQuestion ='';
        self.template ='';
        
        
        self.respondents = model.Respondents.getByKey(key);
        if self.respondents :
            log.info("find key %s",key);
            self.urlServer =  model.SystemEnvironment.getServerUrl();
            
            self.urlReply = self.urlUtility.URL_REPLY.format(self.urlServer, str(self.respondents.id_question_project), str(self.respondents.id_question_option), str(self.respondents.id_voter))  ; #request.application_url
            log.info("iframe url to %s",self.urlReply);
            
            #check finish
            isRedirect = True
            if(self.respondents  is not None and self.respondents.finished == 1):
                log.info('voter finished in id public : %s', str(self.respondents.id_question_option) );
                self.redirect = self.urlUtility.URL_THANKYOU;
                if (isRedirect):
                    redirect(self.urlUtility.URL_THANKYOU) ;
            elif (self.respondents is None):
                log.error("System can not find idVoter : %s , idPublic : %s" , str(self.respondents.id_voter), str(self.respondents.id_question_option));
                redirect(self.urlUtility.URL_THANKYOU) ;
            
            #check Expire
            self.questionOption,self.redirect = self.__checkOptionExpired(self.respondents.id_question_option);    
                
            
            log.info("id_question_option : %s ", str(self.questionOption.id_question_option));
            log.info("ready : %s ", str(ready));
            
            if str(ready).lower() == 'no':    
                #check have welcome page
                if( not self.utility.isEmpty(self.questionOption.welcome_message) ) :
                    #redirect('/ans' + '/welcome?id='+ str(self.questionOption.id_question_option) );
                    log.info("show message welcome : ");
                    redirect( self.urlUtility.URL_WELCOME.format(key = str(key)) )#   self.URL_WELCOME_NEW.format(str(key))  );
                else:
                    log.info("show questionnaire : ");
                    self.template = self.questionOption.theme.template;
                    override_template(AnswerController.questionnaire, self.template) ;    
                    
            elif str(ready).lower() == 'yes':
                self.header = self.questionOption.header_message;
                self.footer = self.questionOption.footer_message;
                self.urlName = self.utility.spritValue(request.path_info,'/');
                self.template = self.questionOption.theme.template
                if(len(self.urlName) >= 1 ) :
                    self.nextQuestion = '/' + self.urlName[0] + '/saveQuestion' + '?id='+ str(self.questionOption.id_question_option);
                
                
                if(self.template is not None and len(self.template) > 0):    
                    log.info("template used : %s",  self.template );     
                    
                    override_template(AnswerController.questionnaire, self.template) 
                    
                self.ip=request.environ.get("X_FORWARDED_FOR", request.environ["REMOTE_ADDR"]);
                self.browser = request.environ.get('HTTP_USER_AGENT');
                
               
            
        else:
            log.warning("find not found key %s",str(key));
            redirect(self.urlUtility.URL_EXPIRED) ;       
        
        return dict(page='view',header = Markdown(self.header).convert() , 
                        footer = Markdown(self.footer).convert()  , 
                        action = self.nextQuestion,template= self.template,
                        #urldata = self.URL_GETDATAQUESTION.format(self.idPublic),
                        urldata =  self.urlUtility.URL_GETDATAQUESTION.format(key=str(key)),#  self.URL_GETDATAQUESTION.format(key),  
                        idproject = self.questionOption.id_question_option ,
                        idresp = self.respondents.id_respondents,
                        shownavigator = bool(self.questionOption.show_navigator) ); 
    
     
    
    @expose('pollandsurvey.templates.view.welcome')
    def welcome(self,key=0,came_from=lurl('/')):
        reload(sys).setdefaultencoding("utf-8");
         
        
        log.info('preview id : ' + str(key));
        
        self.respondents = model.Respondents.getByKey(key);
        #self.idProject,self.idPublic,self.idVoter,self.redirect = self.__checkExpire(id);
        if (self.respondents):
        
            self.welcome_message = '';
            
            self.questionOption,self.redirect = self.__checkOptionExpired(self.respondents.id_question_option);
                    
            self.welcome_message= self.questionOption.welcome_message;
            self.nextQuestion  = '';
             
            self.urlName = self.utility.spritValue(request.path_info,'/');
             
            if(len(self.urlName) >= 1 ) :
                #self.nextQuestion = '/' + self.urlName[0]+ '?id='+ str(self.questionOption.id_question_option);
                #self.nextQuestion = '/' + 'ans/reply/'+  str(self.questionOption.id_question_option);
                #self.nextQuestion = self.URL_REPLY.format(id)
                self.nextQuestion = self.urlUtility.URL_REPLY_QUESTIONNAIRE.format(key=str(key)); 
        else:
            log.error("find not found respondent with key %s ", str(key));
            redirect(self.urlUtility.URL_EXPIRED) ;       
            
               
            
        #self.welcome_message
        return dict(page='view', ready = 'yes',welcome_message = Markdown(self.welcome_message).convert(), nextQuestion= self.nextQuestion);
    
            
     
    
    @expose('pollandsurvey.templates.view.goodbye')
    def thankyou(self,key=0,came_from=lurl('/')):
        reload(sys).setdefaultencoding("utf-8");
        
        log.info('preview id : ' + str(key));
        
        
        #self.idProject,self.idPublic,self.idVoter,self.redirect = self.__checkExpire(key);
        self.respondents = model.Respondents.getByKey(key);
        if(self.respondents):
            self.idProject=self.respondents.id_question_project;
            self.idPublic=self.respondents.id_question_option;
            self.idVoter=self.respondents.id_voter;
            
            
            self.goodbye = '';
            
            self.questionOption,self.redirect = self.__checkOptionExpired(self.idPublic);
                    
            self.goodbye= self.questionOption.end_message;
            self.nextQuestion  = '';
            self.urlRedirect = ''; 
            self.urlName = self.utility.spritValue(request.path_info,'/');
            
            #self.respondents  = model.Respondents.getByVoterIdAndPublicId(self.idVoter,self.idPublic); 
            
            self.project = model.QuestionProject.getId(self.idProject) 
            
            self.projectType = self.project.id_question_project_type;
            
            if(len(self.urlName) >= 1 ) :
              
                self.urlRedirect = self.questionOption.redirect_url
        else:
            log.error("find not found respondent with key %s ", str(key));
            redirect(self.urlUtility.URL_EXPIRED) ;  
            
    
        return dict(page='goodbye', ready = 'yes',goodbye = Markdown(self.goodbye).convert(),nextQuestion = self.nextQuestion ,urlRedirect= self.urlRedirect,
                    option=self.questionOption,projectType = self.projectType,imageId = self.respondents.id_respondents);
    
    
    @expose('json')
    def getDataPreview(self, key=0,   *args, **kw): 
        reload(sys).setdefaultencoding("utf-8");
        log.info("function getDataPreview");
        
        log.info("key = %s", str(key));
        
        self.respondents = model.Respondents.getByKey(key);
        #idProject = kw.get('idProject');
        
        self.idProject=self.respondents.id_question_project;
        self.idPublic=self.respondents.id_question_option;
        self.idVoter=self.respondents.id_voter;
        self.redirect=None;
        
        #self.idProject,self.idPublic,self.idVoter,self.redirect = self.__checkExpire(self.respondents.id_question_project);
        
        log.info("idProject : %s,  idPublic : %s, idVoter : %s, redirect : %s  ", str(self.idProject), str(self.idPublic), str(self.idVoter), str(self.redirect));
       
        
        #self.respondents  = model.Respondents.getByVoterIdAndPublicId(self.idVoter,self.idPublic);    
        self.questionOption = model.QuestionOption.getId(self.idPublic);
        
        
        #get old question
        self.listReply = model.RespondentReply.listQuestionForUser(self.respondents.id_respondents);
        
        self.respondents.respondent_data = datetime.now();
        
        question = [];
        log.info("Random Question And Answer : " );
        if( len(self.listReply) >0 ):
            log.info("Random new");
            question = self.__getQuestionFromReply(self.listReply,self.questionOption);
            question = self.__randomQuestionAndAnswer(question,self.questionOption); #add 
        else:
             
            question = self.__getQuestion(self.idPublic,self.questionOption);
            log.info("get new Question and Random new, len question : %s", str(len(question)));
            #save to database
            question = self.__randomQuestionAndAnswer(question,self.questionOption);   #add
            model.RespondentReply.createQuestionForUser(question,self.respondents.id_respondents);
            log.info("Create Question And Answer to user : "******"utf-8");
        log.info( "function save Question answer");
        log.info( request.body);
        self.df = json.loads(request.body, encoding=request.charset);
        
        self.listAnswer = self.df.get('value');
        self.finished =self.df.get('finished');
        self.redirect = '';
        
         
        
        #from urlparse import urlparse;
        #parsed = urlparse(request.environ.get("HTTP_REFERER" ))
        #print 'path url : ', parsed.path
        if (len(self.listAnswer) >0):
            for value in self.listAnswer:
                 
                if(value):
                    self.idPublic =  value.get('idproject');
                    self.idResp =  value.get('idresp');
                    self.idQuestion = value.get('id');
                    self.values = value.get('value');
                    
                    print value.get('type');
                    
                    self.questionOption,self.redirect = self.__checkOptionExpired(self.idPublic,False);#check Expired
            
                    self.respondent,self.redirect = self.__checkRespondentFinished( None,  None,self.idResp,False);#check finished
                    
                    if(self.respondent):
                        self.question = model.Question.getById(self.idQuestion);#getQuestion
                         
                        self.respondent.finished = self.finished;
                        self.respondent.finished_date = datetime.now();
                        if(self.question):
                            self.respondentreply = model.RespondentReply.getByRespondentAndQuestion(self.idResp,self.idQuestion);
                            
                            if (self.respondentreply is None):
                                self.respondentreply = model.RespondentReply();
                                self.respondentreply.id_respondents = self.idResp;
                                self.respondentreply.id_question = self.idQuestion;
                                self.respondentreply.save();
                                log.info("save answer respondentreply : " +str( self.respondentreply.id_respondents ) + " and " + str( self.respondentreply.id_question ) + " success");
                                
                            
                            if (len(self.respondentreply.childenAnswer) == 0):
                                #save
                                for v in self.values:
                                    self.replyquestion = model.ReplyBasicQuestion(); 
                                    self.replyquestion.id_resp_reply = self.respondentreply.id_resp_reply; #error
                                    self.replyquestion.id_basic_data = v.get('id')
                                    self.replyquestion.answer_text = v.get('value')
                                    self.replyquestion.save();
                                 
                                    log.info("save answer replyquestion : " +str( self.respondentreply.id_resp_reply ) + " and " + str( self.replyquestion.id_basic_data ) + " success");
                                
                                
                            else:
                                log.info('user %s do this question : %s',self.idResp,self.idQuestion);
                                
                        else:
                            log.info('find not found question id : : %s',self.idQuestion);
                            
                    else:
                        log.info('find not found respondent id : : %s',self.idResp);
                    
            #calculate score        
            if(self.finished):  
                log.info('finished : calculate score ');
                model.Respondents.updateScoreByIdRespondents(self.idResp);
                self.__createScoreFile(self.idResp);
                
                self.redirect = self.urlUtility.URL_GOODBYE.format( key=  self.utility.splitNameWithOutExtention(basename(request.environ.get("HTTP_REFERER" )))  );
               
                    
                    
      
        return dict(success = True,redirect = self.redirect, finished = self.finished  );
    
     
    
    def __checkExpire(self,id):
        #sprint 10.2.1.0.html     idproject.idpublic.idvoter.
        self.value = self.utility.spritValue(id,'.');
         
        self.idProject =0;
        self.idPublic = 0;
        self.idVoter = 0;
        
        self.redirect = '';
        
        
        
        if(len(self.value)  == 4):
            self.idProject =self.value[0];
            self.idPublic = self.value[1];
            self.idVoter = self.value[2];
        else:
            self.idProject =None;
            self.idPublic = None;
            self.idVoter = None;
            
            log.info('parameter not have 4 parameter : %s', ','.join(self.value));
            self.redirect = self.urlUtility.URL_EXPIRED;
            redirect(self.urlUtility.URL_EXPIRED) ;
        
        self.voter = model.Voter.getId(self.idVoter);
        if(self.voter is None):
            log.info('find not voter in id : %s',self.idVoter);
            self.redirect = self.urlUtility.URL_HOME;
            redirect(self.urlUtility.URL_HOME) ;
        
        self.project = model.QuestionProject.getId(self.idProject);
        if(self.project is None):
            log.info('find not project in id project : %s',self.idProject);
            self.redirect = self.urlUtility.URL_HOME;
            redirect(self.urlUtility.URL_HOME) ;
            
        return self.idProject,self.idPublic,self.idVoter, self.redirect;
            
    def __checkOptionExpired(self,idPublic,isRedirect = True):
        #print 'public option id ',idPublic;
        self.questionOption = model.QuestionOption.getId( idPublic);           
        self.redirect = '';
        if  self.questionOption is None or ( not self.utility.isActiveFromDate(None,self.questionOption.activate_date,self.questionOption.expire_date) ):
            self.redirect = self.urlUtility.URL_EXPIRED;
            if (isRedirect):
                #print 'redirect ',self.URL_EXPIRED; 
                redirect(self.urlUtility.URL_EXPIRED) ;
      
                
        #print 'id option : ', self.questionOption.welcome_message;
        
        return self.questionOption,self.redirect;    
            
    def __checkRespondentFinished(self,idVoter,idPublic,idResp,isRedirect = True):
        self.respondent = None;
        self.redirect = '';
        if(idVoter and idPublic):
            self.respondent = model.Respondents.getByVoterAndPublicId(idVoter,idPublic);
        elif (idResp):
            self.respondent = model.Respondents.getId(idResp);
            
        if(self.respondent  is not None and self.respondent.finished == 1):
            log.info('voter finished in id public : %s',self.idPublic);
            self.redirect = self.urlUtility.URL_THANKYOU;
            if (isRedirect):
                redirect(self.urlUtility.URL_THANKYOU) ;
        elif (self.respondent is None):
            log.error("System can not find idVoter : %s , idPublic : %s" , idVoter, idPublic);
            
            redirect(self.urlUtility.URL_THANKYOU) ;
        
        return self.respondent,self.redirect;
    
    def __getQuestion(self,idPublic,questionOption):
        
        question = [];
        #get Project Option
        
        if self.questionOption :
            #get Question 
            self.listQuestions = model.Question.getByProjectId(questionOption.id_question_project);
            
            
            #get to object json
            for self.question in self.listQuestions:
                question.append(self.question.to_json(randomAnswer = questionOption.random_answer));
            
            
            
            #clear sequence 
               
        return question ;
    
    def __getQuestionFromReply(self,reply,questionOption):
        question = [];
        for re in reply:
            #re.question
            question.append(re.question.to_json(randomAnswer= questionOption.random_answer));
        
        return question;
    
    def __randomQuestionAndAnswer(self,question,questionOption):
        #option Randon Question
        if( questionOption.id_fix_random_type == 2):
            question = random.sample(question,len(question));#,self.questionOption.use_question_no );
        
        
        question = question[0:questionOption.use_question_no];
            
        return question;
    
    def __setSequenceQuestion(self,question):
        row = 1;
        for q in question:
            q['seq'] = row;
            row = row +1; 
        row =None;
        
        return question;
    
    def __createScoreFile(self,idResp):
        
        self.respondent = model.Respondents.getId(idResp);
        self.score = model.Respondents.getScoreByIdRespondents(self.idResp);
        self.voter = self.respondent.voter;
        
        self.convertHtml = ConvertHtml2Pdf();
        self.convertPNG = ConvertPdf2image();
        
        self.sourceHtml = model.SystemEnvironment.getScoreViewHtml();

        values = {};
        values['name'] = str(self.voter.prefix + ' ' + self.voter.firstname + ' ' + self.voter.lastname);
        values['score'] = str(self.score);
        
        self.outputPDFFilename = ("{0}\{1}-{2}-{3}-{4}.pdf").format(str(self.CONVERT_DIR), str(self.respondent.id_respondents), str(self.respondent.id_voter), str(self.respondent.id_question_project), str(self.respondent.id_question_option))  ;
        self.outputPNGFilename = ("{0}\{1}-{2}-{3}-{4}.png").format(str(self.CONVERT_DIR), str(self.respondent.id_respondents), str(self.respondent.id_voter), str(self.respondent.id_question_project), str(self.respondent.id_question_option))  ;
        
        self.result = self.convertHtml.convertHtmlToPdf(values, self.sourceHtml, self.outputPDFFilename);
        log.info("convert file %s is %s" %(self.outputPDFFilename, self.result));
        if(self.result == 0):
            self.result = self.convertPNG.convert(self.outputPDFFilename, self.outputPNGFilename)
            log.info("convert file %s is %s" %(self.outputPNGFilename, self.result));
            if(self.result):
                log.info("save image file %s is %s" %(self.outputPNGFilename, self.result));
                with open(self.outputPNGFilename,"rb") as f:
                    self.respondent.image_file = f.read(); 
        else:
            log.error("convert html to pdf error with id_resp=%s" %idResp)