forked from mirzaev/site-tordv-calculator
Панель настроек, асинхронные запросы, калькулятор лазерной резки
This commit is contained in:
@@ -5,6 +5,7 @@ declare(strict_types=1);
|
||||
namespace mirzaev\calculator\controllers;
|
||||
|
||||
use mirzaev\calculator\controllers\core;
|
||||
use mirzaev\calculator\models\calculators_model as calculators;
|
||||
|
||||
use Twig\Loader\FilesystemLoader;
|
||||
use Twig\Environment as view;
|
||||
@@ -119,4 +120,71 @@ final class calculator_controller extends core
|
||||
// Генерация представления
|
||||
return $this->view->render(DIRECTORY_SEPARATOR . 'calculators' . DIRECTORY_SEPARATOR . 'modules' . DIRECTORY_SEPARATOR . 'calculators' . DIRECTORY_SEPARATOR . 'laser.html', $vars);
|
||||
}
|
||||
|
||||
/**
|
||||
* Рассчёт
|
||||
*
|
||||
* Генерирует ответ в виде ['expenses' => 0, 'income' => 0, 'profit' => 0]
|
||||
*
|
||||
* @param array $vars Параметры
|
||||
*
|
||||
* @todo
|
||||
* 1. Отправлять данные в зависимости от разрешения (обычным пользователям только expenses)
|
||||
*/
|
||||
public function calculate(array $vars = []): ?string
|
||||
{
|
||||
// Инициализация журнала ошибок
|
||||
$vars['errors'] = ['calculators' => []];
|
||||
|
||||
// Инициализация калькуляторов из тела запроса (подразумевается, что там массивы с параметрами)
|
||||
$calculators = json_decode(file_get_contents('php://input'), true);
|
||||
|
||||
// Инициализация переменных для буфера вывода
|
||||
$machines = $managers = $engineers = $operators = 0;
|
||||
|
||||
foreach ($calculators as $i => $calculator) {
|
||||
// Перебор калькуляторов
|
||||
|
||||
foreach (['type'] as $parameter) {
|
||||
// Перебор мета-параметров
|
||||
|
||||
// Инициализация общего параметра
|
||||
extract([$parameter => $calculator[$parameter] ?? null]);
|
||||
|
||||
// Инициализация параметра для обработчика калькулятора
|
||||
unset($calculator[$parameter]);
|
||||
}
|
||||
|
||||
// Инициализация номера калькулятора в его категории
|
||||
$number = count($vars['errors']['calculators'][$type] ?? []);
|
||||
|
||||
// Инициализация журнала ошибок для калькулятора
|
||||
$calculator['errors'] = [];
|
||||
|
||||
// Инициализация журнала ошибок для буфера вывода
|
||||
$vars['errors']['calculators'][$type][$number] = &$calculator['errors'];
|
||||
|
||||
// Инициализация буфера параметров
|
||||
$parameters = [];
|
||||
|
||||
// Инициализация параметра типа покупателя (подразумевается, что если не "entity", то "individual")
|
||||
$parameters['company'] = $calculator['buyer'] === 'entity';
|
||||
unset($calculator['buyer']);
|
||||
|
||||
// Перенос остальных параметров в буфер параметров
|
||||
$parameters += $calculator;
|
||||
|
||||
// var_dump($parameters);
|
||||
|
||||
// Расчёт
|
||||
[$machines, $managers, $engineers, $operators] = calculators::$type(...$parameters);
|
||||
}
|
||||
|
||||
return json_encode([
|
||||
'machines' => $machines,
|
||||
'managers' => $managers,
|
||||
'engineers' => $engineers,
|
||||
'operators' => $operators
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user