# -*- mode: python -*-
# -*- coding: utf-8 -*-

##############################################################################
#
# Gestion scolarite IUT
#
# Copyright (c) 1999 - 2021 Emmanuel Viennet.  All rights reserved.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
#
#   Emmanuel Viennet      emmanuel.viennet@viennet.net
#
##############################################################################

""" Gestion des relations avec les entreprises

Note: Code très ancien, porté de Zope/DTML, peu utilisable

=> Voir si des départements utilisent encore ce module et envisager de le supprimer.

"""
import six.moves.urllib.request, six.moves.urllib.parse, six.moves.urllib.error
import string
import re
import time
import calendar

# MIGRATION EN COURS => MODULE DESACTIVE !

# A REVOIR
# from sco_permissions import ScoEntrepriseView, ScoEntrepriseChange
# from app import log
# from scolog import logdb
# from sco_utils import SCO_ENCODING
# import app.scodoc.sco_utils as scu
# import html_sidebar
# from app.scodoc.gen_tables import GenTable
# from app.scodoc.TrivialFormulator import TrivialFormulator, TF
# import sco_etud
# import sco_entreprises


def entreprise_header(REQUEST=None, page_title=""):
    "common header for all Entreprises pages"
    return html_sco_header.sco_header(page_title=page_title)


def entreprise_footer(REQUEST):
    "common entreprise footer"
    return html_sco_header.sco_footer(REQUEST)


security.declareProtected(ScoEntrepriseView, "sidebar")


def sidebar(REQUEST):
    "barre gauche (overide std sco sidebar)"
    # rewritten from legacy DTML code
    # XXX rare cas restant d'utilisation de l'acquisition Zope2: à revoir
    params = {"ScoURL": scu.ScoURL()}
    H = [
        """<div id="sidebar-container">
        <div class="sidebar">""",
        html_sidebar.sidebar_common(),
        """<h2 class="insidebar"><a href="%(ScoURL)s/Entreprises" class="sidebar">Entreprises</a></h2>
<ul class="insidebar">"""
        % params,
    ]
    if REQUEST.AUTHENTICATED_USER.has_permission(Permission.ScoEntrepriseChange):
        H.append(
            """<li class="insidebar"><a href="%(ScoURL)s/Entreprises/entreprise_create" class="sidebar">Nouvelle entreprise</a> </li>"""
            % params
        )

    H.append(
        """<li class="insidebar"><a href="%(ScoURL)s/Entreprises/entreprise_contact_list" class="sidebar">Contacts</a> </li></ul> """
        % params
    )

    # --- entreprise selectionnée:
    if "entreprise_id" in REQUEST.form:
        entreprise_id = REQUEST.form["entreprise_id"]
        E = sco_entreprises.do_entreprise_list(args={"entreprise_id": entreprise_id})
        if E:
            E = E[0]
            params.update(E)
            H.append(
                """<div class="entreprise-insidebar">
    <h3 class="insidebar"><a href="%(ScoURL)s/Entreprises/entreprise_edit?entreprise_id=%(entreprise_id)s" class="sidebar">%(nom)s</a></h2>
    <ul class="insidebar">
    <li class="insidebar"><a href="%(ScoURL)s/Entreprises/entreprise_correspondant_list?entreprise_id=%(entreprise_id)s" class="sidebar">Corresp.</a></li>"""
                % params
            )  # """
            if REQUEST.AUTHENTICATED_USER.has_permission(
                Permission.ScoEntrepriseChange
            ):
                H.append(
                    """<li class="insidebar"><a href="%(ScoURL)s/Entreprises/entreprise_correspondant_create?entreprise_id=%(entreprise_id)s" class="sidebar">Nouveau Corresp.</a></li>"""
                    % params
                )
            H.append(
                """<li class="insidebar"><a href="%(ScoURL)s/Entreprises/entreprise_contact_list?entreprise_id=%(entreprise_id)s" class="sidebar">Contacts</a></li>"""
                % params
            )
            if REQUEST.AUTHENTICATED_USER.has_permission(
                Permission.ScoEntrepriseChange
            ):
                H.append(
                    """<li class="insidebar"><a href="%(ScoURL)s/Entreprises/entreprise_contact_create?entreprise_id=%(entreprise_id)s" class="sidebar">Nouveau "contact"</a></li>"""
                    % params
                )
            H.append("</ul></div>")

    #
    H.append("""<br/><br/>%s""" % scu.icontag("entreprise_side_img"))
    if not REQUEST.AUTHENTICATED_USER.has_permission(Permission.ScoEntrepriseChange):
        H.append("""<br/><em>(Lecture seule)</em>""")
    H.append("""</div> </div> <!-- end of sidebar -->""")
    return "".join(H)


# --------------------------------------------------------------------
#
#   Entreprises : Vues
#
# --------------------------------------------------------------------
security.declareProtected(ScoEntrepriseView, "index_html")


