Система пропусков показывает проходы по пропуску и позволяет выгрузить эти записи в Excel.
- пропуск прислоняют к датчику
- датчик отправляет команду системе Fortnet
- система Fortnet записывает проход в БД (Firebird)
- браузер отправляет запрос на сервер
- сервер вызывает php и просит его выполнить файл index.php
- файл index.php подключает другие файлы и настраивает среду выполнения
- по условиям запроса определяется, какой контроллер и какое действие надо вызвать
- условия запроса выступает в роли фильтров выборки данных из БД
- получение данных из БД
- при необходимости: обработка данных, группировка
- отправка результата браузеру
-
формирование файла Excel на сервере с Ruby (см. extra/ruby/)
- браузер отправляет запрос на сервер с Ruby
- скрипт на Ruby вызывает API этой системы для получения статистики проходов
- шаги 2-7 (§2)
- отправка результата на сервер с Ruby
- формирование файла Excel с данными и стилями
- отправка файла браузеру
-
формирование файла Excel в этой системе
- шаги 1-7 (§2)
- формирование файла Excel с данными и стилями
- отправка файла браузеру
Структура файлов может различаться, поскольку они формируются в разных системах.
Кодировка по умолчанию - UTF-8. Можно поставить cp1251:
- Заменить "AddDefaultCharset utf-8" на "AddDefaultCharset windows-1251" в файле .htaccess
- Изменить кодировку файла config/texts.ini на windows-1251 (может встречаться в программах под названием ANSI)
- Добавить/изменить параметр "encoding" в файле config/database.php
Настройки подключения к БД находятся в файле config/database.php
По умолчанию при возникновении ошибки появляется сообщение с подробной информацией, в том числе с названиями выполняемых файлов. Вы можете отключить это, изменив параметр debug в файле config/app.ini
Параметр export в файле config/app.ini указывает адрес (URL) скрипта, который будет запрашивать данные и формировать файл Excel. Если этот параметр пуст, то файл будет формироваться в этой системе. (См. §3)
Это приложение использует фреймворк Slim, потому что он легковесный и позволяет снять ряд проблем по маршрутизации, и библиотеку Zepto как лёгкую замену jQuery, к которому все привыкли. Источник вдохновения при построении архитектуры - Rails. Автор постарался сделать так, чтобы структура папок и приёмы программирования были близки к таковым в Rails. Дополнительными ограничениями в архитектуре были принципы DRY, KISS и YAGNI.
Функция t - сокращение для функции Text::get, возвращающей текст из файла config/texts.ini. $h в шаблонах - экземпляр класса Helper, содержащего все функции из хелперов в папке app/helpers/.
Поиск id по имени человека (по подстроке в столбце NAME)
search_people.json?people=Иван,Захарч
Результат
{
"search_people":{
"Иван":{"ID":202,"NAME":"Иван Васечкин"},
"Захарч":{"ID":38,"NAME":"Павел Захарченко"}
}
}
Посещения
visits.json?person=202,38&date_start=2013-09-17&date_end=2013-09-18
Результат
{
"visits":[
{"THIS_DAY":"2013-09-17","MIN_DATETIME":"2013-09-17 10:48:44","MAX_DATETIME":"2013-09-17 20:56:32","USER_ID":38,"DIFF":["10:07",1,"9:07"]},
{"THIS_DAY":"2013-09-17","MIN_DATETIME":"2013-09-17 09:29:09","MAX_DATETIME":"2013-09-17 18:31:08","USER_ID":202,"DIFF":["9:01",1,"8:01"]},
{"THIS_DAY":"2013-09-18","MIN_DATETIME":"2013-09-18 10:32:25","MAX_DATETIME":"2013-09-18 19:47:18","USER_ID":38,"DIFF":["9:14",1,"8:14"]},
{"THIS_DAY":"2013-09-18","MIN_DATETIME":"2013-09-18 09:24:49","MAX_DATETIME":"2013-09-18 18:44:28","USER_ID":202,"DIFF":["9:19",1,"8:19"]}
]
}
Столбцы:
THIS_DAY
- деньMIN_DATETIME
- первый проход в этот деньMAX_DATETIME
- последний проход в этот деньUSER_ID
- id из предыдущего запроса (search_people)DIFF
- разница времени: всего (max-min), время на обед (1 час, если "всего" более 1 часа, иначе 0), рабочее время ("всего" минус "время на обед")
- Сделать код ещё легче и быстрее.
- Если это приложение будет использовать кто-то, кто не понимает по-русски, то можно:
- простой способ - перевести config/texts.ini
- посложнее - добавить язык в config/app.ini, перевести config/texts.ini и положить файлы с текстами в config/locales/, например config/locales/ru.ini
- Упростить изменение кодировки:
- Добавить выбор кодировки в config/app.ini
- Передавать header(Charset) в соответствии с указанной кодировкой; убрать строку "AddDefaultCharset" из .htaccess.
- Добавить в Text::get изменение кодировки текста в соответствии с указанной кодировкой.
- Сейчас в системе есть только один шаблон. Когда будет больше шаблонов, надо будет добавить папку app/views/layouts/ и хранить в ней layout; переопределить в классе App функцию render, добавив загрузку layout.