+7(863)285-04-66

info@promtechautomat.ru

г. Ростов-на-Дону. Социалистическая 74

Серверная часть (back-end) онлайн-калькулятора

Методы и языки программирования для разработки калькулятора

Для начала нам нужен серверный язык программирования PHP. Также необходимо знать html, css, javascript. Методы передачи данных из html формы, самые распространенные post и get. Также необходима формула расчета суммы и стоимости одного этажного щита. Метод передачи данных возьмем POST, и выводить уже результаты расчетов через ajax-запрос, сформированный html код.

Метод POST передает информацию через HTTP-заголовки. Информация кодируется, как описано в случае метода GET, и помещается в заголовок QUERY_STRING. Метод POST не имеет ограничений по объему отправляемых данных. Метод POST может использоваться для отправки ASCII, а также двоичных данных.

JavaScript ("JS" для краткости) — это полноценный динамический язык программирования, который применяется к HTML документу, и может обеспечить динамическую интерактивность на веб-сайтах. Его мы используем как для валидации формы, так и для отправки и получения данных от сервера.

PHP – это широко используемый язык сценариев общего назначения с открытым исходным кодом. Говоря проще, PHP это язык программирования, специально разработанный для написания web-приложений (сценариев), исполняющихся на Web-сервере. Аббревиатура PHP означает “Hypertext Preprocessor (Препроцессор Гипертекста)".

Код программы онлайн-калькулятора расчета стоимости

Создаем отдельный файл, который будет принимать выбранные параметры из формы, заполненные пользователем. Так как данные из формы будут передаваться массивом, мы в нём и создадим переменные для хранения суммы и вывода расчетов пользователю.

$data - массив данных.

Для начала обозначим условия проверок данных и запросы цен из базы данных:

                                    /* Проверка введённых данных */
                                            if (!isset($data['slabo_tok']) OR $data['slabo_tok'] == null) {
                                                $errors[] = 'Не выбран нужный вариант, пожалуйста выберите подходящий вариант';
                                            }
                                            if (!isset($data['uzo']) OR $data['uzo'] == null) {
                                                $errors[] = 'Не выбран нужный вариант, пожалуйста выберите подходящий вариант';
                                            }
                                            if (!isset($data['install']) OR $data['install'] == null) {
                                                $errors[] = 'Не выбран вариант установки щитка';
                                            }
                                            if (!isset($data['width']) OR $data['width'] == null) {
                                                $errors[] = 'Не выбраны размеры щитка';
                                            }
                                            if (!isset($data['kolvo_kvartir']) OR $data['kolvo_kvartir'] == null OR $data['kolvo_kvartir'] == 0) {
                                                $errors[] = 'Не выбрано количество квартир';
                                            }
                                            if (!isset($data['nominal']) OR $data['nominal'] == null) {
                                                $errors[] = 'Не выбран номинальный ток';
                                            }
                                            if (!isset($data['product_modul']) OR $data['product_modul'] == null) {
                                                $errors[] = 'Не выбран производитель автоматики';
                                            }
                                            if (!isset($data['schetchik']) OR $data['schetchik'] == null) {
                                                $errors[] = 'Не выбран производитель счётчика';
                                            }
                                            if (!isset($data['kolvo_shields']) OR $data['kolvo_shields'] == null OR $data['kolvo_shields'] == 0) {
                                                $errors[] = 'Не выбрано количество щитков в заказе';
                                            }
                                        /* /Проверка введённых данных/ */                                

Сумма расходных материалов для одного этажного щита (считается по количеству квартир):

$data[‘first_razhod’] = 400 * $data['kolvo_kvartir']

$schetchiks - сумма счетчиков одного щита ( для удобства была создана переменная отдельно для счетчиков, также и для автоматов) $auto - сумма стоимости автоматов и узо (если они есть).

$auto = ($automats['cost_automat_etm'] * $kolvo_kvartir) + ($automats_plus['cost_automat_etm'] * $kolvo_kvartir])

$automats['cost_automat_etm'] - цена автомата с сайта ЭТМ,
$automats_plus['cost_automat_etm'] - цена УЗО с сайта ЭТМ (если есть) . Если же наличие УЗО не нужно то формула будет такая:

$auto = $automats['cost_automat_etm'] * $data['kolvo_kvartir']

Сумма оборудования для одного этажного щита,

$data['summa_object'] = $shield_cost + $auto + $schetchiks

где:
$shield_cost - это цена корпуса щита.
Сумма работы сборки одного щита:

$data['sbor_first'] = 150 * $data['kolvo_kvartir']

Цена одного щита со сборкой и оборудованием и расходными материалами:

$data['sborka'] = $data['summa_object'] + $data['sbor_first'] + $data['first_razhod'];

А чтобы вычислить общую сумму необходимо умножить цену одного цита со сборкой на количество щитов в заказе

