Compare commits

..

11 Commits

Author SHA1 Message Date
llaniau 078a62e588 test laurent pour corentin 2021-03-17 13:12:30 +01:00
llaniau 73e709c6c9 Batch + envoi mail apres offre 2021-03-16 22:28:40 +01:00
llaniau ec71b87747 candidatures d'une offre 2021-03-15 19:45:07 +01:00
llaniau a5636bf2b5 Bug candidatures (sF v1 et web app) 2021-03-10 14:12:46 +01:00
llaniau c0e25f5d10 Bug liste candidatures dashboar tt et entreprise 2021-03-10 12:59:38 +01:00
llaniau fc860c32ad Bug presta 2021-03-10 12:23:37 +01:00
llaniau 69522b4836 Bug prestashop 2021-03-10 12:21:25 +01:00
llaniau 1aea17557e MEP V2.7.5 2021-03-10 11:33:09 +01:00
llaniau ab74dae813 MEP V2.7.5 2021-03-10 11:32:30 +01:00
llaniau c46f0c29a3 V2.7.5 2021-03-10 10:29:39 +01:00
llaniau 5b1d296817 Amélioration candidatures dashboard entre 2021-03-10 10:27:50 +01:00
35 changed files with 2621 additions and 886 deletions
@@ -301,7 +301,11 @@
</trans-unit>
<trans-unit id="ad.company.list.title">
<source>ad.company.list.title</source>
<target>Intitulé de l'annonce</target>
<target>Intitulé de l'offre</target>
</trans-unit>
<trans-unit id="ad.company.list.location">
<source>ad.company.list.location</source>
<target>Localisation</target>
</trans-unit>
<trans-unit id="ad.company.list.answers">
<source>ad.company.list.answers</source>
@@ -315,6 +319,10 @@
<source>ad.company.list.actions</source>
<target>Actions</target>
</trans-unit>
<trans-unit id="ad.company.list.statut">
<source>ad.company.list.statut</source>
<target>Statut</target>
</trans-unit>
<trans-unit id="ad.company.list.status">
<source>ad.company.list.status</source>
<target>Statut</target>
@@ -367,6 +375,10 @@
<source>profile.talent.firstname</source>
<target>Prénom</target>
</trans-unit>
<trans-unit id="profile.talent.video">
<source>profile.talent.video</source>
<target>Vidéo</target>
</trans-unit>
<trans-unit id="profile.talent.lastname">
<source>profile.talent.lastname</source>
<target>Nom</target>
@@ -1,30 +1,35 @@
{% extends 'admin/base_admin.html.twig' %}
{% block js %}
{# <link rel="stylesheet" href="//cdn.datatables.net/1.10.16/css/jquery.dataTables.min.css">
{# <link rel="stylesheet" href="//cdn.datatables.net/1.10.16/css/jquery.dataTables.min.css">
<link rel="stylesheet" href="https://cdn.datatables.net/buttons/1.4.1/css/buttons.dataTables.min.css"> #}
<link rel="stylesheet" type="text/css" href="https://cdn.datatables.net/1.10.22/css/jquery.dataTables.min.css">
<link rel="stylesheet" type="text/css" href="https://cdn.datatables.net/buttons/1.6.4/css/buttons.dataTables.min.css">
{# <script type="text/javascript" language="javascript" src="https://code.jquery.com/jquery-3.5.1.js"></script>
<link rel="stylesheet" type="text/css" href="https://cdn.datatables.net/1.10.22/css/jquery.dataTables.min.css">
<link rel="stylesheet" type="text/css" href="https://cdn.datatables.net/buttons/1.6.4/css/buttons.dataTables.min.css">
{# <script type="text/javascript" language="javascript" src="https://code.jquery.com/jquery-3.5.1.js"></script>
<script type="text/javascript" language="javascript" src="https://cdn.datatables.net/1.10.22/js/jquery.dataTables.min.js"></script>
<script type="text/javascript" language="javascript" src="https://cdn.datatables.net/buttons/1.6.4/js/dataTables.buttons.min.js"></script>
<script type="text/javascript" language="javascript" src="https://cdn.datatables.net/buttons/1.6.4/js/buttons.flash.min.js"></script> #}
<script type="text/javascript" src="https://code.jquery.com/jquery-3.5.1.js"></script>
<script type="text/javascript" src="https://cdn.datatables.net/1.10.22/js/jquery.dataTables.min.js"></script>
<script type="text/javascript" src="https://cdn.datatables.net/buttons/1.6.4/js/dataTables.buttons.min.js"></script>
<script type="text/javascript" language="javascript" src="https://cdnjs.cloudflare.com/ajax/libs/jszip/3.1.3/jszip.min.js"></script>
<script type="text/javascript" language="javascript" src="https://cdnjs.cloudflare.com/ajax/libs/pdfmake/0.1.53/pdfmake.min.js"></script>
<script type="text/javascript" language="javascript" src="https://cdnjs.cloudflare.com/ajax/libs/pdfmake/0.1.53/vfs_fonts.js"></script>
<script type="text/javascript" language="javascript" src="https://cdn.datatables.net/buttons/1.6.4/js/buttons.html5.min.js"></script>
<script type="text/javascript" src="https://code.jquery.com/jquery-3.5.1.js"></script>
<script type="text/javascript" src="https://cdn.datatables.net/1.10.22/js/jquery.dataTables.min.js"></script>
<script type="text/javascript" src="https://cdn.datatables.net/buttons/1.6.4/js/dataTables.buttons.min.js"></script>
<script type="text/javascript" language="javascript"
src="https://cdnjs.cloudflare.com/ajax/libs/jszip/3.1.3/jszip.min.js"></script>
<script type="text/javascript" language="javascript"
src="https://cdnjs.cloudflare.com/ajax/libs/pdfmake/0.1.53/pdfmake.min.js"></script>
<script type="text/javascript" language="javascript"
src="https://cdnjs.cloudflare.com/ajax/libs/pdfmake/0.1.53/vfs_fonts.js"></script>
<script type="text/javascript" language="javascript"
src="https://cdn.datatables.net/buttons/1.6.4/js/buttons.html5.min.js"></script>
<script type="text/javascript" language="javascript" src="https://cdn.datatables.net/buttons/1.6.4/js/buttons.print.min.js"></script>
<script type="text/javascript" language="javascript"
src="https://cdn.datatables.net/buttons/1.6.4/js/buttons.print.min.js"></script>
{# <script type="text/javascript" src="https://cdn.datatables.net/buttons/1.6.4/js/buttons.flash.min.js"></script>
{# <script type="text/javascript" src="https://cdn.datatables.net/buttons/1.6.4/js/buttons.flash.min.js"></script>
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/jszip/3.1.3/jszip.min.js"></script>
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/pdfmake/0.1.53/pdfmake.min.js"></script>
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/pdfmake/0.1.53/vfs_fonts.js"></script>
@@ -35,13 +40,13 @@
{% endblock %}
{% block contentHeader %}
<h1>
Liste des Candidatures
</h1>
<ol class="breadcrumb">
<li><a href="{{ path('admin_dashboard') }}"><i class="fa fa-dashboard"></i> Dashboard</a></li>
<li class="active">Annonces</li>
</ol>
<h1>
Liste des Candidatures
</h1>
<ol class="breadcrumb">
<li><a href="{{ path('admin_dashboard') }}"><i class="fa fa-dashboard"></i> Dashboard</a></li>
<li class="active">Annonces</li>
</ol>
{% endblock %}
{% block content %}
@@ -50,51 +55,54 @@
.dataTables_filter {
display: none;
}
</style>
<div class="box box-primary">
<div class="box-body">
<table width="100%" class="table " style="background-color: #3c8dbc">
<thead>
<tr>
<th colspan="5" class="text-center">RECHERCHE</th>
</tr>
<div class="box box-primary">
<div class="box-body">
<table width="100%" class="table " style="background-color: #3c8dbc">
<thead>
<tr>
<th colspan="5" class="text-center">RECHERCHE</th>
</thead>
<tr>
<th width="4%"><input id='input1' type='text' class='form-control' placeholder='par id' style='font-family:Arial, FontAwesome; width:100%'/></th>
<th width="11%"><input id='input3' type='text' class='form-control' placeholder='par nom' style='font-family:Arial, FontAwesome; width:100%'/></th>
<th width="11%"><input id='input4' type='text' class='form-control' placeholder='par prénom' style='font-family:Arial, FontAwesome; width:100%'/></th>
<th width="25%"><input id='input5' type='text' class='form-control' placeholder='par entreprise / offre' style='font-family:Arial, FontAwesome; width:100%'/></th>
<th width="15%">
<select id='input7'>
<option value="sended">Envoyé</option>
<option value="draft">Brouillon</option>
</select>
</th>
</tr>
</table>
<br/>
<table id="towns_dt_table" width="100%" class="table table-hover table-bordered">
{# Add a tfoot which will actually be used to place the individual search boxes #}
<tfoot>
<tr>
<th width="4%">id</th>
<th width="6%">Date d'envoi</th>
<th width="11%">Nom</th>
<th width="11%">Prénom</th>
<th width="25%">Annonce / entreprise</th>
<th width="28%">Vidéo</th>
<th width="15%">Statut</th>
<th width="10%">Actions</th>
</tr>
{# <tr>
</tr>
</thead>
<tr>
<th width="4%"><input id='input1' type='text' class='form-control' placeholder='par id'
style='font-family:Arial, FontAwesome; width:100%' /></th>
<th width="11%"><input id='input3' type='text' class='form-control' placeholder='par nom'
style='font-family:Arial, FontAwesome; width:100%' /></th>
<th width="11%"><input id='input4' type='text' class='form-control' placeholder='par prénom'
style='font-family:Arial, FontAwesome; width:100%' /></th>
<th width="25%"><input id='input5' type='text' class='form-control' placeholder='par entreprise / offre'
style='font-family:Arial, FontAwesome; width:100%' /></th>
<th width="15%">
<select id='input7'>
<option value="sended">Tous les statuts</option>
<option value="sended">Envoyé</option>
<option value="draft">Brouillon</option>
</select>
</th>
</tr>
</table>
<br />
<table id="towns_dt_table" width="100%" class="table table-hover table-bordered">
{# Add a tfoot which will actually be used to place the individual search boxes #}
<tfoot>
<tr>
<th width="4%">id</th>
<th width="6%">Date d'envoi</th>
<th width="11%">Nom</th>
<th width="11%">Prénom</th>
<th width="25%">Annonce / entreprise</th>
<th width="28%">Vidéo</th>
<th width="15%">Statut</th>
<th width="10%">Actions</th>
</tr>
{# <tr>
<th><input id='input1' type='text' class='form-control' placeholder='' style='font-family:Arial, FontAwesome; width:100%'/></th>
<th></th>
<th><input id='input3' type='text' class='form-control' placeholder='' style='font-family:Arial, FontAwesome; width:100%'/></th>
@@ -102,25 +110,25 @@
<th></th>
<th><input id='input5' type='text' class='form-control' placeholder='' style='font-family:Arial, FontAwesome; width:100%'/></th>
</tr> #}
</tfoot>
<thead>
<tr>
<th>Id</th>
<th>Date d'envoi</th>
<th>Nom</th>
<th>Prénom</th>
<th>Annonce / entreprise</th>
<th>Vidéo</th>
<th>Statut</th>
<th>Actions</th>
</tr>
</thead>
<tbody></tbody>
</table>
</tfoot>
<thead>
<tr>
<th>Id</th>
<th>Date d'envoi</th>
<th>Nom</th>
<th>Prénom</th>
<th>Annonce / entreprise</th>
<th>Vidéo</th>
<th>Statut</th>
<th>Actions</th>
</tr>
</thead>
<tbody></tbody>
</table>
{# <table id="answer_list_table" class="table table-hover table-bordered">
{# <table id="answer_list_table" class="table table-hover table-bordered">
<thead>
<tr>
<th class="col-xs-2">Date d'envoi</th>
@@ -169,118 +177,152 @@
{% endfor %}
</tbody>
</table> #}
</div>
</div>
</div>
</div>
{% endblock %}
{% block javascripts %}
<script>
$(document).ready(function(){
<script>
$(document).ready(function () {
// Add a text input to each footer cell
var pos = 1;
$('#towns_dt_table tfoot th').each( function () {
var title = $(this).text();
//$(this).html( "<input id='input" + pos + "' type='text' class='form-control' placeholder='' style='font-family:Arial, FontAwesome; width:100%'/>" );
// Add a text input to each footer cell
pos ++;
});
var table = $('#towns_dt_table').DataTable({
buttons: [
'copy', 'csv', 'excel', 'pdf', 'print'
],
"columnDefs": [
{ "name": "ad_id", "targets": 0 , "searchable": true, "orderable": true},
{ "name": "date_envoi", "targets": 1 , "searchable": true, "orderable": true},
{ "name": "nom", "targets": 2 , "searchable": true, "orderable": true},
{ "name": "prenom", "targets": 3 , "searchable": true, "orderable": true},
{ "name": "entreprise", "targets": 4, "searchable": true, "orderable": true },
{ "name": "video", "targets": 5 },
{ "name": "status", "targets": 6 , "searchable": true, "orderable": true},
{ "name": "actions", "targets": 7 },
],
"processing": true,
"serverSide": true,
"ajax": {
"url": '{{ path('alimenterCandidatures') }}',
"type": 'POST'
var table = $('#towns_dt_table').DataTable({
buttons: [
'copy', 'csv', 'excel', 'pdf', 'print'
],
"columnDefs": [{
"name": "ad_id",
"targets": 0,
"searchable": true,
"orderable": true
},
"paging" : true,
"info" : true,
"searching": true,
"bFilter":true,
"responsive": true,
"pageLength": 10,
"order": [[0, 'desc']],
"language": {
"url": "http://cdn.datatables.net/plug-ins/1.10.11/i18n/French.json"
{
"name": "date_envoi",
"targets": 1,
"searchable": true,
"orderable": true
},
});
{
"name": "nom",
"targets": 2,
"searchable": true,
"orderable": true
},
{
"name": "prenom",
"targets": 3,
"searchable": true,
"orderable": true
},
{
"name": "entreprise",
"targets": 4,
"searchable": true,
"orderable": true
},
{
"name": "video",
"targets": 5
},
{
"name": "status",
"targets": 6,
"searchable": true,
"orderable": true
},
{
"name": "actions",
"targets": 7
},
],
"processing": true,
"serverSide": true,
// Apply the search
pos = 1;
table.columns().every( function () {
var that = this;
$("#input"+pos).on( 'keyup change', function () {
if ( that.search() !== this.value )
{
that
.search( this.value )
.draw();
}
});
pos++;
});
$('#towns_dt_table_filter').hide();
"ajax": {
"url": '{{ path('alimenterCandidatures') }}',
"type": 'POST'
},
"paging": true,
"info": true,
"searching": true,
"bFilter": true,
"responsive": true,
"pageLength": 10,
"order": [
[0, 'desc']
],
"language": {
"url": "http://cdn.datatables.net/plug-ins/1.10.11/i18n/French.json"
},
});
function changerStatut(value, id){
var idAnswer = id;
var route = '/app_dev.php/admin/config/answer/' + idAnswer + '/status/' + value;
var select = $(this);
$.ajax({
type: "POST",
url: route,
dataType: "json",
success: function (msg) {
console.log("ok");
$("#status_"+id).text(value);
}
});
}
function verifierDelete(id){
console.log(id);
var r = confirm("Êtes vous sûr de supprimer cette candidature ?\nSupprimer cette candidature supprimera le média associé\n");
if (r == true) {
txt = "You pressed OK!";
location.href = "/app_dev.php/admin/config/answer/"+id+"/delete";
return true;
} else {
txt = "You pressed Cancel!";
// Apply the search
pos = 1;
table.columns().every(function () {
var that = this;
$("#input" + pos).on('keyup change', function () {
if (that.search() !== this.value) {
that
.search(this.value)
.draw();
}
});
pos++;
});
$('#towns_dt_table_filter').hide();
});
function changerStatut(value, id) {
var idAnswer = id;
var route = '/app_dev.php/admin/config/answer/' + idAnswer + '/status/' + value;
var select = $(this);
$.ajax({
type: "POST",
url: route,
dataType: "json",
success: function (msg) {
console.log("ok");
$("#status_" + id).text(value);
}
console.log(txt);
});
}
function verifierDelete(id) {
console.log(id);
var r = confirm(
"Êtes vous sûr de supprimer cette candidature ?\nSupprimer cette candidature supprimera le média associé\n"
);
if (r == true) {
txt = "You pressed OK!";
location.href = "/app_dev.php/admin/config/answer/" + id + "/delete";
return true;
} else {
txt = "You pressed Cancel!";
}
</script>
console.log(txt);
}
</script>
{% endblock %}
@@ -24,7 +24,7 @@
{% block css %}
{% endblock %}
<!--[if lt IE 9]>
<!--[if lt IE 9]>
<script src="https://oss.maxcdn.com/html5shiv/3.7.3/html5shiv.min.js"></script>
<script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
<![endif]-->
@@ -0,0 +1,104 @@
<!DOCTYPE html>
<html lang="fr">
<head>
<meta http-equiv="content-type" content="text/html;charset=UTF-8" />
<meta charset="utf-8" />
<title>Pages - Admin Dashboard UI Kit - Dashboard</title>
<meta name="viewport"
content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no, shrink-to-fit=no" />
<meta name="apple-mobile-web-app-capable" content="yes">
<meta name="apple-touch-fullscreen" content="yes">
<meta name="apple-mobile-web-app-status-bar-style" content="default">
<meta content="Meet pages - The simplest and fastest way to build web UI for your dashboard or app."
name="description" />
<meta content="Ace" name="author" />
<link href="{{ asset('dashboard/plugins/pace/pace-theme-flash.css') }}" rel="stylesheet" type="text/css" />
<link href="{{ asset('dashboard/plugins/bootstrap/css/bootstrap.min.css') }}" rel="stylesheet" type="text/css" />
<link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">
<link href="{{ asset('dashboard/plugins/jquery-scrollbar/jquery.scrollbar.css') }}" rel="stylesheet" type="text/css"
media="screen" />
<link href="{{ asset('dashboard/plugins/select2/css/select2.min.css') }}" rel="stylesheet" type="text/css"
media="screen" />
<link href="{{ asset('dashboard/plugins/nvd3/nv.d3.min.css') }}" rel="stylesheet" type="text/css" media="screen" />
<link href="{{ asset('dashboard/plugins/mapplic/css/mapplic.css') }}" rel="stylesheet" type="text/css" />
<link href="{{ asset('dashboard/plugins/rickshaw/rickshaw.min.css') }}" rel="stylesheet" type="text/css" />
<link class="main-stylesheet" href="{{ asset('dashboard/pages/css/themes/corporate.css') }}" rel="stylesheet"
type="text/css" />
<!-- Please remove the file below for production: Contains demo classes -->
<link class="main-stylesheet" href="{{ asset('dashboard/css/style.css') }}" rel="stylesheet" type="text/css" />
<script type="text/javascript">window.$crisp=[];window.CRISP_WEBSITE_ID="08e9d301-ba14-4d69-8b1a-53685114c5af";(function(){d=document;s=d.createElement("script");s.src="https://client.crisp.chat/l.js";s.async=1;d.getElementsByTagName("head")[0].appendChild(s);})();</script>
<!-- END PAGE LEVEL JS -->
<script src="{{ asset('dashboard/plugins/jquery/jquery-3.2.1.min.js') }}" type="text/javascript"></script>
{# <script type="text/javascript" src="http://code.jquery.com/jquery-3.2.1.min.js"></script> #}
{% block javascriptSupl %}
{% endblock %}
<!-- END PAGE LEVEL JS -->
</head>
<body class="fixed-header dashboard menu-pin menu-behind">
{# {{ include('default/user_switch.html.twig') }} #}
{{ include('admin/navigation_gauche.html.twig')}} }}
<!-- START PAGE-CONTAINER -->
<div class="page-container ">
{{ include('admin/base_dashboard_header.html.twig') }}
<!-- START PAGE CONTENT WRAPPER -->
<div class="page-content-wrapper ">
<div class="content ">
{% block dashContent %}
Dashboard Company
{% endblock %}
</div>
<!-- START COPYRIGHT -->
<!-- START CONTAINER FLUID -->
<!-- START CONTAINER FLUID -->
<div class=" container-fluid container-fixed-lg footer">
<div class="copyright sm-text-center">
<p class="small-text no-margin pull-left sm-pull-reset">
©2017-2021 Talents Tube
</p>
<p class="small no-margin pull-right sm-pull-reset">
Besoin d'aide ? 02 30 05 06 31
</p>
<div class="clearfix"></div>
</div>
</div>
<!-- END COPYRIGHT -->
</div>
<!-- END PAGE CONTENT WRAPPER -->
</div>
<!-- END PAGE CONTAINER -->
{% block javascripts %}
{% endblock %}
<!-- END PAGE LEVEL JS -->
<!-- END CORE TEMPLATE JS -->
<!-- BEGIN PAGE LEVEL JS -->
{% block javascriptsSecondaire %}
{% endblock %}
{% block javascriptsEnd %}
{% endblock %}
</body>
</html>
@@ -1,8 +1,7 @@
<!-- START HEADER -->
<div class="header ">
<!-- START MOBILE SIDEBAR TOGGLE -->
<a href="#" class="btn-link toggle-sidebar d-lg-none pg-icon btn-icon-link" data-toggle="sidebar">
menu</a>
<!-- END MOBILE SIDEBAR TOGGLE -->
<div class="">
<div class="brand inline m-l-10">
@@ -25,9 +24,7 @@
</div>
</div>
<!-- END User Info-->
<a href="#" class="header-icon m-l-5 sm-no-margin d-inline-block" data-toggle="quickview" data-toggle-element="#quickview">
<i class="pg-icon btn-icon-link">menu_add</i>
</a>
</div>
</div>
<!-- END HEADER -->
@@ -0,0 +1,34 @@
{% extends 'admin/base_admin.html.twig' %}
{% block contentHeader %}
<h1>
Pages
<small>Liste</small>
</h1>
<ol class="breadcrumb">
<li><a href="{{ path('admin_dashboard') }}"><i class="fa fa-dashboard"></i> Dashboard</a></li>
<li class="active">Batch candidatures</li>
</ol>
{% endblock %}
{% block content %}
<div class="box box-primary">
<div class="box-body">
<a href="{{ path('admin_batch_candidature_init') }}">
<button type="button" class="btn btn-lg btn-primary btn-cons btn-animated from-left" id="saveAdButton">
<span>Lancer le batch</span>
</button>
</a>
<b>A NE LANCER QU'UNE FOIS</b>
</div>
</div>
{% endblock %}
{% block javascripts %}
{% endblock %}
@@ -0,0 +1,34 @@
{% extends 'admin/base_admin.html.twig' %}
{% block contentHeader %}
<h1>
Pages
<small>Liste</small>
</h1>
<ol class="breadcrumb">
<li><a href="{{ path('admin_dashboard') }}"><i class="fa fa-dashboard"></i> Dashboard</a></li>
<li class="active">Batch sur les messages</li>
</ol>
{% endblock %}
{% block content %}
<div class="box box-primary">
<div class="box-body">
<a href="{{ path('admin_batch_message_comment') }}">
<button type="button" class="btn btn-lg btn-primary btn-cons btn-animated from-left" id="saveAdButton">
<span>Lancer le batch</span>
</button>
</a>
<b>A NE LANCER QU'UNE FOIS</b>
</div>
</div>
{% endblock %}
{% block javascripts %}
{% endblock %}
@@ -133,7 +133,19 @@
</small>
</li>
{% endif %}
{% else %}
<li class="">
<a href="/logout">
<span class="principal">Se déconnecter</span>
</a>
<span class="icon-thumbnail">
<span class="material-icons">
logout
</span>
</span>
</li>
{% endif %}
</ul>
@@ -73,6 +73,18 @@
<i class="fa fa-file-text-o" aria-hidden="true"></i><span>Pages</span>
</a>
</li>
<li class="treeview">
<a href="#"><i class="fa fa-file-video-o"></i> <span>Batchs</span>
<span class="pull-right-container">
<i class="fa fa-angle-left pull-right"></i>
</span>
</a>
<ul class="treeview-menu">
<li><a href="{{ path('admin_batch_message') }}">Basculer les anciens messages</a></li>
<li><a href="{{ path('admin_batch_candidatures') }}">Statuts des anciennes candidatures</a></li>
</ul>
</li>
<li class="treeview">
<a href="#"><i class="fa fa-users" aria-hidden="true"></i> <span>Utilisateurs</span>
<span class="pull-right-container">
@@ -1,6 +1,29 @@
{# {% extends 'company/base_dashboard_company.html.twig' %} #}
{% extends 'admin/base_dashboard.html.twig' %}
{% extends 'admin/base_dashboard_candidatures.html.twig' %}
{% block javascriptSupl %}
<link rel="stylesheet" type="text/css" href="https://cdn.datatables.net/1.10.22/css/jquery.dataTables.min.css">
<link rel="stylesheet" type="text/css" href="https://cdn.datatables.net/buttons/1.6.4/css/buttons.dataTables.min.css">
{# <script type="text/javascript" language="javascript" src="https://code.jquery.com/jquery-3.5.1.js"></script>
<script type="text/javascript" language="javascript" src="https://cdn.datatables.net/1.10.22/js/jquery.dataTables.min.js"></script>
<script type="text/javascript" language="javascript" src="https://cdn.datatables.net/buttons/1.6.4/js/dataTables.buttons.min.js"></script>
<script type="text/javascript" language="javascript" src="https://cdn.datatables.net/buttons/1.6.4/js/buttons.flash.min.js"></script> #}
<script type="text/javascript" src="https://code.jquery.com/jquery-3.5.1.js"></script>
<script type="text/javascript" src="https://cdn.datatables.net/1.10.22/js/jquery.dataTables.min.js"></script>
<script type="text/javascript" src="https://cdn.datatables.net/buttons/1.6.4/js/dataTables.buttons.min.js"></script>
<script type="text/javascript" language="javascript"
src="https://cdnjs.cloudflare.com/ajax/libs/jszip/3.1.3/jszip.min.js"></script>
<script type="text/javascript" language="javascript"
src="https://cdnjs.cloudflare.com/ajax/libs/pdfmake/0.1.53/pdfmake.min.js"></script>
<script type="text/javascript" language="javascript"
src="https://cdnjs.cloudflare.com/ajax/libs/pdfmake/0.1.53/vfs_fonts.js"></script>
<script type="text/javascript" language="javascript"
src="https://cdn.datatables.net/buttons/1.6.4/js/buttons.html5.min.js"></script>
<script type="text/javascript" language="javascript"
src="https://cdn.datatables.net/buttons/1.6.4/js/buttons.print.min.js"></script>
{% endblock %}
{% block dashContent %}
<!-- START JUMBOTRON -->
@@ -55,8 +78,10 @@ Lien : https://recruteur.talentstube.com/partage/{{ ad.id }}
Mot de passe : ######
Au plaisir d’échanger avec vous,
</textarea>
<br/>
<p>* Les données collectées dans les candidatures vidéo sont strictement confidentielles et entrent dans le champ de la protection des données personnelles dun candidat. Les vidéos peuvent être partagées uniquement dans le cadre du processus de recrutement.
<br />
<p>* Les données collectées dans les candidatures vidéo sont strictement confidentielles et entrent dans
le champ de la protection des données personnelles dun candidat. Les vidéos peuvent être partagées
uniquement dans le cadre du processus de recrutement.
</p>
</div>
<div class="modal-footer">
@@ -82,12 +107,13 @@ Au plaisir d’échanger avec vous,
<h5>&nbsp;</h5>
<p>En cliquant sur confirmer, cette candidature ne sera plus accessible dans lespace visiteurs.</p>
</div>
<div class="modal-footer">
<input type="hidden" id="caseRecocher">
<button type="button" class="btn btn-secondary" data-dismiss="modal" onClick="annulerCheckbox()">Annuler</button>
<button type="button" class="btn btn-secondary" data-dismiss="modal">Confirmer</button>
<button type="button" class="btn btn-secondary" data-dismiss="modal"
onClick="annulerCheckbox()">Annuler</button>
<button type="button" class="btn btn-secondary" data-dismiss="modal">Confirmer</button>
</div>
</div>
</div>
@@ -103,137 +129,162 @@ Au plaisir d’échanger avec vous,
</div>
</div> #}
<div class="col-xl-12">
<div class="card card-borderless col-xl-12 col-sm-12 p-b-20">
<div class="row profil-candidature">
<div class="col-xl-6 col-md-12 p-t-10">
<h5>{{ ad.title }}</h5>
<h6>Publiée le {{ ad.publishedAt|date("d/m/Y") }}</h6>
</div>
<div class="col-xl-6 col-md-12 p-t-20 text-right">
<a href="#" class="" data-toggle="tooltip"
title="Cochez une ou plusieurs candidatures avant de pouvoir les partager.">
<button type="button" class="btn btn-primary m-b-10 btn-lg " disabled data-toggle="modal"
data-target="#partageModal" id="partageCandidats">
Partager les
candidatures
</button>
</a>
<!--<button type="button" aria-label="" class="btn btn-default btn-lg m-b-10">
<div class="col-xl-12">
<div class="card card-borderless col-xl-12 col-sm-12 p-b-20">
<div class="row profil-candidature">
<div class="col-xl-6 col-md-12 p-t-10">
<h5>{{ ad.title }}</h5>
<h6>Publiée le {{ ad.publishedAt|date("d/m/Y") }}</h6>
</div>
<div class="col-xl-6 col-md-12 p-t-20 text-right">
<a href="#" class="" data-toggle="tooltip"
title="Cochez une ou plusieurs candidatures avant de pouvoir les partager.">
<button type="button" class="btn btn-primary m-b-10 btn-lg " disabled data-toggle="modal"
data-target="#partageModal" id="partageCandidats">
Partager les
candidatures
</button>
</a>
<!--<button type="button" aria-label="" class="btn btn-default btn-lg m-b-10">
<span class="material-icons fs-16 m-r-5">delete</span>
<span class="">Clôturer</span>
</button>-->
<a href="{{ path('company_ad_soft_edit', { 'id': ad.id }) }}" >
<button type="button" aria-label="" class="btn btn-default btn-lg m-b-10">
<span class="material-icons fs-16 m-r-5">create</span>
<span class="">Éditer l'offre</span>
</button>
</a>
</div>
</div>
<div id="reponses" class="table-responsive m-t-20">
<table class="table table-hover" id="basicTable">
<thead>
<tr>
<!-- NOTE * : Inline Style Width For Table Cell is Required as it may differ from user to user
Comman Practice Followed
-->
<th style="width: 1%;"></th>
<th style="width: 10%;">Vidéo</th>
<th style="width: 20%;">Nom prénom</th>
<th style="width: 15%;">Date de reception </th>
<th style="width: 20%;">Localisation </th>
<th style="width: 20%;">Statut</th>
<th class="width: 5%;">Actions</th>
<a href="{{ path('company_ad_soft_edit', { 'id': ad.id }) }}">
<button type="button" aria-label="" class="btn btn-default btn-lg m-b-10">
<span class="material-icons fs-16 m-r-5">create</span>
<span class="">Éditer l'offre</span>
</button>
</a>
</div>
</div>
<style type="text/css">
/* Hide default search box */
.dataTables_filter {
display: none;
}
</style>
<div id="reponses" class="table-responsive m-t-20">
<table width="100%" class="table " style="">
<tr>
<th width="11%"><input id='input3' type='text' class='form-control' placeholder='Recherche par nom'
style='font-family:Arial, FontAwesome; width:100%' />
</th>
</tr>
</thead>
<tbody>
{% for answer in answers %}
<tr>
<td>
<input type="checkbox" id="answer_{{answer.id}}" name="answers" class="nav-trigger"
onChange="verifierIsChecked({{answer.id}})" {% if answer.isShared %} checked
{% endif %} />
<label for="nav-trigger" class="navicon-button x">
<div class="navicon"></div>
</label>
</td>
<td>
<a href="{{ path('company_answer_show',{'id':answer.id }) }}">
{% if answer.video.thumbnails.0 is defined %}
{% set img = answer.video.thumbnails.0.sizes.1.link %}
{% else %}
{% set img = " " %}
{% endif %}
<img src="{{ img }}">
</a>
</td>
<td>
<a href="{{ path('company_answer_show',{'id':answer.id }) }}">{{ answer.user.lastname }}
{{ answer.user.firstname }}</a>
</td>
<td>
{{ answer.sendTime()|date('d/m/Y') }}
</td>
<td>
{% if answer.user.getGeoloc %}
{% for adress in answer.user.getGeoloc %}
{{ adress["locality"] }}, {{ adress["postal_code"] }}
{% endfor %}
{% else %}
Non renseignée
{% endif %}
</td>
<th width="11%"><input id='input4' type='text' class='form-control'
placeholder='Recherche par prénom' style='font-family:Arial, FontAwesome; width:100%' />
</th>
<th width="25%">
<select id='input8' class='form-control'>
<option value="">Tous les statuts</option>
<option value="A_TRAITER">À traiter</option>
<option value="CONTACTE">Contacté</option>
<option value="ENTRETIEN">Entretien programmé</option>
<option value="REFUSE">Refusé</option>
<option value="EMBAUCHE">Embauché</option>
</select>
</th>
</tr>
</table>
<table id="candidatures_dt_table" width="100%" class="table table-hover ">
<thead>
<tr>
<th width="4%"></th>
<th width="4%">Vidéo</th>
<th width="6%">Nom</th>
<th width="6%">Prénom</th>
<th width="11%">Date de reception</th>
<th width="11%">Intitulé de l'offre</th>
<th width="21%">Localisation</th>
<th width="15%">Statut</th>
<td>
{% if answer.statusReponse =="EMBAUCHE" %}
<span class="label label-success">Embauché</span>
{% elseif answer.statusReponse =="REFUSE"%}
<span class="label label-important">Refusé</span>
{% elseif answer.statusReponse =="ENTRETIEN"%}
<span class="label label-warning">Entretien programmé</span>
{% elseif answer.statusReponse =="A_TRAITER"%}
<span class="label label-info">À traiter</span>
{% elseif answer.statusReponse =="CONTACTE"%}
<span class="label">Contacté</span>
{% else %}
<span class="label label-info">À traiter</span>
{% endif %}
</td>
</tr>
</thead>
<tbody>
{% for answer in answers %}
<tr>
<td>
<input type="checkbox" id="answer_{{answer.id}}" name="answers" class="nav-trigger"
onChange="verifierIsChecked({{answer.id}})" {% if answer.isShared %} checked
{% endif %} />
<label for="nav-trigger" class="navicon-button x">
<div class="navicon"></div>
</label>
</td>
<td>
<a href="{{ path('company_answer_show',{'id':answer.id }) }}">
{% if answer.video.thumbnails.0 is defined %}
{% set img = answer.video.thumbnails.0.sizes.1.link %}
{% else %}
{% set img = " " %}
{% endif %}
<img src="{{ img }}">
</a>
</td>
<td>
<a href="{{ path('company_answer_show',{'id':answer.id }) }}">{{ answer.user.lastname }}
{{ answer.user.firstname }}</a>
</td>
<td>
{{ answer.sendTime()|date('d/m/Y') }}
</td>
<td>
{% if answer.user.getGeoloc %}
{% for adress in answer.user.getGeoloc %}
{{ adress["locality"] }}, {{ adress["postal_code"] }}
{% endfor %}
{% else %}
Non renseignée
{% endif %}
</td>
<td class="v-align-middle">
<a title="{{ad.title}}" href="{{ path('company_answer_show',{'id':answer.id }) }}">
<i class="pg-icon">eye</i>
</a>
{# <a href="#" class="note-action c-pointer" data-func="add"
<td>
{% if answer.statusReponse =="EMBAUCHE" %}
<span class="label label-success">Embauché</span>
{% elseif answer.statusReponse =="REFUSE"%}
<span class="label label-important">Refusé</span>
{% elseif answer.statusReponse =="ENTRETIEN"%}
<span class="label label-warning">Entretien programmé</span>
{% elseif answer.statusReponse =="A_TRAITER"%}
<span class="label label-info">À traiter</span>
{% elseif answer.statusReponse =="CONTACTE"%}
<span class="label">Contacté</span>
{% else %}
<span class="label label-info">À traiter</span>
{% endif %}
</td>
<td class="v-align-middle">
<a title="{{ad.title}}" href="{{ path('company_answer_show',{'id':answer.id }) }}">
<i class="pg-icon">eye</i>
</a>
{# <a href="#" class="note-action c-pointer" data-func="add"
data-answer="{{ answer.id }}">
<i class="pg-icon">note</i>
</a> #}
{# {% for note in answer.notes %}
{# {% for note in answer.notes %}
<a class="tooltipped note-action c-pointer" data-position="top" data-delay="50"
data-tooltip="{{ note.content }}" data-note="{{ note.id }}" data-func="edit">
<i class="pg-icon">comment</i>
</a>
{% endfor %} #}
</td>
</td>
</tr>
{% endfor %}
{% if answers|length == 0 %}
<tr>
<th colspan="7" class="text-center">Aucune candidature pour le moment</th>
</tr>
{% endif %}
</tbody>
</table>
</div>
</div>
</div>
</tr>
{% endfor %}
{% if answers|length == 0 %}
<tr>
<th colspan="7" class="text-center">Aucune candidature pour le moment</th>
</tr>
{% endif %}
</tbody>
</table>
</div>
</div>
</div>
@@ -363,23 +414,23 @@ Au plaisir d’échanger avec vous,
{% block javascriptsEnd %}
<!-- BEGIN VENDOR JS -->
<script src="{{ asset('dashboard/plugins/bootstrap/js/bootstrap.min.js') }}" type="text/javascript"></script>
<script src="{{ asset('dashboard/plugins/bootstrap/js/bootstrap.min.js') }}" type="text/javascript"></script>
<!-- END PAGE LEVEL JS -->
<!-- END PAGE LEVEL JS -->
<script type="text/javascript">
function parcourirAllCheckbox() {
var allCheckboxes = $("input[type=checkbox]");
var allCheckboxes = $("input[type=checkbox]");
var auMoinUneCheckboxCoche = false;
// Put all the unique name attributes in an array.
var checkboxCocheId= null;
var checkboxCocheId = null;
allCheckboxes.each(function () {
var isChecked = $(this).prop('checked');
if (isChecked == true) {
auMoinUneCheckboxCoche = true;
var tabId =$(this).prop('id').split("_");
var tabId = $(this).prop('id').split("_");
checkboxCocheId = tabId[1];
console.log(checkboxCocheId);
}
@@ -397,19 +448,19 @@ Au plaisir d’échanger avec vous,
}
function annulerCheckbox(){
function annulerCheckbox() {
//recuprer l'id de la checkbox
var checkboxId = $("#caseRecocher").val();
//$("#answer_" + checkboxId).prop(checked, true);
document.getElementById("answer_" + checkboxId).checked = true;
console.log("annuler action checkbox "+checkboxId);
console.log("annuler action checkbox " + checkboxId);
verifierIsChecked(checkboxId);
}
function verifierIsChecked(id) {
var auMoinUneCheckboxCoche = false;
parcourirAllCheckbox();
if($("#answer_" + id).prop('checked')==false){
if ($("#answer_" + id).prop('checked') == false) {
console.log("cette checkbox était cochée avant");
//$('#decocheModal').modal('open');
$('#decocheModal').modal('show');
@@ -440,7 +491,7 @@ Au plaisir d’échanger avec vous,
const obj = JSON.parse(data);
console.log(obj.code);
var texteMail = $("#codeShare").val();
$("#codeShare").val(texteMail.replace('######', obj.code));
$("#codeShare").val(texteMail.replace('######', obj.code));
})
//Ce code sera exécuté en cas d'échec - L'erreur est passée à fail()
@@ -470,11 +521,142 @@ Au plaisir d’échanger avec vous,
});
$('#partageModal').modal('hide');
$('#decocheModal').modal('hide');
}
);
$(window).load(function() {
});
$(window).load(function () {
$('#partageModal').modal('hide');
$('#decocheModal').modal('hide');
});
</script>
<script>
$(document).ready(function () {
// Add a text input to each footer cell
var pos = 1;
var table = $('#candidatures_dt_table').DataTable({
"columnDefs": [
{
"name": "partage",
"targets": 0,
"searchable": false,
"orderable": false
},
{
"name": "video",
"targets": 1,
"searchable": true,
"orderable": false
},
{
"name": "nom",
"targets": 2,
"type": 'html',
"searchable": true,
"orderable": true
},
{
"name": "prenom",
"targets": 3,
"type": 'html',
"searchable": true,
"orderable": true
},
{
"name": "dateReception",
"targets": 4,
"searchable": true,
"orderable": true
},
{
"name": "offre",
"targets": 5,
"searchable": true,
"orderable": false
},
{
"name": "localisation",
"targets": 6,
"searchable": true,
"orderable": false
},
{
"name": "statusReponse",
"targets": 7,
"searchable": true,
"orderable": false
},
],
"processing": true,
"serverSide": true,
"ajax": {
"url": "{{ path('alimenterCandidaturesAd',{'id':ad.id}) }}",
"type": 'POST',
},
"paging": true,
"info": true,
"searching": true,
"bFilter": true,
"responsive": true,
"pageLength": 100,
"order": [
[0, 'desc']
],
"language": {
"sProcessing": "En cours de chargement...",
"sSearch": "Rechercher&nbsp;:",
"sLengthMenu": "Afficher _MENU_ candidatures",
"sInfo": "Candidature de _START_ &agrave; _END_ sur _TOTAL_ candidatures",
"sInfoEmpty": "Candidature 0 &agrave; 0 sur 0 candidature",
"sInfoFiltered": "",
"sInfoPostFix": "",
"sLoadingRecords": "Chargement en cours...",
"sZeroRecords": "Aucune candidature ne correspond à votre recherche",
"sEmptyTable": "Aucune candidature disponible dans le tableau",
"oPaginate": {
"sFirst": "Premier",
"sPrevious": "Pr&eacute;c&eacute;dent",
"sNext": "Suivant",
"sLast": "Dernier"
},
"oAria": {
"sSortAscending": ": activer pour trier la colonne par ordre croissant",
"sSortDescending": ": activer pour trier la colonne par ordre d&eacute;croissant"
}
},
});
// Apply the search
pos = 1;
table.columns().every(function () {
var that = this;
$("#input" + pos).on('keyup change', function () {
console.log(this);
if (that.search() !== this.value) {
that
.search(this.value)
.draw();
}
});
pos++;
});
$('#candidatures_dt_table_filter').hide();
});
</script>
{% endblock %}
@@ -37,7 +37,30 @@
<!-- END JUMBOTRON -->
<!-- MODALS-->
<!-- Modal 0 -->
<div class="modal fade in bd-example-modal-lg" id="popupSubmitModal" tabindex="-1" role="dialog"
aria-labelledby="popupSubmitModalLabel" aria-hidden="false" data-show="false">
<div class="modal-dialog modal-lg" role="document">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="popupSubmitModalLabel">Votre offre demploi vidéo est en cours de validation par l'équipe Talents Tube</h5>
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">&times;</span>
</button>
</div>
<div class="modal-body">
<p>Vous recevrez un e-mail lorsque votre offre demploi sera publiée sur la plateforme.</p>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-dismiss="modal" onClick="submitFormAd()">Fermer</button>
</div>
</div>
</div>
</div>
<!-- Modal 1 -->
<div class="modal fade bd-example-modal-lg" id="competencesModal" tabindex="-1" role="dialog"
aria-labelledby="competencesModalLabel" aria-hidden="false" data-show="false">
@@ -308,15 +331,21 @@
</table>
</div>
<br>
<button aria-label="" type="submit"
<button type="button" class="btn btn-lg btn-primary btn-cons btn-animated from-left" data-toggle="modal"
data-target="#popupSubmitModal" id="saveAdButton">
<span>Suivant</span>
<span class="hidden-block">
<i class="material-icons tab-icon">videocam</i>
</span>
</button>
{# <button aria-label="" type="submit"
class="btn btn-lg btn-primary btn-cons btn-animated from-left" id="saveAdButton"
disabled="">
<span>Suivant</span>
<span class="hidden-block">
<i class="material-icons tab-icon">videocam</i>
</span>
</button>
</button> #}
</div>
</div>
@@ -705,5 +734,10 @@
// on génere le json a chaque fois
genererJson();
}
//function appelée lors de la confirmation de popup
function submitFormAd(){
$('form[name="ad_soft"]').submit();
}
</script>
{% endblock %}
@@ -8,164 +8,264 @@
<li class="breadcrumb-item active">Offres d'emploi</li>
</ol>
<!-- END BREADCRUMB -->
<div class="row">
<div class="col-xl-12 col-lg-12 ">
<!-- START card -->
<div class="card card-transparent">
<div class="card-header ">
</div>
<div class="card-body">
<a class="btn-square" target="_self" href="{{ path('company_ad_create') }}">
<button aria-label=""
class="btn btn-primary btn-cons">{{ 'ad.company.add.label'|trans }}</button>
</a>
</div>
</div>
<!-- END card -->
</div>
</div>
</div>
</div>
</div>
<!-- END JUMBOTRON -->
<!-- Début modifications Corentin -->
<div class="col-xl-12">
<div class="card card-borderless col-xl-12 col-sm-12 p-b-20">
<div class="row ">
<div class="col-xl-12 col-md-12 p-t-20 text-right">
<a class="btn-square" target="_self" href="{{ path('company_ad_create') }}">
<button type="button" aria-label="" class="btn btn-primary btn-lg m-b-10">
<span class="material-icons fs-16 m-r-5">movie</span>
<span class="">Créer une offre d'emploi vidéo</span>
</button>
</a>
</div>
</div>
<div id="reponses" class="table-responsive m-t-20">
<table class="table table-hover" id="basicTable">
<thead>
<tr>
<th colspan=4 class="colonne1 bold">Gestion des offres</th>
<th colspan=5 class="colonne2 bold">Gestion des candidatures</th>
</tr>
</thead>
<thead>
<tr>
<th class="colonne1" style="width:25%;">Intitulé du poste</th>
<th class="colonne1" style="width:15%;">Statut</th>
<th class="colonne1" style="width:10%;">Vues de l'offre</th>
<th class="colonne1" style="width:10%;">Actions</th>
<th class="colonne2" style="width:8%;">À traiter</th>
<th class="colonne2" style="width:8%;">Contacté</th>
<th class="colonne2" style="width:8%;">Refusé</th>
<th class="colonne2" style="width:8%;">Entretien programmé</th>
<th class="colonne2" style="width:8%;">Embauché</th>
</tr>
</thead>
<tbody>
{% for ad in ads %}
<tr>
<td>
<h6>
{% if ad.countAnswers > 0 %}
<a href="{{ path('company_ad_answer_list',{'id':ad.id}) }}">
{{ ad.title }}
</a>
{% else %}
{{ ad.title }}
{% endif %}
</h6>
<br>
<span>{{ ad.location.gmap_address.formatted_address }}</span><br>
<span>Date de création : {{ ad.publishedAt|date("d/m/Y") }}</span>
</td>
<td>
{% if ad.getStatus() == "DECLINED" %}
<span class="">{{ ad.getStatus()|trans }}</span>
{% elseif ad.getStatus() == "PUBLISHED" %}
<span class="label label-success">Publiée</span>
{% elseif ad.getStatus() == "CLOSED" %}
<span class="label label-important">Clôturée</span>
{% elseif ad.getStatus() == "DRAFT" %}
<span class="label ">Brouillon</span>
{% elseif ad.getStatus() == "TO_PUBLISH" %}
<span class="label label-warning">En attente de validation</span>
{% else %}
<span class="">{{ ad.getStatus()|trans }}</span>
{% endif %}
</td>
<td>
{% if arrayByAds is defined %}
{{ arrayByAds[ad.id]["count"] }}
{% endif %}
</td>
<td>
{% if ad.getStatus() == "DRAFT" or ad.getStatus() == "DECLINED" %}
{#Edit#}
<a class=" td-none" href="{{ path('company_ad_edit', { 'id': ad.id }) }}"
style="margin-right: 10px">
<i class="pg-icon">pen</i>
</a>
{% else %}
{#Soft Edit#}
<a class=" td-none" href="{{ path('company_ad_soft_edit', { 'id': ad.id }) }}"
style="margin-right: 10px">
<i class="pg-icon">pen</i>
</a>
{% endif %}
{% if ad.getStatus() == "DRAFT" or ad.getStatus() == "DECLINED" %}
{#Video#}
<a class="tooltipped td-none" href="{{ path('create_media', { 'id': ad.id }) }}">
<i class="material-icons">
videocam
</i>
</a>
{% endif %}
{% if ad.getStatus() == "PUBLISHED" %}
{#Extension#}
{# ENLEVE LE 01/09 #}
{# <a class="tooltipped td-none" data-position="top" data-delay="0"
data-tooltip="{{ 'ad.company.dates.extension.label'|trans }}"
href="{{ path('company_ad_extension', { 'id': ad.id }) }}"
style="margin-right: 10px">
<i class="pg-icon">calendar</i>
</a> #}
{#Force ending#}
{# <a class="tooltipped td-none" data-position="top" data-delay="0"
data-tooltip="{{ 'ad.company.closed.label'|trans }}"
href="{{ path('company_ad_closed', { 'id': ad.id }) }}" style="margin-right: 10px">
<i class="material-icons">
close
</i>
</a> #}
{% endif %}
{% if ad.getStatus() == "TO_PUBLISH" or ad.getStatus() == "VALIDATED" or ad.getStatus() == "CLOSED" or ad.getStatus() == "EXPIRED" %}
{#Edit Dates#}
{# <a class="tooltipped td-none" data-position="top" data-delay="0"
data-tooltip="{{ 'ad.company.dates.edit.label'|trans }}"
href="{{ path('company_ad_step3', { 'id': ad.id }) }}" style="margin-right: 10px">
<i class="material-icons">
close
</i>
</a> #}
{% endif %}
</td>
<td>
{% if ad.countAnswersParStatut.nbATraiter > 0 %}
<a href="{{ path('company_ad_answer_list',{'id':ad.id}) }}">
<i class="fa fa-eye"></i>&nbsp; {{ ad.countAnswersParStatut.nbATraiter }}
</a>
{% else %}
0
{% endif %}
</td>
<td>
{% if ad.countAnswersParStatut.nbContacte > 0 %}
<a href="{{ path('company_ad_answer_list',{'id':ad.id}) }}">
<i class="fa fa-eye"></i>&nbsp; {{ ad.countAnswersParStatut.nbContacte }}
</a>
{% else %}
0
{% endif %}
</td>
<td>
{% if ad.countAnswersParStatut.nbRefuse > 0 %}
<a href="{{ path('company_ad_answer_list',{'id':ad.id}) }}">
<i class="fa fa-eye"></i>&nbsp; {{ ad.countAnswersParStatut.nbRefuse }}
</a>
{% else %}
0
{% endif %}
</td>
<td>
{% if ad.countAnswersParStatut.nbEntretien > 0 %}
<a href="{{ path('company_ad_answer_list',{'id':ad.id}) }}">
<i class="fa fa-eye"></i>&nbsp; {{ ad.countAnswersParStatut.nbEntretien }}
</a>
{% else %}
0
{% endif %}
</td>
<td>
{% if ad.countAnswersParStatut.nbEmbauche > 0 %}
<a href="{{ path('company_ad_answer_list',{'id':ad.id}) }}">
<i class="fa fa-eye"></i>&nbsp; {{ ad.countAnswersParStatut.nbEmbauche }}
</a>
{% else %}
0
{% endif %}
</td>
</tr>
{% endfor %}
{# <tr>
<td>
<a href="https://pp.talentstube.com/entreprise/me/espace-oe/annonce/116/reponse">
<h6>Directeur de la communication (F/H)</h6>
</a><br>
<span>Nantes, 44000</span><br>
<span>Date de création : 22/03/2021</span>
</td>
<td>
<span class="label label-success">Publiée</span>
</td>
<td>578</td>
<td>
<a class=" td-none" href="https://pp.talentstube.com/entreprise/me/espace-oe/annonce/124/editer" style="margin-right: 10px">
<i class="pg-icon">pen</i>
</a>
</td>
<td><a href="https://pp.talentstube.com/entreprise/me/espace-oe/annonce/116/reponse">3</a></td>
<td><a href="https://pp.talentstube.com/entreprise/me/espace-oe/annonce/116/reponse">4</a></td>
<td><a href="https://pp.talentstube.com/entreprise/me/espace-oe/annonce/116/reponse">4</a></td>
<td><a href="https://pp.talentstube.com/entreprise/me/espace-oe/annonce/116/reponse">8</a></td>
<td><a href="https://pp.talentstube.com/entreprise/me/espace-oe/annonce/116/reponse">1</a></td>
</tr>
<tr>
<td>
<h6>Responsable RRH (F/H)</h6><br>
<span>Vannes, 56000</span><br>
<span>Date de création : 01/02/2021</span>
</td>
<td>
<span class="label label-warning">En attente de validation</span>
</td>
<td>0</td>
<td>
<a class=" td-none" href="https://pp.talentstube.com/entreprise/me/espace-oe/annonce/124/editer" style="margin-right: 10px">
<i class="pg-icon">pen</i>
</a>
</td>
<td>0</td>
<td>0</td>
<td>0</td>
<td>0</td>
<td>0</td>
</tr>
<tr>
<td>
<a href="https://pp.talentstube.com/entreprise/me/espace-oe/annonce/116/reponse">
<h6>Alternant communication(F/H)</h6>
</a><br>
<span>Pontivy, 56000</span><br>
<span>Date de création : 15/01/2021</span>
</td>
<td>
<span class="label label-important">Clôturée</span>
</td>
<td>1459</td>
<td>
<a class=" td-none" href="https://pp.talentstube.com/entreprise/me/espace-oe/annonce/124/editer" style="margin-right: 10px">
<i class="pg-icon">pen</i>
</a>
</td>
<td>0</td>
<td>0</td>
<td><a href="https://pp.talentstube.com/entreprise/me/espace-oe/annonce/116/reponse">12</a></td>
<td>0</td>
<td><a href="https://pp.talentstube.com/entreprise/me/espace-oe/annonce/116/reponse">1</a></td>
</tr> #}
</tbody>
</table>
</div>
</div>
</div>
<!-- Fin modifications Corentin -->
<!-- START CONTAINER FLUID -->
<div class=" container-fluid container-fixed-lg bg-white">
<!-- START card -->
<div class="card card-transparent">
<div class="card-header ">
<div class="card-title">Offres d'emploi
</div>
</div>
<div class="card-body">
<div class="table-responsive">
<table class="table table-hover" id="basicTable">
<thead>
<tr>
<!-- NOTE * : Inline Style Width For Table Cell is Required as it may differ from user to user
Comman Practice Followed
-->
<th style="width:20%">{{ 'ad.company.list.title'|trans }}</th>
<th style="width:20%">{{ 'ad.company.list.answers'|trans }}</th>
<th style="width:20%">{{ 'ad.company.list.views'|trans }}</th>
<th style="width:20%">{{ 'ad.company.list.status'|trans }}</th>
<th style="width:20%">{{ 'ad.company.list.actions'|trans }}</th>
</tr>
</thead>
<tbody>
{% for ad in ads %}
<tr>
<td class="v-align-middle ">
{% if ad.countAnswers > 0 %}
<a href="{{ path('company_ad_answer_list',{'id':ad.id}) }}">
{{ ad.title }}
</a>
{% else %}
{{ ad.title }}
{% endif %}
</td>
<td class="v-align-middle">
{% if ad.countAnswers > 0 %}
<a href="{{ path('company_ad_answer_list',{'id':ad.id}) }}">
<i class="fa fa-eye"></i>&nbsp; {{ ad.countAnswers }}
</a>
{% else %}
0
{% endif %}
</td>
<td class="v-align-middle">
{% if arrayByAds is defined %}
{{ arrayByAds[ad.id]["count"] }}
{% endif %}
</td>
<td class="v-align-middle">
{% if ad.getStatus() == "DECLINED" %}
<div class="">
<span class="">{{ ad.getStatus()|trans }}</span>
<i class="c-pointer fa fa-info-circle color-red" aria-hidden="true"></i>
</div>
{% else %}
<span class="">{{ ad.getStatus()|trans }}</span>
{% endif %}
</td>
<td class="v-align-middle">
{% if ad.getStatus() == "DRAFT" or ad.getStatus() == "DECLINED" %}
{#Edit#}
<a class=" td-none" href="{{ path('company_ad_edit', { 'id': ad.id }) }}"
style="margin-right: 10px">
<i class="pg-icon">pen</i>
</a>
{% else %}
{#Soft Edit#}
<a class=" td-none" href="{{ path('company_ad_soft_edit', { 'id': ad.id }) }}"
style="margin-right: 10px">
<i class="pg-icon">pen</i>
</a>
{% endif %}
{% if ad.getStatus() == "DRAFT" or ad.getStatus() == "DECLINED" %}
{#Video#}
<a class="tooltipped td-none" href="{{ path('create_media', { 'id': ad.id }) }}">
<i class="material-icons">
videocam
</i>
</a>
{% endif %}
{% if ad.getStatus() == "PUBLISHED" %}
{#Extension#}
{# ENLEVE LE 01/09 #}
{# <a class="tooltipped td-none" data-position="top" data-delay="0"
data-tooltip="{{ 'ad.company.dates.extension.label'|trans }}"
href="{{ path('company_ad_extension', { 'id': ad.id }) }}"
style="margin-right: 10px">
<i class="pg-icon">calendar</i>
</a> #}
{#Force ending#}
{# <a class="tooltipped td-none" data-position="top" data-delay="0"
data-tooltip="{{ 'ad.company.closed.label'|trans }}"
href="{{ path('company_ad_closed', { 'id': ad.id }) }}" style="margin-right: 10px">
<i class="material-icons">
close
</i>
</a> #}
{% endif %}
{% if ad.getStatus() == "TO_PUBLISH" or ad.getStatus() == "VALIDATED" or ad.getStatus() == "CLOSED" or ad.getStatus() == "EXPIRED" %}
{#Edit Dates#}
{# <a class="tooltipped td-none" data-position="top" data-delay="0"
data-tooltip="{{ 'ad.company.dates.edit.label'|trans }}"
href="{{ path('company_ad_step3', { 'id': ad.id }) }}" style="margin-right: 10px">
<i class="material-icons">
close
</i>
</a> #}
{% endif %}
</td>
</tr>
{% endfor %}
{% if ads|length == 0 %}
<tr>
<th colspan="5" class="text-center">Aucune offre pour le moment</th>
</tr>
{% endif %}
</tbody>
</table>
</div>
</div>
</div>
<!-- END card -->
</div>
<script type="text/javascript">
<!-- END CONTAINER FLUID
-->
@@ -1,5 +1,29 @@
{# {% extends 'company/base_dashboard_company.html.twig' %} #}
{% extends 'admin/base_dashboard.html.twig' %}
{% extends 'admin/base_dashboard_candidatures.html.twig' %}
{% block javascriptSupl %}
<link rel="stylesheet" type="text/css" href="https://cdn.datatables.net/1.10.22/css/jquery.dataTables.min.css">
<link rel="stylesheet" type="text/css" href="https://cdn.datatables.net/buttons/1.6.4/css/buttons.dataTables.min.css">
{# <script type="text/javascript" language="javascript" src="https://code.jquery.com/jquery-3.5.1.js"></script>
<script type="text/javascript" language="javascript" src="https://cdn.datatables.net/1.10.22/js/jquery.dataTables.min.js"></script>
<script type="text/javascript" language="javascript" src="https://cdn.datatables.net/buttons/1.6.4/js/dataTables.buttons.min.js"></script>
<script type="text/javascript" language="javascript" src="https://cdn.datatables.net/buttons/1.6.4/js/buttons.flash.min.js"></script> #}
<script type="text/javascript" src="https://code.jquery.com/jquery-3.5.1.js"></script>
<script type="text/javascript" src="https://cdn.datatables.net/1.10.22/js/jquery.dataTables.min.js"></script>
<script type="text/javascript" src="https://cdn.datatables.net/buttons/1.6.4/js/dataTables.buttons.min.js"></script>
<script type="text/javascript" language="javascript"
src="https://cdnjs.cloudflare.com/ajax/libs/jszip/3.1.3/jszip.min.js"></script>
<script type="text/javascript" language="javascript"
src="https://cdnjs.cloudflare.com/ajax/libs/pdfmake/0.1.53/pdfmake.min.js"></script>
<script type="text/javascript" language="javascript"
src="https://cdnjs.cloudflare.com/ajax/libs/pdfmake/0.1.53/vfs_fonts.js"></script>
<script type="text/javascript" language="javascript"
src="https://cdn.datatables.net/buttons/1.6.4/js/buttons.html5.min.js"></script>
<script type="text/javascript" language="javascript"
src="https://cdn.datatables.net/buttons/1.6.4/js/buttons.print.min.js"></script>
{% endblock %}
{% block dashContent %}
@@ -22,7 +46,7 @@
<!-- START CONTAINER FLUID -->
<div class=" container-fluid container-fixed-lg bg-white">
{# <div class=" container-fluid container-fixed-lg bg-white">
<!-- START card -->
<div class="card card-transparent">
<div class="card-header ">
@@ -72,62 +96,162 @@
</div>
</div>
<!-- END card -->
</div>
</div> #}
<!-- END CONTAINER FLUID -->
<style type="text/css">
/* Hide default search box */
.dataTables_filter {
display: none;
}
</style>
<!-- START CONTAINER FLUID -->
<div class=" container-fluid container-fixed-lg bg-white">
<!-- START card -->
<div class="card card-transparent">
<div class="card-header ">
<div class="card-title">Candidatures spontanées
<div class="card-title">Candidatures
</div>
</div>
<div class="card-body">
<div class="table-responsive" id="spontaneous">
<table class="table table-hover" id="basicTable">
<table width="100%" class="table " style="">
<tr>
<th width="11%"><input id='input2' type='text' class='form-control'
placeholder='Recherche par nom' style='font-family:Arial, FontAwesome; width:100%' />
</th>
<th width="11%"><input id='input3' type='text' class='form-control'
placeholder='Recherche par prénom' style='font-family:Arial, FontAwesome; width:100%' />
</th>
<th width="25%">
<select id='input5' class='form-control'>
<option value="">Toutes les offres</option>
<option value="spontaneous">Candidatures spontanées</option>
{% for offre in offres %}
<option value="{{offre.title}}">{{offre.title}}</option>
{% endfor %}
</select>
</th>
<th width="25%">
<select id='input7' class='form-control'>
<option value="">Tous les statuts</option>
<option value="A_TRAITER">À traiter</option>
<option value="CONTACTE">Contacté</option>
<option value="ENTRETIEN">Entretien programmé</option>
<option value="REFUSE">Refusé</option>
<option value="EMBAUCHE">Embauché</option>
</select>
</th>
</tr>
</table>
<br />
<table id="candidatures_dt_table" width="100%" class="table table-hover ">
{# Add a tfoot which will actually be used to place the individual search boxes #}
<thead>
<tr>
<th width="4%">Vidéo</th>
<th width="6%">Nom</th>
<th width="6%">Prénom</th>
<th width="11%">Date de reception</th>
<th width="11%">Intitulé de l'offre</th>
<th width="25%">Localisation</th>
<th width="15%">Statut</th>
</tr>
</thead>
<tbody></tbody>
</table>
{#
<table class="table table-hover " id="">
<thead>
<tr>
<!-- NOTE * : Inline Style Width For Table Cell is Required as it may differ from user to user
Comman Practice Followed
-->
<th style="width:33%">{{ 'profile.talent.lastname'|trans }}
<th style="width:15%">{{ 'profile.talent.video'|trans }}
</th>
<th style="width:15%">{{ 'profile.talent.lastname'|trans }}
{{ 'profile.talent.firstname'|trans }}</th>
<th style="width:33%">{{ 'global.datereception.label'|trans }}</th>
<th style="width:33%" class="center-align">{{ 'ad.company.list.actions'|trans }}</th>
<th style="width:15%">{{ 'global.datereception.label'|trans }}</th>
<th style="width:15%">{{ 'ad.company.list.title'|trans }}</th>
<th style="width:15%">{{ 'ad.company.list.location'|trans }}</th>
<th style="width:15%" class="center-align">{{ 'ad.company.list.statut'|trans }}</th>
</tr>
</thead>
<tbody>
{% for answer in spontaneous %}
<tr>
<td>
<a href="{{ path('company_answer_show',{'id':answer.id }) }}">
{% if answer.video.thumbnails.0 is defined %}
{% set img = answer.video.thumbnails.0.sizes.1.link %}
{% else %}
{% set img = " " %}
{% endif %}
<img src="{{ img }}">
</a>
</td>
<td>
<a href="{{ path('company_answer_show',{'id':answer.id }) }}">{{ answer.user.lastname }}
{{ answer.user.firstname }}</a>
</td>
<td>{{ answer.sendTime()|date('d/m/Y') }}</td>
<td class="center-align">
<a title="" href="{{ path('company_answer_show',{'id':answer.id }) }}">
<i class="pg-icon">eye</i>
</a>
<a href="#" class="note-action c-pointer" data-func="add" data-answer="{{ answer.id }}">
<i class="pg-icon">note</i>
</a>
{% for note in answer.notes %}
<a class="tooltipped note-action c-pointer" data-position="top" data-delay="50"
data-tooltip="{{ note.content }}" data-note="{{ note.id }}" data-func="edit">
<i class="pg-icon">comment</i>
</a>
<td>
{% if answer.ad %}
{{ answer.ad.title }}
{% else %}
Candidature spontanée
{% endif %}
</td>
<td>
{% if answer.user.getGeoloc %}
{% for adress in answer.user.getGeoloc %}
{{ adress["locality"] }}, {{ adress["postal_code"] }}
{% endfor %}
{% else %}
Non renseignée
{% endif %}
</td>
<td class="center-align">
{% if answer.statusReponse =="EMBAUCHE" %}
<span class="label label-success">Embauché</span>
{% elseif answer.statusReponse =="REFUSE"%}
<span class="label label-important">Refusé</span>
{% elseif answer.statusReponse =="ENTRETIEN"%}
<span class="label label-warning">Entretien programmé</span>
{% elseif answer.statusReponse =="A_TRAITER"%}
<span class="label label-info">À traiter</span>
{% elseif answer.statusReponse =="CONTACTE"%}
<span class="label">Contacté</span>
{% else %}
<span class="label label-info">À traiter</span>
{% endif %}
</td>
</tr>
{% endfor %}
{% if spontaneous|length == 0 %}
<tr><th colspan="3" class="text-center">Aucune candidature pour le moment</th></tr>
<tr>
<th colspan="5" class="text-center">Aucune candidature pour le moment</th>
</tr>
{% endif %}
</tbody>
</table>
</table> #}
</div>
</div>
</div>
@@ -137,4 +261,130 @@
<div id="note-modal"></div>
<script>
$(document).ready(function () {
// Add a text input to each footer cell
var pos = 1;
var table = $('#candidatures_dt_table').DataTable({
"columnDefs": [{
"name": "video",
"targets": 0,
"searchable": true,
"orderable": false
},
{
"name": "nom",
"targets": 1,
"type": 'html',
"searchable": true,
"orderable": true
},
{
"name": "prenom",
"targets": 2,
"type": 'html',
"searchable": true,
"orderable": true
},
{
"name": "dateReception",
"targets": 3,
"searchable": true,
"orderable": true
},
{
"name": "offre",
"targets": 4,
"searchable": true,
"orderable": false
},
{
"name": "localisation",
"targets": 5,
"searchable": true,
"orderable": false
},
{
"name": "statusReponse",
"targets": 6,
"searchable": true,
"orderable": false
},
],
"processing": true,
"serverSide": true,
"ajax": {
"url": "{{ path('alimenterCandidaturesCompany') }}",
"type": 'POST',
},
"paging": true,
"info": true,
"searching": true,
"bFilter": true,
"responsive": true,
"pageLength": 10,
"order": [
[0, 'desc']
],
"language": {
"sProcessing": "En cours de chargement...",
"sSearch": "Rechercher&nbsp;:",
"sLengthMenu": "Afficher _MENU_ candidatures",
"sInfo": "Candidature de _START_ &agrave; _END_ sur _TOTAL_ candidatures",
"sInfoEmpty": "Candidature 0 &agrave; 0 sur 0 candidature",
"sInfoFiltered": "",
"sInfoPostFix": "",
"sLoadingRecords": "Chargement en cours...",
"sZeroRecords": "Aucune candidature ne correspond à votre recherche",
"sEmptyTable": "Aucune candidature disponible dans le tableau",
"oPaginate": {
"sFirst": "Premier",
"sPrevious": "Pr&eacute;c&eacute;dent",
"sNext": "Suivant",
"sLast": "Dernier"
},
"oAria": {
"sSortAscending": ": activer pour trier la colonne par ordre croissant",
"sSortDescending": ": activer pour trier la colonne par ordre d&eacute;croissant"
}
},
});
// Apply the search
pos = 1;
table.columns().every(function () {
var that = this;
$("#input" + pos).on('keyup change', function () {
console.log(this);
if (that.search() !== this.value) {
that
.search(this.value)
.draw();
}
});
pos++;
});
$('#candidatures_dt_table_filter').hide();
});
</script>
{% endblock %}
@@ -24,7 +24,7 @@
<a href="{{ path('company_ad_answer_list',{'id':answer.ad.id}) }}">{{ answer.ad.title }}
</a>
{% else %}
Candidature spontanée
<a href="{{ path('company_answer_list') }}">Candidature spontanée</a>
{% endif %}
</li>
<li class="breadcrumb-item active"><a href="#"> candidat {{ answer.user.firstname }}
@@ -1,7 +1,31 @@
{# {% extends 'company/base_dashboard_company.html.twig' %} #}
{% extends 'admin/base_dashboard.html.twig' %}
{% block dashContent %}
<!-- MODALS-->
<!-- Modal 0 -->
<div class="modal fade in bd-example-modal-lg" id="popupSubmitModal" tabindex="-1" role="dialog"
aria-labelledby="popupSubmitModalLabel" aria-hidden="false" data-show="false">
<div class="modal-dialog modal-lg" role="document">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="popupSubmitModalLabel">Votre offre demploi vidéo est en cours de validation par l'équipe Talents Tube</h5>
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">&times;</span>
</button>
</div>
<div class="modal-body">
<p>Vous recevrez un e-mail lorsque votre offre demploi sera publiée sur la plateforme.</p>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-dismiss="modal" onClick="submitFormAd()">Fermer</button>
</div>
</div>
</div>
</div>
<div class="row bg-bordered p-0">
{# {% include 'company/ad_steps.html.twig' with {'tab':2} %} #}
@@ -158,7 +182,9 @@ vidéo d'offre d'emploi. <a href="https://blog.talentstube.com/contact" target="
</a>
</div>
<div class="col-6">
<button aria-label="" id="submit" type="submit" class="btn btn-primary btn-lg m-b-10 hide"
<button aria-label="" id="submit" data-toggle="modal"
data-target="#popupSubmitModal" type="" class="btn btn-primary btn-lg m-b-10 hide"
type="button">
<span>Publier l'offre</span>
@@ -294,7 +320,11 @@ vidéo d'offre d'emploi. <a href="https://blog.talentstube.com/contact" target="
{% else %}
var videoExist = false;
{% endif %}
//function appelée lors de la confirmation de popup
function submitFormAd(){
$('#form_media').submit();
}
</script>
<script src="{{ asset('/js/dropzoneV2.js') }}"></script>
{% endblock %}
@@ -86,42 +86,52 @@
<!-- START card -->
<div class="col-lg-12">
<div class="card card-default container">
<div class="row">
<div class="col-md">
<a href="{{path('company_ad_create')}}">
<button class="card-action" type="button">
<a href="{{path('company_ad_create')}}">
<span class="material-icons">movie_creation</span>
<div class="row lien-fleche" style="justify-content: center; align-items: center">
<h6 class="col-10">Créer une offre demploi vidéo</h6>
<span class="material-icons col-2 fleche">arrow_right_alt</span>
</div>
</a>
</button>
</a>
</div>
<div class="col-md" type="button">
<div class="col-md" type="button">
<a href="{{path('company_ad')}}">
<button class="card-action" style="" type="button">
<a href="{{path('company_ad')}}">
<span class="material-icons" style="">work</span>
<div class="row lien-fleche" style="justify-content: center; align-items: center">
<h6 class="col-10">Gérer mes offres demploi</h6>
<span class="material-icons col-2 fleche">arrow_right_alt</span>
</div>
</a>
</button>
</a>
</div>
<div class="col-md" type="button">
<a href="{{path('company_answer_list')}}">
<button class="card-action" style="" type="button">
<a href="{{path('company_answer_list')}}">
<span class="material-icons" style="">face</span>
<div class="row lien-fleche" style="justify-content: center; align-items: center">
<h6 class="col-10">Gérer mes candidatures</h6>
<span class="material-icons col-2 fleche">arrow_right_alt</span>
</div>
</a>
</button>
</a>
</div>
</div>
</div>
</div>
@@ -1,5 +1,5 @@
{% extends "baseLanding.html.twig" %}
{% block title %}Valorisez votre métier en tension et recrutez des candidats grâce à la vidéo{% endblock %}
{% block title %}Valorisez votre métier d'aide à domicile et recrutez grâce à la vidéo{% endblock %}
{% block meta %}
<meta name="description"
content="Vous souhaitez améliorer l'attractivité de votre métier ? Avec le recrutement vidéo, valorisez sa richesse réelle et recrutez des aides à domicile en vidéo.">
@@ -178,8 +178,7 @@
<div class="container">
<header>
<h2>Ils ont recruté en vidéo, pourquoi pas vous ?</h2>
<h3>Plus qu'une dernière étape avant de rendre votre métier en tension plus attractif.<br>Osez recruter
autrement ! </h3>
<h3>Ces entreprises ont choisi Talents Tube pour recruter en vidéo ! </h3>
</header>
<div class="row">
<div class="col-md-12">
@@ -223,7 +222,7 @@
<!--goodbye-message-->
<div class="appel-action">
<h2>Demandez un RDV gratuitement</h2>
<p>Plus qu'une dernière étape avant de rendre le métier d'aide à domicile plus attractif.</p>
<p>Plus quune dernière étape avant de rendre votre métier en tension plus attractif. </p>
<p>Osez recruter autrement !</p>
<button class="bttn" data-toggle="modal" data-target="#exampleModal" style="margin-top:30px;">Demander
un rendez-vous</button>
@@ -15,6 +15,31 @@
{{ parent() }}
{% endblock %}
{% block main %}
<!-- Modal : Vidéo -->
<div class="modal fade bd-example-modal-lg" id="exampleModalCenter" tabindex="-1" role="dialog"
aria-labelledby="myLargeModalLabel" aria-hidden="true">
<div class="modal-dialog modal-lg" role="document">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">&times;</span>
</button>
</div>
<div class="modal-body">
<div class="container-video" style="position:relative;width:100%;height:0;padding-bottom:56.25%;">
<iframe src="https://www.youtube.com/embed/gOXg9e29dyc"
style="position: absolute;top: 0;left: 0;width: 100%;height: 100%;" frameborder="0"
allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture"
allowfullscreen id="player"></iframe>
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-dismiss="modal" onclick="fermerVideo()">Fermer</button>
</div>
</div>
</div>
</div>
<!--Modal : Vidéo End -->
<main>
<!--Header : Menu et Vidéo en fond-->
@@ -126,9 +126,9 @@
{% set idPresentationVideo = false %}
{% endif %}
{% if idPresentationVideo != media.id %}
{% if iteration is divisible by(2) or iteration==0%}
{# {% if iteration is divisible by(2) or iteration==0%}
<div class="row p-t-10 p-b-10">
{% endif %}
{% endif %} #}
<div class="col">
<div class="card-image">
@@ -189,7 +189,7 @@
{# cas d'un nombre impair de video #}
{% if nbMedias == iteration+1 and iteration is divisible by(2)%}
{# {% if nbMedias == iteration+1 and iteration is divisible by(2)%}
<div class="col">
<div class="card-image">
<div class="embed-responsive embed-responsive-16by9">
@@ -199,14 +199,14 @@
</div>
</div>
</div>
{% endif %}
{% endif %} #}
{# fermeture de div pour aller à la ligne quand le nombre de video est un multiple de deux et par défaut au début iteration==0 #}
{% if iteration+1 is divisible by(2) or nbMedias==1%}
{# {% if iteration+1 is divisible by(2) or nbMedias==1%}
</div>
{% endif %}
{% set iteration = iteration+1 %}
{% set iteration = iteration+1 %} #}
{% else %}
{% set nbMedias = nbMedias-1%}
{# {% set nbMedias = nbMedias-1%} #}
{% endif %}
{% endfor %}
+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.7.4'
version: '2.8.1'
@@ -59,6 +59,7 @@ security:
- { path: ^/register, roles: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/resetting, roles: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/admin/, roles: ROLE_ADMIN }
- { path: ^/admin/template, roles: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/admin/moderation/, role: [ROLE_MODERATOR,ROLE_SUPER_ADMIN, ROLE_WEBMASTER] }
- { path: ^/admin/config/, role: [ROLE_WEBMASTER,ROLE_SUPER_ADMIN] }
- { path: ^/talent/me/, roles: ROLE_TALENT }
@@ -71,6 +72,7 @@ security:
- { path: ^/api/reset_password, roles: IS_AUTHENTICATED_ANONYMOUSLY, methods: [POST]}
- { path: ^/api/confirmAccount, roles: IS_AUTHENTICATED_ANONYMOUSLY, methods: [POST]}
- { path: ^/api/answers, roles: IS_AUTHENTICATED_FULLY, methods: [GET]}
- { path: ^/api/answers/updateStatus, roles: IS_AUTHENTICATED_FULLY, methods: [GET]}
- { path: ^/api/answer/[0-9]+/messages, roles: IS_AUTHENTICATED_FULLY, methods: [GET]}
- { path: ^/api, roles: IS_AUTHENTICATED_FULLY, methods: [POST, PUT, DELETE, PATCH] }
- { path: ^/api, roles: IS_AUTHENTICATED_ANONYMOUSLY, methods: [GET]}
@@ -85,4 +87,4 @@ security:
ROLE_ADMIN: ROLE_USER
ROLE_TALENT: ROLE_USER
ROLE_COMPANY: ROLE_USER
ROLE_TERRITORY: ROLE_USER
ROLE_TERRITORY: ROLE_USER
@@ -19,7 +19,12 @@ use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Session\Session;
use Symfony\Component\HttpFoundation\JsonResponse;
//MAILJET
use AppBundle\Entity\Mailjet;
// use AppBundle\Entity\Response;
use AppBundle\Entity\Resources;
use AppBundle\Entity\Config;
use AppBundle\Entity\Client;
class AdController extends Controller
{
@@ -305,6 +310,29 @@ class AdController extends Controller
$adManager = $this->get('app.ad_manager');
$adManager->updateAd($ad);
$this->addFlash('notice', 'Annonce enregistrée');
$mj = new Client($this->getParameter('mailjet_public'), $this->getParameter('mailjet_private'));
// $link = $this->generateUrl('company_answer_show', array('id' => $answer->getId()), UrlGeneratorInterface::ABSOLUTE_URL);
$body = [
'FromEmail' => "noreply@talentstube.io",
'FromName' => "Talents Tube",
'Subject' => "Creation/Modification Offre d'emploi ".$ad->getCompany()->getBrandName(),
'MJ-TemplateID' =>2612525 ,
'MJ-TemplateLanguage' => true,
'Recipients' => [
[
'Email' => 'dev@talentstube.com',
'Vars' => [
'entreprise' => $ad->getCompany()->getBrandName(),
'offre' => $ad->getTitle(),
]
]
]
];
$response = $mj->post(Resources::$Email, ['body' => $body]);
$response->success() && var_dump($response->getData());
return $this->redirectToRoute('company_ad');
}
return $this->render('company/ad_edit.html.twig', [
@@ -0,0 +1,93 @@
<?php
namespace AppBundle\Controller\Admin;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Request;
use AppBundle\Entity\Message;
use Symfony\Component\HttpFoundation\RedirectResponse;
use DateTime;
class BatchController extends Controller
{
/**
* @Route("/admin/config/batch/message", name="admin_batch_message")
*/
public function adminBatchMessageAction()
{
//recuperer les messages qui ont un comment
return $this->render('admin/batch_message.html.twig', [
]);
}
/**
* @Route("/admin/config/batch/message/comment", name="admin_batch_message_comment")
*/
public function adminBatchMessageCommentAction()
{
//recuperer les answers qui ont un comment
$em = $this->getDoctrine()->getManager();
$answers = $em->getRepository('AppBundle:Answer')->findAllComment();
//parcours des answers avec comment
foreach ($answers as $a) {
if($a->getAd()){
$message = new Message('Chat', $a->getComment(), $a->getUser(), $a->getAd()->getCreator(), 'Message du talent', $a);
$message->setUTime($a->getUTime());
$message->setCTime($a->getCTime());
$em->persist($message);
$em->flush();
}
}
return $this->render('admin/dashboard.html.twig', array());
}
/**
* @Route("/admin/config/batch/candidature", name="admin_batch_candidatures")
*/
public function adminBatchCandidaturesAction()
{
return $this->render('admin/batch_candidatures.html.twig', [
]);
}
/**
* @Route("/admin/config/batch/candidature/init", name="admin_batch_candidature_init")
*/
public function adminBatchcandidatureInitAction()
{
//recuperer les messages qui ont un comment
$em = $this->getDoctrine()->getManager();
$messages = $em->getRepository('AppBundle:Message')->getMessageAnswers();
//parcours des answers avec comment
foreach ($messages as $m) {
$answer = $m->getAnswer();
if(!$answer->getStatusReponse() ){
dump($answer);
$answer->setStatusReponse("CONTACTE");
$em->persist($answer);
$em->flush();
dump($answer);
}
}
return $this->render('admin/dashboard.html.twig', array());
}
}
@@ -24,6 +24,8 @@ class PageController extends Controller
]);
}
/**
* @Route("/admin/config/page/{id}/edit", name="admin_page_edit")
*/
@@ -63,4 +65,6 @@ class PageController extends Controller
return $this->redirectToRoute('admin_page_list');
}
}
@@ -534,27 +534,283 @@ class AnswerController extends Controller
*/
public function companyListAnswerAction()
{
// $answers = $em->getRepository('AppBundle:Answer')->getAnswerByCompany($user->getCompany()->getId());
// $spontaneous = $em->getRepository('AppBundle:Answer')->findBy(
// array(
// 'company' => $user->getCompany()->getId(),
// 'status' => 'SENDED'
// ),
// array(
// 'cTime' => 'DESC'
// )
// );
$user = $this->getUser();
$em = $this->getDoctrine()->getManager();
$answers = $em->getRepository('AppBundle:Answer')->getAnswerByCompany($user->getCompany()->getId());
$spontaneous = $em->getRepository('AppBundle:Answer')->findBy(
array(
'company' => $user->getCompany()->getId(),
'status' => 'SENDED',
'ad' => null
),
array(
'uTime' => 'DESC'
)
);
$offres = $em->getRepository('AppBundle:Ad')->getAdByCompany($user->getCompany()->getId());
return $this->render('company/answer_list.html.twig', [
'answers' => $answers,
'spontaneous' => $spontaneous,
// 'answers' => $answers,
// 'spontaneous' => $spontaneous,
'offres' => $offres,
'type' => 'answer'
]);
}
/**
* @Route("/alimenterCandidaturesCompany", name="alimenterCandidaturesCompany")
*/
public function listDatatablesAction(Request $request)
{
$companyId = $this->getUser()->getCompany()->getId();
return $this->recupererCandidature($request, "company", $companyId);
}
/**
* @Route("/alimenterCandidaturesAd/{id}", name="alimenterCandidaturesAd")
*/
public function listDatatablesAdAction(Request $request, $id)
{
return $this->recupererCandidature($request, "ad", $id);
}
public function recupererCandidature($request, $type, $id){
// Set up required variables
$em = $this->getDoctrine()->getManager();
$this->repository = $em->getRepository('AppBundle:Answer');
//$this->translator = $this->get('translator');
// Get the parameters from DataTable Ajax Call
if ($request->getMethod() == 'POST')
{
$draw = intval($request->request->get('draw'));
$start = $request->request->get('start');
$length = $request->request->get('length');
$search = $request->request->get('search');
$orders = $request->request->get('order');
$columns = $request->request->get('columns');
}
else // If the request is not a POST one, die hard
die;
// Process Parameters
// Orders
foreach ($orders as $key => $order)
{
// Orders does not contain the name of the column, but its number,
// so add the name so we can handle it just like the $columns array
$orders[$key]['name'] = $columns[$order['column']]['name'];
}
// Further filtering can be done in the Repository by passing necessary arguments
$otherConditions = array("type" => $type, "id" => $id);
// Get results from the Repository
$results = $this->repository->getRequiredDTData($start, $length, $orders, $search, $columns, $otherConditions);
// Returned objects are of type Town
$objects = $results["results"];
// Get total number of objects
$total_objects_count = $this->repository->comptage();
// Get total number of results
$selected_objects_count = count($objects);
// Get total number of filtered data
$filtered_objects_count = $results["countResult"];
// Construct response
$response = '{
"draw": '.$draw.',
"recordsTotal": '.$total_objects_count.',
"recordsFiltered": '.$filtered_objects_count.',
"data": [';
$i = 0;
foreach ($objects as $key => $answer)
{
$response .= '["';
$j = 0;
$nbColumn = count($columns);
foreach ($columns as $key => $column)
{
// In all cases where something does not exist or went wrong, return -
$responseTemp = "-";
switch($column['name'])
{
case 'partage':
{
if($answer->getIsShared()){
$checked = "checked";
}else{
$checked = "";
}
$responseTemp ="<input type='checkbox' id='answer_".$answer->getId()."' name='answers' class='nav-trigger' onChange='verifierIsChecked(".$answer->getId().")' ".$checked." /><label for='nav-trigger' class='navicon-button x'><div class='navicon'></div></label>";
break;
}
case 'video':
{
if ($answer->getVideo()->getThumbnails()){
$img= $answer->getVideo()->getThumbnails()[0]['sizes'][1]['link'];
}else{
//$img= "https://blog.talentstube.com/wp-content/uploads/2021/01/default_picture_company.jpg";
$mediaManager = $this->get('media_manager');
$mediaManager->getThumbnails($answer);
$img= $answer->getVideo()->getThumbnails()[0]['sizes'][1]['link'];
}
$link = $this->generateUrl('company_answer_show', array('id' => $answer->getId()), UrlGeneratorInterface::ABSOLUTE_URL);
$responseTemp = " <a href='".$link."'><img src='".$img."' width='200px' height='150px'></a>";
break;
}
case 'nom':
{
// We know from the class definition that the postal code cannot be null
// But if that werent't the case, its value should have been tested
// before assigning it to $responseTemp
$link = $this->generateUrl('company_answer_show', array('id' => $answer->getId()), UrlGeneratorInterface::ABSOLUTE_URL);
$responseTemp = "<a href='".$link."'>".$answer->getUser()->getLastname()."</a>";
break;
}
case 'prenom':
{
// We know from the class definition that the postal code cannot be null
// But if that werent't the case, its value should have been tested
// before assigning it to $responseTemp
$link = $this->generateUrl('company_answer_show', array('id' => $answer->getId()), UrlGeneratorInterface::ABSOLUTE_URL);
$responseTemp = "<a href='".$link."'>".$answer->getUser()->getFirstname()."</a>";
break;
}
case 'dateReception':
{
// We know from the class definition that the postal code cannot be null
// But if that werent't the case, its value should have been tested
// before assigning it to $responseTemp
$responseTemp = $answer->getSendTime()->format('d/m/Y H:i:s');
break;
}
case 'offre':
{
// We know from the class definition that the postal code cannot be null
// But if that werent't the case, its value should have been tested
// before assigning it to $responseTemp
if($answer->getAd()){
$responseTemp = $answer->getAd()->getTitle();
}else{
$responseTemp = "Candidature spontanée";
}
break;
}
case 'date_envoi':
{
if($answer->getSendTime()){
$responseTemp = date_format($answer->getSendTime(), 'd-m-Y H:i:s');;
}else{
$responseTemp ="ND";
}
// This cannot happen if inner join is used
// However it can happen if left or right joins are used
break;
}
case 'ad_id':
{
$video = $answer->getVideo();
$responseTemp ="ND";
if($video){
$responseTemp = 'ID Candidature :'.$answer->getId().'<br />';
$videoRenommee = str_replace("/videos/", "", $video->getCdnUrl());
//TODO : revoir ca car une vue dans un controller ca n'est pas top!!!!!
$responseTemp .= "<iframe src='https://player.vimeo.com/video/".$videoRenommee."?embedparameter=value' width='auto' height='auto' frameborder='0' allowfullscreen></iframe>";
}
break;
}
case 'statusReponse':
{
// if($answer->getstatus()=="SENDED"){
// $status= "ENVOYE";
// }else{
// $status=$answer->getstatus();
// }
// $responseTemp = "<span id='status_".$answer->getId()."'> ".$status."</span> ";
if ($answer->getStatusReponse() =="EMBAUCHE" ){
$responseTemp = "<span class='label label-success'>Embauché</span> ";
}elseif ($answer->getStatusReponse() =="REFUSE" ){
$responseTemp = "<span class='label label-important'>Refusé</span> ";
}elseif ($answer->getStatusReponse() =="ENTRETIEN" ){
$responseTemp = "<span class='label label-warning'>Entretien programmé</span> ";
}elseif ($answer->getStatusReponse() =="A_TRAITER" ){
$responseTemp = "<span class='label label-info'>À traiter</span> ";
}elseif ($answer->getStatusReponse() =="CONTACTE" ){
$responseTemp = "<span class='label'>Contacté</span> ";
}else {
$responseTemp = "<span class='label label-info'>À traiter</span> ";
}
break;
}
case 'localisation':
{
if($answer->getUser()->getGeoloc()) {
foreach ($answer->getUser()->getGeoloc() as &$adress) {
$responseTemp =$adress["locality"] .", ". $adress["postal_code"];
}
}else {
$responseTemp ="Non renseignée";
}
break;
}
}
// Add the found data to the json
$response .= $responseTemp;
if(++$j !== $nbColumn)
$response .='","';
}
$response .= '"]';
// Not on the last item
if(++$i !== $selected_objects_count)
$response .= ',';
}
$response .= ']}';
// Send all this stuff back to DataTables
$returnResponse = new JsonResponse();
$returnResponse->setJson($response);
return $returnResponse;
}
/**
* @Route("/entreprise/me/espace-oe/candidature-spontanee/", name="company_spontaneous_list")
*/
@@ -35,9 +35,9 @@ class MediaController extends Controller
*/
public function companyMediaAction(Request $request)
{
$event = new UserEvent($this->getUser());
//$event = new UserEvent($this->getUser());
$company = $this->getUser()->getCompany();
$this->get('event_dispatcher')->dispatch(PrestashopBridgeEvents::USER_PROD_UPDATE, $event);
//$this->get('event_dispatcher')->dispatch(PrestashopBridgeEvents::USER_PROD_UPDATE, $event);
$em = $this->getDoctrine()->getManager();
$medias = $em->getRepository('AppBundle:Media')->findBy(array('creator' => $this->getUser()));
$form = $this->createForm(MediaType::class);
@@ -66,8 +66,8 @@ class MediaController extends Controller
*/
public function territoryMediaAction(Request $request)
{
$event = new UserEvent($this->getUser());
$this->get('event_dispatcher')->dispatch(PrestashopBridgeEvents::USER_PROD_UPDATE, $event);
//$event = new UserEvent($this->getUser());
//$this->get('event_dispatcher')->dispatch(PrestashopBridgeEvents::USER_PROD_UPDATE, $event);
$em = $this->getDoctrine()->getManager();
$medias = $em->getRepository('AppBundle:Media')->findBy(array('creator' => $this->getUser()));
$form = $this->createForm(MediaType::class);
@@ -155,10 +155,37 @@ class MediaController extends Controller
$numberOfMonth = 6;
$unpublishedDate = new \DateTime('now');
$unpublishedDate = $unpublishedDate->add(new \DateInterval('P' . $numberOfMonth . 'M'));
$ad->setStatus("TO_PUBLISH");
// ENVOI DE MAIL a l'equipe TT pour prevenir d'une modif d'annonce
$ad->setUnpublishedAt($unpublishedDate);
$em->persist($ad);
$em->flush();
$mj = new Client($this->getParameter('mailjet_public'), $this->getParameter('mailjet_private'));
// $link = $this->generateUrl('company_answer_show', array('id' => $answer->getId()), UrlGeneratorInterface::ABSOLUTE_URL);
$body = [
'FromEmail' => "noreply@talentstube.io",
'FromName' => "Talents Tube",
'Subject' => "Creation/Modification Offre d'emploi ".$ad->getCompany()->getBrandName(),
'MJ-TemplateID' =>2612525 ,
'MJ-TemplateLanguage' => true,
'Recipients' => [
[
'Email' => 'dev@talentstube.com',
'Vars' => [
'entreprise' => $ad->getCompany()->getBrandName(),
'offre' => $ad->getTitle(),
]
]
]
];
$response = $mj->post(Resources::$Email, ['body' => $body]);
$response->success() && var_dump($response->getData());
return $this->redirectToRoute('company_ad');
}
@@ -558,6 +558,35 @@ class Ad
return $i;
}
public function countAnswersParStatut()
{
$answers = $this->answers;
$nbATraiter = 0;
$nbContacte = 0;
$nbEntretien = 0;
$nbRefuse = 0;
$nbEmbauche = 0;
foreach ($answers as $a) {
if ($a->getStatusReponse() == "A_TRAITER" AND $a->getStatus() =="SENDED" ) {
$nbATraiter++;
}
else if ($a->getStatusReponse() == "CONTACTE" AND $a->getStatus() =="SENDED") {
$nbContacte++;
}
else if ($a->getStatusReponse() == "ENTRETIEN" AND $a->getStatus() =="SENDED") {
$nbEntretien++;
}
else if ($a->getStatusReponse() == "REFUSE" AND $a->getStatus() =="SENDED") {
$nbRefuse++;
}
else if ($a->getStatusReponse() == "EMBAUCHE" AND $a->getStatus() =="SENDED"){
$nbEmbauche++;
}
}
return array("nbATraiter"=> $nbATraiter, "nbContacte"=>$nbContacte, "nbEntretien" =>$nbEntretien, "nbRefuse" => $nbRefuse, "nbEmbauche"=>$nbEmbauche);
//return $nbATraiter;
}
/**
* @return string
*
@@ -70,6 +70,7 @@ class AdType extends AbstractType
$builder
->add('reference', TextType::class, array(
'label' => 'Référence de l\'annonce',
'required' => true,
'attr' => array(
'placeholder' => 'Ex : OFFRE_521',
'class' => 'form-control'
@@ -16,10 +16,12 @@ class NoteAjaxType extends AbstractType
->add('content', TextareaType::class, array(
'label' => 'Note',
'required' => true,
'attr' => array(
'class' => 'form-control',
'rows' =>"5",
'style' =>"min-height:4em;"
'style' =>"min-height:4em;",
'placeholder' => 'Ce commentaire sera visible uniquement par vous et les autres utilisateurs de lespace recruteur.',
)
));
}
@@ -62,6 +62,19 @@ class AdRepository extends AbstractRepository
->andWhere('a.id = '.$adId);
return $qb
->getQuery()
->getResult();
}
public function getAdByCompany($companyId){
$qb = $this
->createQueryBuilder('a')
->select('a')
->leftjoin('a.company', 'comp')
->where('comp.id = '.$companyId);
return $qb
->getQuery()
->getResult();
@@ -190,31 +190,39 @@ class AnswerRepository extends AbstractRepository
->join('a.user', 'user')
->leftjoin('a.ad', 'ad')
->leftjoin('a.video', 'video')
->leftjoin('a.company', 'company');
->leftjoin('a.company', 'c')
->leftjoin('ad.company', 'company');
$countQuery
->join('a.user', 'user')
->leftjoin('a.ad', 'ad')
->leftjoin('a.video', 'video')
->leftjoin('a.company', 'company');
->leftjoin('a.company', 'c')
->leftjoin('ad.company', 'company');
// $countQuery
// ->join('town.department', 'department')
// ->join('department.region', 'region');
// Other conditions than the ones sent by the Ajax call ?
if ($otherConditions === null)
if ($otherConditions )
{
// No
// However, add a "always true" condition to keep an uniform treatment in all cases
$query->where("1=1");
$countQuery->where("1=1");
}
else
{
// Add condition
$query->where($otherConditions);
$countQuery->where($otherConditions);
if($otherConditions["type"]=="company"){
$query->where("(company.id=".$otherConditions["id"]." OR c.id=".$otherConditions["id"].")");
$countQuery->where("(company.id=".$otherConditions["id"]." OR c.id=".$otherConditions["id"].")");
}elseif($otherConditions["type"]=="ad"){
$query->where("(ad.id=".$otherConditions["id"].")");
$countQuery->where("(ad.id=".$otherConditions["id"].")");
}
$query->andWhere("a.status='SENDED'");
$countQuery->andWhere("a.status='SENDED'");
}else{
}
// Fields Search
foreach ($columns as $key => $column)
{
@@ -231,25 +239,54 @@ class AnswerRepository extends AbstractRepository
{
// $searchQuery = 'town.name LIKE \'%'.$searchItem.'%\'';
$searchQuery = 'lower(user.lastname) LIKE \'%'.$searchItem.'%\'';
$searchQuery = 'lower(user.lastname) LIKE lower(\'%'.$searchItem.'%\')';
break;
}
case 'nomPrenom':
{
// $searchQuery = 'town.name LIKE \'%'.$searchItem.'%\'';
$searchQuery = 'lower(user.lastname) LIKE lower(\'%'.$searchItem.'%\') or lower(user.firstname) LIKE lower(\'%'.$searchItem.'%\')';
break;
}
case 'offre':
{
// $searchQuery = 'town.name LIKE \'%'.$searchItem.'%\'';
if($searchItem=="spontaneous"){
$searchQuery = 'lower(ad.title) is null';
}else{
$searchQuery = 'lower(ad.title) LIKE lower(\'%'.$searchItem.'%\')';
}
break;
}
case 'status':
{
// $searchQuery = 'town.postalCode LIKE \'%'.$searchItem.'%\'';
$searchQuery = 'lower(a.status) LIKE \'%'.$searchItem.'%\'';
$searchQuery = 'lower(a.status) LIKE lower(\'%'.$searchItem.'%\')';
break;
}
case 'statusReponse':
{
// $searchQuery = 'town.postalCode LIKE \'%'.$searchItem.'%\'';
$searchQuery = 'lower(a.statusReponse) LIKE lower(\'%'.$searchItem.'%\')';
if($searchItem=="A_TRAITER"){
$searchQuery .= ' or a.statusReponse is null';
}
break;
}
case 'prenom':
{
// $searchQuery = 'department.name LIKE \'%'.$searchItem.'%\'';
$searchQuery = 'lower(user.firstname) LIKE \'%'.$searchItem.'%\'';
$searchQuery = 'lower(user.firstname) LIKE lower(\'%'.$searchItem.'%\')';
break;
}
case 'entreprise':
{
// $searchQuery = 'department.name LIKE \'%'.$searchItem.'%\'';
$searchQuery = 'lower(company.brandName) LIKE \'%'.$searchItem.'%\' or lower(ad.title) LIKE \'%'.$searchItem.'%\'';
$searchQuery = 'lower(company.brandName) LIKE lower(\'%'.$searchItem.'%\') or lower(ad.title) LIKE lower(\'%'.$searchItem.'%\')';
break;
}
case 'ad_id':
@@ -351,13 +388,21 @@ class AnswerRepository extends AbstractRepository
$medias = $qb->getQuery()->getResult();
return $medias;
}
public function findAllComment()
{
$qb = $this
->createQueryBuilder('a')
->select(['a'])
->where('a.comment IS NOT NULL');
$answers = $qb->getQuery()->getResult();
return $answers;
}
}
@@ -25,6 +25,23 @@ class MessageRepository extends \Doctrine\ORM\EntityRepository
->getQuery()
->getResult();
}
public function getMessageAnswers()
{
$qb = $this
->createQueryBuilder('m')
->select('m', 'a')
->join('m.answer', 'a')
->where('m.status <> :status')
->andWhere('a.statusReponse is null')
->andWhere('a.comment is null')
->setParameter(':status', 'DRAFT')
;
return $qb
->getQuery()
->getResult();
}
}
// add status = SENDED;
@@ -178,6 +178,11 @@ Créer une offre d'emploi vidéo / Gérer mes offres d'emploi / Gérer mes candi
box-shadow: 0px 2px 5px rgb(30 35 39 / 5%);
transition: background-color 0.3s;
transition: box-shadow 0.5s;
color: #fff !important;
}
.card-action a {
color: #fff !important;
}
.card-action:hover {
@@ -250,4 +255,16 @@ Détails d'une candidature
border:2px dashed rgba(33, 33, 33, 0.14);
border-radius:5px;
padding:20px;
}
}
/********************************************
Liste d'offres d'emploi
*******************************************/
tr .colonne1{
background-color:#F3F3F4;
}
tr .colonne2{
background-color:#E9E9EA;
}
File diff suppressed because it is too large Load Diff