def MenuEvaluerMensualite(self, event):
    inscriptions = Inscriptions()
    activite = GetActivite(inscriptions)
    if activite is None:
        inscriptions.Close()
        return
    brut, mensualites, coeffBR, coeffDeg, enfants = inscriptions.EvaluerMensualite(
        self.IDfamille, activite[0])
    inscriptions.Close()

    coeff = coeffBR * coeffDeg
    msgBrut = u"MONTANT BRUT:\n- famille: {montant:25.2f}\n".format(
        montant=inscriptions.CalculateTaux(brut, mensualites))
    msgRed = u"MONTANT REDUIT:\n- famille: {montant:25.2f}\n".format(
        montant=inscriptions.CalculateTaux(brut, mensualites, coeff))

    for id, prenom, taux in enfants:
        msgBrut += u"\n- {prenom:25s}: {montant:15.2f}".format(prenom=prenom,
            montant=inscriptions.CalculateTaux(taux, mensualites))
        msgRed += u"\n- {prenom:25s}: {montant:15.2f}".format(prenom=prenom,
            montant=inscriptions.CalculateTaux(taux, mensualites, coeff))

    reponse = (u"{msgBrut}\n\nREDUCTIONS:\n- intervenants BR: {coeffBR:25.0%}\n"
        u"- tarif dégressif: {coeffDeg:25.0%}\n- soit: {coeff:25.2%}\n\n\n{msgRed}").format(
        msgBrut=msgBrut, msgRed=msgRed,
        coeffBR=1 - coeffBR, coeffDeg=1 - coeffDeg, coeff=1 - coeff)
    message(reponse)
def ExecuterReq(self, req):
    if self.echec == 1:
        return False
    # Pour parer le pb des () avec MySQL
    if self.isNetwork:
        req = req.replace("()", "(10000000, 10000001)")
    try:
        self.cursor.execute(req)
        GestionDB.DICT_CONNEXIONS[self.IDconnexion].append(req)
    except Exception as err:
        err = str(err).encode("ascii", "replace")
        req = req.encode("ascii", "replace")
        message(err + u"\n\n" + req)
        print(
            _(u"Requete SQL incorrecte :\n%s\nErreur detectee:\n%s") %
            (req, err))
        return 0
    else:
        return 1
def Extension():
    if not hasModule(__name__ + VERSION):
        message(u"L'extension est correctement installée, " +
                u"merci de redémarrer Noethys pour l'activer.")
        return
    message(u"Extension installée et activée.", __name__ + VERSION)
def MenuFixerTarif(self, event):
    inscriptions = Inscriptions()

    # recuperer la saisie utilisateur pour l'année et le montant
    dlg = Dialog(None, db=inscriptions)
    response = dlg.ShowModal()
    if response != wx.ID_OK:
        return
    activite = dlg.GetAnnee()
    montant = dlg.GetMontant()
    dlg.Destroy()

    if not activite:
        return

    if not montant:
        text = u'Voulez-vous vraiment fixer un tarif mensuel de 0€ ?'
        response = message(text, style=wx.YES_NO)
        if response != wx.ID_YES:
            return

    # calculer le nouveau quotient et récupérer le quotient actif
    IDactivite, nom, date_debut, date_fin = activite

    brut, mensualites, coeffBR, coeffDeg, enfants = inscriptions.EvaluerMensualite(
        self.IDfamille, IDactivite)

    if not brut:
        message(
            u"Aucun enfant de cette famille n'est inscrit à cette activité",
            u"Opération impossible", wx.OK | wx.ICON_ERROR)
        return

    quotient = int(round(montant / brut))
    quotientActif = GetQuotientActif(inscriptions, self.IDfamille, date_debut,
                                     date_fin)

    # pas de redondances
    if quotientActif and quotientActif[4] and quotient == int(
            quotientActif[4]):
        message(u"Ce montant est déjà fixé.")
        return

    # stopper le quotient actif en BDD
    values = u""
    if quotientActif:
        date_debut = date.today().isoformat()
        values += u"""
        ({IDquotient}, NULL, NULL, '{date_fin}', NULL, NULL, NULL, NULL),
        """.format(IDquotient=quotientActif[0],
                   date_fin=date.fromordinal(date.today().toordinal() -
                                             1).isoformat())

    # nouveau quotient en BDD
    observations = u"""Pour une mensualite totale de {montant}€ :""".format(
        montant=montant)
    for id, prenom, taux in enfants:
        observations += u"\\n - {prenom}: {montant}".format(
            prenom=prenom, montant=round(montant * taux / brut, 2))
    values += u"""
    (NULL, {IDfamille}, '{date_debut}', '{date_fin}', {quotient}, "{observations}", NULL, 1)
    """.format(
        IDfamille=self.IDfamille,
        date_debut=date_debut,
        date_fin=date_fin,
        quotient=quotient,
        observations=observations,
    )

    # execution
    query = u"""
    INSERT INTO `quotients` (
        `IDquotient`,
        `IDfamille`,
        `date_debut`,
        `date_fin`,
        `quotient`,
        `observations`,
        `revenu`,
        `IDtype_quotient`
    )
    VALUES
        {values}
    ON DUPLICATE KEY UPDATE
        `date_fin`=VALUES(`date_fin`)
    """.format(values=values)
    inscriptions.ExecuterReq(query)
    inscriptions.Close()
    message(u"""Le montant a été fixé.
Merci de consulter le volet QF/Revenus pour vérifier la période d'application."""
            )
    OuvrirQF(self)
