Панель настроек, асинхронные запросы, калькулятор лазерной резки

This commit is contained in:
Arsen Mirzaev Tatyano-Muradovich
2021-12-16 09:09:08 +10:00
parent fdd6e010ec
commit 503e25647c
29 changed files with 1787 additions and 232 deletions

View File

@@ -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
]);
}
}