def index_html(REQUEST=None, etud_nom=None, limit=50, offset="", format="html"):
    """Accueil module entreprises"""
    # Traduit du DTML - utilise table standard
    if limit:
        limit = int(limit)
    if offset:
        offset = int(offset or 0)

    if etud_nom:
        entreprises = sco_entreprises.do_entreprise_list_by_etud(
            args=REQUEST.form, sort_on_contact=True
        )
        table_navigation = ""
    else:
        entreprises = sco_entreprises.do_entreprise_list(
            args=REQUEST.form,
            test="~*",
            sort_on_contact=True,
            limit=limit,
            offset=offset,
        )
        # Liens navigation précédent/suivant
        webparams = {"limit": limit}
        if offset:
            webparams["offset"] = max((offset or 0) - limit, 0)
            prev_lnk = '<a class="stdlink" href="%s">précédentes</a>' % (
                REQUEST.URL0 + "?" + six.moves.urllib.parse.urlencode(webparams)
            )
        else:
            prev_lnk = ""
        if len(entreprises) >= limit:
            webparams["offset"] = (offset or 0) + limit
            next_lnk = '<a class="stdlink" href="%s">suivantes</a>' % (
                REQUEST.URL0 + "?" + six.moves.urllib.parse.urlencode(webparams)
            )
        else:
            next_lnk = ""
        table_navigation = (
            '<div class="table_nav"><span class="table_nav_prev">'
            + prev_lnk
            + '</span><span class="table_nav_mid"></span><span class="table_nav_next">'
            + next_lnk
            + "</span></div>"
        )
    # Ajout des liens sur la table:
    for e in entreprises:
        e["_nom_target"] = "entreprise_edit?entreprise_id=%(entreprise_id)s" % e
        e["correspondants"] = sco_entreprises.do_entreprise_correspondant_list(
            args={"entreprise_id": e["entreprise_id"]}
        )
        e["nbcorr"] = "%d corr." % len(e["correspondants"])
        e["_nbcorr_target"] = (
            "entreprise_correspondant_list?entreprise_id=%(entreprise_id)s" % e
        )
        e["contacts"] = sco_entreprises.do_entreprise_contact_list(
            args={"entreprise_id": e["entreprise_id"]}
        )
        e["nbcontact"] = "%d contacts." % len(e["contacts"])
        e["_nbcontact_target"] = (
            "entreprise_contact_list?entreprise_id=%(entreprise_id)s" % e
        )
    tab = GenTable(
        rows=entreprises,
        columns_ids=("nom", "ville", "secteur", "nbcorr", "nbcontact"),
        titles={
            "nom": "Entreprise",
            "ville": "Ville",
            "secteur": "Secteur",
            "nbcorr": "Corresp.",
            "contacts": "Contacts",
        },
        origin="Généré par %s le " % sco_version.SCONAME + scu.timedate_human_repr(),
        filename=scu.make_filename(
            "entreprises_%s" % context.get_preference("DeptName")
        ),
        caption="Entreprises du département %s" % context.get_preference("DeptName"),
        html_sortable=True,
        html_class="entreprise_list table_leftalign",
        html_with_td_classes=True,
        html_next_section=table_navigation,
        base_url=REQUEST.URL0 + "?",
        preferences=context.get_preferences(),
    )
    if format != "html":
        return tab.make_page(format=format, REQUEST=REQUEST)
    else:
        H = [
            entreprise_header(REQUEST=REQUEST, page_title="Suivi entreprises"),
            """<h2>Suivi relations entreprises</h2>""",
            """<div class="entreprise_list_table">""",
            tab.html(),
            """</div>""",
            entreprise_footer(REQUEST),
        ]
        return "\n".join(H)


security.declareProtected(ScoEntrepriseView, "entreprise_contact_list")


def entreprise_contact_list(entreprise_id=None, format="html", REQUEST=None):
    """Liste des contacts de l'entreprise"""
    H = [entreprise_header(REQUEST=REQUEST, page_title="Suivi entreprises")]
    if entreprise_id:
        E = sco_entreprises.do_entreprise_list(args={"entreprise_id": entreprise_id})[0]
        C = sco_entreprises.do_entreprise_contact_list(
            args={"entreprise_id": entreprise_id}
        )
        H.append(
            """<h2 class="entreprise_contact">Listes des contacts avec l'entreprise %(nom)s</h2>
        """
            % E
        )
    else:
        C = sco_entreprises.do_entreprise_contact_list(args={})
        H.append(
            """<h2 class="entreprise_contact">Listes des contacts</h2>
        """
        )
    for c in C:
        c["_date_target"] = "%s/entreprise_contact_edit?entreprise_contact_id=%s" % (
            scu.EntreprisesURL(),
            c["entreprise_contact_id"],
        )
        c["entreprise"] = sco_entreprises.do_entreprise_list(
            args={"entreprise_id": c["entreprise_id"]}
        )[0]
        if c["etudid"]:
            c["etud"] = context.getEtudInfo(etudid=c["etudid"], filled=1)[0]
            c["etudnom"] = c["etud"]["nomprenom"]
            c["_etudnom_target"] = "%s/ficheEtud?etudid=%s" % (
                scu.ScoURL(),
                c["etudid"],
            )
        else:
            c["etud"] = None
            c["etudnom"] = ""

    tab = GenTable(
        rows=C,
        columns_ids=("date", "type_contact", "etudnom", "description"),
        titles={
            "date": "Date",
            "type_contact": "Object",
            "etudnom": "Étudiant",
            "description": "Description",
        },
        origin="Généré par %s le " % sco_version.SCONAME + scu.timedate_human_repr(),
        filename=scu.make_filename("contacts_%s" % context.get_preference("DeptName")),
        caption="",
        html_sortable=True,
        html_class="contact_list table_leftalign",
        html_with_td_classes=True,
        base_url=REQUEST.URL0 + "?",
        preferences=context.get_preferences(),
    )
    if format != "html":
        return tab.make_page(format=format, REQUEST=REQUEST)

    H.append(tab.html())

    if REQUEST.AUTHENTICATED_USER.has_permission(Permission.ScoEntrepriseChange):
        if entreprise_id:
            H.append(
                """<p class="entreprise_create"><a class="entreprise_create" href="entreprise_contact_create?entreprise_id=%(entreprise_id)s">nouveau "contact"</a></p>
            """
                % E
            )

    H.append(entreprise_footer(REQUEST))
    return "\n".join(H)


