def remote_display_decision(self):
     """
     Display the decision screen
     :return: deferred
     """
     logger.info(u"{} Decision".format(self._le2mclt.uid))
     defered = defer.Deferred()
     if self._le2mclt.simulation:
         self._ecran_decision = GuiDecision(
             defered, True, self._le2mclt.screen, self)
         return defered
     else:
         self._ecran_decision = GuiDecision(
             defered, self._le2mclt.automatique, self._le2mclt.screen, self)
         self._ecran_decision.show()
         return defered
class RemoteTC(IRemote):
    """
    Class remote, remote_ methods can be called by the server
    """
    def __init__(self, le2mclt):
        IRemote.__init__(self, le2mclt)
        self._le2mclt = le2mclt
        self._tcremoteplayer = None  # to send message
        self._ecran_decision = None
        self._payoffs = {}

    @property
    def tcremoteplayer(self):
        return self._tcremoteplayer

    def remote_configure(self, tcremoteplayer, params):
        logger.info(u"{} configure".format(self._le2mclt.uid))
        self._tcremoteplayer = tcremoteplayer
        for k, v in params.viewitems():
            setattr(pms, k, v)

    def remote_newperiod(self, period):
        logger.info(u"{} Period {}".format(self._le2mclt.uid, period))
        self.currentperiod = period
        if self.currentperiod == 1:
            del self.histo[1:]

    def remote_display_decision(self):
        """
        Display the decision screen
        :return: deferred
        """
        logger.info(u"{} Decision".format(self._le2mclt.uid))
        defered = defer.Deferred()
        if self._le2mclt.simulation:
            self._ecran_decision = GuiDecision(
                defered, True, self._le2mclt.screen, self)
            return defered
        else:
            self._ecran_decision = GuiDecision(
                defered, self._le2mclt.automatique, self._le2mclt.screen, self)
            self._ecran_decision.show()
            return defered

    @defer.inlineCallbacks
    def send_look(self, grille):
        logger.info(u"{} send_look grille {}".format(self._le2mclt.uid, grille))
        yield (self.tcremoteplayer.callRemote("send_look", grille))

    @defer.inlineCallbacks
    def send_try(self, grille, valeur):
        logger.info(u"{} send_try grille {} valeur {}".format(
            self._le2mclt.uid, grille, valeur))
        yield (self.tcremoteplayer.callRemote("send_try", grille, valeur))

    @defer.inlineCallbacks
    def send_message(self, message):
        logger.info(u"{} send_message {}".format(self._le2mclt.uid, message))
        yield (self.tcremoteplayer.callRemote("send_message", message))

    def remote_display_message(self, message):
        logger.info(u"{} display_message {}".format(self._le2mclt.uid, message))
        if self._le2mclt.simulation:
            pass
        else:
            self._ecran_decision.add_message(message)

    def remote_display_additionnalquestions(self, nbanswers):
        logger.info(u"{} display_additionnalquestions".format(
            self._le2mclt.uid))
        if self._le2mclt.simulation:
            rep = {"TC_confidence": random.randint(0, nbanswers),
                   "TC_jobsatisfaction": random.randint(0, 7)}
            if pms.TREATMENT == pms.get_treatment("avec_communication"):
                rep["TC_infosatisfaction"] = random.randint(0, 7)
            logger.info(u"{} renvoi {}".format(self._le2mclt.uid, rep))
            return rep
        else:
            defered = defer.Deferred()
            ecran_additionnalquestions = DAdditionnalquestions(
                defered, self._le2mclt.automatique, self._le2mclt.screen,
                nbanswers)
            ecran_additionnalquestions.show()
            return defered

    def remote_display_questionapresdictator(self):
        logger.info(u"{} remote_display_questionapresdictator".format(
            self._le2mclt.uid))
        if self._le2mclt.simulation:
            rep = random.randint(0, 10)
            logger.info(u"{} renvoi {}".format(self._le2mclt.uid, rep))
            return rep
        else:
            defered = defer.Deferred()
            screen = DQuestionDictator(
                defered, self._le2mclt.automatique, self._le2mclt.screen)
            screen.show()
            return defered

    def remote_display_summary(self, period_content):
        txt = texts_TC.get_text_summary(period_content)
        return self._le2mclt.get_remote("base").\
            remote_display_information(txt, html=True)

    def remote_set_payoffs_TC(self, sequence, in_euros, in_ecus=None):
        logger.info(u"{} set_payoffs_TC".format(self.le2mclt.uid))
        self.remote_set_payoffs(in_euros, in_ecus)
        self.payoff_text = texts_TC.get_payoff_text(
            self.payoff_euros, self.payoff_ecus)
        self._payoffs[sequence] = {
            "euro": self.payoff_euros, "ecu": self.payoff_ecus,
            "txt": self.payoff_text}

    def remote_display_payoffs_TC(self, sequence):
        logger.info(u"{} display_payoffs_TC".format(self.le2mclt.uid))
        return self.le2mclt.get_remote("base").remote_display_information(
            self._payoffs[sequence]["txt"])

    def remote_display_questfinal(self):
        logger.info(u"{} display_questfinal".format(self._le2mclt.uid))
        if self.le2mclt.simulation:
            from datetime import datetime
            inputs = {}
            today_year = datetime.now().year
            inputs['naissance'] = today_year - random.randint(16, 60)
            inputs['genre'] = random.randint(0, 1)
            inputs['nationalite'] = random.randint(1, 100)
            inputs['couple'] = random.randint(0, 1)
            inputs['etudiant'] = random.randint(0, 1)
            if inputs['etudiant'] == 0:
                inputs['etudiant_discipline'] = random.randint(1, 10)
                inputs['etudiant_niveau'] = random.randint(1, 6)
            inputs['experiences'] = random.randint(0, 1)
            inputs["fratrie_nombre"] = random.randint(0, 10)
            if inputs["fratrie_nombre"] > 0:
                inputs["fratrie_rang"] = random.randint(
                    1, inputs["fratrie_nombre"] + 1)
            else: inputs["fratrie_rang"] = 0
            # sportivité
            inputs["sportif"] = random.randint(0, 1)
            if inputs["sportif"] == 0:
                inputs["sportif_type"] = random.randint(0, 1)
                inputs["sportif_competition"] = random.randint(0, 1)
            # religiosité
            inputs['religion_place'] = random.randint(1, 4)
            inputs['religion_croyance'] = random.randint(1, 4)
            inputs['religion_nom'] = random.randint(1, 6)
            # Ludivine's questions
            inputs["residence"] = random.randint(1, 4)
            inputs["luxembourgish_speak"] = random.randint(1, 4)
            inputs["luxembourgish_understand"] = random.randint(1, 4)
            inputs["luxembourgish_read"] = random.randint(1, 4)
            inputs["luxembourgish_write"] = random.randint(1, 4)
            inputs["french_speak"] = random.randint(1, 4)
            inputs["french_understand"] = random.randint(1, 4)
            inputs["french_read"] = random.randint(1, 4)
            inputs["french_write"] = random.randint(1, 4)
            inputs["german_speak"] = random.randint(1, 4)
            inputs["german_understand"] = random.randint(1, 4)
            inputs["german_read"] = random.randint(1, 4)
            inputs["german_write"] = random.randint(1, 4)
            inputs["english_speak"] = random.randint(1, 4)
            inputs["english_understand"] = random.randint(1, 4)
            inputs["english_read"] = random.randint(1, 4)
            inputs["english_write"] = random.randint(1, 4)
            if inputs["etudiant"] == 1:  # not student
                inputs["profession"] = random.randint(1, 8)
            logger.info(u"Renvoi: {}".format(inputs))
            return inputs

        else:
            defered = defer.Deferred()
            screen = DQuestFinalTC(defered, self.le2mclt.automatique,
                                   self.le2mclt.screen)
            screen.show()
            return defered