/**
  * Default constructor
  *
  * @param string $name Optional different name for model
  */
 public function __construct($name = 'surveys')
 {
     parent::__construct($name, 'gems__respondent2track', 'gr2t', true);
     $this->addTable('gems__respondents', array('gr2t_id_user' => 'grs_id_user'), 'grs', false);
     $this->addTable('gems__respondent2org', array('gr2t_id_user' => 'gr2o_id_user', 'gr2t_id_organization' => 'gr2o_id_organization'), 'gr2o', false);
     $this->addTable('gems__tracks', array('gr2t_id_track' => 'gtr_id_track'), 'gtr', false);
     $this->addTable('gems__reception_codes', array('gr2t_reception_code' => 'grc_id_reception_code'), 'grc', false);
     $this->addLeftTable('gems__staff', array('gr2t_created_by' => 'gsf_id_user'));
     // No need to send all this information to the user
     $this->setCol($this->getItemsFor('table', 'gems__staff'), 'elementClass', 'None');
     // TODO: altkeys implementatie
     // $this->setKeys($this->_getKeysFor('gems__respondent2track');
     $this->setKeys($this->_getKeysFor('gems__respondent2org') + $this->_getKeysFor('gems__tracks'));
     $this->addColumn("CASE WHEN gsf_id_user IS NULL\r\n                THEN '-'\r\n                ELSE\r\n                    CONCAT(\r\n                        COALESCE(gsf_last_name, ''),\r\n                        ', ',\r\n                        COALESCE(gsf_first_name, ''),\r\n                        COALESCE(CONCAT(' ', gsf_surname_prefix), '')\r\n                    )\r\n                END", 'assigned_by');
     $this->addColumn("CASE WHEN grc_success = 1 THEN '' ELSE 'deleted' END", 'row_class');
     $this->addColumn("CASE WHEN grc_success = 1 THEN 1 ELSE 0 END", 'can_edit');
     $this->addColumn("CONCAT(COALESCE(CONCAT(grs_last_name, ', '), '-, '), COALESCE(CONCAT(grs_first_name, ' '), ''), COALESCE(grs_surname_prefix, ''))", 'respondent_name');
 }
 /**
  * Create the model with standard tables and calculated columns
  */
 public function __construct()
 {
     parent::__construct('token', 'gems__tokens', 'gto');
     if ($this->saveRespondentTracks) {
         // Set the correct prefix
         $this->saveRespondentTracks = 'gr2t';
     }
     $this->addTable('gems__tracks', array('gto_id_track' => 'gtr_id_track'));
     $this->addTable('gems__surveys', array('gto_id_survey' => 'gsu_id_survey'));
     $this->addTable('gems__groups', array('gsu_id_primary_group' => 'ggp_id_group'));
     $this->addTable('gems__respondents', array('gto_id_respondent' => 'grs_id_user'));
     $this->addTable('gems__respondent2org', array('gto_id_organization' => 'gr2o_id_organization', 'gto_id_respondent' => 'gr2o_id_user'));
     $this->addTable('gems__respondent2track', array('gto_id_respondent_track' => 'gr2t_id_respondent_track'), $this->saveRespondentTracks);
     $this->addTable('gems__organizations', array('gto_id_organization' => 'gor_id_organization'));
     $this->addTable('gems__reception_codes', array('gto_reception_code' => 'grc_id_reception_code'));
     $this->addTable('gems__rounds', array('gto_id_round' => 'gro_id_round'));
     $this->addLeftTable('gems__staff', array('gr2t_created_by' => 'gems__staff.gsf_id_user'));
     $this->addLeftTable('gems__track_fields', array('gto_id_relationfield' => 'gtf_id_field', 'gtf_field_type = "relation"'));
     // Add relation fields
     $this->addLeftTable('gems__respondent_relations', array('gto_id_relation' => 'grr_id', 'gto_id_respondent' => 'grr_id_respondent'));
     // Add relation
     $this->addColumn("CASE WHEN CHAR_LENGTH(gsu_survey_name) > 30 THEN CONCAT(SUBSTRING(gsu_survey_name, 1, 28), '...') ELSE gsu_survey_name END", 'survey_short', 'gsu_survey_name');
     $this->addColumn("CASE WHEN gsu_survey_pdf IS NULL OR CHAR_LENGTH(gsu_survey_pdf) = 0 THEN 0 ELSE 1 END", 'gsu_has_pdf');
     $this->addColumn('CASE WHEN gto_completion_time IS NULL THEN 0 ELSE 1 END', 'is_completed');
     $this->addColumn('CASE WHEN grc_success = 1 AND gto_valid_from <= CURRENT_TIMESTAMP AND gto_completion_time IS NULL AND (gto_valid_until IS NULL OR gto_valid_until >= CURRENT_TIMESTAMP) THEN 1 ELSE 0 END', 'can_be_taken');
     $this->addColumn("CASE WHEN grc_success = 1 THEN '' ELSE 'deleted' END", 'row_class');
     $this->addColumn("CASE WHEN grc_success = 1 AND ((grs_email IS NOT NULL AND grs_email != '' and (gto_id_relationfield IS NULL OR gto_id_relationfield < 1)) OR (grr_email IS NOT NULL AND grr_email != '' and (gto_id_relationfield > 0))) AND ggp_respondent_members = 1 AND gto_valid_from <= CURRENT_TIMESTAMP AND gto_completion_time IS NULL AND (gto_valid_until IS NULL OR gto_valid_until >= CURRENT_TIMESTAMP) AND gr2o_mailable = 1 AND gr2t_mailable = 1 THEN 1 ELSE 0 END", 'can_email');
     $this->addColumn("TRIM(CONCAT(COALESCE(CONCAT(grs_last_name, ', '), '-, '), COALESCE(CONCAT(grs_first_name, ' '), ''), COALESCE(grs_surname_prefix, '')))", 'respondent_name');
     $this->addColumn("CASE WHEN gems__staff.gsf_id_user IS NULL\n                THEN '-'\n                ELSE\n                    CONCAT(\n                        COALESCE(gems__staff.gsf_last_name, ''),\n                        ', ',\n                        COALESCE(gems__staff.gsf_first_name, ''),\n                        COALESCE(CONCAT(' ', gems__staff.gsf_surname_prefix), '')\n                    )\n                END", 'assigned_by');
     $this->addColumn(new \Zend_Db_Expr("'token'"), \Gems_Model::ID_TYPE);
     /*    TRIM(CONCAT(
               CASE WHEN gto_created = gto_changed OR DATEDIFF(CURRENT_TIMESTAMP, gto_changed) > 0 THEN '' ELSE 'changed' END,
               ' ',
               CASE WHEN DATEDIFF(CURRENT_TIMESTAMP, gto_created) > 0 THEN '' ELSE 'created' END
           ))"), 'row_class'); // */
     if ($this->saveRespondentTracks) {
         // The save order is reversed in this case.
         $this->_saveTables = array_reverse($this->_saveTables);
     }
     $this->set('gsu_id_primary_group', 'default', 800);
     $this->setOnSave('gto_mail_sent_date', array($this, 'saveCheckedMailDate'));
     $this->setOnSave('gto_mail_sent_num', array($this, 'saveCheckedMailNum'));
     $this->useTokenAsKey();
 }
 /**
  * Self constructor
  */
 public function __construct()
 {
     // gems__respondents MUST be first table for INSERTS!!
     parent::__construct('respondents', 'gems__respondents', 'grs');
     $this->addTable('gems__respondent2org', array('grs_id_user' => 'gr2o_id_user'), 'gr2o');
     $this->addTable('gems__reception_codes', array('gr2o_reception_code' => 'grc_id_reception_code'));
     $this->setKeys($this->_getKeysFor('gems__respondent2org'));
     $this->setOnSave('gr2o_opened', new \MUtil_Db_Expr_CurrentTimestamp());
     $this->setSaveOnChange('gr2o_opened');
     $this->setOnSave('gr2o_opened_by', \GemsEscort::getInstance()->session->user_id);
     $this->setSaveOnChange('gr2o_opened_by');
     $this->addColumn(new \Zend_Db_Expr("CASE WHEN grc_success = 1 THEN '' ELSE 'deleted' END"), 'row_class');
     $this->addColumn(new \Zend_Db_Expr("CASE WHEN grc_success = 1 THEN 0 ELSE 1 END"), 'resp_deleted');
     if (!$this->has('grs_ssn')) {
         $this->hashSsn = self::SSN_HIDE;
     }
     if (self::SSN_HASH === $this->hashSsn) {
         $this->setSaveWhen('grs_ssn', array($this, 'whenSSN'));
         $this->setOnLoad('grs_ssn', array($this, 'hideSSN'));
         $this->setOnSave('grs_ssn', array($this, 'saveSSN'));
     }
 }