Вы сказали:
создание chart line график по дням горизонтальный дни вертикальный количество
Когда пользователь не выбран тогда суммарно когда пользователь ID выбран тогда по пользователю
Новые сделки цвет #79c4f7 графика
Не приобретен цвет #ff0000 графика
Приобретен цвет orange графика
deal_create если нет даты не указаны то выводить график за послденюю неделю
Новые сделки deal_stage.status_deal == 0 AND deal_stage.account_id_create == ID - если выбрано
Не приобретен status_deal == 100
Приобретен status_deal == 150
пример структуры BD sqlite 3 php без PDO процедурно
CREATE TABLE [account_user](
[id] INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
[em_name] VARCHAR,
[em_tel] VARCHAR,
[em_email] VARCHAR,
[em_job] VARCHAR,
[em_pass] VARCHAR,
[hash] VARCHAR,
[em_access] INT DEFAULT 1,
[new_day] DATETIME,
[text_mailer] VARCHAR,
[permission_security] BOOL DEFAULT 0);
CREATE TABLE [deal_stage](
[id] INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
[status_deal] INT,
[deal_create] DATETIME,
[kp_id] INT,
[order_id] INT,
[users_order_ids] VARCHAR NOT NULL,
[account_id_create] INT,
[deal_finish] DATETIME,
[account_id_finish] INT,
[set_finish] INT,
[set_start] INT);
rowid id status_deal deal_create kp_id order_id users_order_ids account_id_create deal_finish account_id_finish set_finish set_start
2614 2614 100 2025-12-18 15:35:01.000 37741 1031 ["40"] 40
2613 2613 150 2025-12-18 15:26:03.000 31109 545 ["40"] 40 2025-12-18 15:26:03.000 40
2612 2612 11 2025-12-18 15:25:54.000 31109 545 ["40"] 40 2025-12-18 15:26:03.000 40
2611 2611 7 2025-12-18 15:20:00.000 38056 1043 ["40"] 40
2610 2610 0 2025-12-18 13:45:38.000 38800 1099 ["40"] 40
2609 2609 100 2025-12-18 13:43:27.000 38800 1099 ["40"] 40 2025-12-18 13:45:38.000 40
2608 2608 0 2025-12-18 12:19:17.000 38800 1099 [38] 38 2025-12-18 13:43:27.000 40
2607 2607 100 2025-12-18 12:14:36.000 38755 1097 [2] 38
2606 2606 100 2025-12-18 12:13:38.000 38758 1098 [2] 38
2605 2605 0 2025-12-18 10:50:32.000 37756 1035 ["40"] 40
2604 2604 100 2025-12-18 10:50:31.000 37756 1035 ["40"] 40 2025-12-18 10:50:32.000 40
2603 2603 3 2025-12-18 10:37:38.000 38722 1096 ["40"] 40
2602 2602 0 2025-12-18 07:14:56.000 38758 1098 [2] 2 2025-12-18 12:13:38.000 38
2601 2601 0 2025-12-18 06:48:27.000 38755 1097 [2] 2 2025-12-18 12:14:36.000 38
2600 2600 100 2025-12-17 16:35:16.000 35743 873 ["40"] 44
2599 2599 3 2025-12-17 16:07:17.000 38719 1095 ["40"] 40
2598 2598 2 2025-12-17 16:02:01.000 38719 1095 ["40"] 40 2025-12-17 16:07:17.000 40
2597 2597 8 2025-12-17 16:01:06.000 37696 1028 ["40"] 40
2596 2596 3 2025-12-17 15:58:53.000 38521 1083 ["34"] 38
2595 2595 0 2025-12-17 15:55:01.000 38722 1096 [2] 2 2025-12-18 10:37:38.000 40
CREATE TABLE [orders](
[id] INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
[kp_id] INT,
[status_deal] INT DEFAULT 0,
[deal_update] DATETIME,
[account_id_create] INT,
[account_id_update] INT,
[users_order_ids] VARCHAR,
[organization_id] INT DEFAULT NULL,
[date_up_notis] DATETIME,
[type_payment] INT DEFAULT 1,
[account_id_invoice] INT,
[payment_step] INT DEFAULT 0,
[invoice_date] DATETIME,
[kp_num_out] VARCHAR,
[sum_order] INT DEFAULT 0,
[text_sensors_re] VARCHAR,
[text_sensors_bill_kp] VARCHAR,
[text_payment_step] VARCHAR,
[bill_num] VARCHAR,
[bill_amount] INT DEFAULT 0,
[delivery_days] INT,
[discount_percentage] INT,
[cost_markup] INT,
[additions_options] VARCHAR);
rowid id kp_id status_deal deal_update account_id_create account_id_update users_order_ids organization_id date_up_notis type_payment account_id_invoice payment_step invoice_date kp_num_out sum_order text_sensors_re text_sensors_bill_kp text_payment_step bill_num bill_amount delivery_days discount_percentage cost_markup additions_options
1099 1099 38800 0 2025-12-18 13:49:27.000 38 40 ["40"] 1 0 0 0
1098 1098 38758 100 2025-12-18 12:13:38.000 2 38 [2] 1 38 7 2025-12-18 12:14:00.000 0 работаем по сделке 38722 0 0 0 0 {"delivery_add":0,"price_old":0}
1097 1097 38755 100 2025-12-18 12:14:36.000 2 38 [2] 1 38 7 2025-12-18 12:14:49.000 0 работаем по сделке 38722 0 0 0 0 {"delivery_add":0,"price_old":0}
1096 1096 38722 3 2025-12-18 12:12:35.000 2 38 ["40"] 1 44 0 2025-12-18 11:47:55.000 1121 36424080 0 45 0 0 {"delivery_add":0,"price_old":0}
1095 1095 38719 3 2025-12-17 16:33:05.000 38 44 ["40"] 1 44 0 2025-12-17 16:38:04.000 1120 10053960 0 45 0 0 {"delivery_add":0,"price_old":0}
1094 1094 38700 3 2025-12-18 13:02:15.000 38 34 ["34"] 2025-12-22 00:00:00.000 1 34 0 2025-12-17 15:35:46.000 1119 36209280 0 0 0 0 {"delivery_add":0,"price_old":0}
1093 1093 38698 3 2025-12-17 13:43:20.000 38 40 ["40"] 1 44 0 2025-12-17 13:52:23.000 0 484 910560 5 0 0 {"delivery_add":0,"price_old":0}
1092 1092 38693 3 2025-12-17 12:27:58.000 38 44 ["40"] 1 44 0 2025-12-17 12:27:25.000 1118 6829560 0 5 0 0 {"delivery_add":0,"price_old":0}
пример шаблона который использовать
<?php
$year = date('Y');
$start = $_GET['startDate'] ?? '';//date('Y-m-01');
$end = $_GET['endDate'] ?? '';//date('Y-m-d');
$user = $_GET['byaccount_set'] ?? ' ';
if ($_SERVER['REQUEST_METHOD'] === 'POST' && ($_POST['action'] ?? '') === 'chartUser') {
$start = $_POST['startDate'] ?? '';//date('Y-m-01');
$end = $_POST['endDate'] ?? '';//date('Y-m-d');
$user = $_POST['byaccount_set'] ?? ' ';
$valid = '/^\d{4}-\d{2}-\d{2}$/';
if (!preg_match($valid, $start)) $start = '';//date('Y-m-01');
if (!preg_match($valid, $end)) $end = '';//date('Y-m-d');
$userCond = $SetDateManual = "";
}
function NumToPrice($num){
$amountFloat = $num / 100; // 123.45
return number_format($amountFloat, 2, '.', ' '); // "123.45"
}
?>
<div class="container mt-4">
<div class="card shadow-sm mb-4">
<div class="card-header bg-white">
<h5>Фильтр </h5>
</div>
<div class="card-body">
<form id="filterForm" class="row g-3">
<div class="col-md-3">
<label class="form-label">Дата от:</label>
<input type="date" name="startDate" class="form-control" value="<?= $start ?>">
</div>
<div class="col-md-3">
<label class="form-label">Дата до:</label>
<input type="date" name="endDate" class="form-control" value="<?= $end ?>">
</div>
<div class="col-md-3">
<label class="form-label">Сотрудник:</label>
<!-- <select name="byaccount_set" class="form-select">
<option value="">Все</option>
<option value="34" < ?= $user=="34"?"selected":"" ?>>ID 34</option>
<option value="35" < ?= $user=="35"?"selected":"" ?>>ID 35</option>
<option value="40" < ?= $user=="40"?"selected":"" ?>>ID 40</option>
<option value="38" < ?= $user=="38"?"selected":"" ?>>ID 38</option>
</select> -->
<select class="form-control rounded form-select byaccount_set" name="byaccount_set" id="byaccount_set" data-placeholder="Добавить..">
<option value=" "> Все</option>
<?
echo $profile_multiple;
?>
</select>
</div>
<div class="col-md-3 d-flex align-items-end">
<button class="btn btn-primary w-100">Применить</button>
</div>
</form>
</div>
</div>
<div class="card shadow-sm mb-4">
<div class="card-header bg-white"><h5>KPI сотрудников</h5></div>
<div class="card-body">
<canvas id="chartUsers"></canvas>
</div>
</div>
</div>
<!-- Подключение JavaScript -->
<script src="../dashboard/assets/extensions/jquery/jquery.min.js?asd=<?time()?>"></script>
<script src="js/popper.min.js?agsd=<?time()?>"></script>
<script src="/js/bootstrap.bundle.min.js" ></script>
<!-- <script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
<script src="https://cdn.jsdelivr.net@^2.2.0/dist/chartjs-plugin-datalabels.min.js"></script> -->
<!-- <link rel="stylesheet" href="css/select2.min.css" />
<link rel="stylesheet" href="css/select2-bootstrap-5-theme.min.css" /> -->
<script src="js/select2.min.js"></script>
<script src="js/vis-timeline-graph2d.min.js"></script>
<script src="js/Sortable.min.js"></script>
<script src="js/chart.js"></script>
<script src="js/chartjs-plugin-datalabels.js"></script>
<script src="https://cdn.jsdelivr.net/npm/xlsx@0.18.5/dist/xlsx.full.min.js"></script>
<!-- <script src="js/tinymce/tinymce.min.js" referrerpolicy="origin"></script> -->
<script src="/js/main.js"></script>
<script>
function formatPrice(num) {
if (!num) return '0.00';
return (num / 100).toLocaleString('ru-RU', {
minimumFractionDigits: 2,
maximumFractionDigits: 2
});
}
function formatSUM(num) {
if (!num) return '0';
return (num / 100);
}
const now = new Date();
const timestamp = now.toLocaleDateString('ru-RU').replace(/\./g, '-') + '_' + now.toLocaleTimeString('ru-RU', { hour: '2-digit', minute: '2-digit' }).replace(/:/g, '-');
//const timestamp = new Date().toISOString().replace(/T/, '_').replace(/\..+/, '').replace(/:/g, '-');
// Результат: 2025-12-18_08-52-15
</script>
если что то не хватает или не понятно напиши что нужно вопросы если есть