Kolektor - dokoncano dodajanje respondenta, posiljanje obvestil uredniku, cronjob alerti

This commit is contained in:
pero1203 2022-07-28 11:59:30 +02:00
parent f8e3dc4575
commit 6f5fcde7b3
6 changed files with 103 additions and 41 deletions

View File

@ -100,7 +100,8 @@ class Kolektor {
public function displayResponses(){
global $site_url;
echo ' <table class="kolektor_reponses">';
echo ' <tr>';
@ -110,7 +111,8 @@ class Kolektor {
echo ' <th>Funkcija respondenta</th>';
echo ' <th>Čas proženja</th>';
echo ' <th>Status</th>';
echo ' <th></th>';
echo ' <th>Odgovori</th>';
echo ' <th>Opomnik</th>';
echo ' </tr>';
// Loop cez vse stranke
@ -125,6 +127,7 @@ class Kolektor {
echo ' <td>'.$response['respondent_funkcija'].'</td>';
echo ' <td>'.date('j.n.Y H:i:s', strtotime($response['insert_time'])).'</td>';
echo ' <td>'.$this->statuses[$response['status']].'</td>';
echo ' <td><a href="'.$site_url.'admin/survey/index.php?anketa='.$response['ank_id'].'&a=data">Preglej odgovore</a></td>';
echo ' <td>Pošlji opomnik</td>'; // TODO
echo ' </tr>';
}
@ -161,14 +164,14 @@ class Kolektor {
// Seznam 6 kolektor anket
echo '<div class="kolektor_setting '.(isset($error['ank_id']) ? 'error' : '').'">';
echo ' <span class="setting_line">Anketa:</span>';
echo ' <div class="setting_line">Anketa:</div>';
$surveys = $this->getSurveys();
$sequence = 0;
foreach($surveys as $kolektor_survey){
echo '<span class="setting_line">';
echo '<div class="setting_line">';
echo ' <input type="radio" id="kolektor_survey_'.$kolektor_survey['survey_sequence'].'" name="kolektor_survey" sequence="'.$kolektor_survey['survey_sequence'].'" value="'.$kolektor_survey['ank_id'].'" '.($data['ank_id'] == $kolektor_survey['ank_id'] ? 'checked="checked"' : '').' onChange="kolektorSelectSurvey();">';
echo ' <label for="kolektor_survey_'.$kolektor_survey['survey_sequence'].'">'.$kolektor_survey['survey_sequence'].' - '.$kolektor_survey['naslov'].'</label>';
echo '</span>';
echo '</div>';
if($data['ank_id'] == $kolektor_survey['ank_id'])
$sequence = $kolektor_survey['survey_sequence'];
@ -180,45 +183,54 @@ class Kolektor {
// ID projekta
echo '<div class="kolektor_setting '.(isset($error['respondent_projekt_id']) ? 'error' : '').'">';
echo ' <span class="setting_line">ID projekta:</span>';
echo ' <div class="setting_line">ID projekta:</div>';
echo ' <input type="text" class="medium" name="respondent_projekt_id" value="'.$data['respondent_projekt_id'].'">';
echo '</div>';
// Email
echo '<div class="kolektor_setting '.(isset($error['respondent_email']) ? 'error' : '').'">';
echo ' <span class="setting_line">Email respondenta:</span>';
echo ' <div class="setting_line">Email respondenta:</div>';
echo ' <input type="text" class="medium" name="respondent_email" value="'.$data['respondent_email'].'">';
echo '</div>';
// Funkcija respondenta
$standard_functions = array('Vodja nabave', 'Vodja projekta', 'Skrbnik pogodbe', 'Nadzornik objekta', 'Član inženirskega tima');
$other_function = (isset($data['respondent_funkcija']) && $data['respondent_funkcija'] != '' && !in_array($data['respondent_funkcija'], $standard_functions)) ? true : false;
echo '<div class="kolektor_setting '.(isset($error['respondent_funkcija']) ? 'error' : '').'">';
echo ' <span class="setting_line">Funkcija respondenta v podjetju:</span>';
echo ' <span class="setting_line"><select name="respondent_funkcija" class="dropdown medium">';
echo ' <option value="Vodja nabave" '.($data['respondent_funkcija'] == 'Vodja nabave' ? 'selected="selected"' : '').'>Vodja nabave</option>';
echo ' <option value="Vodja projekta" '.($data['respondent_funkcija'] == 'Vodja projekta' ? 'selected="selected"' : '').'>Vodja projekta</option>';
echo ' <option value="Skrbnik pogodbe" '.($data['respondent_funkcija'] == 'Skrbnik pogodbe' ? 'selected="selected"' : '').'>Skrbnik pogodbe</option>';
echo ' <option value="Nadzornik objekta" '.($data['respondent_funkcija'] == 'Nadzornik objekta' ? 'selected="selected"' : '').'>Nadzornik objekta</option>';
echo ' <option value="Član inženirskega tima" '.($data['respondent_funkcija'] == 'Član inženirskega tima' ? 'selected="selected"' : '').'>Član inženirskega tima</option>';
echo ' <div class="setting_line">Funkcija respondenta v podjetju:</div>';
echo ' <select name="respondent_funkcija" id="respondent_funkcija_dropdown" class="dropdown medium" '.($other_function ? 'disabled="disabled"' : '').'>';
foreach($standard_functions as $standard_function){
echo ' <option value="'.$standard_function.'" '.($data['respondent_funkcija'] == $standard_function ? 'selected="selected"' : '').'>'.$standard_function.'</option>';
}
echo ' </select>';
echo ' <div class="setting_line"><input type="checkbox" id="respondent_funkcija_other" onClick="kolektorOtherFunction();" '.($other_function ? 'checked="checked"' : '').'><label for="respondent_funkcija_other">Druga funkcija</label></div>';
echo ' <input type="text" class="medium" name="respondent_funkcija" id="respondent_funkcija_text" '.($other_function ? 'value="'.$data['respondent_funkcija'].'"' : 'style="display:none;" disabled="disabled"').'>';
echo '</div>';
// Aktivacija na daljavo - samo za anketi 5 in 6 - TODO
echo '<div id="kolektor_setting_activation" class="kolektor_setting '.(isset($error['respondent_remote_activation']) ? 'error' : '').'" '.(($sequence == 5 && $sequence == 6) ? '' : 'style="display:none;"').'>';
echo ' <span class="setting_line">Aktivacija na daljavo:</span>';
echo ' <span class="setting_line"><input type="radio" id="respondent_remote_activation_0" name="respondent_remote_activation" value="0" '.($data['respondent_remote_activation'] == '0' ? 'checked="checked"' : '').'><label for="respondent_remote_activation_0">Ne</label></span>';
echo ' <span class="setting_line"><input type="radio" id="respondent_remote_activation_1" name="respondent_remote_activation" value="1" '.($data['respondent_remote_activation'] == '1' ? 'checked="checked"' : '').'><label for="respondent_remote_activation_1">Da</label></span>';
// Aktivacija na daljavo - samo za anketi 5 in 6
echo '<div id="kolektor_setting_activation" class="kolektor_setting '.(isset($error['respondent_remote_activation']) ? 'error' : '').'" '.(($sequence == '5' || $sequence == '6') ? '' : 'style="display:none;"').'>';
echo ' <div class="setting_line">Aktivacija na daljavo:</div>';
echo ' <div class="setting_line"><input type="radio" id="respondent_remote_activation_0" name="respondent_remote_activation" value="0" '.($data['respondent_remote_activation'] != '1' ? 'checked="checked"' : '').' '.(($sequence == '5' || $sequence == '6') ? '' : 'disabled="disabled"').'><label for="respondent_remote_activation_0">Ne</label></div>';
echo ' <div class="setting_line"><input type="radio" id="respondent_remote_activation_1" name="respondent_remote_activation" value="1" '.($data['respondent_remote_activation'] == '1' ? 'checked="checked"' : '').' '.(($sequence == '5' || $sequence == '6') ? '' : 'disabled="disabled"').'><label for="respondent_remote_activation_1">Da</label></div>';
echo '</div>';
// Sporocilo respondentu
$text = 'Pozdravljeni,&#10;&#10;Prosimo vas, če lahko izpolnite anketo.&#10;&#10;Povezava do ankete: #URL#&#10;&#10;Lep pozdrav,&#10;&#10;Kolektor ETRA';
echo '<div class="kolektor_setting '.(isset($error['respondent_message']) ? 'error' : '').'">';
echo ' <span class="setting_line">Spremno besedilo:</span>';
echo ' <textarea name="respondent_message">'.$data['respondent_message'].'</textarea>';
echo ' <div class="setting_line">Spremno besedilo:</div>';
echo ' <textarea name="respondent_message">'.(isset($data['respondent_message']) && $data['respondent_message'] != '' ? $data['respondent_message'] : $text).'</textarea>';
echo '</div>';
echo '</div>';
@ -228,8 +240,6 @@ class Kolektor {
echo ' <button class="medium blue" type="button" onClick="kolektorCreateResponse();">Sproži anketo in pošlji email respondentu</button>';
echo '</div>';
echo '</div>';
echo '</form>';
}

View File

@ -50,10 +50,17 @@ class KolektorNotifications {
}
catch (Exception $e){
}
// Shranimo, da smo poslali notification in spremenili status
$sql_alert = sisplet_query("INSERT INTO kolektor_survey_response_alert
(respondent_id, alert_time, new_status)
VALUES
('".$response['usr_id']."', NOW(), '".$this->response['status']."')
");
}
// Posljemo mail respondentu z vabilom na anketo
public function sendRespondentNotification(){
public function sendRespondentNotification($respondent_message=''){
$subject = 'Kolektor ETRA - vabilo na anketo';
@ -61,8 +68,11 @@ class KolektorNotifications {
$kr = new KolektorResponse($this->response['respondent_id']);
$url = $kr->getResponseURL();
$body = $this->response['respondent_message'];
$body .= '<br><br>'.$url;
$body = ($respondent_message != '') ? $respondent_message : $this->response['respondent_message'];
// Zamenjamo line breake in #URL#
$body = nl2br(stripslashes($body));
$body = str_replace('#URL#', '<a href="'.$url.'">Kolektor anketa</a>', $body);
// Posljemo mail
@ -83,20 +93,32 @@ class KolektorNotifications {
// Loop cez vse response in posljemo notificatione glede na statuse
public static function executeCronJob(){
// Loop po responsih s statusom 1, 2 ali 3 (prozeno, opozorilo 1, opozorilo 3)
$sql = sisplet_query("SELECT ksr.*, ksra.alert_time, ksra.new_status
FROM kolektor_survey_response ksr, kolektor_survey_response_alert ksra
WHERE ksr.respondent_id=ksra.respondent_id
AND ((ksr.status='1' AND ksr.insert_time <= NOW() - INTERVAL 7 DAY)
OR (ksr.status='2' AND ksr.insert_time <= NOW() - INTERVAL 21 DAY)
OR (ksr.status='3' AND ksr.insert_time <= NOW() - INTERVAL 42 DAY))
");
// Status 1 - "prozeno" - preklopimo na status 2 "opozorilo 1"
if($this->response['status'] == 0){
while($row = mysqli_fetch_array($sql)){
}
// Status 2 - "opozorilo 1" - preklopimo na status 3 "opozorilo 3"
elseif($this->response['status'] == 1){
}
// Status 3 "opozorilo 3" - preklopimo na status 4 "neodgovorjeno"
elseif($this->response['status'] == 2){
}
$kr = new KolektorResponse($row['respondent_id']);
// Status 1 - "prozeno" - preklopimo na status 2 "opozorilo 1"
if($this->response['status'] == '1'){
$kr->setStatus($status='2');
}
// Status 2 - "opozorilo 1" - preklopimo na status 3 "opozorilo 3"
elseif($this->response['status'] == '2'){
$kr->setStatus($status='3');
}
// Status 3 "opozorilo 3" - preklopimo na status 4 "neodgovorjeno"
elseif($this->response['status'] == '3'){
$kr->setStatus($status='4');
}
}
}
}

View File

@ -54,7 +54,8 @@ class KolektorResponse {
$url .= '&kolemail='.$this->response['respondent_email'];
$url .= '&kolprojekt='.$this->response['respondent_projekt_id'];
$url .= '&kolfunkc='.$this->response['respondent_funkcija'];
$url .= '&kolactivat='.$this->response['respondent_remote_activation'];
if($this->response['respondent_remote_activation'] != '')
$url .= '&kolactivat='.$this->response['respondent_remote_activation'];
return $url;
}
@ -115,7 +116,7 @@ class KolektorResponse {
('".$response_data['ank_id']."',
'".$global_user_id."',
NOW(),
'0',
'1',
'".$respondent_id."',
'".$response_data['respondent_email']."',
'".$response_data['respondent_funkcija']."',

View File

@ -24,6 +24,7 @@ function kolektorCreateResponse(){
}
// Oznacevanje ankete pri kreiranju responsa
function kolektorSelectSurvey(){
var survey_sequence = $('input[name="kolektor_survey"]:checked').attr("sequence");
@ -35,13 +36,34 @@ function kolektorSelectSurvey(){
$('#kolektor_respondent_settings').slideDown();
if(survey_sequence == 5 || survey_sequence == 6){
$('input[name="respondent_remote_activation"]').prop("disabled", false);
$('#kolektor_setting_activation').slideDown();
}
else{
$('input[name="respondent_remote_activation"]').prop("disabled", true);
$('#kolektor_setting_activation').slideUp();
}
}
else{
$('#kolektor_respondent_settings').slideUp();
}
}
}
// Preklop na drugo funkcijo v podjetju pri kreiranju responsa
function kolektorOtherFunction(){
// Vnos druge funkcije
if($('input#respondent_funkcija_other').is(':checked')){
$('#respondent_funkcija_dropdown').prop("disabled", true);
$('#respondent_funkcija_text').prop("disabled", false).show();
$('#respondent_funkcija_text').focus();
}
// Vnos funkcije iz dropdowna
else{
$('#respondent_funkcija_dropdown').prop("disabled", false);
$('#respondent_funkcija_text').prop("disabled", true).hide();
$('#respondent_funkcija_dropdown').focus();
}
}

View File

@ -32980,6 +32980,9 @@ table.dataTable td:not(:first-of-type), table.dataTable th:not(:first-of-type) {
display: flex;
flex-direction: column;
}
#kolektor_add_response #kolektor_add_response_form textarea {
width: 100%;
}
@media (max-width: 1100px) {
#quick_comments_link.newCss {

View File

@ -57,6 +57,10 @@
display: flex;
flex-direction: column;
}
textarea{
width: 100%;
}
}
}