я оплата до момента передачи предмета расчёта', 'woocommerce'), '3' => __('Аванс', 'woocommerce'), '4' => __('Полная оплата в момент передачи предмета расчёта', 'woocommerce'), '5' => __('Частичная оплата предмета расчёта в момент его передачи с последующей оплатой в кредит', 'woocommerce'), '6' => __('Передача предмета расчёта без его оплаты в момент его передачи с последующей оплатой в кредит', 'woocommerce'), '7' => __('Оплата предмета расчёта после его передачи с оплатой в кредит', 'woocommerce'), ), 'description' => __('Используется в версих ФФД, начиная с 1.05', 'woocommerce'), ), 'ffd_paymentObjectType' => array( 'title' => __('Тип оплачиваемой позиции', 'woocommerce'), 'type' => 'select', 'default' => '1', 'options' => array( '1' => __('Товар', 'woocommerce'), '2' => __('Подакцизный товар', 'woocommerce'), '3' => __('Работа', 'woocommerce'), '4' => __('Услуга', 'woocommerce'), '5' => __('Ставка азартной игры', 'woocommerce'), // '6' => __('Выигрыш азартной игры', 'woocommerce'), '7' => __('Лотерейный билет', 'woocommerce'), // '8' => __('Выигрыш лотереи', 'woocommerce'), '9' => __('Предоставление РИД', 'woocommerce'), '10' => __('Платёж', 'woocommerce'), '11' => __('Агентское вознаграждение', 'woocommerce'), '12' => __('Составной предмет расчёта', 'woocommerce'), '13' => __('Иной предмет расчёта', 'woocommerce'), ), 'description' => __('Используется в версих ФФД, начиная с 1.05', 'woocommerce'), ), ); } function get_product_price_with_discount($price, $type, $c_amount, &$order_data) { switch ($type) { case 'percent': $new_price = ceil($price * (1 - $c_amount / 100)); // remove this discount from discount_total $order_data['discount_total'] -= ($price - $new_price); break; // case 'fixed_cart': // //wrong // $new_price = $price; // break; case 'fixed_product': $new_price = $price - $c_amount; // remove this discount from discount_total $order_data['discount_total'] -= $c_amount / 100; break; default: $new_price = $price; } return $new_price; } /* * Generate the dibs button link */ public function generate_form($order_id) { $order = new WC_Order($order_id); $amount = $order->order_total * 100; // COUPONS $coupons = array(); global $woocommerce; if (!empty($woocommerce->cart->applied_coupons)) { foreach ($woocommerce->cart->applied_coupons as $code) { $coupons[] = new WC_Coupon($code); } }; if ($this->test_mode == 'yes') { $action_adr = RBS_TEST_URL; } else { $action_adr = RBS_PROD_URL; } $extra_url_param = ''; if ($this->stage_mode == 'two-stage') { $action_adr .= 'registerPreAuth.do'; } else if ($this->stage_mode == 'one-stage') { $extra_url_param = '&wc-callb=callback_function'; $action_adr .= 'register.do'; } $order_data = $order->get_data(); $language = substr(get_bloginfo("language"), 0, 2); if ($language == 'uk') { $language = 'ua'; } // prepare args array $args = array( 'userName' => $this->merchant, 'password' => $this->password, 'amount' => $amount, 'language' => $language, 'returnUrl' => get_option('siteurl') . '?wc-api=WC_RBSPAYMENT&rbspayment=result&order_id=' . $order_id . $extra_url_param, // 'currency' => CURRENCY_CODE, 'jsonParams' => json_encode( array( 'CMS:' => 'Wordpress ' . get_bloginfo('version') . " + woocommerce version: " . wpbo_get_woo_version_number(), 'Module-Version: ' => $this->pData['Version'], // 'Name' => $order_data['billing']['first_name'], // 'Famil' => $order_data['billing']['last_name'] ) ), ); if ($this->send_order == 'yes') { $args['taxSystem'] = $this->tax_system; $order_items = $order->get_items(); $order_timestamp_created = $order_data['date_created']->getTimestamp(); $order_billing_email = $order_data['billing']['email']; $items = array(); $itemsCnt = 1; /* Заполнение массива данных корзины */ foreach ($order_items as $value) { $item = array(); $tax = new WC_Tax(); $product_variation_id = $value['variation_id']; if ($product_variation_id) { $product = new WC_Product_Variation($value['variation_id']); $item_code = $value['variation_id']; } else { $product = new WC_Product($value['product_id']); $item_code = $value['product_id']; } $base_tax_rates = $tax->get_base_tax_rates($product->get_tax_class(true)); if (!empty($base_tax_rates)) { $rates = array_shift($tax->get_rates($product->get_tax_class())); $item_rate = round(array_shift($rates)); if ($item_rate == 20) { $tax_type = 6; } else if ($item_rate == 18) { $tax_type = 3; } else if ($item_rate == 10) { $tax_type = 2; } else if ($item_rate == 0) { $tax_type = 1; } else { $tax_type = 0; } } else { $tax_type = $this->tax_type; } $product_price = round(($product->get_price()) * 100); if ($product->get_type() == 'variation') { //TODO } // if discount (coupon etc) // see DISCOUNT SECTION // foreach ($coupons as $coupon) { // $coupon_amount = $coupon->get_amount() * 100; // $product_price = $this->get_product_price_with_discount($product_price, $coupon->get_discount_type(), $coupon_amount, $order_data ); // } $item['positionId'] = $itemsCnt++; $item['name'] = $value['name']; $item['quantity'] = array( 'value' => $value['quantity'], 'measure' => $this->mesurement_name ); $item['itemAmount'] = $product_price * $value['quantity']; $item['itemCode'] = $item_code; $item['tax'] = array( 'taxType' => $tax_type ); $item['itemPrice'] = $product_price; // FFD 1.05 added if ($this->ffd_version == 'v105') { $attributes = array(); $attributes[] = array( "name" => "paymentMethod", "value" => $this->ffd_paymentMethodType ); $attributes[] = array( "name" => "paymentObject", "value" => $this->ffd_paymentObjectType ); $item['itemAttributes']['attributes'] = $attributes; } $items[] = $item; } // DISCOUNT if (!empty($order_data['discount_total'])) { $discount = ($order_data['discount_total'] + $order_data['discount_tax']) * 100; $new_order_total = 0; // coze delivery will be another position $delivery_sum = ($order->shipping_total > 0) ? $order->shipping_total * 100 : 0; foreach ($items as &$i) { $p_discount = intval(round(($i['itemAmount'] / ($amount - $delivery_sum + $discount)) * $discount, 2)); $this->correctBundleItem($i, $p_discount); $new_order_total += $i['itemAmount']; } // reset order amount // return delivery_sum into amount $args['amount'] = $new_order_total + $delivery_sum; } // DELIVERY POSITION if ($order->shipping_total > 0) { $itemShipment['positionId'] = $itemsCnt; $itemShipment['name'] = 'Доставка'; $itemShipment['quantity'] = array( 'value' => 1, 'measure' => $this->mesurement_name ); $itemShipment['itemAmount'] = $itemShipment['itemPrice'] = $order->shipping_total * 100; $itemShipment['itemCode'] = 'Delivery'; $itemShipment['tax'] = array( 'taxType' => $this->tax_type ); // FFD 1.05 added if ($this->ffd_version == 'v105') { $attributes = array(); $attributes[] = array( "name" => "paymentMethod", "value" => 4 ); $attributes[] = array( "name" => "paymentObject", "value" => 4 ); $itemShipment['itemAttributes']['attributes'] = $attributes; } $items[] = $itemShipment; } /* Создание и заполнение массива данных заказа для фискализации */ $order_bundle = array( 'orderCreationDate' => $order_timestamp_created, 'customerDetails' => array( 'email' => $order_billing_email ), 'cartItems' => array('items' => $items) ); /* Заполнение массива данных для запроса c фискализацией */ $args['orderBundle'] = json_encode($order_bundle); } for ($i = 0; $i++ < 30;) { $args['orderNumber'] = $order_id . '_' . $i; $rbsCurl = curl_init(); curl_setopt_array($rbsCurl, array( CURLOPT_HTTPHEADER => array( 'CMS: Wordpress ' . get_bloginfo('version') . " + woocommerce version: " . wpbo_get_woo_version_number(), 'Module-Version: ' . $this->pData['Version'], ), CURLOPT_URL => $action_adr, CURLOPT_RETURNTRANSFER => true, CURLOPT_SSL_VERIFYPEER => false, CURLOPT_POST => true, CURLOPT_POSTFIELDS => http_build_query($args, '', '&') )); $response = curl_exec($rbsCurl); curl_close($rbsCurl); if (LOGGING) { $this->rbs_logger('Request: ' . $action_adr . ': ' . print_r($args, true) . 'Response: ' . $response, true); } $response = json_decode($response, true); if ($response['errorCode'] != '1') break; } $errorCode = $response['errorCode']; if ($errorCode == 0) { wp_redirect($response['formUrl']); //EI: if is error in the headers (already send) echo '

