Файл: Проектирование и создание информационной системы для торговой организации.pdf

ВУЗ: Не указан

Категория: Реферат

Дисциплина: Не указана

Добавлен: 03.12.2023

Просмотров: 128

Скачиваний: 6

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

71
Список источников и литературы
1.
Айзенберг Б., Кварто вон Тивадар Д., Лайза Т.Д. Тестирование и оптимизация веб. - сайтов. Руководство по Google Website Optimizer. - М.:
Вильямс, 2017. - 336 с.
2.
Арнольд М., Джефф Д., Клинт М. Администрирование Apache. - М.:
Лори, 2016. - 418 с.
3.
Белов Г.В. Информационные технологии предпринимательства. - М.:
АКАДЕМКНИГА, 2015. - 432 с.
4.
Бройдо В.Л., Ильина О.П. Вычислительные системы, сети и телекоммуникации. - СПБ: Питер, 2015. - 560 с.
5.
Веллинг Л., Томсон Л. Разработка веб. - приложений с помощью PHP и
MySQL. - М.: Вильямс, 2016. - 848 с.
6.
Глушаков с.В., Жакин И.А., Хачиров Т. с. Программирование Web. - страниц. - М.: Фолио, 2016. - 390 с.
7.
Дронов,
Прохоренок.
HTML,
JavaScript,
PHP и
MySQL.
Джентльменский набор Web. - мастера. - СПБ: ВХВ-Петербург, 2015. - 768 с.
8.
Емельянова Н., Партыка Т., Попов И. Устройство и функционирование информационных систем. – М.: Форум, Инфра, - М, 2016. - 448 с.
9.
Колисниченко Д.Н. PHP и MySQL. Разработка Web. - приложений. -
СПБ: ВХВ-Петербург, 2017. - 640 с.
10.
Кошик А. Веб. - аналитика 2.0 на практике. Тонкости и лучшие методики. - М.: Вильямс, 2016. - 528 с.
11.
Петин В. API Яндекс, Google и других популярных веб. - сервисов.
Готовые решения для вашего сайта. - СПБ: ВХВ-Петербург, 2017. - 480 с.
12.
Полынская Г. Информационные системы маркетинга. Учебник и практикум.- М.: Юрайт, 2014. - 370 с.
13.
Поляков Е.В. PHP на примерах. - М.: Наука и техника, 2017. - 256 с.
14.
Райгородский А. Модели Интернета. - М.: Интеллект, 2013. - 64 с.

72 15.
Робачевский А. Интернет изнутри. Экосистема глобальной сети. - М.:
Альпина Паблишер, 2017. - 224 с.
16.
Робин Н. Создаем динамические веб. - сайты с помощью PHP, MySQL,
JavaScript, CSS и HTML5. - СПБ: Питер, 2016. - 688 с.
17.
Скляр Д. Изучаем PHP 7. Руководство по созданию интерактивных веб.
- сайтов. М.: Диалектика, 2017. - 464 с.
18.
Тихонов А.Ф., Тихонова Л.Н. Visual FoxPro 5.0. - М.: БИНОМ, 2014. -
464 с.
19.
Уильям с. Справочник администратора. Internet Information Services
(IIS) 7.0. - СПБ: Русская Редакция, ВХВ-Петербург, 2014. - 665 с.
20.
Ульман Л. PHP и MySQL. Cоздание интернет. - магазинов. - М.:
Вильямс, 2015. - 544 с.
21.
Филиппов В. Электронные хранилища информации и WEB. - технологии. - М.: Отдельное издание, 2017. - 80 с.
22.
Авторское право, свободные лицензии и GPL с нуля [Электронный ресурс]. - URL: https://geektimes.ru/post/156615/ (дата обращения: 15.11.2017).
23.
БЭМ – технологии Яндекса [Электронный ресурс]. - URL: https://tech.yandex.ru/bem/ (дата обращения: 29.11.2017).
24.
Вебмастерам – технологии Яндекса [Электронный ресурс]. - URL: https://tech.yandex.ru/hubs/webmasters/ (дата обращения: 23.11.2017).
25.
Инструменты разработчика Firefox [Электронный ресурс]. - URL: https://developer.mozilla.org/ru/docs/Tools (дата обращения: 29.11.2017)
26.
Лицензия для вашего open-source проекта [Электронный ресурс]. -
URL: https://habrahabr.ru/post/243091/ (дата обращения: 19.11.2017).
27.
Открытые (свободные) лицензии (open source): история и действие в условиях российского права после 01.10.2014 [Электронный ресурс]. - URL: http://www.klerk.ru/law/articles/403936/ (дата обращения: 11.11.2017).
28.
Перевод стандартов PSR-0, PSR-1, PSR-2, PSR-3, PSR-4 [Электронный ресурс]. - URL: https://svyatoslav.biz/misc/psr_translation/ (дата обращения:
26.11.2017).