security.declareProtected(ScoEntrepriseView, "entreprise_correspondant_list")


def entreprise_correspondant_list(
    entreprise_id=None,
    format="html",
    REQUEST=None,
):
    """Liste des correspondants de l'entreprise"""
    E = sco_entreprises.do_entreprise_list(args={"entreprise_id": entreprise_id})[0]
    H = [
        entreprise_header(REQUEST=REQUEST, page_title="Suivi entreprises"),
        """
        <h2>Listes des correspondants  dans l'entreprise %(nom)s</h2>
        """
        % E,
    ]
    correspondants = sco_entreprises.do_entreprise_correspondant_list(
        args={"entreprise_id": entreprise_id}
    )
    for c in correspondants:
        c["nomprenom"] = c["nom"].upper() + " " + c["nom"].capitalize()
        c[
            "_nomprenom_target"
        ] = "%s/entreprise_correspondant_edit?entreprise_corresp_id=%s" % (
            scu.EntreprisesURL(),
            c["entreprise_corresp_id"],
        )

        c["nom_entreprise"] = E["nom"]
        l = []
        if c["phone1"]:
            l.append(c["phone1"])
        if c["phone2"]:
            l.append(c["phone2"])
        if c["mobile"]:
            l.append(c["mobile"])
        c["telephones"] = " / ".join(l)
        c["mails"] = " ".join(
            [
                '<a href="mailto:%s">%s</a>' % (c["mail1"], c["mail1"])
                if c["mail1"]
                else "",
                '<a href="mailto:%s">%s</a>' % (c["mail2"], c["mail2"])
                if c["mail2"]
                else "",
            ]
        )
        c["modifier"] = (
            '<a class="corr_delete" href="entreprise_correspondant_edit?entreprise_corresp_id=%s">modifier</a>'
            % c["entreprise_corresp_id"]
        )
        c["supprimer"] = (
            '<a class="corr_delete" href="entreprise_correspondant_delete?entreprise_corresp_id=%s">supprimer</a>'
            % c["entreprise_corresp_id"]
        )
    tab = GenTable(
        rows=correspondants,
        columns_ids=(
            "nomprenom",
            "nom_entreprise",
            "fonction",
            "telephones",
            "mails",
            "note",
            "modifier",
            "supprimer",
        ),
        titles={
            "nomprenom": "Nom",
            "nom_entreprise": "Entreprise",
            "fonction": "Fonction",
            "telephones": "Téléphone",
            "mails": "Mail",
            "note": "Note",
            "modifier": "",
            "supprimer": "",
        },
        origin="Généré par %s le " % sco_version.SCONAME + scu.timedate_human_repr(),
        filename=scu.make_filename(
            "correspondants_%s_%s" % (E["nom"], context.get_preference("DeptName"))
        ),
        caption="",
        html_sortable=True,
        html_class="contact_list table_leftalign",
        html_with_td_classes=True,
        base_url=REQUEST.URL0 + "?",
        preferences=context.get_preferences(),
    )
    if format != "html":
        return tab.make_page(format=format, REQUEST=REQUEST)

    H.append(tab.html())

    if REQUEST.AUTHENTICATED_USER.has_permission(Permission.ScoEntrepriseChange):
        H.append(
            """<p class="entreprise_create"><a class="entreprise_create" href="entreprise_correspondant_create?entreprise_id=%(entreprise_id)s">Ajouter un correspondant dans l'entreprise %(nom)s</a></p>
            """
            % E
        )

    H.append(entreprise_footer(REQUEST))
    return "\n".join(H)


security.declareProtected(ScoEntrepriseView, "entreprise_contact_edit")