'.__('Оплатить', 'woocommerce').'

'; exit; } else { return '

' . __('Ошибка #' . $errorCode . ': ' . $response['errorMessage'], 'woocommerce') . '

' . '' . __('Отказаться от оплаты и вернуться в корзину', 'woocommerce') . ''; } } function correctBundleItem(&$item, $discount) { $item['itemAmount'] -= $discount; $item['itemPrice'] = $item['itemAmount'] % $item['quantity']['value']; if ($item['itemPrice'] != 0) { $item['itemAmount'] += $item['quantity']['value'] - $item['itemPrice']; }; $item['itemPrice'] = $item['itemAmount'] / $item['quantity']['value']; } /* * Process the payment and return the result */ function process_payment($order_id) { $order = new WC_Order($order_id); return array( 'result' => 'success', 'redirect' => add_query_arg('order', $order->id, add_query_arg('key', $order->order_key, get_permalink(wc_get_page_id('pay')))) ); } /* * Receipt page */ function receipt_page($order) { echo $this->generate_form($order); } function rbs_logger($var, $info = false) { $information = ""; if ($var) { if ($info) { $information = "\n\n"; $information .= str_repeat("-=", 64); $information .= "\nDate: " . date('Y-m-d H:i:s'); $information .= "\nWordpress version " . get_bloginfo('version') . "; Woocommerce version: " . wpbo_get_woo_version_number() . "\n"; } $result = $var; if (is_array($var) || is_object($var)) { $result = "\n" . print_r($var, true); } $result .= "\n\n"; $path = dirname(__FILE__) . '/rbspayment.log'; error_log($information . $result, 3, $path); return true; } return false; } } function add_rbspayment_gateway($methods) { $methods[] = 'WC_RBSPAYMENT'; return $methods; } if (!function_exists('wpbo_get_woo_version_number')) { function wpbo_get_woo_version_number() { // If get_plugins() isn't available, require it if (!function_exists('get_plugins')) require_once(ABSPATH . 'wp-admin/includes/plugin.php'); // Create the plugins folder and file variables $plugin_folder = get_plugins('/' . 'woocommerce'); $plugin_file = 'woocommerce.php'; // If the plugin version number is set, return it if (isset($plugin_folder[$plugin_file]['Version'])) { return $plugin_folder[$plugin_file]['Version']; } else { // Otherwise return null return NULL; } } } add_filter('woocommerce_payment_gateways', 'add_rbspayment_gateway'); } Центр технического проектирования » Отборочный этап конкурса «Инженерная лига – 2018»
Молодёжный центр

