forked from ScoDoc/ScoDoc
formulaire dynamique envoi offre
This commit is contained in:
parent
9af424d356
commit
8d64bf3b87
@ -40,6 +40,7 @@ from wtforms import (
|
|||||||
SelectMultipleField,
|
SelectMultipleField,
|
||||||
DateField,
|
DateField,
|
||||||
BooleanField,
|
BooleanField,
|
||||||
|
FieldList,
|
||||||
)
|
)
|
||||||
from wtforms.validators import ValidationError, DataRequired, Email, Optional
|
from wtforms.validators import ValidationError, DataRequired, Email, Optional
|
||||||
from wtforms.widgets import ListWidget, CheckboxInput
|
from wtforms.widgets import ListWidget, CheckboxInput
|
||||||
@ -424,19 +425,13 @@ class StageApprentissageModificationForm(FlaskForm):
|
|||||||
|
|
||||||
|
|
||||||
class EnvoiOffreForm(FlaskForm):
|
class EnvoiOffreForm(FlaskForm):
|
||||||
responsable_1 = _build_string_field(
|
responsables = FieldList(
|
||||||
"Responsable de formation (*)",
|
_build_string_field(
|
||||||
render_kw={"placeholder": "Tapez le nom du responsable de formation"},
|
"Responsable (*)",
|
||||||
)
|
|
||||||
responsable_2 = _build_string_field(
|
|
||||||
"Responsable de formation",
|
|
||||||
required=False,
|
|
||||||
render_kw={"placeholder": "Tapez le nom du responsable de formation"},
|
|
||||||
)
|
|
||||||
responsable_3 = _build_string_field(
|
|
||||||
"Responsable de formation",
|
|
||||||
required=False,
|
|
||||||
render_kw={"placeholder": "Tapez le nom du responsable de formation"},
|
render_kw={"placeholder": "Tapez le nom du responsable de formation"},
|
||||||
|
),
|
||||||
|
min_entries=1,
|
||||||
|
max_entries=5,
|
||||||
)
|
)
|
||||||
submit = SubmitField("Envoyer", render_kw=SUBMIT_MARGE)
|
submit = SubmitField("Envoyer", render_kw=SUBMIT_MARGE)
|
||||||
|
|
||||||
@ -445,12 +440,9 @@ class EnvoiOffreForm(FlaskForm):
|
|||||||
if not FlaskForm.validate(self):
|
if not FlaskForm.validate(self):
|
||||||
validate = False
|
validate = False
|
||||||
|
|
||||||
for field in self:
|
for entry in self.responsables.entries:
|
||||||
if (
|
if entry.data:
|
||||||
field.name in ["responsable_1", "responsable_2", "responsable_3"]
|
responsable_data = entry.data.upper().strip()
|
||||||
and field.data.strip()
|
|
||||||
):
|
|
||||||
responsable_data = field.data.upper().strip()
|
|
||||||
stm = text(
|
stm = text(
|
||||||
"SELECT id, UPPER(CONCAT(nom, ' ', prenom, ' ', '(', user_name, ')')) FROM \"user\" WHERE UPPER(CONCAT(nom, ' ', prenom, ' ', '(', user_name, ')'))=:responsable_data"
|
"SELECT id, UPPER(CONCAT(nom, ' ', prenom, ' ', '(', user_name, ')')) FROM \"user\" WHERE UPPER(CONCAT(nom, ' ', prenom, ' ', '(', user_name, ')'))=:responsable_data"
|
||||||
)
|
)
|
||||||
@ -460,7 +452,7 @@ class EnvoiOffreForm(FlaskForm):
|
|||||||
.first()
|
.first()
|
||||||
)
|
)
|
||||||
if responsable is None:
|
if responsable is None:
|
||||||
field.errors.append("Champ incorrect (selectionnez dans la liste)")
|
entry.errors.append("Champ incorrect (selectionnez dans la liste)")
|
||||||
validate = False
|
validate = False
|
||||||
|
|
||||||
return validate
|
return validate
|
||||||
|
@ -987,12 +987,9 @@ def envoyer_offre(id):
|
|||||||
)
|
)
|
||||||
form = EnvoiOffreForm()
|
form = EnvoiOffreForm()
|
||||||
if form.validate_on_submit():
|
if form.validate_on_submit():
|
||||||
for field in form:
|
for responsable in form.responsables.entries:
|
||||||
if (
|
if responsable.data.strip():
|
||||||
field.name in ["responsable_1", "responsable_2", "responsable_3"]
|
responsable_data = responsable.data.upper().strip()
|
||||||
and field.data
|
|
||||||
):
|
|
||||||
responsable_data = field.data.upper().strip()
|
|
||||||
stm = text(
|
stm = text(
|
||||||
"SELECT id, UPPER(CONCAT(nom, ' ', prenom, ' ', '(', user_name, ')')) FROM \"user\" WHERE UPPER(CONCAT(nom, ' ', prenom, ' ', '(', user_name, ')'))=:responsable_data"
|
"SELECT id, UPPER(CONCAT(nom, ' ', prenom, ' ', '(', user_name, ')')) FROM \"user\" WHERE UPPER(CONCAT(nom, ' ', prenom, ' ', '(', user_name, ')'))=:responsable_data"
|
||||||
)
|
)
|
||||||
|
@ -11,7 +11,9 @@
|
|||||||
{% block app_content %}
|
{% block app_content %}
|
||||||
<div class="container" style="margin-bottom: 10px;">
|
<div class="container" style="margin-bottom: 10px;">
|
||||||
<h1>Liste des contacts</h1>
|
<h1>Liste des contacts</h1>
|
||||||
|
{% if current_user.has_permission(current_user.Permission.RelationsEntreprisesChange, None) %}
|
||||||
<a class="btn btn-primary" style="margin-bottom:10px;" href="{{ url_for('entreprises.add_contact', id=entreprise_id) }}">Ajouter contact</a>
|
<a class="btn btn-primary" style="margin-bottom:10px;" href="{{ url_for('entreprises.add_contact', id=entreprise_id) }}">Ajouter contact</a>
|
||||||
|
{% endif %}
|
||||||
<table id="table-contacts">
|
<table id="table-contacts">
|
||||||
<thead>
|
<thead>
|
||||||
<tr>
|
<tr>
|
||||||
|
@ -16,7 +16,20 @@
|
|||||||
<p>
|
<p>
|
||||||
(*) champs requis
|
(*) champs requis
|
||||||
</p>
|
</p>
|
||||||
{{ wtf.quick_form(form, novalidate=True) }}
|
<form method="POST" action="" novalidate>
|
||||||
|
{{ form.hidden_tag() }}
|
||||||
|
{{ form.responsables.label }}<br>
|
||||||
|
{% for subfield in form.responsables %}
|
||||||
|
{% if subfield.errors %}
|
||||||
|
{% for error in subfield.errors %}
|
||||||
|
<p class="help-block">{{ error }}</p>
|
||||||
|
{% endfor %}
|
||||||
|
{% endif %}
|
||||||
|
{% endfor %}
|
||||||
|
{{ form.responsables }}
|
||||||
|
<button class="btn btn-default" id="add-responsable-field">Ajouter un responsable</button>
|
||||||
|
<input class="btn btn-default" type="submit" value="Envoyer">
|
||||||
|
</form>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@ -30,9 +43,32 @@
|
|||||||
minchars: 2,
|
minchars: 2,
|
||||||
timeout: 60000
|
timeout: 60000
|
||||||
};
|
};
|
||||||
var as_responsables_1 = new bsn.AutoSuggest('responsable_1', responsables_options);
|
|
||||||
var as_responsables_2 = new bsn.AutoSuggest('responsable_2', responsables_options);
|
let allResponsablesFieldWrapper = document.getElementById('responsables');
|
||||||
var as_responsables_3 = new bsn.AutoSuggest('responsable_3', responsables_options);
|
let allResponsablesField = allResponsablesFieldWrapper.getElementsByTagName('input');
|
||||||
|
for(let i = 0; i < allResponsablesField.length; i++) {
|
||||||
|
new bsn.AutoSuggest(allResponsablesField[i].id, responsables_options);
|
||||||
|
document.getElementById(allResponsablesField[i].id).classList.add("form-control");
|
||||||
|
}
|
||||||
|
|
||||||
|
let addResponsableFieldBtn = document.getElementById('add-responsable-field');
|
||||||
|
addResponsableFieldBtn.addEventListener('click', function(e){
|
||||||
|
e.preventDefault();
|
||||||
|
let allResponsablesFieldWrapper = document.getElementById('responsables');
|
||||||
|
let allResponsablesField = allResponsablesFieldWrapper.getElementsByTagName('input');
|
||||||
|
if(allResponsablesField.length > 4) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
let responsableInputIds = []
|
||||||
|
for(let i = 0; i < allResponsablesField.length; i++) {
|
||||||
|
responsableInputIds.push(parseInt(allResponsablesField[i].name.split('-')[1]));
|
||||||
|
}
|
||||||
|
let newFieldName = `responsables-${Math.max(...responsableInputIds) + 1}`;
|
||||||
|
allResponsablesFieldWrapper.insertAdjacentHTML('beforeend',`
|
||||||
|
<li><label for="${newFieldName}">Responsable</label> <input class="form-control" id="${newFieldName}" name="${newFieldName}" type="text" value="" placeholder="Tapez le nom du responsable de formation"></li>
|
||||||
|
`);
|
||||||
|
var as_r = new bsn.AutoSuggest(newFieldName, responsables_options);
|
||||||
|
});
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
{% endblock %}
|
{% endblock %}
|
@ -43,8 +43,8 @@
|
|||||||
<a class="btn btn-danger" href="{{ url_for('entreprises.delete_entreprise', id=entreprise.id) }}">Supprimer</a>
|
<a class="btn btn-danger" href="{{ url_for('entreprises.delete_entreprise', id=entreprise.id) }}">Supprimer</a>
|
||||||
<a class="btn btn-primary" href="{{ url_for('entreprises.add_offre', id=entreprise.id) }}">Ajouter offre</a>
|
<a class="btn btn-primary" href="{{ url_for('entreprises.add_offre', id=entreprise.id) }}">Ajouter offre</a>
|
||||||
<a class="btn btn-primary" href="{{ url_for('entreprises.add_correspondant', id=entreprise.id) }}">Ajouter correspondant</a>
|
<a class="btn btn-primary" href="{{ url_for('entreprises.add_correspondant', id=entreprise.id) }}">Ajouter correspondant</a>
|
||||||
<a class="btn btn-primary" href="{{ url_for('entreprises.add_contact', id=entreprise.id) }}">Ajouter contact</a>
|
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
<a class="btn btn-primary" href="{{ url_for('entreprises.contacts', id=entreprise.id) }}">Liste contacts</a>
|
||||||
<a class="btn btn-primary" href="{{ url_for('entreprises.offres_expirees', id=entreprise.id) }}">Voir les offres expirées</a>
|
<a class="btn btn-primary" href="{{ url_for('entreprises.offres_expirees', id=entreprise.id) }}">Voir les offres expirées</a>
|
||||||
<div>
|
<div>
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user