Загрузка данных
<?php
require_once 'config/database.php';
if(!isset($_SESSION['user_id'])) {
header('Location: login.php');
exit;
}
$errors = [];
$success = '';
$stmt = $pdo->query("SELECT * FROM sale_statuses ORDER BY name");
$statuses = $stmt->fetchAll();
$stmt = $pdo->query("SELECT * FROM positions ORDER BY name");
$positions = $stmt->fetchAll();
if($_SERVER['REQUEST_METHOD'] == 'POST') {
$sale_number = trim($_POST['sale_number']);
$position_id = $_POST['position_id'];
$amount = $_POST['amount'];
$sale_date = $_POST['sale_date'];
$status_id = $_POST['status_id'] ?? null;
$custom_status = trim($_POST['custom_status'] ?? '');
$is_custom = isset($_POST['is_custom']);
if(empty($sale_number)) {
$errors['sale_number'] = 'Введите номер продажи';
} else {
$stmt = $pdo->prepare("SELECT id FROM sales WHERE sale_number = ?");
$stmt->execute([$sale_number]);
if($stmt->fetch()) {
$errors['sale_number'] = 'Номер продажи уже существует';
}
}
if(empty($position_id)) {
$errors['position_id'] = 'Выберите должность';
}
if(empty($amount) || $amount <= 0) {
$errors['amount'] = 'Введите корректную сумму';
}
if(empty($sale_date)) {
$errors['sale_date'] = 'Выберите дату';
}
if($is_custom) {
if(empty($custom_status)) {
$errors['custom_status'] = 'Введите статус';
}
$status_id = null;
} else {
if(empty($status_id)) {
$errors['status_id'] = 'Выберите статус';
}
$custom_status = null;
}
if(empty($errors)) {
$stmt = $pdo->prepare("INSERT INTO sales (sale_number, user_id, amount, sale_date, status_id, custom_status) VALUES (?, ?, ?, ?, ?, ?)");
$stmt->execute([$sale_number, $_SESSION['user_id'], $amount, $sale_date, $status_id, $custom_status]);
$success = 'Продажа успешно добавлена';
$_POST = [];
}
}
$stmt = $pdo->prepare("
SELECT s.*, ss.name as status_name, p.name as position_name, u.full_name
FROM sales s
LEFT JOIN sale_statuses ss ON s.status_id = ss.id
LEFT JOIN users u ON s.user_id = u.id
LEFT JOIN positions p ON u.position_id = p.id
WHERE s.user_id = ?
ORDER BY s.created_at DESC
");
$stmt->execute([$_SESSION['user_id']]);
$sales = $stmt->fetchAll();
include 'includes/header.php';
?>
<h2>Мои продажи</h2>
<?php if($success): ?>
<div class="success"><?= $success ?></div>
<?php endif; ?>
<div class="form-container">
<h3>Добавить новую продажу</h3>
<form method="POST">
<div class="form-group">
<label>Номер продажи *</label>
<input type="text" name="sale_number" value="<?= $_POST['sale_number'] ?? '' ?>">
<?php if(isset($errors['sale_number'])): ?>
<div class="error"><?= $errors['sale_number'] ?></div>
<?php endif; ?>
</div>
<div class="form-group">
<label>Должность *</label>
<select name="position_id">
<option value="">Выберите должность</option>
<?php foreach($positions as $position): ?>
<option value="<?= $position['id'] ?>" <?= (isset($_POST['position_id']) && $_POST['position_id'] == $position['id']) ? 'selected' : '' ?>>
<?= htmlspecialchars($position['name']) ?>
</option>
<?php endforeach; ?>
</select>
<?php if(isset($errors['position_id'])): ?>
<div class="error"><?= $errors['position_id'] ?></div>
<?php endif; ?>
</div>
<div class="form-group">
<label>Сумма *</label>
<input type="number" step="0.01" name="amount" value="<?= $_POST['amount'] ?? '' ?>">
<?php if(isset($errors['amount'])): ?>
<div class="error"><?= $errors['amount'] ?></div>
<?php endif; ?>
</div>
<div class="form-group">
<label>Дата *</label>
<input type="date" name="sale_date" value="<?= $_POST['sale_date'] ?? '' ?>">
<?php if(isset($errors['sale_date'])): ?>
<div class="error"><?= $errors['sale_date'] ?></div>
<?php endif; ?>
</div>
<div class="form-group">
<label>Статус продажи *</label>
<div class="checkbox-group">
<?php foreach($statuses as $status): ?>
<label>
<input type="radio" name="status_id" value="<?= $status['id'] ?>"
<?= (isset($_POST['status_id']) && $_POST['status_id'] == $status['id']) ? 'checked' : '' ?>
onclick="document.getElementById('custom_status_field').style.display='none'">
<?= htmlspecialchars($status['name']) ?>
</label>
<?php endforeach; ?>
<label>
<input type="checkbox" name="is_custom" value="1"
<?= isset($_POST['is_custom']) ? 'checked' : '' ?>
onclick="document.getElementById('custom_status_field').style.display=this.checked?'block':'none'; if(this.checked) document.querySelectorAll('input[name=status_id]').forEach(r => r.checked=false);">
Иной статус
</label>
</div>
<?php if(isset($errors['status_id'])): ?>
<div class="error"><?= $errors['status_id'] ?></div>
<?php endif; ?>
</div>
<div class="form-group" id="custom_status_field" style="display: <?= isset($_POST['is_custom']) ? 'block' : 'none' ?>">
<label>Описание статуса *</label>
<textarea name="custom_status" rows="3"><?= $_POST['custom_status'] ?? '' ?></textarea>
<?php if(isset($errors['custom_status'])): ?>
<div class="error"><?= $errors['custom_status'] ?></div>
<?php endif; ?>
</div>
<button type="submit" class="btn">Добавить продажу</button>
</form>
</div>
<h3 style="margin-top: 40px;">История продаж</h3>
<?php if(count($sales) > 0): ?>
<table>
<thead>
<tr>
<th>Номер</th>
<th>Должность</th>
<th>Имя</th>
<th>Сумма</th>
<th>Дата</th>
<th>Статус</th>
</tr>
</thead>
<tbody>
<?php foreach($sales as $sale): ?>
<tr>
<td><?= htmlspecialchars($sale['sale_number']) ?></td>
<td><?= htmlspecialchars($sale['position_name']) ?></td>
<td><?= htmlspecialchars($sale['full_name']) ?></td>
<td><?= number_format($sale['amount'], 2, '.', ' ') ?> ₽</td>
<td><?= date('d.m.Y', strtotime($sale['sale_date'])) ?></td>
<td><?= $sale['custom_status'] ? htmlspecialchars($sale['custom_status']) : htmlspecialchars($sale['status_name']) ?></td>
</tr>
<?php endforeach; ?>
</tbody>
</table>
<?php else: ?>
<p>Продажи отсутствуют</p>
<?php endif; ?>
<?php include 'includes/footer.php'; ?>