Esempio n. 5
0
def MajMensualiteBase():
    inscriptions = Inscriptions()

    activite = GetActivite(db=inscriptions)
    if activite is None:
        return
    IDactivite = activite[0]

    familles = inscriptions.GetResponse("SELECT `IDfamille` FROM `familles`")

    total = len(familles)
    current = 0
    progress = wx.ProgressDialog(
        title=u"Mise à jour des tarifs de base …",
        message=u"{current}/{total}".format(current=current, total=total),
        maximum=total,
        style=wx.PD_APP_MODAL | wx.PD_SMOOTH | wx.PD_CAN_SKIP
        | wx.PD_REMAINING_TIME | wx.PD_AUTO_HIDE)

    for IDfamille, in familles:
        current += 1
        ok, skip = progress.Update(
            value=current,
            newmsg=u"{current}/{total}".format(current=current, total=total),
        )
        if skip:
            progress.Destroy()
            return

        try:
            brut, mensualites, coeffBr, coeffDeg, enfants = inscriptions.EvaluerMensualite(
                IDfamille, IDactivite)
            quotient = inscriptions.GetQuotient(IDfamille, IDactivite)
            coeff = coeffBr * coeffDeg
            # mensualité estimée avant réductions
            inscriptions.AddValue(
                19, IDfamille, inscriptions.CalculateTaux(brut, mensualites))
            # coefficient de réduction "Intervenant BR"
            inscriptions.AddValue(43, IDfamille, coeffBr)
            # coefficient de réduction "Tarif dégressif"
            inscriptions.AddValue(44, IDfamille, coeffDeg)
            # coefficient de réduction global
            inscriptions.AddValue(45, IDfamille, coeff)
            # mensualité estimée après réductions
            inscriptions.AddValue(
                30, IDfamille,
                inscriptions.CalculateTaux(brut, mensualites, coeff))
            if quotient is not None:
                # mensualité fixée
                inscriptions.AddValue(20, IDfamille,
                                      round(brut * quotient[4], 2))
            fillCompteClient(IDfamille, inscriptions)
            # Enfants
            for id, prenom, taux in enfants:
                # mensualité estimée avant réductions
                inscriptions.AddValue(
                    25, id, inscriptions.CalculateTaux(taux, mensualites),
                    INDIVIDU)
                # mensualité estimée après réductions
                inscriptions.AddValue(
                    31, id, inscriptions.CalculateTaux(taux, mensualites,
                                                       coeff), INDIVIDU)
                if quotient is not None:
                    # mensualité fixée
                    inscriptions.AddValue(42, id, round(taux * quotient[4], 2),
                                          INDIVIDU)
            inscriptions.Execute()
        except Exception:
            progress.Destroy()
            printErr(u"Erreur avec la famille" + str(
                getQuery("""
            SELECT `nom`, `prenom`
            FROM `rattachements`
            LEFT JOIN `individus` USING(`IDindividu`)
            WHERE `IDfamille`={IDfamille}
            """.format(IDfamille=IDfamille))))
            return

    progress.Destroy()
    message(u"La procédure s'est terminée avec succés.", u"Fin")