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