Ejemplo n.º 1
0
 /**
  * Возвращает объект адаптера базы данных системы.
  *
  * @return Zend_Db_Adapter_Abstract
  */
 public function getAdapter()
 {
     if (empty(self::$_db)) {
         self::$_db = Rp::getDbAdapter();
     }
     return self::$_db;
 }
Ejemplo n.º 2
0
 private function _fetch($keyName, $postIds, $periodFirst, $periodSecond, $table)
 {
     $db = Rp::getDbAdapter();
     $postIds = $db->quote($postIds);
     $periodFirst = $db->quote($periodFirst);
     $periodSecond = $db->quote($periodSecond);
     $sql = "\r\n\t\t\tSELECT DISTINCT\r\n\t\t\t\tpersons.id,\r\n\t\t\t\tpersons.persg,\r\n\t\t\t\tpersons.pgtxt,\r\n\t\t\t\tpersons.fullname,\r\n\t\t\t\tdepartments.name AS department,\r\n\t\t\t\tappointments.name AS appointment,\r\n\t\t\t\tcards_first.status_id AS statusFirstId,\r\n\t\t\t\tcards_second.status_id AS statusSecondId,\r\n\t\t\t\tstatuses_first.name AS statusFirst,\r\n\t\t\t\tstatuses_second.name AS statusSecond,\r\n\t\t\t\tratings_first.name AS ratingFirst,\r\n\t\t\t\tratings_second.name AS ratingSecond,\r\n\t\t\t\temployees.endtest_date\r\n\r\n\t\t\tFROM\r\n\t\t\t\t{$table} posts_employees\r\n\t\t\t\tINNER JOIN user_rp_employees_PM employees\r\n\t\t\t\t\tON posts_employees.{$keyName} IN ({$postIds}) AND posts_employees.person_id = employees.person_id\r\n\t\t\t\tINNER JOIN user_rp_persons_PM persons\r\n\t\t\t\t\tON employees.person_id = persons.id\r\n\t\t\t\tLEFT JOIN user_rp_departments departments\r\n\t\t\t\t\tON employees.department_id = departments.id\r\n\t\t\t\tLEFT JOIN user_rp_appointments appointments\r\n\t\t\t\t\tON employees.appointment_id = appointments.id\r\n\t\t\t\tLEFT JOIN user_rp_ach_cards cards_first\r\n\t\t\t\t\tON persons.id = cards_first.person_id AND cards_first.period = '{$periodFirst}'\r\n\t\t\t\tLEFT JOIN user_rp_ach_cards cards_second\r\n\t\t\t\t\tON persons.id = cards_second.person_id AND cards_second.period = '{$periodSecond}'\r\n\t\t\t\tLEFT JOIN user_rp_ach_cards_statuses statuses_first\r\n\t\t\t\t\tON cards_first.status_id = statuses_first.id\r\n\t\t\t\tLEFT JOIN user_rp_ach_cards_statuses statuses_second\r\n\t\t\t\t\tON cards_second.status_id = statuses_second.id\r\n\t\t\t\tLEFT JOIN user_rp_ach_ratings ratings_first\r\n\t\t\t\t\tON cards_first.rtg_total_id = ratings_first.id\r\n\t\t\t\tLEFT JOIN user_rp_ach_ratings ratings_second\r\n\t\t\t\t\tON cards_second.rtg_total_id = ratings_second.id\r\n\r\n\t\t\tWHERE persons.out_date = ' ' OR persons.out_date = ''\r\n\r\n\t\t\tORDER BY\r\n\t\t\t\tpersons.fullname\r\n\t\t";
     return $db->fetchAll($sql);
 }
 public function indexAction()
 {
     $ratePeriod = 2007;
     $planPeriod = 2008;
     $db = Rp::getDbAdapter();
     $sql = "\r\n\t\t\tSELECT\r\n\t\t\t\tpersons.id,\r\n\t\t\t\tpersons.fullname,\r\n\t\t\t\tcompanies.name AS company,\r\n\t\t\t\tappointments.name AS appointment,\r\n\t\t\t\tdepartments.name AS department,\r\n\t\t\t\trate_mng_date = CASE WHEN cards_rate.rate_mng_status IS NULL THEN 'нет' \r\n\t\t\t\t\tELSE CONVERT(varchar(255), cards_rate.rate_mng_date, 104) END,\r\n\t\t\t\trate_emp_date = CASE WHEN cards_rate.rate_emp_status IS NULL THEN 'нет' \r\n\t\t\t\t\tWHEN cards_rate.rate_emp_status = 0 THEN 'несогласен'\r\n\t\t\t\t\tELSE CONVERT(varchar(255), cards_rate.rate_emp_date, 104) END,\r\n\t\t\t\trate_hmg_date = CASE WHEN cards_rate.rate_hmg_status IS NULL THEN 'нет' \r\n\t\t\t\t\tWHEN cards_rate.rate_hmg_status = 0 THEN 'несогласен'\r\n\t\t\t\t\tELSE CONVERT(varchar(255), cards_rate.rate_hmg_date, 104) END,\r\n\t\t\t\tratings.name AS rtg_total,\r\n\t\t\t\tplan_mng_date = CASE WHEN cards_plan.plan_mng_status IS NULL THEN 'нет' \r\n\t\t\t\t\tELSE CONVERT(varchar(255), cards_plan.plan_mng_date, 104) END,\r\n\t\t\t\tplan_emp_date = CASE WHEN cards_plan.plan_emp_status IS NULL THEN 'нет' \r\n\t\t\t\t\tWHEN cards_plan.plan_emp_status = 0 THEN 'несогласен'\r\n\t\t\t\t\tELSE CONVERT(varchar(255), cards_plan.plan_emp_date, 104) END,\r\n\t\t\t\tplan_hmg_date = CASE WHEN cards_plan.plan_hmg_status IS NULL THEN 'нет' \r\n\t\t\t\t\tWHEN cards_plan.plan_hmg_status = 0 THEN 'несогласен'\r\n\t\t\t\t\tELSE CONVERT(varchar(255), cards_plan.plan_hmg_date, 104) END,\r\n\t\t\t\tdbo.user_func_rp_department_path(employees.department_id, DEFAULT) AS department_path,\r\n\t\t\t\tdbo.user_func_rp_tree_post_persons(posts_employees.post_pid, ', ', '; ') AS managers\r\n\t\t\tFROM\r\n\t\t\t\tuser_rp_tree_posts_employees_PM posts_employees\r\n\t\t\t\tINNER JOIN user_rp_persons_PM persons\r\n\t\t\t\t\tON posts_employees.person_id = persons.id\r\n\t\t\t\tINNER JOIN user_rp_employees_PM employees\r\n\t\t\t\t\tON persons.id = employees.person_id\r\n\t\t\t\tLEFT JOIN user_rp_companies companies\r\n\t\t\t\t\tON employees.company_id = companies.id\r\n\t\t\t\tLEFT JOIN user_rp_departments departments\r\n\t\t\t\t\tON employees.department_id = departments.id\r\n\t\t\t\tLEFT JOIN user_rp_appointments appointments\r\n\t\t\t\t\tON employees.appointment_id = appointments.id\r\n\t\t\t\tLEFT JOIN user_rp_ach_cards cards_rate\r\n\t\t\t\t\tON persons.id = cards_rate.person_id AND cards_rate.period = {$ratePeriod}\r\n\t\t\t\tLEFT JOIN user_rp_ach_cards cards_plan\r\n\t\t\t\t\tON persons.id = cards_plan.person_id AND cards_plan.period = {$planPeriod}\r\n\t\t\t\tLEFT JOIN user_rp_ach_ratings ratings\r\n\t\t\t\t\tON cards_rate.rtg_total_id = ratings.id\r\n\t\t\tORDER BY\r\n\t\t\t\tpersons.fullname\r\n\t\t";
     $view = $this->initView();
     $view->title = Rp::getTitle('—водный отчет по сотрудникам');
     $view->rows = $db->fetchAll($sql);
     $view->ratePeriod = $ratePeriod;
     $view->planPeriod = $planPeriod;
 }
Ejemplo n.º 4
0
 /**
  * Конструктор.
  *
  * @param string $username Имя пользователя.
  * @param string $password Пароль пользователя.
  * @param int    $authtype Тип авторизации.
  *
  * @return void
  * @throws Exception
  */
 public function __construct($username, $password, $authtype)
 {
     $identityColumn = '';
     $credentialColumn = 'password';
     if ($authtype === self::AUTH_TRANSPARENT) {
         $identityColumn = 'netname';
     } elseif ($authtype === self::AUTH_FORM) {
         if (!$password) {
             throw new Exception('Не указан пароль пользователя.');
         }
         $identityColumn = 'login';
     } else {
         throw new Exception('Не верно указан тип авторизации.');
     }
     if (!$username) {
         throw new Exception('Не указан логин пользователя.');
     }
     $this->setIdentity($username);
     $this->setCredential($password);
     parent::__construct(Rp::getDbAdapter(), 'user_rp_persons_PM', $identityColumn, $credentialColumn);
 }
Ejemplo n.º 5
0
 /**
  * Конструктор.
  *
  * @return void
  */
 public function __construct()
 {
     parent::__construct(Rp::getDbAdapter());
 }
 public function indexAction()
 {
     set_time_limit(self::TIME_LIMIT);
     $logPath = './log/log_' . date('YmdHis') . '.txt';
     $this->_logHandle = @fopen($logPath, 'xb');
     $maxTimeCheck = time() - self::DAYS_LIMIT * 24 * 60 * 60;
     $maxDateCheck = date('Y-m-d H:i:s', $maxTimeCheck);
     /*
     $sql = "
     	SELECT 
     		cards.id,
     		cards.person_id,
     		cards.period,
     		cards.status_id,
     		cards.status_date,
     		cards.plan_emp_status,
     		cards.plan_hmg_status,
     		cards.plan_fnc_status,
     		cards.rate_emp_status,
     		cards.rate_hmg_status,
     		cards.rate_fnc_status,
     		persons.fullname AS emp_fullname,
     		persons.email AS emp_email,
     		dbo.user_func_rp_tree_post_persons_emails(tree_posts.id, ',') AS mngs_emails,
     		dbo.user_func_rp_tree_post_persons_emails(tree_posts.pid, ',') AS hmgs_emails,
     		dbo.user_func_rp_tree_post_persons_emails(tree_posts_func.post_func_id, ',') AS func_emails
     	FROM
     		user_rp_ach_cards cards
     		INNER JOIN user_rp_persons_PM persons
     			ON cards.person_id = persons.id
     		INNER JOIN user_rp_tree_posts_employees_PM posts_employees
     			ON cards.person_id = posts_employees.person_id
     		INNER JOIN user_rp_tree_posts tree_posts
     			ON posts_employees.post_pid = tree_posts.id
     		LEFT JOIN user_rp_tree_posts_func tree_posts_func
     			ON cards.person_id = tree_posts_func.person_id
     	WHERE
     		cards.status_id IN ('CPN', 'CRG') AND cards.status_date < '$maxDateCheck'
     	ORDER BY
     		cards.status_date
     ";
     */
     $sql = "\r\n\t\t\tSELECT \r\n\t\t\t\tcards.id,\r\n\t\t\t\tcards.person_id,\r\n\t\t\t\tcards.period,\r\n\t\t\t\tcards.status_id,\r\n\t\t\t\tcards.status_date,\r\n\t\t\t\tcards.plan_emp_status,\r\n\t\t\t\tcards.plan_hmg_status,\r\n\t\t\t\tcards.plan_fnc_status,\r\n\t\t\t\tcards.rate_emp_status,\r\n\t\t\t\tcards.rate_hmg_status,\r\n\t\t\t\tcards.rate_fnc_status,\r\n\t\t\t\tpersons.fullname AS emp_fullname,\r\n\t\t\t\tpersons.email AS emp_email,\r\n\t\t\t\tdbo.user_func_rp_tree_post_persons_emails(tree_posts.id, ',') AS mngs_emails,\r\n\t\t\t\tdbo.user_func_rp_tree_post_persons_emails(tree_posts.pid, ',') AS hmgs_emails,\r\n\t\t\t\tdbo.user_func_rp_tree_post_persons_emails(tree_posts_func.post_func_id, ',') AS func_emails\r\n\t\t\tFROM\r\n\t\t\t\tuser_rp_ach_cards cards\r\n\t\t\t\tINNER JOIN user_rp_persons_PM persons\r\n\t\t\t\t\tON cards.person_id = persons.id\r\n\t\t\t\tINNER JOIN user_rp_tree_posts_employees_PM posts_employees\r\n\t\t\t\t\tON cards.person_id = posts_employees.person_id\r\n\t\t\t\tINNER JOIN user_rp_tree_posts tree_posts\r\n\t\t\t\t\tON posts_employees.post_pid = tree_posts.id\r\n\t\t\t\tLEFT JOIN user_rp_tree_posts_func tree_posts_func\r\n\t\t\t\t\tON cards.person_id = tree_posts_func.person_id\r\n\t\t\tWHERE\r\n\t\t\t\tcards.status_id IN ('CPN', 'CRG') AND cards.period > (YEAR(GETDATE()) - 2)\r\n\t\t\tORDER BY\r\n\t\t\t\tcards.status_date\r\n\t\t";
     $db = Rp::getDbAdapter();
     $rows = $db->fetchAll($sql);
     $ps = "\n" . "\n" . '----------------' . "\n" . 'Это письмо создано автоматически и не требует ответа.' . "\n" . 'По всем возникающим вопросам обращайтесь к HR-партнерам' . ' и специалистам по персоналу Вашего подразделения.';
     foreach ($rows as $row) {
         if ($row['status_id'] == 'CPN') {
             // Согласование планирования.
             $message = "\n" . "Карточка достижений за {$row['period']} год (сотрудник {$row['emp_fullname']})" . " была выставлена на согласование {$row['status_date']}." . "\n" . 'На данный момент не получено согласование от' . ($row['plan_emp_status'] ? '' : ' сотрудника' . ($row['plan_hmg_status'] ? '' : ' и')) . ($row['plan_hmg_status'] ? '' : ' вышестоящего руководителя') . ($row['plan_fnc_status'] ? '' : ' , a также от функционального руководителя') . '.' . "\n" . 'Пожалуйста, предпримите меры для завершения процесса согласования карточки.' . $ps;
             $mails = explode(',', $row['mngs_emails']);
             $this->_sendMail($mails, $message);
             if (!$row['plan_emp_status'] && $row['emp_email']) {
                 $message = "\n" . 'Ваша карточка достижений за ' . $row['period'] . ' год' . ' была выставлена на согласование Вашим руководителем ' . $row['status_date'] . '.' . "\n" . 'Пожалуйста, подтвердите Ваше согласие с поставленными целями и задачами.' . $ps;
                 $this->_sendMail($row['emp_email'], $message);
             }
             if (!$row['plan_hmg_status']) {
                 $message = "\n" . 'Карточка достижений за ' . $row['period'] . ' год' . ' (сотрудник ' . $row['emp_fullname'] . ')' . ' была выставлена руководителем на согласование ' . $row['status_date'] . '.' . "\n" . 'Пожалуйста, подтвердите Ваше согласие с поставленными целями и задачами.' . $ps;
                 $mails = explode(',', $row['hmgs_emails']);
                 $this->_sendMail($mails, $message);
             }
             if (!$row['plan_fnc_status']) {
                 $message = "\n" . 'Карточка достижений за ' . $row['period'] . ' год' . ' (сотрудник ' . $row['emp_fullname'] . ')' . ' была выставлена руководителем на согласование ' . $row['status_date'] . '.' . "\n" . 'Пожалуйста, подтвердите Ваше согласие с поставленными целями и задачами.' . $ps;
                 $mails = explode(',', $row['func_emails']);
                 $this->_sendMail($mails, $message);
             }
         } else {
             if ($row['status_id'] == 'CRG') {
                 // Согласование оценки.
                 $message = "\n" . "Карточка достижений за {$row['period']} год (сотрудник {$row['emp_fullname']})" . " была выставлена на согласование {$row['status_date']}." . "\n" . 'На данный момент не получено согласование от' . ($row['rate_emp_status'] ? '' : ' сотрудника' . ($row['rate_hmg_status'] ? '' : ' и')) . ($row['rate_hmg_status'] ? '' : ' вышестоящего руководителя') . ($row['rate_fnc_status'] ? '' : ' , a также от функционального руководителя') . '.' . "\n" . 'Пожалуйста, предпримите меры для завершения процесса согласования карточки.' . $ps;
                 $mails = explode(',', $row['mngs_emails']);
                 $this->_sendMail($mails, $message);
                 if (!$row['rate_emp_status'] && $row['emp_email']) {
                     $message = "\n" . 'Ваша карточка достижений за ' . $row['period'] . ' год' . ' была выставлена на согласование Вашим руководителем ' . $row['status_date'] . '.' . "\n" . 'Пожалуйста, подтвердите Ваше согласие с поставленными оценками.' . $ps;
                     $this->_sendMail($row['emp_email'], $message);
                 }
                 if (!$row['rate_hmg_status']) {
                     $message = "\n" . 'Карточка достижений за ' . $row['period'] . ' год' . ' (сотрудник ' . $row['emp_fullname'] . ')' . ' была выставлена руководителем на согласование ' . $row['status_date'] . '.' . "\n" . 'Пожалуйста, подтвердите Ваше согласие с поставленными оценками.' . $ps;
                     $mails = explode(',', $row['hmgs_emails']);
                     $this->_sendMail($mails, $message);
                 }
                 if (!$row['rate_fnc_status']) {
                     $message = "\n" . 'Карточка достижений за ' . $row['period'] . ' год' . ' (сотрудник ' . $row['emp_fullname'] . ')' . ' была выставлена руководителем на согласование ' . $row['status_date'] . '.' . "\n" . 'Пожалуйста, подтвердите Ваше согласие с поставленными оценками.' . $ps;
                     $mails = explode(',', $row['func_emails']);
                     $this->_sendMail($mails, $message);
                 }
             }
         }
     }
     $log = "\n\n" . 'Количество карточек: ' . count($rows) . "\n" . 'Отправлено сообщений: ' . $this->_countSending . "\n" . 'Ошибок: ' . $this->_countErrors;
     fwrite($this->_logHandle, $log);
     fclose($this->_logHandle);
     $view = $this->initView();
     $view->title = Rp::getTitle('Рассылка оповещений');
 }