Код расчета стоимости:

                                     //Проверка указания наличия УЗО (дифф. устройства защиты)
                                            if ((!empty($data['uzo']) OR isset($data['uzo'])) AND $data['uzo'] == 1) {
                                                $qautomat = 'SELECT * FROM automal, nominal WHERE automal.id_nominal=nominal.id_nominal AND automal.view_automat='УЗО' AND nominal.id_nominal=''.$data['nominal'].'' AND automal.id_procreator='.$data['product_modul'];
                                                $cost_automats = $connect->query($qautomat);
                                                $automats = mysqli_fetch_array($cost_automats);
                                                $automats_plus = 'SELECT * FROM automal WHERE automal.id_procreator='.$data['product_modul'].' AND view_automat='Автомат' AND automal.id_nominal='.$data['nominal'];
                                                $automats_plus = $connect->query($automats_plus);
                                                $automats_plus = mysqli_fetch_array($automats_plus);
                                
                                            } elseif ($data['uzo'] == 1 AND ($automats == null OR empty($automats) OR !isset($automats))) {
                                                $qautomat = 'SELECT * FROM automal WHERE automal.view_automat='УЗО' AND automal.id_nominal=1 AND id_procreator='.$data['product_modul'];
                                                $cost_automats = $connect->query($qautomat);
                                                $automats = mysqli_fetch_array($cost_automats); 
                                
                                            } elseif ($automats == null OR empty($automats)) {
                                                //$errors[] = 'Не выбран был номинальный ток или такого дифф. автомата (УЗО) нет, поэтому считаем по 40А';
                                                $qautomat = 'SELECT * FROM automal WHERE view_automat='УЗО' AND id_procreator='.$data['product_modul'].' AND id_nominal=1';
                                                $cost_automats = $connect->query($qautomat);
                                                $automats = mysqli_fetch_array($cost_automats); 
                                            } elseif ($data['uzo'] == 0) {
                                                $qautomat = 'SELECT * FROM automal WHERE automal.id_procreator='.$data['product_modul'].' AND view_automat='Автомат' AND automal.id_nominal='.$data['nominal'];
                                                $cost_automats = $connect->query($qautomat);
                                                $automats = mysqli_fetch_array($cost_automats);
                                            }
                                                if (isset($automats))
                                                    $nomi_q = 'SELECT * FROM nominal WHERE id_nominal='.$automats['id_nominal'];
                                                    if (isset($automats['id_nominal']))
                                                        $nominal = $connect->query($nomi_q);
                                                        if (isset($nominal))
                                                            if ($nominal == TRUE)
                                                                $nom = mysqli_fetch_array($nominal);
                                            //Проверка выборки автоматов из базы данных, условие того, что если нет УЗО с данным номинальным током
                                            if ($data['width'] == 'unique_width') {
                                                $width = 'нестандартный';
                                            }
                                
                                            //Если стоит 50А УЗО , но его нет, тогда берётся 63А, Schneider Electric and EKF
                                            if (($data['product_modul'] == 101001003014 OR $data['product_modul'] == 101001003012) AND $data['nominal'] == 2 ) {
                                                $qautomat = 'SELECT * FROM automal WHERE view_automat='УЗО' AND id_procreator='.$data['product_modul'].' AND id_nominal=3';
                                                $cost_automats = $connect->query($qautomat);
                                                $automats = mysqli_fetch_array($cost_automats); 
                                            }
                                                
                                            //Сумма расходных материалов на один щит
                                            $data['first_razhod'] = 400 * intval($data['kolvo_kvartir']);
                                    
                                            //Cумма стоимости всех счётчиков одного щита
                                            $schetchiks = $schetch['cost_schetchik_etm'] * intval($data['kolvo_kvartir']);
                                            //Сумма стоимости всех автоматов и узо одного щита
                                            if ($data['uzo'] == 1):
                                                $auto = ($automats['cost_automat_etm'] * intval($data['kolvo_kvartir'])) + ($automats_plus['cost_automat_etm'] * intval($data['kolvo_kvartir']));
                                            else: 
                                                $auto = $automats['cost_automat_etm'] * intval($data['kolvo_kvartir']);
                                            endif;
                                            //Сумма стоимости оборудования одного щита
                                            $data['summa_object'] =  $shield_cost + $auto + $schetchiks;
                                            //Сумма работы сборки одного щита
                                            $data['sbor_first'] = 150 * intval($data['kolvo_kvartir']);
                                            // Цена одного щита со сборкой
                                            $data['sborka'] = $data['summa_object'] + $data['sbor_first'] + $data['first_razhod'];
                                            if (!empty($data['slabo_tok'])) {
                                                if ($data['slabo_tok'] == 1) {
                                                    $data['sborka'] = ($data['sborka'] / 100 * 20) + $data['sborka'];
                                                }
                                            }
                                            //Общая сумма за n количество щитов
                                            $data['summ'] = $data['sborka'] * intval($data['kolvo_shields']); 
                                        endif; 
                                            //Учёт скидки клиента
                                            $data['skidka'] = 0;
                                            $kolvo_shield = intval($data['kolvo_shields']);
                                            if ($kolvo_shield >= 20 AND $kolvo_shield < 40) {
                                                $data['skidka'] = $data['summ'] / 100 * 3;
                                            } elseif ($kolvo_shield >= 40) {
                                                $data['skidka'] = $data['summ'] / 100 * 5;
                                            } ?>