def entreprise_contact_edit(entreprise_contact_id, REQUEST=None):
    """Form edit contact"""
    c = sco_entreprises.do_entreprise_contact_list(
        args={"entreprise_contact_id": entreprise_contact_id}
    )[0]
    link_create_corr = (
        '<a href="%s/entreprise_correspondant_create?entreprise_id=%s">créer un nouveau correspondant</a>'
        % (scu.EntreprisesURL(), c["entreprise_id"])
    )
    E = sco_entreprises.do_entreprise_list(args={"entreprise_id": c["entreprise_id"]})[
        0
    ]
    correspondants = sco_entreprises.do_entreprise_correspondant_listnames(
        args={"entreprise_id": c["entreprise_id"]}
    ) + [("inconnu", "")]

    H = [
        entreprise_header(REQUEST=REQUEST, page_title="Suivi entreprises"),
        """<h2 class="entreprise_contact">Suivi entreprises</h2>
            <h3>Contact avec entreprise %(nom)s</h3>"""
        % E,
    ]
    tf = TrivialFormulator(
        REQUEST.URL0,
        REQUEST.form,
        (
            (
                "entreprise_contact_id",
                {"default": entreprise_contact_id, "input_type": "hidden"},
            ),
            (
                "entreprise_id",
                {"input_type": "hidden", "default": c["entreprise_id"]},
            ),
            (
                "type_contact",
                {
                    "input_type": "menu",
                    "title": "Objet",
                    "allowed_values": (
                        "Prospection",
                        "Stage étudiant",
                        "Contrat Apprentissage",
                        "Projet",
                        "Autre",
                    ),
                },
            ),
            (
                "date",
                {
                    "size": 12,
                    "title": "Date du contact (j/m/a)",
                    "allow_null": False,
                },
            ),
            (
                "entreprise_corresp_id",
                {
                    "input_type": "menu",
                    "title": "Correspondant entreprise",
                    "explanation": link_create_corr,
                    "allow_null": True,
                    "labels": [x[0] for x in correspondants],
                    "allowed_values": [x[1] for x in correspondants],
                },
            ),
            (
                "etudiant",
                {
                    "size": 16,
                    "title": "Etudiant concerné",
                    "allow_null": True,
                    "default": c["etudid"],
                    "explanation": "nom (si pas ambigu) ou code",
                },
            ),
            (
                "enseignant",
                {"size": 16, "title": "Enseignant (tuteur)", "allow_null": True},
            ),
            (
                "description",
                {
                    "input_type": "textarea",
                    "rows": 3,
                    "cols": 40,
                    "title": "Description",
                },
            ),
        ),
        cancelbutton="Annuler",
        initvalues=c,
        submitlabel="Modifier les valeurs",
        readonly=not REQUEST.AUTHENTICATED_USER.has_permission(
            Permission.ScoEntrepriseChange
        ),
    )

    if tf[0] == 0:
        H.append(tf[1])
        if REQUEST.AUTHENTICATED_USER.has_permission(
            Permission.ScoEntrepriseChange,
        ):
            H.append(
                """<p class="entreprise_descr"><a class="entreprise_delete" href="entreprise_contact_delete?entreprise_contact_id=%s">Supprimer ce contact</a> </p>"""
                % entreprise_contact_id
            )
    elif tf[0] == -1:
        return flask.redirect(scu.EntreprisesURL(context))
    else:
        etudok = sco_entreprises.do_entreprise_check_etudiant(tf[2]["etudiant"])
        if etudok[0] == 0:
            H.append("""<p class="entreprise_warning">%s</p>""" % etudok[1])
        else:
            tf[2].update({"etudid": etudok[1]})
            sco_entreprises.do_entreprise_contact_edit(tf[2])
            return flask.redirect(
                scu.EntreprisesURL()
                + "/entreprise_contact_list?entreprise_id="
                + str(c["entreprise_id"])
            )
    H.append(entreprise_footer(REQUEST))
    return "\n".join(H)


security.declareProtected(ScoEntrepriseView, "entreprise_correspondant_edit")


def entreprise_correspondant_edit(entreprise_corresp_id, REQUEST=None):
    """Form édition d'un correspondant"""
    c = sco_entreprises.do_entreprise_correspondant_list(
        args={"entreprise_corresp_id": entreprise_corresp_id}
    )[0]
    H = [
        entreprise_header(REQUEST=REQUEST, page_title="Suivi entreprises"),
        """<h2 class="entreprise_correspondant">Édition contact entreprise</h2>""",
    ]
    tf = TrivialFormulator(
        REQUEST.URL0,
        REQUEST.form,
        (
            (
                "entreprise_corresp_id",
                {"default": entreprise_corresp_id, "input_type": "hidden"},
            ),
            (
                "civilite",
                {
                    "input_type": "menu",
                    "labels": ["M.", "Mme"],
                    "allowed_values": ["M.", "Mme"],
                },
            ),
            ("nom", {"size": 25, "title": "Nom", "allow_null": False}),
            ("prenom", {"size": 25, "title": "Prénom"}),
            (
                "fonction",
                {
                    "input_type": "menu",
                    "allowed_values": (
                        "Directeur",
                        "RH",
                        "Resp. Administratif",
                        "Tuteur",
                        "Autre",
                    ),
                    "explanation": "fonction via à vis de l'IUT",
                },
            ),
            (
                "phone1",
                {
                    "size": 14,
                    "title": "Téléphone 1",
                },
            ),
            (
                "phone2",
                {
                    "size": 14,
                    "title": "Téléphone 2",
                },
            ),
            (
                "mobile",
                {
                    "size": 14,
                    "title": "Tél. mobile",
                },
            ),
            (
                "fax",
                {
                    "size": 14,
                    "title": "Fax",
                },
            ),
            (
                "mail1",
                {
                    "size": 25,
                    "title": "e-mail",
                },
            ),
            (
                "mail2",
                {
                    "size": 25,
                    "title": "e-mail 2",
                },
            ),
            (
                "note",
                {"input_type": "textarea", "rows": 3, "cols": 40, "title": "Note"},
            ),
        ),
        cancelbutton="Annuler",
        initvalues=c,
        submitlabel="Modifier les valeurs",
        readonly=not REQUEST.AUTHENTICATED_USER.has_permission(
            Permission.ScoEntrepriseChange
        ),
    )
    if tf[0] == 0:
        H.append(tf[1])
    elif tf[0] == -1:
        return flask.redirect(
            "%s/entreprise_correspondant_list?entreprise_id=%s"
            % (scu.EntreprisesURL(), c["entreprise_id"])
        )
    else:
        sco_entreprises.do_entreprise_correspondant_edit(tf[2])
        return flask.redirect(
            "%s/entreprise_correspondant_list?entreprise_id=%s"
            % (scu.EntreprisesURL(), c["entreprise_id"])
        )
    H.append(entreprise_footer(REQUEST))
    return "\n".join(H)