"Центр технического проектирования"

Последние события

otbor-liga-2018

Отборочный этап конкурса «Инженерная лига – 2018»

Просмотров: 434
Суббота, Апрель 14, 2018

13 апреля состоялся районный отборочный этап конкурса научно-технического творчества молодёжи города Красноярска «Инженерная лига – 2018» для участников левого берега. 
Юные инженеры представили свои проекты в таких номинациях, как «Лаборатория городской безопасности», «Лаборатория полезной инженерии», «Лаборатория смелых решений». 
Лучшие представители творческой молодёжи демонстрировали свои разработки, исследования и изобретения в различных отраслях научно-технических знаний. Например, юный изобретатель Иван Зинченко представил экспертному составу лазерную гитару из фанеры, фоторезистора и платы Arduino. Струн в гитаре нет, их заменяют шесть лазерных лучей. Внешне она напоминает обычную электрогитару. А школьница Роксана Гулиева провела исследование на тему изучения состава молока растительного и животного происхождения: « В своем исследовании я поставила главную задачу определить может ли растительное молоко быть альтернативой молоку животного происхождения. Провела иследование состава, опрос среди населения. А сегодняшний отборочный этап — это прежде всего опыт выступления перед публикой, возможность научиться грамотно представить себя и свой проект перед большой аудиторией и экспертами». 
Всего в конкурсе приняли участие более 60 ребят с учреждений левого берега г. Красноярска. А уже 18 апреля состоится отборочный этап конкурса для школьников и студентов правого берега. Победители отборочных этапов встретятся на городском конкурсе научно-технического творчества молодёжи «Инженерная лига» осенью 2018 года. 
Подробности по телефону 226-41-90 и в социальной сети «Вконтакте».