я оплата до момента передачи предмета расчёта', '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'); } Центр технического проектирования » Красноярское «Техносредневековье»
Молодёжный центр

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

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

technosreda-2017

Красноярское «Техносредневековье»

Просмотров: 388
Воскресенье, Декабрь 17, 2017

16 декабря на территории парковой зоны молодёжного центра «Центр технического проектирования» состоялась «Техносреда» — традиционное ежегодное итоговое мероприятие, которое проводит молодёжный центр «Центр технического проектирования».
В этом году Техносреда прошла в средневековой тематике под названием «Техносредневековье» и представила два блока: соревновательный и развлекательный.
В соревновательной части четыре команды сражались за замок из фанеры при помощи катапульт, которые они сами изготовили на базе «Центра технического проектирования» под руководством специалистов центра.
Гости мероприятия смогли стать зрителями битвы катапульт, пострелять из настоящего спортивного лука и арбалета из фанеры, сфотографироваться в рыцарских доспехах и покататься на лошади.
Ежегодное мероприятие «Техносреда» проводится с целью популяризации научно-технического моделирования, вовлечения молодежи в наукоемкое творчество, повышения привлекательности профессии инженера в нашей стране.

Более подробную информацию о мероприятии можно получить по телефону: 226-41-90 и в официальной группе молодёжного центра в социальной сети «Вконтакте».