security.declareProtected(ScoEntrepriseChange, "entreprise_contact_create")


def entreprise_contact_create(entreprise_id, REQUEST=None):
    """Form création contact"""
    E = sco_entreprises.do_entreprise_list(args={"entreprise_id": entreprise_id})[0]
    correspondants = sco_entreprises.do_entreprise_correspondant_listnames(
        args={"entreprise_id": entreprise_id}
    )
    if not correspondants:
        correspondants = [("inconnu", "")]
    curtime = time.strftime("%d/%m/%Y")
    link_create_corr = (
        '<a href="%s/entreprise_correspondant_create?entreprise_id=%s">créer un nouveau correspondant</a>'
        % (scu.EntreprisesURL(), entreprise_id)
    )
    H = [
        entreprise_header(REQUEST=REQUEST, page_title="Suivi entreprises"),
        """<h2 class="entreprise_contact">Nouveau "contact" avec l'entreprise %(nom)s</h2>"""
        % E,
    ]
    tf = TrivialFormulator(
        REQUEST.URL0,
        REQUEST.form,
        (
            ("entreprise_id", {"input_type": "hidden", "default": entreprise_id}),
            (
                "type_contact",
                {
                    "input_type": "menu",
                    "title": "Objet",
                    "allowed_values": (
                        "Prospection",
                        "Stage étudiant",
                        "Contrat Apprentissage DUT GTR1",
                        "Contrat Apprentissage DUT GTR2",
                        "Contrat Apprentissage Licence SQRT",
                        "Projet",
                        "Autre",
                    ),
                    "default": "Stage étudiant",
                },
            ),
            (
                "date",
                {
                    "size": 12,
                    "title": "Date du contact (j/m/a)",
                    "allow_null": False,
                    "default": curtime,
                },
            ),
            (
                "entreprise_corresp_id",
                {
                    "input_type": "menu",
                    "title": "Correspondant entreprise",
                    "explanation": link_create_corr,
                    "allow_null": True,
                    "labels": [x[0] for x in correspondants],
                    "allowed_values": [x[1] for x in correspondants],
                },
            ),
            (
                "etudiant",
                {
                    "size": 16,
                    "title": "Etudiant concerné",
                    "allow_null": True,
                    "explanation": "nom (si pas ambigu) ou code",
                },
            ),
            (
                "enseignant",
                {"size": 16, "title": "Enseignant (tuteur)", "allow_null": True},
            ),
            (
                "description",
                {
                    "input_type": "textarea",
                    "rows": 3,
                    "cols": 40,
                    "title": "Description",
                },
            ),
        ),
        cancelbutton="Annuler",
        submitlabel="Ajouter ce contact",
        readonly=not REQUEST.AUTHENTICATED_USER.has_permission(
            Permission.ScoEntrepriseChange
        ),
    )
    if tf[0] == 0:
        H.append(tf[1])
    elif tf[0] == -1:
        return flask.redirect(scu.EntreprisesURL(context))
    else:
        etudok = sco_entreprises.do_entreprise_check_etudiant(tf[2]["etudiant"])
        if etudok[0] == 0:
            H.append("""<p class="entreprise_warning">%s</p>""" % etudok[1])
        else:
            tf[2].update({"etudid": etudok[1]})
            sco_entreprises.do_entreprise_contact_create(tf[2])
            return flask.redirect(scu.EntreprisesURL())
    H.append(entreprise_footer(REQUEST))
    return "\n".join(H)


security.declareProtected(ScoEntrepriseChange, "entreprise_contact_delete")


def entreprise_contact_delete(entreprise_contact_id, REQUEST=None):
    """Form delete contact"""
    c = sco_entreprises.do_entreprise_contact_list(
        args={"entreprise_contact_id": entreprise_contact_id}
    )[0]
    H = [
        entreprise_header(REQUEST=REQUEST, page_title="Suivi entreprises"),
        """<h2>Suppression du contact</h2>""",
    ]
    tf = TrivialFormulator(
        REQUEST.URL0,
        REQUEST.form,
        (("entreprise_contact_id", {"input_type": "hidden"}),),
        initvalues=c,
        submitlabel="Confirmer la suppression",
        cancelbutton="Annuler",
        readonly=not REQUEST.AUTHENTICATED_USER.has_permission(ScoEntrepriseChange),
    )
    if tf[0] == 0:
        H.append(tf[1])
    elif tf[0] == -1:
        return flask.redirect(scu.EntreprisesURL(context))
    else:
        sco_entreprises.do_entreprise_contact_delete(c["entreprise_contact_id"])
        return flask.redirect(scu.EntreprisesURL(context))
    H.append(entreprise_footer(REQUEST))
    return "\n".join(H)


