Compare commits

...

3 Commits

Author SHA1 Message Date
llaniau 24becf66c3 version 2.5.2 2021-01-20 10:21:32 +01:00
llaniau 43d0852075 stat modif nouveau candidat 2021-01-20 09:00:22 +01:00
llaniau 81c548bd00 Statistiques 2021-01-19 16:10:39 +01:00
9 changed files with 474 additions and 169 deletions
@@ -131,7 +131,7 @@
</td>
</tr>
{% endfor %}
{% if answers|length == 0 %}
{% if spontaneous|length == 0 %}
<tr><th colspan="3" class="text-center">Aucune candidature pour le moment</th></tr>
{% endif %}
</tbody>
@@ -50,13 +50,229 @@
</div>
</div>
<script>
document.location.href="/entreprise/me/profil";
document.location.href = "/entreprise/me/profil";
</script>
{# {{ render("/entreprise/me/profil") }} #}
</div>
{% endif %}
{% include 'company/ad_table_listing.html.twig' with {'ads':ads} %}
<!-- START JUMBOTRON -->
<div class="jumbotron" data-pages="parallax">
<div class=" container-fluid container-fixed-lg sm-p-l-0 sm-p-r-0">
<div class="inner">
<!-- START BREADCRUMB -->
<ol class="breadcrumb">
<li class="breadcrumb-item"><a href="/entreprise/me/">Accueil</a></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 -->
<!-- START CONTAINER FLUID -->
<!-- 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">Statistiques</div>
</div>
<div class="row">
<div class="col-lg-12 col-xl-12 col-xlg-12">
<div class="col-md-12 m-b-10" style="display:flex;">
<!-- Nombre de candidatures vidéo - START WIDGET D3 widget_graphTileFlat-->
<div class="widget-8 card m-r-15 widget-loader-bar card-header card-background-1">
<div class="container-xs-height">
<!--full-height-->
<div class="">
<!--row-xs-height -->
<div class="col-xs-height col-top">
<div class="">
<!--card-header top-left top-right -->
<div class="card-title text-card">
<span class="font-montserrat fs-11 all-caps">Nombre total de
candidats</span>
</div>
</div>
</div>
</div>
<div class="row-xs-height">
<div class="col-xs-height col-top relative">
<div class="row full-height">
<div class="col-sm-12 text-card">
<h3 class="bold no-margin p-b-5 text-card"><a class="bold no-margin p-b-5 text-card" href="{{ path('company_answer_list') }}">{{nbAnswersSended}}</a></h3>
</div>
<div class="col-sm-8">
<div
class="p-l-0 full-height d-flex flex-column justify-content-between text-card">
<p class="small m-t-5 m-b-0">
<span class="fs-12 ">Nouveaux candidats</span>
</p>
<h4 class="bold no-margin"><a class="bold no-margin" href="{{ path('company_answer_list') }}">+{{nbAnswersSended}}</a></h4>
</div>
</div>
<!--<div class="col-sm-5">
<div class="p-l-0 full-height d-flex flex-column justify-content-between text-card">
<p class="small m-t-5 m-b-0">
<span class="fs-12 ">30 derniers jours</span>
</p>
<h4 class="bold no-margin" style="opacity:0.75">+48</h4>
</div>
</div>-->
</div>
<!--<div class="widget-8-chart line-chart" data-line-color="white" data-points="true" data-point-color="warning" data-stroke-width="2">
</div>-->
</div>
</div>
</div>
</div>
<!-- END WIDGET -->
<!-- Nombre de visite page entreprise vidéo - START WIDGET D3 widget_graphTileFlat-->
<div class="widget-8 card m-r-15 widget-loader-bar card-header card-background-2">
<div class="container-xs-height">
<div class="">
<!--row-xs-height -->
<div class="col-xs-height col-top">
<div class="">
<!--card-header top-left top-right -->
<div class="card-title text-card">
<span class="font-montserrat fs-11 all-caps">Visites de la page
entreprise</span>
</div>
</div>
</div>
</div>
<div class="row-xs-height">
<div class="col-xs-height col-top relative">
<div class="row full-height">
<div class="col-sm-12 text-card">
<h3 class="bold no-margin p-b-5 text-card">{{ records.totalRecordsCompany }}</h3>
</div>
<div class="col-sm-5 vertical-border">
<div
class="p-l-0 full-height d-flex flex-column justify-content-between text-card">
<p class="small m-t-5 m-b-0">
<span class="fs-12 ">7 derniers jours</span>
</p>
<h4 class="bold no-margin">+{{ records7days.totalRecordsCompany }}</h4>
</div>
</div>
<div class="col-sm-5">
<div
class="p-l-0 full-height d-flex flex-column justify-content-between text-card">
<p class="small m-t-5 m-b-0">
<span class="fs-12 ">30 derniers jours</span>
</p>
<h4 class="bold no-margin" style="opacity:0.75">+{{ records30days.totalRecordsCompany }}</h4>
</div>
</div>
</div>
<!--<div class="widget-8-chart line-chart" data-line-color="white" data-points="true" data-point-color="warning" data-stroke-width="2">
</div>-->
</div>
</div>
</div>
</div>
<!-- END WIDGET -->
<!-- Nombre de visites global offres d'emploi --START WIDGET D3 widget_graphTileFlat-->
<div class="widget-8 card no-margin widget-loader-bar card-header card-background-3">
<div class="container-xs-height">
<div class="">
<!--row-xs-height -->
<div class="col-xs-height col-top">
<div class="">
<!--card-header top-left top-right -->
<div class="card-title text-card">
<span class="font-montserrat fs-11 all-caps">Vues globales des offres
demploi</span>
</div>
</div>
</div>
</div>
<div class="row-xs-height">
<div class="col-xs-height col-top relative">
<div class="row full-height">
<div class="col-sm-12 text-card">
<h3 class="bold no-margin p-b-5 text-card">{{ records.totalRecords-records.totalRecordsCompany }}</h3>
</div>
<div class="col-sm-5 vertical-border">
<div
class="p-l-0 full-height d-flex flex-column justify-content-between text-card">
<p class="small m-t-5 m-b-0">
<span class="fs-12 ">7 derniers jours</span>
</p>
<h4 class="bold no-margin">+{{ records7days.totalRecords-records7days.totalRecordsCompany }}</h4>
</div>
</div>
<div class="col-sm-5">
<div
class="p-l-0 full-height d-flex flex-column justify-content-between text-card">
<p class="small m-t-5 m-b-0">
<span class="fs-12 ">30 derniers jours</span>
</p>
<h4 class="bold no-margin" style="opacity:0.75">+{{ records30days.totalRecords-records30days.totalRecordsCompany }}</h4>
</div>
</div>
</div>
<!--<div class="widget-8-chart line-chart" data-line-color="white" data-points="true" data-point-color="warning" data-stroke-width="2">
</div>-->
</div>
</div>
</div>
</div>
<!-- END WIDGET -->
</div>
</div>
</div>
</div>
<!--class="col-lg-8 sm-p-b-10 md-p-b-10"-->
</div>
<!-- END card -->
{% endblock %}
@@ -65,178 +281,192 @@
{# <script src="{{ asset('/js/vendors/Chart.bundle.min.js') }}"></script> #}
<script type="text/javascript">
var currentMonth = '{{ "now"|date("m") }}';
var arrayRecords;
{# var ctx, myChart, arrayCurrentsLabel, arrayCurrentsAdsValues, arrayCurrentsCompanyValues, donughtRecords; #}
var arrayRecords; {
#
var ctx, myChart, arrayCurrentsLabel, arrayCurrentsAdsValues, arrayCurrentsCompanyValues, donughtRecords;#
}
var sumVisitsAds = 0;
var sumCompanyValues = 0;
{# function loadChartData() {
setArrayValues();
myChart.update();
myDoughnutChart.update();
} #}
{# function getChartData(date1, date2) {
$.ajax({
type: "POST",
url: '{{ path("company_ajax_dashboard") }}',
data: 'date1=' + date1 + '&date2=' + date2,
dataType: "json",
success: function (data) {
arrayRecords = data.lineRecords;
donughtRecords = data.donughtRecords;
myDoughnutChart.data.datasets[0].data = donughtRecords;
loadChartData();
$('.fa-refresh').hide();
},
error: function (data) {
$('.fa-refresh').hide();
}
});
} #}
{# document.addEventListener("DOMContentLoaded", function (event) {
$('.fa-refresh').hide();
getChartData(0, 0);
configDatePicker = {
applyBtnClass: 'btn btn-default',
format: 'DD-MM-YYYY',
separator: ' au ',
endDate: new Date(),
maxDays: 365
}
$('#choiceMonth').dateRangePicker(configDatePicker).bind('datepicker-apply', function (event, obj) {
$('.fa-refresh').show();
var month1 = obj.date1.getMonth();
var day1 = obj.date1.getDate();
var year1 = obj.date1.getFullYear();
var month2 = obj.date2.getMonth();
var day2 = obj.date2.getDate();
var year2 = obj.date2.getFullYear();
var date1 = (month1 + 1) + "/" + day1 + "/" + year1 + " 00:00:01";
var date2 = (month2 + 1) + "/" + day2 + "/" + year2 + " 23:59:59";
getChartData(date1, date2);
});
$('.apply-btn').attr('value', 'Valider');
}); #}
{# function setArrayValues() {
arrayCurrentsLabel = [];
arrayCurrentsAdsValues = [];
arrayCurrentsCompanyValues = [];
arrayRecords['labels'].forEach(function (element, index) {
var date = element.split("-");
var dateAffiche = date[2] + "-" + date[1] + "-" + date[0];
arrayCurrentsLabel.push(dateAffiche);
arrayCurrentsAdsValues.push(arrayRecords['datasetsAd'][index]);
arrayCurrentsCompanyValues.push(arrayRecords['datasetsCompany'][index]);
});
myChart.data.labels = arrayCurrentsLabel;
myChart.data.datasets[0].data = arrayCurrentsAdsValues;
myChart.data.datasets[1].data = arrayCurrentsCompanyValues;
if (arrayCurrentsAdsValues.length > 0) {
sumVisitsAds = arrayCurrentsAdsValues.reduce(function (memo, val) {
let value = val || 0;
if (value != null) {
return memo + value;
}
});
} else {
sumVisitsAds = 0;
}
if (arrayCurrentsCompanyValues.length > 0) {
sumCompanyValues = arrayCurrentsCompanyValues.reduce(function (memo, val) {
let value = val || 0;
if (value != null) {
return memo + value;
}
});
} else {
sumCompanyValues = 0;
}
$('.countVisitsAds').html(sumVisitsAds);
$('.countVisitsCompany').html(sumCompanyValues);
{
#
function loadChartData() {
setArrayValues();
myChart.update();
myDoughnutChart.update();
}#
}
var dataLine = {
datasets: [{
label: "Nombre de visite d'annonce par jour",
fill: false,
fontColor: "rgba(39,139,231,1)",
backgroundColor: "rgba(39,139,231,1)",
borderColor: "rgba(39,139,231,1)"
}, {
label: "Nombre de visite de votre page entreprise",
fill: false,
fontColor: "#F9C339",
backgroundColor: "#F9C339",
borderColor: "#F9C339"
}]
};
{
#
function getChartData(date1, date2) {
$.ajax({
type: "POST",
url: '{{ path("company_ajax_dashboard") }}',
data: 'date1=' + date1 + '&date2=' + date2,
dataType: "json",
success: function (data) {
arrayRecords = data.lineRecords;
donughtRecords = data.donughtRecords;
myDoughnutChart.data.datasets[0].data = donughtRecords;
loadChartData();
$('.fa-refresh').hide();
},
error: function (data) {
$('.fa-refresh').hide();
}
});
}#
}
var ctx = document.getElementById("nb_visits");
var myChart = new Chart(ctx, {
type: 'line',
data: dataLine,
options: {
legend: {
display: false
},
scales: {
xAxes: [{
display: true,
scaleLabel: {
display: true,
labelString: 'Date'
}
}],
yAxes: [{
ticks: {
min: 0
},
scaleLabel: {
display: true,
labelString: 'Valeur'
}
}]
{
#
document.addEventListener("DOMContentLoaded", function (event) {
$('.fa-refresh').hide();
getChartData(0, 0);
configDatePicker = {
applyBtnClass: 'btn btn-default',
format: 'DD-MM-YYYY',
separator: ' au ',
endDate: new Date(),
maxDays: 365
}
}
});
$('#choiceMonth').dateRangePicker(configDatePicker).bind('datepicker-apply', function (event, obj) {
$('.fa-refresh').show();
var month1 = obj.date1.getMonth();
var day1 = obj.date1.getDate();
var year1 = obj.date1.getFullYear();
var month2 = obj.date2.getMonth();
var day2 = obj.date2.getDate();
var year2 = obj.date2.getFullYear();
var date1 = (month1 + 1) + "/" + day1 + "/" + year1 + " 00:00:01";
var date2 = (month2 + 1) + "/" + day2 + "/" + year2 + " 23:59:59";
getChartData(date1, date2);
});
$('.apply-btn').attr('value', 'Valider');
});#
}
var dataDonught = {
labels: [
"Visites de talents",
"Visites d'entreprises",
"Visites d'internautes non inscrit"
],
datasets: [{
data: donughtRecords,
backgroundColor: [
"#FF6384",
"#36A2EB",
"#FFCE56"
{
#
function setArrayValues() {
arrayCurrentsLabel = [];
arrayCurrentsAdsValues = [];
arrayCurrentsCompanyValues = [];
arrayRecords['labels'].forEach(function (element, index) {
var date = element.split("-");
var dateAffiche = date[2] + "-" + date[1] + "-" + date[0];
arrayCurrentsLabel.push(dateAffiche);
arrayCurrentsAdsValues.push(arrayRecords['datasetsAd'][index]);
arrayCurrentsCompanyValues.push(arrayRecords['datasetsCompany'][index]);
});
myChart.data.labels = arrayCurrentsLabel;
myChart.data.datasets[0].data = arrayCurrentsAdsValues;
myChart.data.datasets[1].data = arrayCurrentsCompanyValues;
if (arrayCurrentsAdsValues.length > 0) {
sumVisitsAds = arrayCurrentsAdsValues.reduce(function (memo, val) {
let value = val || 0;
if (value != null) {
return memo + value;
}
});
} else {
sumVisitsAds = 0;
}
if (arrayCurrentsCompanyValues.length > 0) {
sumCompanyValues = arrayCurrentsCompanyValues.reduce(function (memo, val) {
let value = val || 0;
if (value != null) {
return memo + value;
}
});
} else {
sumCompanyValues = 0;
}
$('.countVisitsAds').html(sumVisitsAds);
$('.countVisitsCompany').html(sumCompanyValues);
}
var dataLine = {
datasets: [{
label: "Nombre de visite d'annonce par jour",
fill: false,
fontColor: "rgba(39,139,231,1)",
backgroundColor: "rgba(39,139,231,1)",
borderColor: "rgba(39,139,231,1)"
}, {
label: "Nombre de visite de votre page entreprise",
fill: false,
fontColor: "#F9C339",
backgroundColor: "#F9C339",
borderColor: "#F9C339"
}]
};
var ctx = document.getElementById("nb_visits");
var myChart = new Chart(ctx, {
type: 'line',
data: dataLine,
options: {
legend: {
display: false
},
scales: {
xAxes: [{
display: true,
scaleLabel: {
display: true,
labelString: 'Date'
}
}],
yAxes: [{
ticks: {
min: 0
},
scaleLabel: {
display: true,
labelString: 'Valeur'
}
}]
}
}
});
var dataDonught = {
labels: [
"Visites de talents",
"Visites d'entreprises",
"Visites d'internautes non inscrit"
],
hoverBackgroundColor: [
"#FF6384",
"#36A2EB",
"#FFCE56"
]
}]
};
var ctxDonught = document.getElementById("donught_visits");
var myDoughnutChart = new Chart(ctxDonught, {
type: 'doughnut',
data: dataDonught,
options: {
legend: {
display: false,
},
animation: {
animateScale: true
datasets: [{
data: donughtRecords,
backgroundColor: [
"#FF6384",
"#36A2EB",
"#FFCE56"
],
hoverBackgroundColor: [
"#FF6384",
"#36A2EB",
"#FFCE56"
]
}]
};
var ctxDonught = document.getElementById("donught_visits");
var myDoughnutChart = new Chart(ctxDonught, {
type: 'doughnut',
data: dataDonught,
options: {
legend: {
display: false,
},
animation: {
animateScale: true
}
}
}
}); #}
});#
}
</script>
{% endblock %}
+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.5.1'
version: '2.5.2'
@@ -36,9 +36,27 @@ class CompanyController extends Controller
$stats = $this->get("app.stats_manager");
$em = $this->getDoctrine()->getManager();
$ads = $em->getRepository('AppBundle:Ad')->findBy(array('company' => $this->getUser()->getCompany()));
$arrayDate['dateBegin'] = new \DateTime('now -7 Day');
$arrayDate['dateEnd'] = new \DateTime('now');
$records7days = $stats->getCompanyDashboard($this->getUser()->getCompany()->getId(), $arrayDate);
//dump($records7days);
$arrayDate['dateBegin'] = new \DateTime('now -30 Day');
$records30days = $stats->getCompanyDashboard($this->getUser()->getCompany()->getId(), $arrayDate);
//dump($records30days);
$records = $stats->getCompanyDashboard($this->getUser()->getCompany()->getId(), null);
//dump($records);
$answersSended = $em->getRepository('AppBundle:Answer')->getAnswerByCompanyStatus($this->getUser()->getCompany()->getId(), 'SENDED');
$answersDraft = $em->getRepository('AppBundle:Answer')->getAnswerByCompanyStatus($this->getUser()->getCompany()->getId(), 'DRAFT');
$nbAnswersSended =count($answersSended);
$nbAnswersDraft =count($answersDraft);
return $this->render('company/dashboard.html.twig', [
'ads' => $ads,
'records7days' => $records7days,
'records30days' => $records30days,
'records' => $records,
'nbAnswersSended' => $nbAnswersSended,
'nbAnswersDraft' => $nbAnswersDraft,
'arrayByAds' => $records['arrayByAds'],
]);
}
@@ -407,6 +407,8 @@ class User extends BaseUser
$linkedin="";
$twitter="";
if($this->getCompany()->getExtra()){
//19/01 j'ai eneleve le initExtra de ExtraJsonTrait
$this->getCompany()->initExtra();
if(array_key_exists("phoneTalent", $this->getCompany()->getExtra())){
if($this->getCompany()->getExtra()["phoneTalent"]){
$phone= $this->getCompany()->getExtra()["phoneTalent"];
@@ -113,6 +113,26 @@ class AnswerRepository extends AbstractRepository
->getResult();
}
public function getAnswerByCompanyStatus($id, $status)
{
$qb = $this
->createQueryBuilder('a')
->select('a')
->where('a.ad IN (
SELECT p.id
FROM AppBundle:Ad p
WHERE p.company = :id
)')
->setParameter(':id', $id)
->andWhere('a.status = :status')
->setParameter(':status', $status)
->orderBy('a.uTime','DESC');
return $qb
->getQuery()
->getResult();
}
public function getAnswerByAdsShare( $adId)
{
@@ -77,8 +77,12 @@ class CompanyManager
);
}
$company->setExtra(null);
$this->em->persist($company);
$this->em->flush();
$company->setExtra($extra);
$company->upload();
//$company->uploadCv();
}
$this->em->persist($company);
@@ -66,8 +66,8 @@ trait ExtraJsonTrait
*/
public function getExtra()
{
$this->initExtra();
//19/01 : modif pour size et siren cote Symfony. Effet sur la web app?
//$this->initExtra();
return $this->extra;
}
@@ -96,4 +96,35 @@
text-decoration : underline;
}
.text-card h3, .text-card span, .text-card h4{
color:#fff;
}
.card-background-1{
background-color:#25D89A !important;
border-radius:3px !important;
padding:20px;
min-height:180px;
}
.card-background-2{
background-color:#1689fb !important;
border-radius:3px !important;
padding:20px;
min-height:180px;
}
.card-background-3{
background-color:#FF5A5F !important;
border-radius:3px !important;
padding:20px;
min-height:180px;
}
.vertical-border{
border-right: 1px solid white;
}