73 29.
Помощь вебмастеру
[Электронный ресурс].
-
URL: https://yandex.ru/support/webmaster/index.html (дата обращения: 23.11.2017).
30.
Различные механизмы клиент-серверного взаимодействия в web- приложениях
[Электронный ресурс].
-
URL: https://www.ibm.com/developerworks/ru/library/wa-aj-ajaxcomm/
(дата обращения: 19.11.2017).
31.
Справочник
JavaScript
[Электронный ресурс].
-
URL: http://javascript.ru/manual (дата обращения: 23.11.2017).
32.
Справочник по
HTML
[Электронный ресурс].
-
URL: http://htmlbook.ru/HTML (дата обращения: 22.11.2017).
33.
Справчоник jQuery
[Электронный ресурс].
-
URL: https://gitcode.ru/manuals/jquery (дата обращения: 23.11.2017).
34.
Стандарты PSR [Электронный ресурс]. - URL: https://myrusakov.ru/php- psr-standards.html (дата обращения: 12.11.2017).
35.
CSS справочник [Электронный ресурс]. - URL: http://css.manual.ru/
(дата обращения: 22.11.2017).
36.
Google для веб-мастеров – поддержка, обучение, взаимодействие и использование Search Console – Google [Электронный ресурс]. - URL: https://www.google.ru/intl/ru/webmasters/#?modal_active=none (дата обращения:
26.11.2017).
37.
HTML 5 [Электронный ресурс]. - URL: http://htmlbook.ru/html5 (дата обращения: 22.11.2017).
38.
PHP Standards Recommendations [Электронный ресурс]. - URL: http://www.php-fig.org/psr/ (дата обращения: 25.10.2017).
39.
PHP: Справочник языка - Manual [Электронный ресурс]. - URL: http://php.net/manual/ru/langref.php (дата обращения: 23.11.2017).
40.
World Wide Web Consortium (W3C) Россия [Электронный ресурс]. -
URL: http://w3c.org.ru (дата обращения: 10.11.2017).

74
Приложение 1
«./index.php» – главный файл веб-приложения.
/* Сервер по умолчанию может не отображать ошибки выполнения php, следующие 2 директивы локально (при выполнении этого скрипта и кода подключенного этим скриптом) задают обратные настройки. При необходимости отображения ошибок следует их сделать действующими
(раскомментировать) - это может пригодится при отладке и тестировании веб- приложения. */ ini_set("display_errors",1); error_reporting(E_ALL); /* Какого уровня ошибки показывать */
/* Указываем создать сессию, если она ещё не создана (по ней идентифицируется браузер клиента) */ session_start();
/* Заголовок указывающий в какой кодировке работаем. Указана кодировка
UTF-8/ */ header('Content-Type: text/html; charset=utf-8');
/* Задаём часовой пояс, в котором мы работаем */ date_default_timezone_set('Asia/Yekaterinburg');
/* Подключается php-код из файла safemysql, он содержит класс safemysql для работы с базой данных. */ include_once('components/safemysql/safemysql.class.php');
/* Подключается php-код из файла functions, он содержит основные PHP функции системы. */

75 include_once('components/functions.php');
/* Подключается php-код из файла config, он содержит основные настройки системы. */ include_once('components/config.php');
/* Подключается php-код из файла lang, он содержит все языковые константы.
*/ include_once('components/lang.php');
/* Создаю объект $db с экземпляром класса safemysql (при создании класс подключается к БД, поэтому передаю параметры подключения: пользователь
БД, пароль, название базы, хост) */
$db
= new
SafeMySQL(['user'
=>
CNF_MYSQL_USER,
'pass'
=>
CNF_MYSQL_PASSWORD,
'db'
=>
CNF_MYSQL_DB,
'host'
=>
CNF_MYSQL_HOST]);
/* Определяется главная переменная в которой будут храниться все служебные данные */
/* Выгружаются данные о торговой базе из СУБД */
$isys_config = $db->getRow("SELECT * FROM `config`");
/* Подключается php-код из файла authorization, он производит авторизацию пользователя */ include_once('components/authorization.php');
/* Записываем get-параметры ЧПУ */
$isys_url = [0 => $_GET['path1'], 1 => $_GET['path2'], 2 => $_GET['path3']];