security.declareProtected(ScoEntrepriseChange, "entreprise_correspondant_create")


def entreprise_correspondant_create(entreprise_id, REQUEST=None):
    """Form création correspondant"""
    E = sco_entreprises.do_entreprise_list(args={"entreprise_id": entreprise_id})[0]
    H = [
        entreprise_header(REQUEST=REQUEST, page_title="Suivi entreprises"),
        """<h2 class="entreprise_contact">Nouveau correspondant l'entreprise %(nom)s</h2>"""
        % E,
    ]
    tf = TrivialFormulator(
        REQUEST.URL0,
        REQUEST.form,
        (
            ("entreprise_id", {"input_type": "hidden", "default": entreprise_id}),
            (
                "civilite",
                {
                    "input_type": "menu",
                    "labels": ["M.", "Mme"],
                    "allowed_values": ["M.", "Mme"],
                },
            ),
            ("nom", {"size": 25, "title": "Nom", "allow_null": False}),
            ("prenom", {"size": 25, "title": "Prénom"}),
            (
                "fonction",
                {
                    "input_type": "menu",
                    "allowed_values": (
                        "Directeur",
                        "RH",
                        "Resp. Administratif",
                        "Tuteur",
                        "Autre",
                    ),
                    "default": "Tuteur",
                    "explanation": "fonction via à vis de l'IUT",
                },
            ),
            (
                "phone1",
                {
                    "size": 14,
                    "title": "Téléphone 1",
                },
            ),
            (
                "phone2",
                {
                    "size": 14,
                    "title": "Téléphone 2",
                },
            ),
            (
                "mobile",
                {
                    "size": 14,
                    "title": "Tél. mobile",
                },
            ),
            (
                "fax",
                {
                    "size": 14,
                    "title": "Fax",
                },
            ),
            (
                "mail1",
                {
                    "size": 25,
                    "title": "e-mail",
                },
            ),
            (
                "mail2",
                {
                    "size": 25,
                    "title": "e-mail 2",
                },
            ),
            (
                "note",
                {"input_type": "textarea", "rows": 3, "cols": 40, "title": "Note"},
            ),
        ),
        cancelbutton="Annuler",
        submitlabel="Ajouter ce correspondant",
        readonly=not REQUEST.AUTHENTICATED_USER.has_permission(
            Permission.ScoEntrepriseChange
        ),
    )
    if tf[0] == 0:
        H.append(tf[1])
    elif tf[0] == -1:
        return flask.redirect(scu.EntreprisesURL(context))
    else:
        sco_entreprises.do_entreprise_correspondant_create(tf[2])
        return flask.redirect(scu.EntreprisesURL(context))
    H.append(entreprise_footer(REQUEST))
    return "\n".join(H)


security.declareProtected(ScoEntrepriseChange, "entreprise_correspondant_delete")


def entreprise_correspondant_delete(entreprise_corresp_id, REQUEST=None):
    """Form delete correspondant"""
    c = sco_entreprises.do_entreprise_correspondant_list(
        args={"entreprise_corresp_id": entreprise_corresp_id}
    )[0]
    H = [
        entreprise_header(REQUEST=REQUEST, page_title="Suivi entreprises"),
        """<h2>Suppression du correspondant %(nom)s %(prenom)s</h2>""" % c,
    ]
    tf = TrivialFormulator(
        REQUEST.URL0,
        REQUEST.form,
        (("entreprise_corresp_id", {"input_type": "hidden"}),),
        initvalues=c,
        submitlabel="Confirmer la suppression",
        cancelbutton="Annuler",
        readonly=not REQUEST.AUTHENTICATED_USER.has_permission(
            Permission.ScoEntrepriseChange
        ),
    )
    if tf[0] == 0:
        H.append(tf[1])
    elif tf[0] == -1:
        return flask.redirect(scu.EntreprisesURL())
    else:
        sco_entreprises.do_entreprise_correspondant_delete(c["entreprise_corresp_id"])
        return flask.redirect(scu.EntreprisesURL())
    H.append(entreprise_footer(REQUEST))
    return "\n".join(H)


security.declareProtected(ScoEntrepriseChange, "entreprise_delete")


