Лазерная резка готова

This commit is contained in:
Arsen Mirzaev Tatyano-Muradovich
2022-02-01 18:37:46 +10:00
parent 503e25647c
commit 4c6331b5da
50 changed files with 3821 additions and 422 deletions

View File

@@ -6,6 +6,8 @@ namespace mirzaev\calculator\controllers;
use mirzaev\calculator\controllers\core;
use mirzaev\calculator\models\calculators_model as calculators;
use mirzaev\calculator\models\settings_model as settings;
use mirzaev\calculator\models\metals_model as metals;
use Twig\Loader\FilesystemLoader;
use Twig\Environment as view;
@@ -79,7 +81,7 @@ final class calculator_controller extends core
public function menu(array $vars = []): ?string
{
// Генерация представления
return $this->view->render(DIRECTORY_SEPARATOR . 'calculators' . DIRECTORY_SEPARATOR . 'modules' . DIRECTORY_SEPARATOR . 'calculators' . DIRECTORY_SEPARATOR . 'menu.html', $vars);
return $this->view->render(DIRECTORY_SEPARATOR . 'calculators' . DIRECTORY_SEPARATOR . 'menu.html', $vars);
}
/**
@@ -95,6 +97,30 @@ final class calculator_controller extends core
return $this->view->render(DIRECTORY_SEPARATOR . 'calculators' . DIRECTORY_SEPARATOR . 'modules' . DIRECTORY_SEPARATOR . 'result.html', $vars);
}
/**
* Модуль: "марка"
*
* HTML-код со списком марок металла
*
* @param array $vars Параметры
*
* @todo 1. Если металл свой, то ничего не генерировать
*/
public function mark(array $vars = []): ?string
{
// Инициализация журнала ошибок
$vars['errors'] = ['calculators' => []];
// Инициализация списка марок
$vars['marks'] = metals::marks(empty($vars['type']) ? settings::read("default_type") : $vars['type'], $vars['errors'], $vars['errors']['calculators']);
// Инициализация значения по умолчанию
if (empty($vars['marks'])) $vars['marks'] = ['Не найдено'];
// Генерация представления
return $this->view->render(DIRECTORY_SEPARATOR . 'calculators' . DIRECTORY_SEPARATOR . 'elements' . DIRECTORY_SEPARATOR. 'metals' . DIRECTORY_SEPARATOR . 'mark.html', $vars);
}
/**
* Модуль: "разделитель"
*
@@ -114,11 +140,30 @@ final class calculator_controller extends core
* HTML-код с калькулятором лазерной резки
*
* @param array $vars Параметры
*
* @todo 1. Заголовок калькулятора должен находиться внутри элемента калькулятора
* 2. Ограничение значений полей в зависимости от выбранной марки
*/
public function laser(array $vars = []): ?string
{
// Инициализация журнала ошибок
$vars['errors'] = ['calculators' => []];
// Инициализация данных калькулятора
$vars['calculators'] = ['laser' => [
'company' => settings::read('default_buyer', $vars['errors']['calculators']),
'complexity' => settings::read('default_complexity', $vars['errors']['calculators']),
'width' => (int) round((float) settings::read('default_width', $vars['errors']['calculators'])),
'height' => (int) round((float) settings::read('default_height', $vars['errors']['calculators'])),
'length' => (int) round((float) settings::read('default_length', $vars['errors']['calculators'])),
'amount' => (int) round((float) settings::read('default_amount', $vars['errors']['calculators'])),
'type' => settings::read('default_type', $vars['errors']['calculators']),
'holes' => (int) round((float) settings::read('default_holes', $vars['errors']['calculators'])),
'diameter' => (float) settings::read('default_diameter', $vars['errors']['calculators'])
]];
// Генерация представления
return $this->view->render(DIRECTORY_SEPARATOR . 'calculators' . DIRECTORY_SEPARATOR . 'modules' . DIRECTORY_SEPARATOR . 'calculators' . DIRECTORY_SEPARATOR . 'laser.html', $vars);
return $this->view->render(DIRECTORY_SEPARATOR . 'calculators' . DIRECTORY_SEPARATOR . 'laser.html', $vars);
}
/**
@@ -130,6 +175,10 @@ final class calculator_controller extends core
*
* @todo
* 1. Отправлять данные в зависимости от разрешения (обычным пользователям только expenses)
* 2. Переписать журнал ошибок и написать вывод ошибок куда-нибудь
* 3. Вывод ошибок в представления
* 4. Проверка на то, что существуют поставки для характеристик вписываемых в калькулятор (в режиме прямой трансляции)
* 5. Убрать передачу цены работы (оставить только время работы в часах и цену за работу в час)
*/
public function calculate(array $vars = []): ?string
{
@@ -145,11 +194,11 @@ final class calculator_controller extends core
foreach ($calculators as $i => $calculator) {
// Перебор калькуляторов
foreach (['type'] as $parameter) {
foreach (['calculator'] as &$parameter) {
// Перебор мета-параметров
// Инициализация общего параметра
extract([$parameter => $calculator[$parameter] ?? null]);
$type = $calculator[$parameter];
// Инициализация параметра для обработчика калькулятора
unset($calculator[$parameter]);
@@ -174,17 +223,18 @@ final class calculator_controller extends core
// Перенос остальных параметров в буфер параметров
$parameters += $calculator;
// var_dump($parameters);
// Расчёт
[$machines, $managers, $engineers, $operators] = calculators::$type(...$parameters);
[$machines, $managers, $engineers, $operators, $handymans, $other] = calculators::$type(...$parameters);
}
return json_encode([
'machines' => $machines,
'managers' => $managers,
'engineers' => $engineers,
'operators' => $operators
'operators' => $operators,
'handymans' => $handymans,
'other' => $other,
'errors' => $calculator['errors']
]);
}
}