76
/* Запрашиваем данные о запрашиваемой странице из СУБД */
$isys_page = $_GET['path1'];
/* Если никакая страница не запрошена, то загружаем главную */ if($isys_url[0] == null) {
$isys_url[0] = 'main';
}
$isys_page = $db->getRow("SELECT * FROM `pages` WHERE `link`=?s AND
`rights`
LIKE
'%?p,%'
AND
`del`
IS
NULL
LIMIT
1",$isys_url[0],$isys_user['rights']);
/* Если такая страница не существует, то показываем ошибку 404 */ if($isys_page == false) {
$isys_page = '404';
$isys_page = $db->getRow("SELECT * FROM `pages` WHERE `link`=?s
AND
`rights`LIKE
'%?p,%'
AND
`del`
IS
NULL
LIMIT
1",$isys_page,$isys_user['rights']);
}
/* Загружаем файл с PHP-кодом данной страницы */ include_once('components/pages/'.$isys_page['file'].'.php');
/* Дополнительные данные для вывода в главный шаблон системы */ include_once('components/template_functions.php');
/* Выгружаем данные страницы в главный шаблон системы */ echo data2template('all',
[
'page_content' => $isys_page['content'],

77
'page_title' => $isys_page['title'],
'page_head' => $isys_page['head'],
'page_foot' => $isys_page['foot'],
'system_name' => $isys_config['system_name'],
'system_version' => $isys_config['system_version'],
'system_version_date'
=> time2date($isys_config['system_version_date'],8),
'org_name'
=>
$isys_config['org_name'],
'user_name'
=>
$isys_user['name'],
'user_post' => $isys_user['post'],
'page_add_taskCount' => $isys_page['add_taskCount'],
'page_add_orderCount' => $isys_page['add_orderCount']
]
);
?>
«./templates/all.html» - главный HTML шаблон веб-приложения.
1   2   3   4   5







Администрирование    
Сменить пароль    

79
Выход


>Торговая база

>
[org_name]-->


(
-[user_post]-->)


Продажи:
    Задачи:



  • Главная
  • Заказы
  • Клиенты
  • Поставщики
  • Товары
  • Задачи
  • Статистика




80
Система управления торговой базой v. от
>






81
/* Вставляем в шаблон данные по ключевым словам, заранее прописанными в шаблоне */
$template = str_replace('',$value,$template);
}
}
/* trim - очищает начало и конец переменной от лишних пробелов */ return trim($template);
}
/* ##################################### Преобразование unix_timestamp в понятный человеку формат */ function time2date($timestamp, $variant) { global $isys_lang;
$month = & $isys_lang['time2date']['month'];
$month2 = & $isys_lang['time2date']['month2'];
$week = & $isys_lang['time2date']['week']; switch($variant) {
//1 июля в 12:55 case 1:
$d=date("j",$timestamp);
$m=$month[date('n',$timestamp)];
$time=date("H:i",$timestamp); return $d.' '.$m.' в '.$time; break;
//1 июля 2014 case 2:
$d=date('j',$timestamp);
$m=$month[date('n',$timestamp)];
$y=date('Y',$timestamp);return $d.' '.$m.' '.$y; break;

82
//1 июля 2014 в 12:55 case 3:
$d=date('j',$timestamp);
$m=$month[date('n',$timestamp)];
$y=date('Y',$timestamp); $time=date('H:i',$timestamp); return $d.' '.$m.' '.$y.' в '.$time; break;
//1 июля case 4:
$d=date('j',$timestamp);
$m=$month[date('n',$timestamp)]; return $d.' '.$m; break;
//Пятница, 1 июля case 5:
$d=date('j',$timestamp);
$m=$month[date('n',$timestamp)];
$w=$week[date('N',$timestamp)]; return $w.', '.$d.' '.$m; break;
//Июль 2014 case 6:
$m=$month2[date('n',$timestamp)];
$y=date('Y',$timestamp); return $m.' '.$y; break;
//23:55 case 7: return date('H:i',$timestamp); break;
//01.02.2017 case 8: return date('d.m.Y',$timestamp); break;
//18 ноября 22:07

83 case 9:
$d=date('j',$timestamp);
$m=$month[date('n',$timestamp)];
$time=date('H:i',$timestamp); return $d.' '.$m.' '.$time; break;
//18 ноября 22:07, Пятница case 10:
$d=date('j',$timestamp);
$m=$month[date('n',$timestamp)];
$time=date('H:i',$timestamp); return
$d.' '.$m.' '.$time.',
'.$week[date('N',$timestamp)]; break;
//1 июля в 12:55 case 11:
$d=date('j',$timestamp);
$m=$month[date('n',$timestamp)];
$time=date('H:i',$timestamp); return $d.' '.$m.' в '.$time; break; default: return 'неизвестный формат времени';
}
}
/* ##################################### Логирование действий пользователей */ function user_log($action, $type, $info = null) { global $db; global $isys_user;
$db->query("INSERT INTO `logs` SET `time`=unix_timestamp(now()),
`user`=?i,`action`=?i, `type`=?i, `info`=?s",$isys_user['id'], $action, $type, $info);
}

84
/* ##################################### Определяем, является ли строка email-адресом */ function is_email($str) { return preg_match("/[a-z\d]\w*@[a-z\d]\w*\.[a-z]{2,4}/i",$str);
}
/* ##################################### Суммы прописью */ function num2str($num) {
$nul='ноль';
$ten=array( array('','один','два','три','четыре','пять','шесть','семь',
'восемь','девять'), array('','одна','две','три','четыре','пять','шесть','семь',
'восемь','девять'),
);
$a20=array('десять','одиннадцать','двенадцать','тринадцать','четырнадцат ь' ,'пятнадцать','шестнадцать','семнадцать','восемнадцать','девятнадцать');
$tens=array(2=>'двадцать','тридцать','сорок','пятьдесят','шестьдесят','сем ьдесят' ,'восемьдесят','девяносто');
$hundred=array('','сто','двести','триста','четыреста','пятьсот','шестьсот',
'семьсот','восемьсот','девятьсот');
$unit=array( // Units array('копейка' ,'копейки' ,'копеек', 1), array('рубль' ,'рубля' ,'рублей' ,0), array('тысяча' ,'тысячи' ,'тысяч' ,1), array('миллион' ,'миллиона','миллионов' ,0), array('миллиард','милиарда','миллиардов',0),
);
//

85 list($rub,$kop) = explode('.',sprintf("%015.2f", floatval($num)));
$out = array(); if (intval($rub)>0) { foreach(str_split($rub,3) as $uk=>$v) { // by 3 symbols if (!intval($v)) continue;
$uk = sizeof($unit)-$uk-1; // unit key
$gender = $unit[$uk][3]; list($i1,$i2,$i3) = array_map('intval',str_split($v,1));
// mega-logic
$out[] = $hundred[$i1]; # 1xx-9xx if ($i2>1) $out[]= $tens[$i2].' '.$ten[$gender][$i3]; # 20-99 else $out[]= $i2>0 ? $a20[$i3] : $ten[$gender][$i3]; # 10-19 | 1-
9
// units without rub & kop if
($uk>1)
$out[]= morph($v,$unit[$uk][0],$unit[$uk][1],$unit[$uk][2]);
} //foreach
} else $out[] = $nul;
$out[] = morph(intval($rub), $unit[1][0],$unit[1][1],$unit[1][2]); // rub
$out[] = $kop.' '.morph($kop,$unit[0][0],$unit[0][1],$unit[0][2]); // kop return trim(preg_replace('/ {2,}/', ' ', join(' ',$out)));
}
/* ##################################### Склонение словоформы */ function morph($n, $f1, $f2, $f5) {
$n = abs(intval($n)) % 100; if ($n>10 && $n<20) return $f5;
$n = $n % 10; if ($n>1 && $n<5) return $f2; if ($n==1) return $f1;

86 return $f5;
}
/* ##################################### Конвертер строки в ссылку */ function str2url($string) {
$string = mb_strtolower($string);
$pattern = array(
'а' => 'a', 'б' => 'b', 'в' => 'v',
'г' => 'g', 'д' => 'd', 'е' => 'e',
'ё' => 'e', 'ж' => 'zh', 'з' => 'z',
'и' => 'i', 'й' => 'y', 'к' => 'k',
'л' => 'l', 'м' => 'm', 'н' => 'n',
'о' => 'o', 'п' => 'p', 'р' => 'r',
'с' => 's', 'т' => 't', 'у' => 'u',
'ф' => 'f', 'х' => 'h', 'ц' => 'c',
'ч' => 'ch', 'ш' => 'sh', 'щ' => 'sch',
'ь' => null, 'ы' => 'y', 'ъ' => null,
'э' => 'e', 'ю' => 'yu', 'я' => 'ya',
'(' => null, ')' => null, '[' => null,
']' => null, '{' => null, '}' => null,
'/' => null, '\\'=> null, '|' => null
);
$string = strtr($string, $pattern);
$string = preg_replace('[^-a-z0-9_]+u', '-', $string);
$string = preg_replace('/(?:[^-a-z0-9_]|(?<=-)-+)/i', '', $string);
$string = trim($string, "-"); return $string;
}
?>
«./assets/base.css» - файл содержащий CSS правила.

87
@charset "utf-8";
.cf:before,.cf:after {content:" ";display:table;}.cf:after {clear:both;}.cf {*zoom:1;} html {font:normal normal 16px 'Open Sans',sans-serif;} body {background:#f0f0f0;}
.clear{clear:both;} a {transition:all linear 0.3s;color:#840000;} a:hover {color:#E42106 !important;} blockquote {font:italic normal 0.9rem 'Verdana',sans-serif;color:#333;}
.bold {font-weight:600;color:#222;}
.underline {text-decoration:underline;}
.hidden {display:none !important;} input.placeholder,textarea.placeholder,select.placeholder
{color:#808080
!important;}
::-webkit-input-placeholder{color:#808080;}::-moz-placeholder{color:#808080;}:- moz-placeholder{color:#808080;}:-ms-input-placeholder{color:#808080;} input[placeholder]{text-overflow:ellipsis;}input::-moz-placeholder{text- overflow:ellipsis;}input:-moz-placeholder{text-overflow:ellipsis;}input:-ms-input- placeholder {text-overflow:ellipsis;}
:focus::-webkit-input-placeholder{color:#969696}:focus::-moz- placeholder{color:#969696}:focus:-moz-placeholder{color:#969696}:focus:-ms- input-placeholder{color:#969696;} ul.defUl-bull li {list-style:disc outside;} ul.defUl-num li {list-style:decimal outside;} ul.defUl-square li {list-style:square outside;} ul.defUl-circle li {list-style:circle outside;} ul.defUl-bull,ul.defUl-num,ul.defUl-square,ul.defUl-circle {margin-bottom:10px;}

88 ul.defUl-bull li,ul.defUl-num li,ul.defUl-square li,ul.defUl-circle li {margin- left:18px;}
.defForm
{width:500px;box-sizing:border-box;border: solid
1px
#e6e6e6;padding:10px 20px 0;margin-bottom:10px;}
.defFormSave
{float:right;margin:
10px
0px
-15px
0;background:
#49CC3D;border: none;padding:
5px
20px;font-weight:
600;font-size:
0.95rem;transition: 0.2s;color: #fff;}
.defFormSave:hover {cursor:pointer;background: #39BA2D;}
.defInput {width:436px;border:solid 1px #f7f7f7;background-color:#f7f7f7;font- size: 0.95rem;padding: 3px 10px;margin-top:3px;}
.defInput:focus {border-color:#000;background-color:#fff;}
.defSelect {width:458px;border:solid 1px #f7f7f7;background-color:#f7f7f7;font- size: 0.95rem;padding: 3px 10px;margin-top:3px;}
.defSelect:focus {border-color:#000;background-color:#fff;}
.defTextarea {width:458px;border:solid 1px #000;font-size: 0.95rem;padding: 3px
10px;margin-top:3px;}
.defRadio
{font-size:
0.95rem;padding:
3px
10px;margin-top:3px;margin- right:2px;}
.defInputWrap {margin-bottom:15px;}
.defInputLabel {font-size:0.9rem;font-weight:600;margin-left:3px;}
.defButton {margin: 20px 15px 15px 0;background: #fff;border: solid 2px
#414aff;padding: 4px 20px;font-weight: 600;font-size:0.95rem;transition:0.2s;}
.defButton:hover {cursor:pointer;background:#414aff;color:#fff;}
.defTable {width:100%;box-sizing:border-box;}
.defTable caption {font-size:1.05rem;font-weight:600;margin:15px 0 10px
0;color:#111;text-align:left;}
.defTable td {padding:2px 10px;border:solid 1px #dadada;font-size:0.95rem;}

89
.defTable thead td {font-weight:600;border-bottom:solid 1px #b1b1b1;}
.defTable tbody tr:nth-child(2n) {background:#f8f8f8;}
.defTable tbody tr:hover {background:#ffe99b;}
.width-wrapper {width:1200px;margin:0 auto;} header
{height:84px;background-color:#fff;box-shadow:0 0
1px
1px
#e6e6e6;margin-top:15px;}
.header_top {height:44px;border-bottom:solid 1px #dad8d8;position:relative;}
.header_title {float:left;padding:0 15px 0;font-weight: 600;margin-top:4px;}
.header_title_is {font-size:0.85rem;}
.header_title_org {font-size:0.8rem;}
.header_user {float:left;margin: 12px 0 0 40px;font-size:0.8rem;}
.header_info {margin:11px 40px 0 40px;font-size:0.9rem;float:left;}
.header_menu
{background:#fff;margin:9px
20px
0 0;right:0;position:absolute;transition:all ease-out 120ms;}
.header_menu a {font-size:0.8rem;color:#7A0F04 !important;}
.header_pages {font-size:0.95rem;}
.header_pages a {color: #000 !important;}
.header_pages li.current a {color: #C51B00 !important;}
.header_pages li {display:inline-block;padding:0;margin:0;width:171px;}
.header_pages li div
{text-align:center;width:170px;box-sizing:border- box;padding:8px 0 9px;border-right:solid 1px #e6e4e4;}
.header_pages li div:hover {background:#f7f7f7;}
.header_pages li:last-child div {border-right:none;width:174px;} h1
{font-size:1.2rem;font-weight:normal;padding:0;margin:13px
0;text- align:center;text-shadow: 1px 1px #f6f6f6;}

90
.content {background:#fff;border-radius:2px;padding:20px;min-height:500px;box- shadow:0px 0px 1px 1px #ededed;}
.content .wrap-h1 {font-size:1.25rem;font-weight:normal;border-bottom:1px solid
#CACACA;color:#333;padding:0 0px 5px;margin:10px 0 0 0;}
.content h2 {font:normal normal 1.25rem 'Roboto Condensed';margin:15px 0 10px
0;color:#111;}
.content p {margin-bottom:9px;font-size:0.95rem;}
.content img {max-width:100%;}
.pgChpass-result {font-size:1rem;margin-top:20px;color:red;font-weight:600;}
.pgGoods_aside {float:right;width:295px;padding-top:10px;font-size: 0.95rem;}
.pgGoods_asideDelimiter {margin:15px 0;height: 1px;background: #f2f2f2;}
.pgGoods_asideMenu li {margin-bottom:10px;}
.pgGoods_asideMenu li a {background: #f3f3f3;padding: 1px 8px 2px;border- radius: 2px;}
.pgGoods_asideNewGoods li {margin-bottom:3px;font-size:0.85rem;}
.pgGoods_main
{float:left;width:800px;min-height:400px;padding- right:50px;border-right:solid 1px #dedede;}
.pgGoods_goodsTable {display:none;}
.pgGoods_groupsTable a {color:#000 !important;}
.pgGoods_groupsTable img,
.pgGoods_goodsTable img
{vertical- align:middle;margin:0 10px;}
.pgGoods_groupsTable tr td:nth-child(2), .pgGoods_goodsTable tr td:nth-child(5)
{width:80px;}
.pgGoods_goodsTable tr td:nth-child(3) {word-break:keep-all;}
.pgGoods_groupsTableNum {float: right;font-size: 0.9rem;color:666;}
.pgGoodsEdit_form {margin:0 auto 10px;}

91
.pgGroupEdit_form {margin:0 auto 10px;}
.pgBrands_table img, .pgGoods_goodsTable img {vertical-align:middle;margin:0 10px;}
.pgBrands_table tr td:nth-child(2) {width:80px;}
.pgBrand_form {float:right;width:500px;}
.pgBrand_info {float:left;width:620px;display:none;}
.pgBrand_delete {border-color:#ff4141;}
.pgBrand_delete:hover {background-color:#ff4141;}
.pgProviders_table img {vertical-align:middle;margin:0 10px;}
.pgProviders_table tr td:nth-child(6) {width:80px;}
.pgProvider_form {float:right;width:500px;}
.pgProvider_info {float:left;display:none;width:620px;}
.pgProvider_delete {border-color:#ff4141;}
.pgProvider_delete:hover {background-color:#ff4141;}
.pgProvider_add {float:right;margin-top:20px;color:#000;}
.pgClients_tableAll img {vertical-align:middle;margin:0 10px;}
.pgClients_tableAll tr td:nth-child(6) {width:115px;}
.pgClients_favorites {width:100%;}
.pgClients_favorites td {padding:3px 0;}
.pgClient_right {float:right;width:500px;}
.pgClient_left {float:left;width:620px;}
.pgClient_delete {border-color:#ff4141;}

92
.pgClient_delete:hover {background-color:#ff4141;}
.pgClients_aside {float:right;width:295px;padding-top:10px;font-size: 0.95rem;}
.pgClients_asideDelimiter {margin:15px 0;height: 1px;background: #f2f2f2;}
.pgClients_asideList {}
.pgClients_asideList li {}
.pgClients_asideList li a {background: #f3f3f3;padding: 1px 8px 2px;border- radius: 2px;}
.pgClients_main
{float:left;width:800px;min-height:400px;padding- right:50px;border-right:solid 1px #dedede;}
.pgClients_tableActive img {vertical-align:middle;margin:0 10px;}
.pgClients_tableActive tr td:nth-child(4) {width:115px;}
.pgClients_tableNew {width:100%;}
.pgClients_tableNew tr td:first-child {width:130px;}
.pgOrders_tableAll img {vertical-align:middle;margin:0 10px;}
.pgOrders_tableAll tr td:nth-child(1) {text-align:center;}
.pgOrders_tableAll tr td:nth-child(7) {width:80px;}
.pgOrders_aside {float:right;width:295px;padding-top:10px;font-size: 0.95rem;}
.pgOrders_asideDelimiter {margin:15px 0;height: 1px;background: #f2f2f2;}
.pgOrders_asideList {}
.pgOrders_asideList li {}
.pgOrders_asideList li a {background: #f3f3f3;padding: 1px 8px 2px;border- radius: 2px;}
.pgOrders_main
{float:left;width:800px;min-height:400px;padding- right:50px;border-right:solid 1px #dedede;}

93
.pgOrders_tableActive td {font-size:0.9rem;}
.pgOrders_tableActive img {vertical-align:middle;margin:0 10px;}
.pgOrders_tableActive tr td:nth-child(1) {text-align:center;}
.pgOrders_tableActive tr td:nth-child(7) {width:80px;}
.pgOrders_tableStat {width:100%;}
.pgOrders_tableStat tr td:first-child {width:130px;}
.pgOrders_tableStat td {border-bottom: solid 1px #ececec;padding: 2px 0px;}
.pgOrders_tableStat tr:last-child td {border:none;}
.pgOrder_right {float:right;width:350px;}
.pgOrder_addTime {float:right;}
.pgOrder_id {float:left;}
.pgOrder_delimiter {margin:8px 0;height: 1px;background: #f2f2f2;}
.pgOrder_marksForm {border:none;width:100%;padding:0;}
.pgOrder_marks {min-height:130px;background:#f9f9f9;margin-top:5px;}
.pgOrder_marks:focus {background:#fff;}
.pgOrder_left {float:left;width:790px;}
.pgOrder_table {margin: 0 0 40px 0;font-size:0.85rem;}
.pgOrder_table table {width:100%;}
.pgOrder_table td {padding: 8px 15px;border: solid 1px #dadada;}
.pgOrder_table td:first-child {width:150px;}
.pgOrder_table input[type="text"] {width:95%;padding: 2px 10px;margin-top:
3px;}
.pgOrder_table select {padding: 3px 10px;margin-top: 3px;}
.pgOrder_table input[type="submit"] {margin-top:-4px;margin-right:15px;}
.pgOrder_delete {border-color:#ff4141;}

94
.pgOrder_delete:hover {background-color:#ff4141;}
.pgLogs_aside {float:right;width:295px;padding-top:10px;font-size: 0.95rem;}
.pgLogs_asideDelimiter {margin:5px 0 10px;height: 1px;background: #f2f2f2;}
.pgLogs_asideMenu li {margin-bottom:10px;}
.pgLogs_asideMenu li a {background: #f3f3f3;padding: 1px 8px 2px;border- radius: 2px;}
.pgLogs_main
{float:left;width:800px;min-height:400px;padding- right:50px;border-right:solid 1px #dedede;}
.pgLogs_table {width:100%;}
.pgLogs_table thead td {font-weight:600;}
.pgLogs_table caption {font-size:1.05rem;font-weight:600;margin:15px 0 10px
0;color:#111;text-align:left;}
.pgLogs_table td {padding:2px 10px;border:solid 1px #dadada;font-size:0.95rem;}
.pgLogs_table tr td:nth-child(7) {width:80px;}
.pgLogs_table tr:nth-child(2n) {background: #f8f8f8;}
.pgLogs_table tbody tr:hover {background:#ffe99b;}
.pgGroupEdit_delete,
.pgGoodsEdit_delete
{border-color:#ff4141;margin-top:
10px;}
.pgGroupEdit_delete:hover,
.pgGoodsEdit_delete:hover
{background- color:#ff4141;}
.pgGoodsEdit_delete, .pgGoodsEdit_delete {border-color:#ff4141;}
.pgGoodsEdit_delete:hover,
.pgGoodsEdit_delete:hover
{background- color:#ff4141;}
.pgMain_aside {float:right;width:295px;font-size: 0.95rem;}
.pgMain_main
{float:left;width:800px;min-height:400px;padding- right:50px;border-right:solid 1px #dedede;}

95
.pgMain_valutesRate {margin-bottom:60px;}
.pgMain_valutesRate_now {text-align:center;margin:20px 0 0;}
.pgMain_valutesRate_chart {}
.pgMain_docs {padding-left:10px;line-height:1.6rem;margin-bottom:40px;}
.pgMain_stat {margin-left:10px;}
.pgMain_stat_block
{border:solid
1px
#ccc;padding:15px
10px
5px
10px;margin:25px 0 10px 0;font-size:0.9rem;}
.pgMain_stat_block p {font-size:0.9rem;margin-bottom:0;}
.pgMain_stat_title
{position: absolute;margin:-25px
0 5px
5px;background:#fff;display:inline-block;padding:0 8px;}
.pgMain_chat {}
.pgMain_chat_msgs {font-size:0.85rem;height: 300px;overflow-y: scroll;border: solid 1px #ccc;padding: 5px 10px;}
.pgMain_chat_msg {margin-bottom:10px;}
.pgMain_chat_form {}
.pgMain_chat_form input[type="text"] {font-size: 0.9rem;height: 29px;width:
500px;padding-left:10px;}
.pgReports_table {margin-top:50px;}
.pgReports_detailTable {display:none;width:100%;margin-bottom:40px;}
.pgReports_detailForm select {width:110px;}
.pgTasks_table {}
.pgTasks_table tr.active a {font-weight: 600;}
.pgTask_aside {float:right;width:375px;font-size: 0.95rem;}

96
.pgTask_aside p {margin-bottom:8px;padding-bottom:8px;border-bottom:solid 1px
#D6D6D6;}
.pgTask_main
{float:left;width:730px;min-height:400px;padding- right:35px;border-right:solid 1px #dedede;}
.pgTask_main h2 {border-bottom:solid 1px #ccc;padding-bottom:3px;margin- top:30px;}
.pgTask_main h2:first-child {margin-top:0;}
.pgTask_main h2:nth-of-type(3) {border-bottom:none;}
.pgTask_asideList {margin-left:10px;}
.pgTask_asideList li {margin-bottom:8px;}
.pgTask_delete {display:none;margin-left: 100px;}
.pgTask_chat {}
.pgTask_chat_msgs {font-size:0.85rem;height: 300px;overflow-y: scroll;border: solid 1px #ccc;padding: 5px 10px;}
.pgTask_chat_msg {margin-bottom:10px;}
.pgTask_chat_form {}
.pgTask_chat_form input[type="text"] {font-size: 0.9rem;height: 29px;width:
500px;padding-left:10px;}
.pgTask_aside .defSelect {width:350px;}
.pgTask_aside .defInput {width:330px;}
.pgTask_checkBox {margin:5px 0;}
.pgTask_checkBox {}
.pgTask_save {margin:20px 0;float:left;}
.pgTask_edit {display:none;margin:30px 0;color:#000;}
.pgTask_add {float:right;margin-top:20px;color:#000;}
.pgConfig_setWrap {float:left;vertical-align:top;}

97
.pgConfig_setWrap .defForm {margin-bottom:20px;padding-top:0;}
.pgConfig_usersWrap {float:right;width:645px;padding-top:0;vertical-align:top;}
.pgConfig_user {padding-bottom:25px;margin:35px 0;border-bottom:dashed 1px
#ccc;}
.pgConfig_user .defFormSave {font-size: 0.85rem;padding: 4px 10px;margin:10px
250px 0 0;}
.pgConfig_newUserWrap
{float:right;width:645px;padding-top:0;vertical- align:top;margin-top:10px;}
.pgConfig_newUserWrap
.defFormSave
{font-size:
0.85rem;padding:
4px
10px;margin:10px 250px 20px 0;}
.pgConfig_userTitle {margin-bottom:10px;}
.pgConfig_userTitle img {vertical-align:middle;}
.pgConfig_userInputs {margin-bottom:10px;font-size:0.9rem;}
.pgConfig_userInputs input
{width:130px;height:18px;border:solid
1px
#f7f7f7;background-color:#f7f7f7;padding:2px 1px 3px 5px;}
.pgConfig_userInputs select
{width:120px;height:26px;border:solid
1px
#f7f7f7;background-color:#f7f7f7;padding: 0px 3px 3px;}
.pgConfig_userInputs input:focus, .pgConfig_userInputs select:focus {border- color:#000;background-color:#fff;}
.pgConfig_viewLogs {float:right;color:#000;} footer {margin:10px 15px 30px;font-size:0.8rem;text-align:right;} footer a {color:#333 !important;}
.ck-editor__editable { min-height: 200px;
}
/* modal windows*/

98
@keyframes modalOpening {0% {opacity:0.5;box-shadow:0px 0px 4px rgba(19,
75, 171, 0.8);}100% {opacity:1;box-shadow:none;}} div#modalNotice
{display:none;position:fixed;z- index:900;bottom:15%;left:2%;padding:20px 10px;width:300px;color:#fff;border- radius:2px;font-size:1.1rem;font-weight:400;text-align:center;} div#modalNotice.red {background:rgba(120, 15, 15, 0.8);} div#modalNotice.blue {background:rgba(15, 79, 120, 0.8);box-shadow:0px 0px
2px 0px rgba(0, 21, 57, 0.4);}
1   2   3   4   5


«./components/pages/reports.php» - файл содержащий PHP-код раздела
статистики.
/* Получаем данные для построения графиков */
$chart = [];
$chart_sum = [];
$chart_count = [];
$q = $db->query("SELECT `add_time`,`goods_sum` FROM `orders` WHERE
`add_time`>?i AND `status`='2' AND `del` IS NULL ORDER BY `id`
DESC",strtotime('-100 days')); while($ls = $db->fetch($q)) {
$ls['add_time'] = strtotime(date('Y-m-d',$ls['add_time'])); if(!isset($chart[$ls['add_time']])) {
$chart[$ls['add_time']] = ['count' => 0, 'sum' => 0];
}
$chart[$ls['add_time']]['count']++;
$chart[$ls['add_time']]['sum'] += $ls['goods_sum'];
}

99 foreach($chart as $key => $val) {
$key = time2date($key,2);
$val['sum'] = round($val['sum']);
$chart_sum[] = "['{$key}', {$val['sum']}]";
$chart_count[] = "['{$key}', {$val['count']}]";
}
$chart_sum = implode(',',array_reverse($chart_sum));
$chart_count = implode(',',array_reverse($chart_count));
/* Составление таблиц */
$table_all = ['count' => 0, 'sum' => 0, 'sum_middle' => 0, 'cancel' => 0, 'user' => [],
'client' => 0];
$tables = [
'1month' => ['count' => 0, 'sum' => 0, 'sum_middle' => 0, 'cancel' => 0, 'user'
=> [], 'client' => 0, 'date' => null],
'2month' => ['count' => 0, 'sum' => 0, 'sum_middle' => 0, 'cancel' => 0, 'user'
=> [], 'client' => 0, 'date' => null],
'3month' => ['count' => 0, 'sum' => 0, 'sum_middle' => 0, 'cancel' => 0, 'user'
=> [], 'client' => 0, 'date' => null]
];
$q = $db->query("SELECT `add_time`,`goods_sum`,`user`,`status` FROM
`orders` WHERE `add_time`>=?i AND (`status`='2' OR `status`='3') AND `del` IS
NULL ORDER BY `id`",strtotime('-2 month',strtotime(date('Y-m-01',time()))));
$table_month = null; while($ls = $db->fetch($q)) {
$add_time_month = strtotime(date('Y-m-01',$ls['add_time']));

100 switch($add_time_month) { case strtotime('-1 month',strtotime(date('Y-m-01',time()))):
$table_month = &$tables['2month']; break; case strtotime('-2 month',strtotime(date('Y-m-01',time()))):
$table_month = &$tables['3month']; break; default: $table_month = &$tables['1month'];
} if(!isset($table_month['date'])) {
$table_month['date'] = strtotime(date('Y-m-01',$ls['add_time']));
} if($ls['status'] == 3) { $table_month['cancel']++; continue;}
$table_month['count']++;
$table_month['sum'] += $ls['goods_sum']; if(isset($table_month['user'][$ls['user']])) {
$table_month['user'][$ls['user']]++;
} else { $table_month['user'][$ls['user']] = 1; }
} foreach($tables as $month_name => &$month) {
$month['sum_middle']
=
($month['sum']
==
0
?
0
: round($month['sum']/$month['count']));
$month['client'] = $db->getOne("SELECT COUNT(`id`) FROM `clients`
WHERE `add_time`>=?i AND `add_time`$month['date'], strtotime('+1 month',$month['date']));
$table_all['count'] += $month['count'];

101
$table_all['sum'] += $month['sum'];
$table_all['sum_middle'] += $month['sum_middle'];
$table_all['cancel'] += $month['cancel'];
$table_all['client'] = $db->getOne("SELECT COUNT(`id`) FROM `clients`
WHERE `add_time`>=?i AND `add_time`<=?i AND `del` IS NULL", strtotime('-2 month',strtotime(date('Y-m-01',time()))), time()); foreach($month['user'] as $user_id => $user_count) { if(!isset($table_all['user'][$user_id])) { $table_all['user'][$user_id] =
$user_count; } else { $table_all['user'][$user_id] += $user_count; }
}
}
$table_all['sum_middle'] = round($table_all['sum']/$table_all['count']);
$full_table = '
Продажи '.$table_all['count'].' '.$tables['1month'
]['count'].' '.$tables['2month']['count'].' '.$tables['3month']['count
'].'
'; foreach($table_all['user'] as $user_id => $user_count) {
$user_name = $db->getOne("SELECT `name` FROM `users` WHERE
`id`=?i LIMIT 1",$user_id);
$full_table
.=
'  
 
'.$user_name.' '.$user_count.' '.(isset($tables['1month']['user'][$
user_id])
?
$tables['1month']['user'][$user_id]
:
0).' '.(isset($tables['2month']['user'][$user_id])
?
$tables['2month']['user'][$user_id]
:
0).' '.(isset($tables['3month']['user'][$user_id])
?
$tables['3month']['user'][$user_id] : 0).' ';
}