Compare commits

...

10 Commits

Author SHA1 Message Date
llaniau 22db9a6da4 Bug inscription date relance 2021-04-12 12:59:51 +02:00
llaniau 1b3a0cb606 V2.9.1 2021-04-12 10:17:31 +02:00
llaniau 634fb412fe Mail auto (US 436) 2021-04-12 10:11:03 +02:00
llaniau 0a0db67654 US 436 2021-04-08 13:02:29 +02:00
llaniau 7cc701eb1e US 436 : Suite 2021-04-06 19:35:44 +02:00
llaniau bd0cda922e US 436 : RElance j+3 2021-04-06 14:41:38 +02:00
devtt cdfb763466 Modifications pages recruteurs Bénédicte (part 2) 2021-04-01 17:54:22 +02:00
devtt 57412e353b Modifications page d'accueil (Bénédicte) 2021-04-01 09:43:12 +02:00
llaniau 87b337a126 Init V2.9.1 pre prod 2021-03-30 15:31:25 +02:00
llaniau 086d456746 Desactiver nofollow 2021-03-30 09:54:34 +02:00
33 changed files with 1261 additions and 150 deletions
@@ -6,3 +6,9 @@ SELECT id FROM "ad" WHERE competences::jsonb @> '{ "id1" : "libelle 1"}'::json
SELECT id FROM "ad" WHERE competences::jsonb ? 'id1' LIMIT 10;
SELECT competences::jsonb @> '{ "id1" : "libelle 1"}'::jsonb FROM "ad" WHERE id=1 LIMIT 1;
SELECT * FROM "ad" WHERE id = 1 or id=31 or id =29;
SELECT id, location->'gmap_address'->'geometry'->'location'->'lat', location->'gmap_address'->'geometry'->'location'->'lng' FROM "ad" LIMIT 100;
SELECT firstname, lastname, geoloc::json->0->'route' FROM "fos_user" wHERE email='laniau2@yahoo.fr' LIMIT 1000;
SELECT location::json->'gmap_address'->'formatted_address' FROM "ad" WHERE id=66 LIMIT 1000;
@@ -49,7 +49,7 @@
</div>
<div class="row">
<div class="col-xs-12">
<button class="btn btn-success" type="submit">Enregistrer</button>
<button class="btn btn-success" type="submit" onclick="envoyerMail()">Enregistrer</button>
</div>
</div>
{{ form_end(form) }} {% endblock %} {% block javascripts %}
@@ -70,4 +70,46 @@
}
}
});
function envoyerMail(){
if($("#ad_status").val()=="PUBLISHED"){
if(window.confirm("Souhaitez-vous envoyer un email au(x) utilisateur(s) de lentreprise pour informer que loffre demploi est en ligne sur Talents Tube ?")){
//envoi de mail
$.ajax({
//L'URL de la requête
url: "/app_dev.php/api/validerOffreMail?adId={{ ad.id }}" ,
method: "GET",
//La méthode d'envoi (type de requête)
//Le format de réponse attendu
dataType: "json",
})
//Ce code sera exécuté en cas de succès - La réponse du serveur est passée à done()
/*On peut par exemple convertir cette réponse en chaine JSON et insérer
* cette chaine dans un div id="res"*/
.done(function (response) {
console.log("Requête envoi mail suite validation offre done");
})
//Ce code sera exécuté en cas d'échec - L'erreur est passée à fail()
//On peut afficher les informations relatives à la requête et à l'erreur
.fail(function (error) {
console.log("Requête envoi mail suite validation offre fail");
console.log(error);
})
//Ce code sera exécuté que la requête soit un succès ou un échec
.always(function () {
console.log("Requête envoi mail suite validation offre effectuée");
});
}
}else{
}
}
</script> {% endblock %}
@@ -20,7 +20,7 @@
<thead>
<tr>
<th class="col-xs-2">Date de création</th>
<th>Référence TT</th>
<th>Référence TT.</th>
<th>Titre</th>
<th>Entreprise</th>
<th>Status</th>
@@ -0,0 +1,80 @@
{% extends 'admin/base_admin.html.twig' %}
{% block contentHeader %}
<h1>
Dashboard
<small>TalentsTube</small>
</h1>
<ol class="breadcrumb">
<li><a href="#"><i class="fa fa-dashboard"></i> Dashboard</a></li>
{#<li class="active">Here</li>#}
</ol>
{% endblock %}
{% block content %}
<b>Relance J3</b><br>
<table id="media_list_table" class="table table-hover table-bordered">
<thead>
<tr>
<th width="15%">Id</th>
<th width="15%">Nom</th>
<th width="15%">Prénom</th>
<th width="15%">Mail</th>
<th width="15%">Annonce?</th>
<th width="15%">Mail Envoyé</th>
</tr>
</thead>
<tbody>
{% for u in listeUsersRelanceJ3 %}
<tr>
<td>{{ u.id }}</td>
<td>{{ u.nom }}</td>
<td>{{ u.prenom }}</td>
<td>{{ u.email }}</td>
<td>{{ u.annonce }}</td>
<td>X</td>
</tr>
{% endfor %}
{% if listeUsersRelanceJ3|length < 1 %}
<tr>
<td colspan="6">Aucune relance pour cette fois-ci</td>
</tr>
{% endif %}
</tbody>
</table>
<b>Relance J7</b><br>
<table id="media_list_table" class="table table-hover table-bordered">
<thead>
<tr>
<th width="15%">Id</th>
<th width="15%">Nom</th>
<th width="15%">Prénom</th>
<th width="15%">Mail</th>
<th width="15%">Annonce?</th>
<th width="15%">Mail Envoyé</th>
</tr>
</thead>
<tbody>
{% for u in listeUsersRelanceJ7 %}
<tr>
<td>{{ u.id }}</td>
<td>{{ u.nom }}</td>
<td>{{ u.prenom }}</td>
<td>{{ u.email }}</td>
<td>{{ u.annonce }}</td>
<td>X</td>
</tr>
{% endfor %}
{% if listeUsersRelanceJ7|length < 1 %}
<tr>
<td colspan="6">Aucune relance pour cette fois-ci</td>
</tr>
{% endif %}
</tbody>
</table>
{% endblock %}
@@ -13,6 +13,93 @@
{% endblock %}
{% block content %}
{# <b>Relance J3</b><br>
<table id="media_list_table" class="table table-hover table-bordered">
<thead>
<tr>
<th width="15%">Id</th>
<th width="15%">Nom</th>
<th width="15%">Prénom</th>
<th width="15%">Mail</th>
<th width="15%">Annonce?</th>
<th width="15%">Mail Envoyé</th>
</tr>
</thead>
<tbody>
{% for u in listeUsersRelanceJ3 %}
<tr>
<td>{{ u.id }}</td>
<td>{{ u.nom }}</td>
<td>{{ u.prenom }}</td>
<td>{{ u.email }}</td>
<td>{{ u.annonce }}</td>
<td>X</td>
</tr>
{% endfor %}
{% if listeUsersRelanceJ3|length < 1 %}
<tr>
<td colspan="6">Aucune relance pour cette fois-ci</td>
</tr>
{% endif %}
</tbody>
</table>
<b>Relance J7</b><br>
<table id="media_list_table" class="table table-hover table-bordered">
<thead>
<tr>
<th width="15%">Id</th>
<th width="15%">Nom</th>
<th width="15%">Prénom</th>
<th width="15%">Mail</th>
<th width="15%">Annonce?</th>
<th width="15%">Mail Envoyé</th>
</tr>
</thead>
<tbody>
{% for u in listeUsersRelanceJ7 %}
<tr>
<td>{{ u.id }}</td>
<td>{{ u.nom }}</td>
<td>{{ u.prenom }}</td>
<td>{{ u.email }}</td>
<td>{{ u.annonce }}</td>
<td>X</td>
</tr>
{% endfor %}
{% if listeUsersRelanceJ7|length < 1 %}
<tr>
<td colspan="6">Aucune relance pour cette fois-ci</td>
</tr>
{% endif %}
</tbody>
</table> #}
<b>Etat des annonces</b><br>
<table id="media_list_table" class="table table-hover table-bordered">
<thead>
<tr>
<th width="15%">Id</th>
<th width="15%">Entreprise</th>
<th width="15%">Titre de l'annonce</th>
<th width="15%">Nb de candidatures vidéo</th>
<th width="15%">Nb de candidatures récentes <br>(mois glissant)</th>
<th width="15%">Statut</th>
</tr>
</thead>
<tbody>
{% for a in ads %}
<tr>
<td>{{ a.id }}</td>
<td>{{ a.entreprise }}</td>
<td>{{ a.title }}</td>
<td>{{ a.nbAnswers }}</td>
<td>{{ a.nbAnswersRecentes }}</td>
<td>{{ a.statut }}</td>
</tr>
{% endfor %}
</tbody>
</table>
{% endblock %}
@@ -80,7 +80,7 @@
</span>
</a>
<ul class="treeview-menu">
<li><a href="{{ path('admin_batch_mailauto') }}">Mail auto <br>(US 436)</a></li>
<li><a href="{{ path('admin_batch_candidatures') }}">Statuts des anciennes candidatures <br>(US 520)</a></li>
<li><a href="{{ path('admin_batch_message') }}">Basculer les anciens messages <br>(US 200)</a></li>
<li><a href="{{ path('admin_batch_geoloc') }}">Transformer adresse Talent en geoloc <br>(US 489)</a></li>
@@ -19,7 +19,7 @@
{% if app.environment == "dev" %}
<meta name="robots" content="noindex,nofollow">
{% else %}
{# <meta name="robots" content="noindex,nofollow"> #}
<meta name="robots" content="noindex,nofollow">
{% endif %}
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
{% block meta %}
@@ -184,7 +184,7 @@
</div>
<div class="col-sm">
<span class="fs-12">30 derniers jours</span>
<h4 class="bold no-margin" style="opacity:0.75">+{{ records30days.totalRecordsCompany }}
<h4 class="bold no-margin" style="opacity:0.75">+{{ records30days.totalRecords-records30days.totalRecordsCompany }}
</h4>
</div>
</div>
@@ -1,18 +1,42 @@
<!-- Ils nous font confiance DEBUT -->
<div class="container space-2 space-3--lg accueilFondBlanc">
<div class=" text-center mx-md-auto mb-12">
<!-- Title -->
<h2 class="h3"> Ils nous font confiance</h2>
</div>
<div class="align-right justify-content-sm-center row text-center">
<div class="col-lg-9 col-xl-8">
<div class="row justify-content-lg-between">
<div class="w-md-80 w-lg-60 text-center mx-md-auto mb-9">
<!-- Title -->
<h2 class="h3">Ils ont trouvé leurs candidats avec Talents Tube</h2>
</div>
<div class="col-md-6 col-lg-5 order-md-2 mb-7 mb-md-0">
<!-- Review -->
<div class="media">
<div class="media-body">
<h4 class="h6 mb-0">Delphine F.</h4>
<p class="text-muted">"Je n'avais pratiquement plus de CV. Talents Tube est devenu l'outil de recrutement qui génère le plus de candidatures"</p>
</div>
</div>
<!-- End Review -->
<!-- Review -->
<div class="media">
<div class="media-body">
<h4 class="h6 mb-0">Emmanuelle G</h4>
<p class="text-muted">"Nous n'avions plus de CV papier et grâce à Talents Tube, nous avons recruté de nouveaux collaborateurs en préparation de commandes"</p>
</div>
</div>
<!-- End Review -->
<!-- Review -->
<div class="media">
<div class="media-body">
<h4 class="h6 mb-0">Adrien</h4>
<p class="text-muted">"Nous avons recruté grâce à la vidéo ! On a des personnes qui ont postulé et qui n'auraient pas postulé sans la vidéo."</p>
</div>
</div>
<!-- End Review -->
</div>
<!-- Video Block -->
<div class="col-md-6 order-md-1">
<div id="youTubeVideoPlayer" class="u-video-player mb-7">
<!-- Cover Image -->
<img class="img-fluid u-video-player__preview" src="/v2/png/recrutement-video-temoignage.jpg"
alt="Image">
<img class="img-fluid u-video-player__preview" src="/v2/png/recrutement-video-temoignage.jpg" alt="Image">
<!-- End Cover Image -->
<!-- Play Button -->
@@ -34,4 +58,5 @@
</div>
</div>
</div>
</div>
<!-- Ils nous font confiance FIN -->
@@ -0,0 +1,81 @@
<div class=" space-1-bottom accueilFondBlanc">
<div class="container space-2 ">
<div class="row mx-gutters-2 text-center">
<div class="col-lg-9">
<!-- Collapse -->
<div id="faqAccordionOne">
<div class="card mb-2">
<div class="card-header card-collapse__header" id="faqAccordionOneHeadingOne">
<h5 class="mb-0">
<button
class="btn btn-sm btn-link btn-block d-flex justify-content-between card-collapse__btn p-3 collapsed"
data-toggle="collapse" data-target="#faqAccordionOneCollapseOne" aria-expanded="false"
aria-controls="faqAccordionOneCollapseOne">
Jy arrive pas pourquoi jy arriverais avec la vidéo ?
<span class="card-collapse__btn-arrow">
<i class="fa fa-arrow-down small"></i>
</span>
</button>
</h5>
</div>
<div id="faqAccordionOneCollapseOne" class="collapse" aria-labelledby="faqAccordionOneHeadingOne"
data-parent="#faqAccordionOne" style="">
<div class="card-body card-collapse__body">
Anim pariatur cliche reprehenderit, enim eiusmod high life accusamus terry richardson ad squid. 3 wolf
moon officia aute, non cupidatat skateboard dolor brunch. Food truck quinoa nesciunt laborum eiusmod.
</div>
</div>
</div>
<div class="card mb-2">
<div class="card-header card-collapse__header" id="faqAccordionOneHeadingTwo">
<h5 class="mb-0">
<button
class="btn btn-sm btn-link btn-block d-flex justify-content-between card-collapse__btn collapsed p-3"
data-toggle="collapse" data-target="#faqAccordionOneCollapseTwo" aria-expanded="false"
aria-controls="faqAccordionOneCollapseTwo">
Je publie déjà mes offres vidéo sur mon site, sur Youtube,… en quoi Talents Tube peut faire mieux ?
<span class="card-collapse__btn-arrow">
<i class="fa fa-arrow-down small"></i>
</span>
</button>
</h5>
</div>
<div id="faqAccordionOneCollapseTwo" class="collapse" aria-labelledby="faqAccordionOneHeadingTwo"
data-parent="#faqAccordionOne">
<div class="card-body card-collapse__body">
Anim pariatur cliche reprehenderit, enim eiusmod high life accusamus terry richardson ad squid. 3 wolf
moon officia aute, non cupidatat skateboard dolor brunch. Food truck quinoa nesciunt laborum eiusmod.
</div>
</div>
</div>
<div class="card mb-2">
<div class="card-header card-collapse__header" id="faqAccordionOneHeadingTwo">
<h5 class="mb-0">
<button
class="btn btn-sm btn-link btn-block d-flex justify-content-between card-collapse__btn collapsed p-3"
data-toggle="collapse" data-target="#faqAccordionOneCollapseTwo" aria-expanded="false"
aria-controls="faqAccordionOneCollapseTwo">
Quelle différence entre une vidéo « marque employeur », « métier » et « offre demploi » ?
<span class="card-collapse__btn-arrow">
<i class="fa fa-arrow-down small"></i>
</span>
</button>
</h5>
</div>
<div id="faqAccordionOneCollapseTwo" class="collapse" aria-labelledby="faqAccordionOneHeadingTwo"
data-parent="#faqAccordionOne">
<div class="card-body card-collapse__body">
Anim pariatur cliche reprehenderit, enim eiusmod high life accusamus terry richardson ad squid. 3 wolf
moon officia aute, non cupidatat skateboard dolor brunch. Food truck quinoa nesciunt laborum eiusmod.
</div>
</div>
</div>
</div>
<!-- End Collapse -->
</div>
</div>
</div>
</div>
</div>
@@ -0,0 +1,60 @@
<!-- Ils nous font confiance DEBUT -->
<div class="container accueilFondBlanc">
<div class="row justify-content-center text-center">
<div class="col-4 col-md-2 mb-8">
<img class="u-clients" src="{{ asset('v2/logos/recrutement-video-intermarche.jpg') }}" alt="Offres d'emploi intermarché">
</div>
<div class="col-4 col-md-2 mb-8">
<img class="u-clients" src="{{ asset('v2/logos/recrutement-video-lactalis.jpg') }}" alt="Offres d'emploi Lactalis">
</div>
<div class="col-4 col-md-2 mb-8">
<img class="u-clients" src="{{ asset('v2/logos/recrutement-video-groupe-mousset.jpg') }}" alt="Offres d'emploi Groupe Mousset">
</div>
<div class="col-4 col-md-2 mb-8">
<img class="u-clients" src="{{ asset('v2/logos/recrutement-video-admr.jpg') }}" alt="Offres d'emploi ADMR">
</div>
<div class="col-4 col-md-2 mb-8">
<img class="u-clients" src="{{ asset('v2/logos/recrutement-video-tpc-ouest-btp.jpg') }}" alt="Offres d'emploi TPC Ouest">
</div>
<div class="col-4 col-md-2 mb-8">
<img class="u-clients" src="{{ asset('v2/logos/recrutement-video-eiffage.jpg') }}" alt="Offres d'emploi Eiffage">
</div>
<div class="col-4 col-md-2 mb-8">
<img class="u-clients" src="{{ asset('v2/logos/recrutement-video-opticultures.jpg') }}" alt="Offres d'emploi Opticultures">
</div>
<div class="col-4 col-md-2 mb-8">
<img class="u-clients" src="{{ asset('v2/logos/recrutement-video-mma-assurances.jpg') }}" alt="Offres d'emploi MMA assurances">
</div>
<div class="col-4 col-md-2 mb-8">
<img class="u-clients" src="{{ asset('v2/logos/recrutement-video-actual.jpg') }}" alt="Offres d'emploi Actual">
</div>
<div class="col-4 col-md-2">
<img class="u-clients" src="{{ asset('v2/logos/recrutement-video-jpa.jpg') }}" alt="Offres d'emploi JPA">
</div>
<div class="col-4 col-md-2 mb-8">
<img class="u-clients" src="{{ asset('v2/logos/recrutement-video-groupe-rocher.jpg') }}" alt="Offres d'emploi Groupe Rocher">
</div>
<div class="col-4 col-md-2 mb-8">
<img class="u-clients" src="{{ asset('v2/logos/recrutement-video-pro-fermetures.jpg') }}" alt="Offres d'emploi Pro Fermetures">
</div>
<div class="col-4 col-md-2 mb-8">
<img class="u-clients" src="{{ asset('v2/logos/recrutement-video-top-selling.jpg') }}" alt="Offres d'emploi Top Selling">
</div>
<div class="col-4 col-md-2 mb-8 mb-md-0">
<img class="u-clients" src="{{ asset('v2/logos/recrutement-video-medaviz.jpg') }}" alt="Offres d'emploi Medaviz">
</div>
<div class="col-4 col-md-2 mb-8 mb-md-0">
<img class="u-clients" src="{{ asset('v2/logos/recrutement-video-faurecia.jpg') }}" alt="Offres d'emploi Faurecia">
</div>
<div class="col-4 col-md-2 mb-8 mb-md-0">
<img class="u-clients" src="{{ asset('v2/logos/recrutement-video-francas.jpg') }}" alt="Offres d'emploi Les Francas">
</div>
<div class="col-4 col-md-2 mb-8 mb-md-0">
<img class="u-clients" src="{{ asset('v2/logos/recrutement-video-nachos.jpg') }}" alt="Offres d'emploi Nachos">
</div>
</div>
<p class="lead text-center"><strong>Ces secteurs qui recrutent déjà grâce à la vidéo :</strong><br>
Logistique et Transport > Services à la personne > BTP > Agriculture > Administration > Industrie > Commerce > Informatique > Automobile > Animation > Hôtellerie Restauration</p>
</div>
<!-- Ils nous font confiance FIN -->
@@ -0,0 +1,44 @@
<div class="accueilFondNoir">
<div class="container space-2">
<div class="card-deck d-block d-lg-flex card-lg-gutters-2">
<div class="card border-0 mb-3">
<!-- Works -->
<div class="card-body border border-bottom-0 rounded-top text-center p-5">
<h4 class="h5 mb-1">Vous avez déjà des vidéos ou un prestataire vidéo ?</h4>
<p class="mb-0">Vous pouvez les publier directement sur Talents Tube ! Profitez de vos supports pour les faire rayonner largement, vers vos futurs candidats</p>
</div>
<div class="card-footer text-center border rounded-bottom p-5">
<a class="btn btn-sm btn-primary btn-wide" href="https://recruteur.talentstube.com/register/">Inscription</a>
</div>
<!-- End Works -->
</div>
<div class="card border-0 mb-3">
<!-- Works -->
<div class="card-body border border-bottom-0 rounded-top text-center p-5">
<h4 class="h5 mb-1">Vous voulez réaliser des vidéos vous-même ?</h4>
<p class="mb-0">Créez des vidéos doffres demploi simplement grâce à nos conseils</p>
</div>
<div class="card-footer text-center border rounded-bottom p-5">
<a class="btn btn-sm btn-primary btn-wide" href="https://recruteur.talentstube.com/offre-emploi-originale">En savoir plus</a>
</div>
<!-- End Works -->
</div>
<div class="card border-0 mb-3">
<!-- Works -->
<div class="card-body border border-bottom-0 rounded-top text-center p-5">
<h4 class="h5 mb-1">Vous cherchez un prestataire pour produire vos vidéos RH ?</h4>
<p class="mb-0">Contactez-nous, nous saurons vous mettre en relation avec des prestataires qualifiés et expérimentés.</p>
</div>
<div class="card-footer text-center border rounded-bottom p-5">
<a class="btn btn-sm btn-primary btn-wide" href="https://blog.talentstube.com/contact/">Contactez-nous</a>
</div>
<!-- End Works -->
</div>
</div>
</div>
</div>
</div>
@@ -1,19 +1,24 @@
<div class="accueilFondBleute">
<div class="container">
<div class="w-md-80 w-lg-60 text-center mx-md-auto">
<h2 class="h3">Adoptez dès maintenant le recrutement vidéo</h2>
<p class="lead">Plus personnel, plus impliquant et plus authentique</p>
<div class="container">
<div class="w-md-80 w-lg-60 text-center mx-md-auto">
<h2 class="h3">Adoptez dès maintenant le recrutement vidéo</h2>
<p class="lead">Plus personnel, plus impliquant et plus authentique</p>
</div>
<div class="bg-gray-100 shadow-lg rounded">
<!-- Individual -->
<div id="pricingIndividual" data-target-group="idPricing">
<div class="js-slick-carousel u-slick u-slick--gutters"
data-slides-show="3"
data-slides-scroll="1"
data-pagi-classes="d-lg-none text-center u-slick__pagination mt-7 mb-0"
data-responsive='[{
<div class="bg-white shadow-lg rounded card-body p-5">
<h5 class="text-center">Offre : abonnement mensuel sans engagement, comprenant :</h5>
<ul>
<li> Administration autonome de votre espace recruteur (page entreprise, publication et renouvellement des
vidéos, statistiques,…)</li>
<li>Visibilité de vos vidéos sur le site Talents Tube pour attirer vos futurs candidats</li>
<li>Boost visibilité de vos vidéos sur les réseaux Talents Tube (YouTube, Facebook, Linkedin, Newsletter...)
</li>
<li>Réception de candidatures vidéo et gestion en ligne</li>
</ul>
<!-- Individual -->
<div id="pricingIndividual" data-target-group="idPricing">
<div class="js-slick-carousel u-slick u-slick--gutters" data-slides-show="4" data-slides-scroll="1"
data-pagi-classes="d-lg-none text-center u-slick__pagination mt-7 mb-0" data-responsive='[{
"breakpoint": 1200,
"settings": {
"slidesToShow": 3
@@ -34,117 +39,90 @@
"slidesToShow": 1
}
}]'>
<div class="js-slide">
<!-- Pricing -->
<div class="card border-0">
<!-- Header -->
<header class="card-header text-center p-5">
<h4 class="h4">Jusqu'à 3 vidéos</h4>
<span class="d-block">
<span class="display-4 text-dark">
99€
</span>
<span class="d-block text-secondary font-size-14">par mois HT</span>
<div class="js-slide">
<!-- Pricing -->
<div class="card border-0">
<!-- Header -->
<header class="card-header text-center p-5">
<h4 class="h4">Pack découverte<br>1 vidéo</h4>
<span class="d-block">
<span class="display-4 text-dark">
Gratuit
</span>
</header>
<!-- End Header -->
<!-- Content -->
<div class="card-body p-5">
<ul class="list-unstyled mb-4">
<li class="font-size-14 py-2">- Création page entreprise</li>
<li class="font-size-14 py-2">- Accès espace recruteur</li>
<li class="font-size-14 py-2">- Mise en ligne de 1 à 3 vidéos
offre demploi et Marque employeur</li>
<li class="font-size-14 py-2">- Réception des candidatures en vidéo</li>
<li class="font-size-14 py-2">- Gestion des candidatures</li>
<li class="font-size-14 py-2">- Échanges vidéos avec les candidats</li>
<li class="font-size-14 py-2">- Suivi Statistiques</li>
</ul>
</div>
<!-- End Content -->
</div>
<!-- End Pricing -->
<span class="d-block text-secondary font-size-14">pendant 1 mois</span>
</span>
</header>
<!-- End Header -->
</div>
<!-- End Pricing -->
</div>
<div class="js-slide">
<!-- Pricing -->
<div class="card border-0">
<!-- Header -->
<header class="card-header text-center p-5">
<h4 class="h4">Pack 3 vidéos <br>renouvelables</h4>
<div class="js-slide">
<!-- Pricing -->
<div class="card border-0">
<!-- Header -->
<header class="card-header text-center p-5">
<h4 class="h4">De 4 à 9 vidéos</h4>
<span class="d-block">
<span class="display-4 text-dark">
199€
</span>
<span class="d-block text-secondary font-size-14">par mois HT</span>
<span class="d-block">
<span class="display-4 text-dark">
99€
</span>
</header>
<!-- End Header -->
<!-- Content -->
<div class="card-body p-5">
<ul class="list-unstyled mb-4">
<li class="font-size-14 py-2">- Création page entreprise</li>
<li class="font-size-14 py-2">- Accès espace recruteur</li>
<li class="font-size-14 py-2">- Mise en ligne de 4 à 9 vidéos
offre demploi et Marque employeur</li>
<li class="font-size-14 py-2">- Réception des candidatures en vidéo</li>
<li class="font-size-14 py-2">- Gestion des candidatures</li>
<li class="font-size-14 py-2">- Échanges vidéos avec les candidats</li>
<li class="font-size-14 py-2">- Suivi Statistiques</li>
</ul>
</div>
<!-- End Content -->
</div>
<!-- End Pricing -->
<span class="d-block text-secondary font-size-14">par mois HT</span>
</span>
</header>
<!-- End Header -->
</div>
<!-- End Pricing -->
</div>
<div class="js-slide">
<!-- Pricing -->
<div class="card border-0">
<!-- Header -->
<header class="card-header text-center p-5">
<h4 class="h4">Plus de 10 vidéos</h4>
<span class="d-block">
<span class="display-4 text-dark">
Sur devis
</span>
<span class="d-block text-secondary font-size-14">&nbsp;</span>
<div class="js-slide">
<!-- Pricing -->
<div class="card border-0">
<!-- Header -->
<header class="card-header text-center p-5">
<h4 class="h4">Pack 10 vidéos <br>renouvelables</h4>
<span class="d-block">
<span class="display-4 text-dark">
199€
</span>
</header>
<!-- End Header -->
<!-- Content -->
<div class="card-body p-5">
<ul class="list-unstyled mb-4">
<li class="font-size-14 py-2">- Création page entreprise</li>
<li class="font-size-14 py-2">- Accès espace recruteur</li>
<li class="font-size-14 py-2">- Mise en ligne de 10 vidéos
offre demploi et Marque employeur</li>
<li class="font-size-14 py-2">- Réception des candidatures en vidéo</li>
<li class="font-size-14 py-2">- Gestion des candidatures</li>
<li class="font-size-14 py-2">- Échanges vidéos avec les candidats</li>
<li class="font-size-14 py-2">- Suivi Statistiques</li>
</ul>
</div>
<!-- End Content -->
</div>
<!-- End Pricing -->
<span class="d-block text-secondary font-size-14">par mois HT</span>
</span>
</header>
<!-- End Header -->
</div>
<!-- End Pricing -->
</div>
<div class="js-slide">
<!-- Pricing -->
<div class="card border-0">
<!-- Header -->
<header class="card-header text-center p-5">
<h4 class="h4">Pack PRO<br>Plus de 10 vidéos</h4>
<span class="d-block">
<span class="display-4 text-dark">
<a class="btn btn-sm btn-primary" href="#signupModal" role="button"
data-modal-target="#signupModal" data-overlay-color="#151b26">Connexion recruteurs</a>
</span>
<span class="d-block text-secondary font-size-14">&nbsp</span>
</span>
</header>
<!-- End Header -->
</div>
<!-- End Pricing -->
</div>
</div>
<!-- End Individual -->
</div>
<!-- End Individual -->
</div>
<!-- End Pricing Section -->
</div>
<!-- End Pricing Section -->
</div>
</div>
@@ -0,0 +1,44 @@
<div class="col-md-6 order-md-1 space-2-top">
<!-- Slick Carousel - Testimonials -->
<div class="js-slick-carousel u-slick slick-initialized slick-slider slick-dotted" data-fade="true" data-autoplay="true" data-speed="7500" data-pagi-classes="u-slick__pagination justify-content-start mt-7">
<div class="slick-list draggable"><div class="slick-track" style="opacity: 1; width: 1620px;"><div class="js-slide slick-slide" data-slick-index="0" aria-hidden="true" style="width: 540px; position: relative; left: 0px; top: 0px; z-index: 998; opacity: 0; height: auto; transition: opacity 500ms ease 0s;" tabindex="-1" role="tabpanel" id="slick-slide00" aria-describedby="slick-slide-control00">
<!-- Testimonials -->
<blockquote class="lead mb-5">"I love Space! I love the ease of use, I love the fact that I have total creative freedom. The template is really nice and offers quite a large set of options. It's beautiful and the coding is done quickly and seamlessly."</blockquote>
<div class="media">
<img class="u-avatar rounded-circle mr-3" src="../../assets/img/100x100/img1.jpg" alt="Image Description">
<div class="media-body">
<h3 class="h6 mb-0">Maria Muszynska</h3>
<span class="text-secondary">Senior developer at <a href="#" tabindex="-1">Google</a></span>
</div>
</div>
<!-- End Testimonials -->
</div><div class="js-slide slick-slide" data-slick-index="1" aria-hidden="true" style="width: 540px; position: relative; left: -540px; top: 0px; z-index: 998; opacity: 0; height: auto; transition: opacity 500ms ease 0s;" tabindex="-1" role="tabpanel" id="slick-slide01" aria-describedby="slick-slide-control01">
<!-- Testimonials -->
<blockquote class="lead mb-5">"We are incredibly impressed with Space and how well it supports its customers with amazing products and services. One simple subscription gives you access to all our tools, plus so much more."</blockquote>
<div class="media">
<img class="u-avatar rounded-circle mr-3" src="../../assets/img/100x100/img4.jpg" alt="Image Description">
<div class="media-body">
<h3 class="h6 mb-0">Mark McManus</h3>
<span class="text-secondary">Software engineer at <a href="#" tabindex="-1">Slack</a></span>
</div>
</div>
<!-- End Testimonials -->
</div><div class="js-slide slick-slide slick-current slick-active" data-slick-index="2" aria-hidden="false" style="width: 540px; position: relative; left: -1080px; top: 0px; z-index: 999; opacity: 1; height: auto;" tabindex="0" role="tabpanel" id="slick-slide02" aria-describedby="slick-slide-control02">
<!-- Testimonials -->
<blockquote class="lead mb-5">"One simple subscription gives you access to all our tools, plus so much more. Space brings so many benefits to any team that does anything following a process. It is the easiest way for teams to build cool things work—and get results."</blockquote>
<div class="media">
<img class="u-avatar rounded-circle mr-3" src="../../assets/img/100x100/img14.jpg" alt="Image Description">
<div class="media-body">
<h3 class="h6 mb-0">Ella Brown</h3>
<span class="text-secondary">Head of IT department at <a href="#" tabindex="0">Apple</a></span>
</div>
</div>
<!-- End Testimonials -->
</div></div></div>
<ul class="js-pagination u-slick__pagination justify-content-start mt-7" style="" role="tablist"><li class="" role="presentation"><span></span></li><li role="presentation" class=""><span></span></li><li role="presentation" class="slick-active slick-current"><span></span></li></ul></div>
<!-- End Slick Carousel - Testimonials -->
</div>
@@ -36,11 +36,14 @@
{% include 'defaultv2/accueil/blocDifficultes.html.twig' %}
{% include 'defaultv2/accueil/blocMieuxQueDuTexte.html.twig' %}
{% include 'defaultv2/accueil/blocConfiance.html.twig' %}
{% include 'defaultv2/accueil/blocLogo.html.twig' %}
{% include 'defaultv2/accueil/blocLogoSecteurs.html.twig' %}
{% include 'defaultv2/accueil/blocNotreMission.html.twig' %}
{% include 'defaultv2/accueil/blocPourquoiNous.html.twig' %}
{% include 'defaultv2/accueil/blocRecap.html.twig' %}
{% include 'defaultv2/accueil/blocFAQ.html.twig' %}
{% include 'defaultv2/accueil/blocTarifs.html.twig' %}
{% include 'defaultv2/accueil/blocRealisation.html.twig' %}
{% include 'defaultv2/accueil/blocPourquoiNous.html.twig' %}
{% include 'defaultv2/accueil/blocAction.html.twig' %}
@@ -191,10 +194,7 @@ with {
{% block javascripts %}
{{ parent() }}
<script>
// initialization of google map
{# function initMap() {
$.HSCore.components.HSGMap.init('.js-g-map');
} #}
function demanderDiag(formulaire){
if(formulaire=="formDemandeDiag1"){
nomprenom = $("#nomPrenomForm1").val();
@@ -1,12 +1,12 @@
<!-- Plateforme DEBUT -->
<div class=" accueilFondBlanc">
<div class="">
<div class=" ">
<!-- Video Section -->
<div class="">
<div class="gradient-overlay-half-dark-v1 bg-img-hero"
style="background-image: url({{ asset('v2/img/1920x800/tutoriel-video-de-motivation-cv-video.jpg')}});">
style="background-image: url({{ asset('v2/img/1920x800/tutoriel-video-de-motivation-cv-video.jpg') }});">
<div class="d-lg-flex align-items-lg-center flex-lg-column">
<div class="container space-3 space-4-top--lg">
<!-- Title -->
+1 -1
View File
@@ -80,7 +80,7 @@ twig:
globals:
push_public_key: "%push_params.public_key%"
fairlane_cookie_consent: '@fairlane_cookie_consent.twig'
version: '2.8.3'
version: '2.9.1'
@@ -8,11 +8,162 @@ use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Request;
use AppBundle\Entity\Message;
use Symfony\Component\HttpFoundation\RedirectResponse;
//MAILJET
use AppBundle\Entity\Mailjet;
// use AppBundle\Entity\Response;
use AppBundle\Entity\Resources;
use AppBundle\Entity\Config;
use AppBundle\Entity\Client;
use DateTime;
use DateInterval;
class BatchController extends Controller
{
/**
* @Route("/admin/config/batch/mailauto", name="admin_batch_mailauto")
*/
public function mailAutoAction()
{
//recuperer les messages qui ont un comment
$em = $this->getDoctrine()->getManager();
// requete pour les relance J+3
$usersJ3 = $em->getRepository('AppBundle:User')->findUsersRelance("j3");
// requete pour les relance J+7
$usersJ7 = $em->getRepository('AppBundle:User')->findUsersRelance("j7");
$listeUsersRelanceJ3 = array();
$listeUsersRelanceJ7 = array();
//relance J+7 avec stockage des talents à qui on a envoyé un mail
$listeUsersRelanceJ3 = $this->relanceTalents($usersJ3, "J3");
//relance J+7 avec stockage des talents à qui on a envoyé un mail
$listeUsersRelanceJ7 = $this->relanceTalents($usersJ7, "J7");
return $this->render('admin/batch_mailauto.html.twig', [
"listeUsersRelanceJ3" => $listeUsersRelanceJ3,
"listeUsersRelanceJ7" => $listeUsersRelanceJ7,
]);
}
private function relanceTalents($users, $type){
$listeUsersRelance = array();
$em = $this->getDoctrine()->getManager();
foreach ($users as $u) {
$arrayAdId = $pieces = explode(":", $u->getCompany()->getDescription());
$adId = null;
if(count($arrayAdId)>1){
$adId= intval($arrayAdId[1]);
}
//dump($adId);
//Envoi d'un mail de premiere relance
$mj = new Client($this->getParameter('mailjet_public'), $this->getParameter('mailjet_private'));
$contactMail = $u->getEmail();
// if ($this->container->get( 'kernel' )->getEnvironment() == "dev") {
// $contactMail = "l.laniau@talentstube.com";
// }
$annonceTitle =null;
if($adId){
// recuperer le title de l'annonce
$ad = $em->getRepository('AppBundle:Ad')->find($adId);
$annonceTitle= $ad->getAlias();
if($type=="J3"){
$body = [
'FromEmail' => "noreply@talentstube.io",
'FromName' => "Talents Tube",
'Subject' => "Lancez-vous, votre futur emploi vous attend" ,
'MJ-TemplateID' =>2725372 ,
'MJ-TemplateLanguage' => true,
'Recipients' => [
[
'Email' => $contactMail,
'Vars' => [
'prenom' => $u->getFirstname(),
'intituleOffre' => $ad->getTitle(),
'lienOffre' =>$ad->getAlias(),
'entreprise' => $ad->getCompany()->getBrandName()
]
]
]
];
}else{
$body = [
'FromEmail' => "noreply@talentstube.io",
'FromName' => "Talents Tube",
'Subject' => "Besoin d'aide pour réaliser votre candidature vidéo ?" ,
'MJ-TemplateID' =>2725437 ,
'MJ-TemplateLanguage' => true,
'Recipients' => [
[
'Email' => $contactMail,
'Vars' => [
'prenom' => $u->getFirstname(),
'intituleOffre' => $ad->getTitle(),
'lienOffre' =>$ad->getAlias(),
'entreprise' => $ad->getCompany()->getBrandName()
]
]
]
];
}
}else{
if($type=="J3"){
$body = [
'FromEmail' => "noreply@talentstube.io",
'FromName' => "Talents Tube",
'Subject' => "Vous ne savez pas comment postuler ?" ,
'MJ-TemplateID' =>2716934 ,
'MJ-TemplateLanguage' => true,
'Recipients' => [
[
'Email' => $contactMail,
'Vars' => [
'prenom' => $u->getFirstname(),
]
]
]
];
}else{
$body = [
'FromEmail' => "noreply@talentstube.io",
'FromName' => "Talents Tube",
'Subject' => "Besoin d'aide pour réaliser une candidature vidéo ?" ,
'MJ-TemplateID' =>2725599 ,
'MJ-TemplateLanguage' => true,
'Recipients' => [
[
'Email' => $contactMail,
'Vars' => [
'prenom' => $u->getFirstname(),
]
]
]
];
}
}
//TODO mettre un flag pour le mail de relance J+3. Mettre la date du jour
if($type=="J3"){
$u->setDatePremiereRelance(new Datetime());
}else{
$u->setDateDeuxiemeRelance(new Datetime());
}
$em->persist($u);
$em->flush();
//$response = $mj->post(Resources::$Email, ['body' => $body]);
//$response->success() && var_dump($response->getData());
$listeUsersRelance[]=array(
'id' => $u->getId(),
'nom' => $u->getLastname(),
'prenom' => $u->getFirstname(),
'email' => $u->getEmail(),
'annonce' => $annonceTitle
);
}
return $listeUsersRelance;
}
/**
* @Route("/admin/config/batch/message", name="admin_batch_message")
@@ -87,6 +238,7 @@ class BatchController extends Controller
$zipCode="";
$city="";
$country="";
$address="";
if($addr && $addr['billing']){
$addr1 = $addr['billing'];
@@ -4,7 +4,15 @@ namespace AppBundle\Controller\Admin;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
//MAILJET
use AppBundle\Entity\Mailjet;
// use AppBundle\Entity\Response;
use AppBundle\Entity\Resources;
use AppBundle\Entity\Config;
use AppBundle\Entity\Client;
use DateTime;
use DateInterval;
class DefaultController extends Controller
{
@@ -13,7 +21,184 @@ class DefaultController extends Controller
*/
public function adminAction()
{
return $this->render('admin/dashboard.html.twig', array());
$em = $this->getDoctrine()->getManager();
// requete pour les relance J+3
// $usersJ3 = $em->getRepository('AppBundle:User')->findUsersRelance("j3");
// // requete pour les relance J+7
// $usersJ7 = $em->getRepository('AppBundle:User')->findUsersRelance("j7");
// $listeUsersRelanceJ3 = array();
// $listeUsersRelanceJ7 = array();
// //relance J+7 avec stockage des talents à qui on a envoyé un mail
// $listeUsersRelanceJ3 = $this->relanceTalents($usersJ3, "J3");
// //relance J+7 avec stockage des talents à qui on a envoyé un mail
// $listeUsersRelanceJ7 = $this->relanceTalents($usersJ7, "J7");
//Stats sur les annonces publiée et closes
$adsClose = $em->getRepository('AppBundle:Ad')->findByStatus("CLOSED", array('id' => 'DESC'));
$adsPublish = $em->getRepository('AppBundle:Ad')->findByStatus("PUBLISHED", array('id' => 'DESC'));
//$ads = $em->getRepository('AppBundle:Ad')->findUsersRelance("j7");
$ads=array();
$date = new DateTime();
$date->sub(new DateInterval('P30D'));
foreach ($adsPublish as $ad){
$nbAnswers=0;
$nbAnswersRecente=0;
foreach ($ad->getAnswers() as $a){
if($a->getStatus()!="DRAFT"){
$nbAnswers++;
if($a->getSendtime() > $date){
$nbAnswersRecente++;
}
}
}
$ads[] = array("id"=>$ad->getId(), "title"=>$ad->getTitle(), "entreprise"=>$ad->getCompany()->getBrandname(), "nbAnswers"=>$nbAnswers,"nbAnswersRecentes"=>$nbAnswersRecente, "statut"=> "Publié");
}
foreach ($adsClose as $ad){
$nbAnswers=0;
$nbAnswersRecente=0;
foreach ($ad->getAnswers() as $a){
if($a->getStatus()!="DRAFT"){
$nbAnswers++;
if($a->getSendtime() > $date){
$nbAnswersRecente++;
}
}
}
$ads[] = array("id"=>$ad->getId(), "title"=>$ad->getTitle(), "entreprise"=>$ad->getCompany()->getBrandname(), "nbAnswers"=>$nbAnswers,"nbAnswersRecentes"=>$nbAnswersRecente, "statut"=> "Close");
}
return $this->render('admin/dashboard.html.twig', array(
// "listeUsersRelanceJ3" => $listeUsersRelanceJ3,
// "listeUsersRelanceJ7" => $listeUsersRelanceJ7,
"ads" => $ads
));
}
private function relanceTalents($users, $type){
$listeUsersRelance = array();
$em = $this->getDoctrine()->getManager();
foreach ($users as $u) {
$arrayAdId = $pieces = explode(":", $u->getCompany()->getDescription());
$adId = null;
if(count($arrayAdId)>1){
$adId= intval($arrayAdId[1]);
}
//dump($adId);
//Envoi d'un mail de premiere relance
$mj = new Client($this->getParameter('mailjet_public'), $this->getParameter('mailjet_private'));
$contactMail = $u->getEmail();
// if ($this->container->get( 'kernel' )->getEnvironment() == "dev") {
// $contactMail = "l.laniau@talentstube.com";
// }
$annonceTitle =null;
if($adId){
// recuperer le title de l'annonce
$ad = $em->getRepository('AppBundle:Ad')->find($adId);
$annonceTitle= $ad->getAlias();
if($type=="J3"){
$body = [
'FromEmail' => "noreply@talentstube.io",
'FromName' => "Talents Tube",
'Subject' => "Lancez-vous, votre futur emploi vous attend" ,
'MJ-TemplateID' =>2725372 ,
'MJ-TemplateLanguage' => true,
'Recipients' => [
[
'Email' => $contactMail,
'Vars' => [
'prenom' => $u->getFirstname(),
'intituleOffre' => $ad->getTitle(),
'lienOffre' =>$ad->getAlias(),
'entreprise' => $ad->getCompany()->getBrandName()
]
]
]
];
}else{
$body = [
'FromEmail' => "noreply@talentstube.io",
'FromName' => "Talents Tube",
'Subject' => "Besoin d'aide pour réaliser votre candidature vidéo ?" ,
'MJ-TemplateID' =>2725437 ,
'MJ-TemplateLanguage' => true,
'Recipients' => [
[
'Email' => $contactMail,
'Vars' => [
'prenom' => $u->getFirstname(),
'intituleOffre' => $ad->getTitle(),
'lienOffre' =>$ad->getAlias(),
'entreprise' => $ad->getCompany()->getBrandName()
]
]
]
];
}
}else{
if($type=="J3"){
$body = [
'FromEmail' => "noreply@talentstube.io",
'FromName' => "Talents Tube",
'Subject' => "Vous ne savez pas comment postuler ?" ,
'MJ-TemplateID' =>2716934 ,
'MJ-TemplateLanguage' => true,
'Recipients' => [
[
'Email' => $contactMail,
'Vars' => [
'prenom' => $u->getFirstname(),
]
]
]
];
}else{
$body = [
'FromEmail' => "noreply@talentstube.io",
'FromName' => "Talents Tube",
'Subject' => "Besoin d'aide pour réaliser une candidature vidéo ?" ,
'MJ-TemplateID' =>2725599 ,
'MJ-TemplateLanguage' => true,
'Recipients' => [
[
'Email' => $contactMail,
'Vars' => [
'prenom' => $u->getFirstname(),
]
]
]
];
}
}
//TODO mettre un flag pour le mail de relance J+3. Mettre la date du jour
if($type=="J3"){
$u->setDatePremiereRelance(new Datetime());
}else{
$u->setDateDeuxiemeRelance(new Datetime());
}
$em->persist($u);
$em->flush();
//$response = $mj->post(Resources::$Email, ['body' => $body]);
//$response->success() && var_dump($response->getData());
$listeUsersRelance[]=array(
'id' => $u->getId(),
'nom' => $u->getLastname(),
'prenom' => $u->getFirstname(),
'email' => $u->getEmail(),
'annonce' => $annonceTitle
);
}
return $listeUsersRelance;
}
/**
@@ -355,7 +355,7 @@ class CompanyController extends FOSRestController
// $link = $this->generateUrl('company_answer_show', array('id' => $existAnswer->getId()), UrlGeneratorInterface::ABSOLUTE_URL);
$contactMail = "contact@talentstube.com";
if ($this->container->get( 'kernel' )->getEnvironment() == "dev") {
$contactMail = "dev@talentstube.com";
$contactMail = "contact@talentstube.com";
}
$body = [
'FromEmail' => "noreply@talentstube.io",
@@ -383,6 +383,53 @@ class CompanyController extends FOSRestController
return new JsonResponse(array('retour' => "true"));
}
/**
* @Rest\Get(path="/api/validerOffreMail", name="api_validerOffreMail")
* @Rest\View
*/
public function validerOffreMailAction(Request $request)
{
//APPEL de l'api Pole emploi pour recuperer Token
$adId=$request->query->get('adId');
$em = $this->getDoctrine()->getManager();
$ad = $em->getRepository('AppBundle:Ad')->findOneBy(array('id' => $adId));
$users = $ad->getCompany()->getUsers();
$retour ="résultat ";
foreach ($users as $user){
$mj = new Client($this->getParameter('mailjet_public'), $this->getParameter('mailjet_private'));
// $link = $this->generateUrl('company_answer_show', array('id' => $existAnswer->getId()), UrlGeneratorInterface::ABSOLUTE_URL);
$contactMail = "contact@talentstube.com";
if ($this->container->get( 'kernel' )->getEnvironment() == "dev") {
$contactMail = "contact@talentstube.com";
}
$body = [
'FromEmail' => "noreply@talentstube.io",
'FromName' => "Talents Tube",
'Subject' => "Votre offre d'emploi vidéo est en ligne ",
'MJ-TemplateID' =>2659410 ,
'MJ-TemplateLanguage' => true,
'Recipients' => [
[
'Email' => $contactMail,
'Vars' => [
'nomRecruteur' => $user->getLastname(),
'prenomRecruteur' => $user->getFirstname(),
'offre' => $ad->getTitle(),
'lienOffreEmploi' => $ad->getAlias(),
]
]
]
];
$response = $mj->post(Resources::$Email, ['body' => $body]);
$retour .= $user->getFirstname()." ".$user->getId()." OK ";
}
return new JsonResponse(array('retour' => $retour));
}
/**
* @Rest\Get(path="/api/demanderDiagnostic", name="api_demanderDiagnostic")
@@ -402,7 +449,7 @@ class CompanyController extends FOSRestController
// $link = $this->generateUrl('company_answer_show', array('id' => $existAnswer->getId()), UrlGeneratorInterface::ABSOLUTE_URL);
$contactMail = "contact@talentstube.com";
if ($this->container->get( 'kernel' )->getEnvironment() == "dev") {
$contactMail = "dev@talentstube.com";
$contactMail = "contact@talentstube.com";
}
$body = [
'FromEmail' => "noreply@talentstube.io",
@@ -23,6 +23,7 @@ use AppBundle\Form\CareersType;
use AppBundle\Form\FormationsType;
use AppBundle\Form\LanguagesType;
use Symfony\Component\Security\Http\Event\InteractiveLoginEvent;
use \DateTime;
class SecurityController extends FOSRestController
{
@@ -129,6 +130,91 @@ class SecurityController extends FOSRestController
return new JsonResponse($status);
}
/**
* @Rest\Get(path="/api/test", name="api_test")
* @Rest\View
*/
public function test(Request $request)
{
$status = array('status' => "success", 'message' => "Ok2");
// $curl = curl_init();
// curl_setopt($curl, CURLOPT_HTTPHEADER, array(
// 'Content-Type: application/json',
// 'Accept : application/json',
// ));
$url="https://recruteur.talentstube.com/api/getDetailAppelation?q=10944";
// curl_setopt_array($curl, array(
// CURLOPT_URL => "http://localhost/app_dev.php/api/getDetailAppelation?q=10944",
// CURLOPT_RETURNTRANSFER => true,
// CURLOPT_ENCODING => "",
// CURLOPT_MAXREDIRS => 10,
// CURLOPT_TIMEOUT => 0,
// CURLOPT_FOLLOWLOCATION => true,
// CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
// CURLOPT_CUSTOMREQUEST => "GET",
// CURLOPT_HTTPHEADER => array(
// "Accept: application/json",
// ),
// ));
//curl_setopt_array();
// create & initialize a curl session
// Optional Authentication:
$curl = curl_init();
curl_setopt($curl, CURLOPT_HTTPHEADER, array(
'Content-Type: application/json',
'Accept : application/json',
));
curl_setopt_array($curl, array(
CURLOPT_URL => $url,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => array(
"Accept: application/json",
),
));
$response = curl_exec($curl);
$parsed_json = json_decode($response);
$competencesDeBase = $parsed_json->{'competencesDeBase'};
//dump($competencesDeBase);
echo "competencesDeBase!!2 --------------- <br>";
foreach ($parsed_json->{'competencesDeBase'} as $json){
echo( $json->{'code'})." / ";
echo( $json->{'libelle'});
echo "<br>";
}
echo "<br>";
foreach ($parsed_json->{'groupesCompetencesSpecifiques'} as $json){
foreach ($json->{'competences'} as $json2){
echo( $json2->{'code'})." / ";
echo( $json2->{'libelle'});
echo "<br>";
}
}
$err = curl_error($curl);
if (!$err)
{
}
curl_close($curl);
//return new JsonResponse($status);
}
/**
* @Rest\post(path="/api/update_user", name="api_update_user")
* @Rest\View
@@ -195,7 +281,67 @@ class SecurityController extends FOSRestController
$formatted_address = str_replace('"', '', $request->get('formatted_address'));
$lat = stripslashes($request->get('lat'));
$lng = stripslashes($request->get('lng'));
$appellationId="";
$appellationLibelle="";
$competences =null;
$codeRome=null;
if ($request->get('appellationId')){
$appellationId = $request->get('appellationId');
$appellationLibelle = $request->get('appellationLibelle');
$url="https://recruteur.talentstube.com/api/getDetailAppelation?q=".$appellationId;
$curl = curl_init();
curl_setopt($curl, CURLOPT_HTTPHEADER, array(
'Content-Type: application/json',
'Accept : application/json',
));
curl_setopt_array($curl, array(
CURLOPT_URL => $url,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => array(
"Accept: application/json",
),
));
//TODO transformer en array comme dans AdController
$detailMetier = curl_exec($curl);
$parsed_json = json_decode($detailMetier);
$codeRome = $parsed_json->{'metier'}->{'code'};
//dump($competencesDeBase);
//echo "competencesDeBase!!2 --------------- <br>";
foreach ($parsed_json->{'competencesDeBase'} as $json){
//echo( $json->{'code'})." / ";
//echo( $json->{'libelle'});
$competences[] = Array (
intval($json->{'code'}) => $json->{'libelle'}
);
//echo "<br>";
}
//echo "<br>";
foreach ($parsed_json->{'groupesCompetencesSpecifiques'} as $json){
foreach ($json->{'competences'} as $json2){
//echo( $json2->{'code'})." / ";
//echo( $json2->{'libelle'});
//echo "<br>";
$competences[] = Array (
intval($json2->{'code'}) => $json2->{'libelle'}
);
}
}
$err = curl_error($curl);
if (!$err)
{
}
curl_close($curl);
}
//
$newLinkedin = htmlspecialchars($request->get('linkedin'));
@@ -245,7 +391,11 @@ class SecurityController extends FOSRestController
);
$addrs['billing'] = $billing;
$talent->setAddresses($addrs);
$usr->setAppellationId($appellationId);
$usr->setAppellationLibelle($appellationLibelle);
$usr->setCompetences($competences);
$usr->setCodeRome($codeRome);
$companyManager->updateTalent($usr);
$status = array('status' => "success!!!!!!!!!!!!!!!!!!");
@@ -14,6 +14,7 @@ use JMS\Serializer\Annotation\Groups;
use JMS\Serializer\Annotation\Type;
use AppBundle\Utils\Traits\CareerJsonTrait;
use \DateTime;
/**
* @ORM\Entity(repositoryClass="AppBundle\Repository\UserRepository")
@@ -213,7 +214,7 @@ class User extends BaseUser
/**
* @var int
*
* @ORM\Column(name="appellationId", type="integer", nullable=true)
* @ORM\Column(name="appellation_id", type="integer", nullable=true)
*
*/
private $appellationId;
@@ -221,7 +222,7 @@ class User extends BaseUser
/**
* @var string
*
* @ORM\Column(name="appellationLibelle", type="text", nullable=true)
* @ORM\Column(name="appellation_libelle", type="text", nullable=true)
*
*/
private $appellationLibelle;
@@ -229,7 +230,7 @@ class User extends BaseUser
/**
* @var string
*
* @ORM\Column(name="codeRome", type="text", nullable=true)
* @ORM\Column(name="code_rome", type="text", nullable=true)
*
*/
private $codeRome;
@@ -241,6 +242,20 @@ class User extends BaseUser
*/
private $competences;
/**
* @var \DateTime
*
* @ORM\Column(name="date_premiere_relance", type="datetime", length=255, nullable=true, options={"default" : "2021-01-01"})
*/
private $datePremiereRelance;
/**
* @var \DateTime
*
* @ORM\Column(name="date_deuxieme_relance", type="datetime", length=255, nullable=true, options={"default" : "2021-01-01"})
*/
private $dateDeuxiemeRelance;
/***********************
* Constructor
***********************/
@@ -257,6 +272,8 @@ class User extends BaseUser
$this->products = new ArrayCollection();
$this->recommendations = new ArrayCollection();
$this->sendedRecommendations = new ArrayCollection();
$this->datePremiereRelance = new DateTime();
$this->dateDeuxiemeRelance = new DateTime();
}
/***********************
@@ -494,6 +511,12 @@ class User extends BaseUser
"currentJob" => $this->getCompany()->getExtra()["titleTalent"],
"geoloc" => $this->getGeoloc(),
"website" => $this->getCompany()->getWebsite(),
"appellationId" => $this->getAppellationId(),
"appellationLibelle" => $this->getAppellationLibelle(),
"codeRome" => $this->getCodeRome(),
"competences" => $this->getCompetences(),
"datePremiereRelance" => $this->getDatePremiereRelance(),
"dateDeuxiemeRelance" => $this->getDateDeuxiemeRelance(),
);
return $card;
}
@@ -1388,4 +1411,53 @@ class User extends BaseUser
{
return $this->competences;
}
/**
* Set datePremiereRelance.
*
* @param \DateTime|null $datePremiereRelance
*
* @return User
*/
public function setDatePremiereRelance($datePremiereRelance = null)
{
$this->datePremiereRelance = $datePremiereRelance;
return $this;
}
/**
* Get datePremiereRelance.
*
* @return \DateTime|null
*/
public function getDatePremiereRelance()
{
return $this->datePremiereRelance->format('d/m/Y');
}
/**
* Set dateDeuxiemeRelance.
*
* @param \DateTime|null $dateDeuxiemeRelance
*
* @return User
*/
public function setDateDeuxiemeRelance($dateDeuxiemeRelance = null)
{
$this->dateDeuxiemeRelance = $dateDeuxiemeRelance;
return $this;
}
/**
* Get dateDeuxiemeRelance.
*
* @return \DateTime|null
*/
public function getDateDeuxiemeRelance()
{
return $this->dateDeuxiemeRelance->format('d/m/Y');
}
}
@@ -398,11 +398,33 @@ class AnswerRepository extends AbstractRepository
->createQueryBuilder('a')
->select(['a'])
->where('a.comment IS NOT NULL');
$answers = $qb->getQuery()->getResult();
return $answers;
}
public function findUsersRelanceJ3()
{
$qb = $this
->createQueryBuilder('a')
->select('a', 'u', 'c')
->leftjoin('a.user', 'u')
->join('u.company', 'c')
->where('u.roles LIKE :roleT')
->andWhere('u.enabled = true')
// ->andWhere('c.cTime > CURRENT_TIMESTAMP()')
// ->andWhere('u.datePremiereRelance <> :dateInit')
// ->andWhere('u.dateDeuxiemeRelance <> :dateInit')
->andWhere('u.datePremiereRelance is NULL')
->andWhere('c.cTime <= :begin')
->setParameter('roleT', '%ROLE_TALENT%')
->setParameter('begin', new \DateTime('-3 days'));
// ->setParameter('dateInit', new \DateTime('2021-01-01'));
;
return $qb->getQuery()->getResult();
}
}
@@ -70,9 +70,45 @@ class UserRepository extends EntityRepository
return $qb->getQuery()->getResult();
}
public function findUsersRelance($type)
{
$qb = $this
->createQueryBuilder('u')
->select('u', 'c', 'a')
->join('u.company', 'c')
->leftjoin('u.answers', 'a')
->where('u.roles LIKE :roleT')
->andWhere('u.enabled = true')
->andWhere('a.id is NULL');
if($type=="j3"){
$qb->andWhere('u.datePremiereRelance is NULL');
}else{
$qb->andWhere('u.datePremiereRelance is not NULL');
$qb->andWhere('u.dateDeuxiemeRelance is NULL');
}
//->andWhere('u.datePremiereRelance <> :dateInit')
$qb->andWhere('c.cTime <= :begin')
->andWhere('c.presentationVideo is NULL')
->setParameter('roleT', '%ROLE_TALENT%');
if($type=="j3"){
$qb->setParameter('begin', new \DateTime('-3 days'));
}else{
$qb->setParameter('begin', new \DateTime('-7 days'));
}
//->setParameter('dateInit', new \DateTime('2021-01-01'));
//presentationVideo
;
return $qb->getQuery()->getResult();
}
public function findUserAvecAdresse()
{
$qb = $this->_em->createQueryBuilder();
$qb->select('u', 'c')
->from($this->_entityName, 'u')
+1 -1
View File
@@ -18136,7 +18136,7 @@ button:focus {
Clients
------------------------------------*/
.u-clients {
width: 5rem;
width: 6rem;
margin-left: auto;
margin-right: auto;
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

View File

Before

Width:  |  Height:  |  Size: 4.4 KiB

After

Width:  |  Height:  |  Size: 4.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB