/** * Возвращает объект адаптера базы данных системы. * * @return Zend_Db_Adapter_Abstract */ public function getAdapter() { if (empty(self::$_db)) { self::$_db = Rp::getDbAdapter(); } return self::$_db; }
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; }
/** * Конструктор. * * @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); }
/** * Конструктор. * * @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('Рассылка оповещений'); }