def entreprise_delete(entreprise_id, REQUEST=None):
    """Form delete entreprise"""
    E = sco_entreprises.do_entreprise_list(args={"entreprise_id": entreprise_id})[0]
    H = [
        entreprise_header(REQUEST=REQUEST, page_title="Suivi entreprises"),
        """<h2>Suppression de l'entreprise %(nom)s</h2>
        <p class="entreprise_warning">Attention: supression définitive de l'entreprise, de ses correspondants et contacts.
        </p>"""
        % E,
    ]
    Cl = sco_entreprises.do_entreprise_correspondant_list(
        args={"entreprise_id": entreprise_id}
    )
    if Cl:
        H.append(
            """<h3>Correspondants dans l'entreprise qui seront <em>supprimés</em>:</h3><ul>"""
        )
        for c in Cl:
            H.append("""<li>%(nom)s %(prenom)s (%(fonction)s)</li>""" % c)
        H.append("""</ul>""")

    Cts = sco_entreprises.do_entreprise_contact_list(
        args={"entreprise_id": entreprise_id}
    )
    if Cts:
        H.append(
            """<h3>Contacts avec l'entreprise qui seront <em>supprimés</em>:</h3><ul>"""
        )
        for c in Cts:
            H.append("""<li>%(date)s %(description)s</li>""" % c)
        H.append("""</ul>""")
    tf = TrivialFormulator(
        REQUEST.URL0,
        REQUEST.form,
        (("entreprise_id", {"input_type": "hidden"}),),
        initvalues=E,
        submitlabel="Confirmer la suppression",
        cancelbutton="Annuler",
        readonly=not REQUEST.AUTHENTICATED_USER.has_permission(
            Permission.ScoEntrepriseChange
        ),
    )
    if tf[0] == 0:
        H.append(tf[1])
    elif tf[0] == -1:
        return flask.redirect(scu.EntreprisesURL())
    else:
        sco_entreprises.do_entreprise_delete(E["entreprise_id"])
        return flask.redirect(scu.EntreprisesURL())
    H.append(entreprise_footer(REQUEST))
    return "\n".join(H)


# -------- Formulaires: traductions du DTML
security.declareProtected(ScoEntrepriseChange, "entreprise_create")


def entreprise_create(REQUEST=None):
    """Form. création entreprise"""
    H = [
        entreprise_header(REQUEST, page_title="Création d'une entreprise"),
        """<h2 class="entreprise_new">Création d'une entreprise</h2>""",
    ]
    tf = TrivialFormulator(
        REQUEST.URL0,
        REQUEST.form,
        (
            ("nom", {"size": 25, "title": "Nom de l'entreprise"}),
            (
                "adresse",
                {"size": 30, "title": "Adresse", "explanation": "(numéro, rue)"},
            ),
            ("codepostal", {"size": 8, "title": "Code Postal"}),
            ("ville", {"size": 30, "title": "Ville"}),
            ("pays", {"size": 30, "title": "Pays", "default": "France"}),
            (
                "localisation",
                {
                    "input_type": "menu",
                    "labels": ["Ile de France", "Province", "Etranger"],
                    "allowed_values": ["IDF", "Province", "Etranger"],
                },
            ),
            ("secteur", {"size": 30, "title": "Secteur d'activités"}),
            (
                "privee",
                {
                    "input_type": "menu",
                    "title": "Statut",
                    "labels": [
                        "Entreprise privee",
                        "Entreprise Publique",
                        "Association",
                    ],
                    "allowed_values": ["privee", "publique", "association"],
                },
            ),
            (
                "plus10salaries",
                {
                    "title": "Masse salariale",
                    "type": "integer",
                    "input_type": "menu",
                    "labels": [
                        "10 salariés ou plus",
                        "Moins de 10 salariés",
                        "Inconnue",
                    ],
                    "allowed_values": [1, 0, -1],
                },
            ),
            (
                "qualite_relation",
                {
                    "title": "Qualité relation IUT/Entreprise",
                    "input_type": "menu",
                    "default": "-1",
                    "labels": [
                        "Très bonne",
                        "Bonne",
                        "Moyenne",
                        "Mauvaise",
                        "Inconnue",
                    ],
                    "allowed_values": ["100", "75", "50", "25", "-1"],
                },
            ),
            ("contact_origine", {"size": 30, "title": "Origine du contact"}),
            (
                "note",
                {"input_type": "textarea", "rows": 3, "cols": 40, "title": "Note"},
            ),
        ),
        cancelbutton="Annuler",
        submitlabel="Ajouter cette entreprise",
        readonly=not REQUEST.AUTHENTICATED_USER.has_permission(
            Permission.ScoEntrepriseChange
        ),
    )
    if tf[0] == 0:
        return "\n".join(H) + tf[1] + entreprise_footer(REQUEST)
    elif tf[0] == -1:
        return flask.redirect(scu.EntreprisesURL())
    else:
        sco_entreprises.do_entreprise_create(tf[2])
        return flask.redirect(scu.EntreprisesURL())


security.declareProtected(ScoEntrepriseView, "entreprise_edit")


def entreprise_edit(entreprise_id, REQUEST=None, start=1):
    """Form. edit entreprise"""
    authuser = REQUEST.AUTHENTICATED_USER
    readonly = not authuser.has_permission(Permission.ScoEntrepriseChange)
    F = sco_entreprises.do_entreprise_list(args={"entreprise_id": entreprise_id})[0]
    H = [
        entreprise_header(REQUEST, page_title="Entreprise"),
        """<h2 class="entreprise">%(nom)s</h2>""" % F,
    ]
    tf = TrivialFormulator(
        REQUEST.URL0,
        REQUEST.form,
        (
            ("entreprise_id", {"default": entreprise_id, "input_type": "hidden"}),
            ("start", {"default": 1, "input_type": "hidden"}),
            (
                "date_creation",
                {"default": time.strftime("%Y-%m-%d"), "input_type": "hidden"},
            ),
            ("nom", {"size": 25, "title": "Nom de l'entreprise"}),
            (
                "adresse",
                {"size": 30, "title": "Adresse", "explanation": "(numéro, rue)"},
            ),
            ("codepostal", {"size": 8, "title": "Code Postal"}),
            ("ville", {"size": 30, "title": "Ville"}),
            ("pays", {"size": 30, "title": "Pays", "default": "France"}),
            (
                "localisation",
                {
                    "input_type": "menu",
                    "labels": ["Ile de France", "Province", "Etranger"],
                    "allowed_values": ["IDF", "Province", "Etranger"],
                },
            ),
            ("secteur", {"size": 30, "title": "Secteur d'activités"}),
            (
                "privee",
                {
                    "input_type": "menu",
                    "title": "Statut",
                    "labels": [
                        "Entreprise privee",
                        "Entreprise Publique",
                        "Association",
                    ],
                    "allowed_values": ["privee", "publique", "association"],
                },
            ),
            (
                "plus10salaries",
                {
                    "title": "Masse salariale",
                    "input_type": "menu",
                    "labels": [
                        "10 salariés ou plus",
                        "Moins de 10 salariés",
                        "Inconnue",
                    ],
                    "allowed_values": ["1", "0", "-1"],
                },
            ),
            (
                "qualite_relation",
                {
                    "title": "Qualité relation IUT/Entreprise",
                    "input_type": "menu",
                    "labels": [
                        "Très bonne",
                        "Bonne",
                        "Moyenne",
                        "Mauvaise",
                        "Inconnue",
                    ],
                    "allowed_values": ["100", "75", "50", "25", "-1"],
                },
            ),
            ("contact_origine", {"size": 30, "title": "Origine du contact"}),
            (
                "note",
                {"input_type": "textarea", "rows": 3, "cols": 40, "title": "Note"},
            ),
        ),
        cancelbutton="Annuler",
        initvalues=F,
        submitlabel="Modifier les valeurs",
        readonly=readonly,
    )

    if tf[0] == 0:
        H.append(tf[1])
        Cl = sco_entreprises.do_entreprise_correspondant_list(
            args={"entreprise_id": F["entreprise_id"]}
        )
        Cts = sco_entreprises.do_entreprise_contact_list(
            args={"entreprise_id": F["entreprise_id"]}
        )
        if not readonly:
            H.append(
                """<p>%s&nbsp;<a class="entreprise_delete" href="entreprise_delete?entreprise_id=%s">Supprimer cette entreprise</a> </p>"""
                % (
                    scu.icontag("delete_img", title="delete", border="0"),
                    F["entreprise_id"],
                )
            )
        if len(Cl):
            H.append(
                """<h3>%d correspondants dans l'entreprise %s (<a href="entreprise_correspondant_list?entreprise_id=%s">liste complète</a>) :</h3>
<ul>"""
                % (len(Cl), F["nom"], F["entreprise_id"])
            )
            for c in Cl:
                H.append(
                    """<li><a href="entreprise_correspondant_edit?entreprise_corresp_id=%s">"""
                    % c["entreprise_corresp_id"]
                )
                if c["nom"]:
                    nom = (
                        c["nom"]
                        .decode(SCO_ENCODING)
                        .lower()
                        .capitalize()
                        .encode(SCO_ENCODING)
                    )
                else:
                    nom = ""
                if c["prenom"]:
                    prenom = (
                        c["prenom"]
                        .decode(SCO_ENCODING)
                        .lower()
                        .capitalize()
                        .encode(SCO_ENCODING)
                    )
                else:
                    prenom = ""
                H.append("""%s %s</a>&nbsp;(%s)</li>""" % (nom, prenom, c["fonction"]))
            H.append("</ul>")
        if len(Cts):
            H.append(
                """<h3>%d contacts avec l'entreprise %s (<a href="entreprise_contact_list?entreprise_id=%s">liste complète</a>) :</h3><ul>"""
                % (len(Cts), F["nom"], F["entreprise_id"])
            )
            for c in Cts:
                H.append(
                    """<li><a href="entreprise_contact_edit?entreprise_contact_id=%s">%s</a>&nbsp;&nbsp;&nbsp;"""
                    % (c["entreprise_contact_id"], c["date"])
                )
                if c["type_contact"]:
                    H.append(c["type_contact"])
                if c["etudid"]:
                    etud = context.getEtudInfo(etudid=c["etudid"], filled=1)
                    if etud:
                        etud = etud[0]
                        H.append(
                            """<a href="%s/ficheEtud?etudid=%s">%s</a>"""
                            % (scu.ScoURL(), c["etudid"], etud["nomprenom"])
                        )
                if c["description"]:
                    H.append("(%s)" % c["description"])
                H.append("</li>")
            H.append("</ul>")
        return "\n".join(H) + entreprise_footer(REQUEST)
    elif tf[0] == -1:
        return flask.redirect(scu.EntreprisesURL() + "?start=" + start)
    else:
        sco_entreprises.do_entreprise_edit(tf[2])
        return flask.redirect(scu.EntreprisesURL() + "?start=" + start)