public function calcPricesArr($items, $tariff_plan = 8) { $input = $items; $this->exchangerate_1c_usd = $this->getExchangerate_1c_USD(); if (is_array($items) && count($items) > 0) { $summ_total = 0; $weight_total = 0; // считаем стоимости доставки и всех доп. услуг по каждому товару отдельно $add_check = false; $split_package = false; foreach ($items as $k=>$item) { foreach($item as $k1=>$v1) { if (is_string($v1) && preg_match('/^0(\.0*)?$/', $v1)) { $item[$k1] = 0; } } if (isset($item['tariffsDB'])) { $tariffs_ = $item['tariffsDB']; $tariffs_from_db_ = true; } else { $tariffs_ = $tariffs[$item['payments_type']]; $tariffs_from_db_ = false; } $items[$k]['tariffs'] = $tariffs_; $items[$k]['cost_added'] = array(); $items[$k]['actions'] = array(); // установка общей стоимости единицы заказа; // инкремент общей суммы заказа $items[$k]['price_total'] = round($item['price'] * $item['count'], 2); $summ_total += $items[$k]['price_total']; // стоимость доставки по весу $items[$k]['cost_added']['weight'] = round($tariffs_['per_kg'] * $items[$k]['weight_new'], 2); // комиссия if ($tariffs_['commission']) { $items[$k]['cost_added']['commission'] = round($tariffs_['commission'] * $items[$k]['price_total'], 2); } else { $items[$k]['cost_added']['commission'] = 0; } // проверка работоспособности if ($item['operability_test']) { $items[$k]['cost_added']['operability_test'] = $tariffs_['operability_test']; } else { $items[$k]['cost_added']['operability_test'] = 0; } // если хоть один товар выкупает клиент или есть (или была - тогда это в БД) хоть одна // галка "Проверка содержания" - то потом добавим "check" на всю посылку if ( $item['checking'] || $item['payments_type'] == 1 || (isset($item['tariffsDB']) && isset($item['tariffsDB']['check']) && (float)$item['tariffsDB']['check'] > 0) ) { $add_check = true; } // фото if ($item['photo']) { $items[$k]['cost_added']['photo'] = $tariffs_['photo']; } else { $items[$k]['cost_added']['photo'] = 0; } // удаление коробки if ($item['remove_packaging']) { $items[$k]['cost_added']['remove_packaging'] = $tariffs_['remove_packaging']; } else { $items[$k]['cost_added']['remove_packaging'] = 0; } // Если есть хоть одна галка "деление посылки" - то потом посчитаем 5% вместо 33% if ($item['split_package']) { $split_package = true; } // проверка соответствия if ($item['check_match']) { $items[$k]['cost_added']['check_match'] = $tariffs_['check_match']; } else { $items[$k]['cost_added']['check_match'] = 0; } // страховка if ($item['insurance']) { $items[$k]['cost_added']['insurance'] = round($tariffs_['insurance'] * $items[$k]['price_total'], 2); } else { $items[$k]['cost_added']['insurance'] = 0; } // дополнительная упаковка if ($item['additional_packaging']) { $items[$k]['cost_added']['additional_packaging'] = $tariffs_['additional_packaging']; } else { $items[$k]['cost_added']['additional_packaging'] = 0; } // налог штата if ($tariffs_['tax']) { $items[$k]['cost_added']['tax'] = round($tariffs_['tax'] * $items[$k]['price_total'], 2); } else { $items[$k]['cost_added']['tax'] = 0; } // доставка по США if ($tariffs_['usa_delivery']) { $items[$k]['cost_added']['usa_delivery'] = $tariffs_['usa_delivery']; } else { $items[$k]['cost_added']['usa_delivery'] = 0; } // товар выкупает UE и у товара стоит галка "Гарантированный возврат" if ($item['payments_type'] == 2 && $item['refund']) { /* при первоначальном просчете стоимости гарантированного возврата берём проценты из cfgMainModel и учитываем refund_min. В БД сохраняем полученную сумму в долларах и дальше она меняется только руками из админки */ if ($tariffs_from_db_) { $refund = $tariffs_['refund']; } else { $refund = round($tariffs_['refund'] * $items[$k]['price_total'], 2); if ($refund < $tariffs['refund_min']) { $refund = $tariffs['refund_min']; } } } else { $refund = 0; } $items[$k]['cost_added']['refund'] = $refund; } // отрабатываем акции - шаг 1: сортируем товары по весу uasort($items, [$this, 'sortArrayByWeight']); // отрабатываем акции - шаг 2: разделяем товары по доменам $arr = array(); foreach ($items as $k=>$item) { $items[$k]['action_weight'] = $items[$k]['weight_new']; $item['id'] = $k; $domain = 'foo'; $url_info = parse_url($item['url']); if (is_array($url_info) && isset($url_info['host'])) { $url_info['host'] = preg_replace('/^www\./', '', $url_info['host']); $url_info['host'] = strtolower($url_info['host']); $domain = $url_info['host']; if (preg_match('#^[\w\-]+\.amazon\.com$#', $domain)) { $domain = 'amazon.com'; } if (preg_match('#^[\w\-]+\.ebay\.com$#', $domain)) { $domain = 'ebay.com'; } if (preg_match('#^[\w\-]+\.hm\.com$#', $domain)) { $domain = 'hm.com'; } if (preg_match('#^[\w\-]+\.nike\.com$#', $domain)) { $domain = 'nike.com'; } if (preg_match('#^[\w\-]+\.newbalance\.com$#', $domain)) { $domain = 'newbalance.com'; } } if (! isset($arr[$domain])) { $arr[$domain] = array(); } $arr[$domain][] = $item; } // отрабатываем акции - шаг 3: прописываем скидки для всех акционных доменов if ( isset($arr['ebay.com']) && date('Y-m-d', $order_timestamp) >= '2017-05-01' && date('Y-m-d', $order_timestamp) <= '2017-05-31' ) { $name = 'бесплатно с ebay.com до 1 кг с 2017-05-01 до 2017-05-31 (только на товары, которые оплачивает UE)'; $action_weight = 1; foreach($arr['ebay.com'] as $item) { if ($item['payments_type'] != 2) { continue; } $items[$item['id']]['actions'][] = $name; $action_weight -= $item['weight_new']; if ($action_weight > 0) { $items[$item['id']]['cost_added']['weight'] = 0; } else { $tariffs_ = isset($item['tariffsDB']) ? $item['tariffsDB'] : cfgMainModel::$_cfgMainModel['arr_Tariffs'][$tariff_plan]['data'][$item['payments_type']]; $items[$item['id']]['cost_added']['weight'] = round($tariffs_['per_kg'] * abs($action_weight), 2); break; } } } if ( isset($arr['amazon.com']) && date('Y-m-d', $order_timestamp) >= '2017-05-01' && date('Y-m-d', $order_timestamp) <= '2017-05-31' && in_array(date('N', $order_timestamp), array(6, 7)) ) { $name = 'бесплатно с amazon.com до 3 кг в Сб, Вс с 2017-05-01 до 2017-05-31 (только на товары, которые оплачивает UE)'; $action_weight = 3; foreach($arr['amazon.com'] as $item) { if ($item['payments_type'] != 2) { continue; } $items[$item['id']]['actions'][] = $name; $action_weight -= $item['weight_new']; if ($action_weight > 0) { $items[$item['id']]['cost_added']['weight'] = 0; } else { $tariffs_ = isset($item['tariffsDB']) ? $item['tariffsDB'] : cfgMainModel::$_cfgMainModel['arr_Tariffs'][$tariff_plan]['data'][$item['payments_type']]; $items[$item['id']]['cost_added']['weight'] = round($tariffs_['per_kg'] * abs($action_weight), 2); break; } } } $domains = array('ebay.com', 'macys.com'); foreach($domains as $domain) { if ( isset($arr[$domain]) && date('Y-m-d', $order_timestamp) >= '2017-07-01' && date('Y-m-d', $order_timestamp) <= '2017-07-16' ) { $name = 'бесплатно с ebay, macys до 1 кг с 2017-07-01 до 2017-07-16 (только на товары, которые оплачивает UE)'; $action_weight = 1; foreach($arr[$domain] as $item) { if ($item['payments_type'] != 2) { continue; } $items[$item['id']]['actions'][] = $name; $action_weight -= $item['weight_new']; if ($action_weight > 0) { $items[$item['id']]['cost_added']['weight'] = 0; } else { $tariffs_ = isset($item['tariffsDB']) ? $item['tariffsDB'] : cfgMainModel::$_cfgMainModel['arr_Tariffs'][$tariff_plan]['data'][$item['payments_type']]; $items[$item['id']]['cost_added']['weight'] = round($tariffs_['per_kg'] * abs($action_weight), 2); break; } } } } if ( isset($arr['amazon.com']) && date('Y-m-d', $order_timestamp) >= '2017-06-06' && date('Y-m-d', $order_timestamp) <= '2017-06-30' ) { $name = 'бесплатно с amazon.com до 3 кг с 2017-06-06 до 2017-06-30 (только на товары, которые оплачивает UE)'; $action_weight = 3; foreach($arr['amazon.com'] as $item) { if ($item['payments_type'] != 2) { continue; } $items[$item['id']]['actions'][] = $name; $action_weight -= $item['weight_new']; if ($action_weight > 0) { $items[$item['id']]['cost_added']['weight'] = 0; } else { $tariffs_ = isset($item['tariffsDB']) ? $item['tariffsDB'] : cfgMainModel::$_cfgMainModel['arr_Tariffs'][$tariff_plan]['data'][$item['payments_type']]; $items[$item['id']]['cost_added']['weight'] = round($tariffs_['per_kg'] * abs($action_weight), 2); break; } } } $domains = array('amazon.com', 'nike.com'); foreach($domains as $domain) { if ( isset($arr[$domain]) && date('Y-m-d', $order_timestamp) >= '2017-07-17' && date('Y-m-d', $order_timestamp) <= '2017-07-31' ) { $name = 'бесплатно с amazon, nike до 1 кг 2017-07-17 до 2017-07-31 (только на товары, которые оплачивает UE)'; $action_weight = 1; foreach($arr[$domain] as $item) { if ($item['payments_type'] != 2) { continue; } $items[$item['id']]['actions'][] = $name; $action_weight -= $item['weight_new']; if ($action_weight > 0) { $items[$item['id']]['cost_added']['weight'] = 0; } else { $tariffs_ = isset($item['tariffsDB']) ? $item['tariffsDB'] : cfgMainModel::$_cfgMainModel['arr_Tariffs'][$tariff_plan]['data'][$item['payments_type']]; $items[$item['id']]['cost_added']['weight'] = round($tariffs_['per_kg'] * abs($action_weight), 2); break; } } } } $domains = array('amazon.com', 'ebay.com', 'hm.com'); foreach($domains as $domain) { if ( isset($arr[$domain]) && date('Y-m-d', $order_timestamp) >= '2017-08-01' && date('Y-m-d', $order_timestamp) <= '2017-08-31' ) { $name = 'бесплатно с amazon, ebay, hm с промокодом BACKTOSCHOOL до 1 кг 2017-08-01 до 2017-08-31 (только на товары, которые оплачивает UE)'; $action_weight = 1; foreach($arr[$domain] as $item) { if ($item['payments_type'] != 2) { continue; } if (mb_strtoupper($item['promo_code']) !== 'BACKTOSCHOOL') { continue; } $items[$item['id']]['actions'][] = $name; $action_weight -= $item['weight_new']; if ($action_weight > 0) { $items[$item['id']]['cost_added']['weight'] = 0; } else { $tariffs_ = isset($item['tariffsDB']) ? $item['tariffsDB'] : cfgMainModel::$_cfgMainModel['arr_Tariffs'][$tariff_plan]['data'][$item['payments_type']]; $items[$item['id']]['cost_added']['weight'] = round($tariffs_['per_kg'] * abs($action_weight), 2); break; } } } } $domains = array('nike.com'); foreach($domains as $domain) { if ( isset($arr[$domain]) && date('Y-m-d H:i:s', $order_timestamp) >= '2017-08-10 16:01:00' && date('Y-m-d', $order_timestamp) <= '2017-08-13' ) { $name = 'бесплатно с nike до 1 кг 2017-08-10 16:01:00 до 2017-08-13 (только на товары, которые оплачивает UE)'; $action_weight = 1; foreach($arr[$domain] as $item) { if ($item['payments_type'] != 2) { continue; } $items[$item['id']]['actions'][] = $name; $action_weight -= $item['weight_new']; if ($action_weight > 0) { $items[$item['id']]['cost_added']['weight'] = 0; } else { $tariffs_ = isset($item['tariffsDB']) ? $item['tariffsDB'] : cfgMainModel::$_cfgMainModel['arr_Tariffs'][$tariff_plan]['data'][$item['payments_type']]; $items[$item['id']]['cost_added']['weight'] = round($tariffs_['per_kg'] * abs($action_weight), 2); break; } } } } $domains = array('amazon.com'); foreach($domains as $domain) { if ( isset($arr[$domain]) && date('Y-m-d', $order_timestamp) >= '2017-09-01' && date('Y-m-d', $order_timestamp) <= '2017-09-30' ) { $name = 'бесплатно с amazon до 1 кг 2017-09-01 до 2017-09-30 (только на товары, которые оплачивает UE)'; $action_weight = 1; foreach($arr[$domain] as $item) { if ($item['payments_type'] != 2) { continue; } $items[$item['id']]['actions'][] = $name; $action_weight -= $item['weight_new']; if ($action_weight > 0) { $items[$item['id']]['cost_added']['weight'] = 0; } else { $tariffs_ = isset($item['tariffsDB']) ? $item['tariffsDB'] : cfgMainModel::$_cfgMainModel['arr_Tariffs'][$tariff_plan]['data'][$item['payments_type']]; $items[$item['id']]['cost_added']['weight'] = round($tariffs_['per_kg'] * abs($action_weight), 2); break; } } } } $domains = array('nike.com', 'newbalance.com'); foreach($domains as $domain) { if ( isset($arr[$domain]) && date('Y-m-d H:i:s', $order_timestamp) >= '2017-09-06 15:45:00' && date('Y-m-d', $order_timestamp) <= '2017-08-17' ) { $name = 'бесплатно с nike и newbalance до 1 кг 2017-09-06 15:45:00 до 2017-08-17 (только на товары, которые оплачивает UE)'; $action_weight = 1; foreach($arr[$domain] as $item) { if ($item['payments_type'] != 2) { continue; } $items[$item['id']]['actions'][] = $name; $action_weight -= $item['weight_new']; if ($action_weight > 0) { $items[$item['id']]['cost_added']['weight'] = 0; } else { $tariffs_ = isset($item['tariffsDB']) ? $item['tariffsDB'] : cfgMainModel::$_cfgMainModel['arr_Tariffs'][$tariff_plan]['data'][$item['payments_type']]; $items[$item['id']]['cost_added']['weight'] = round($tariffs_['per_kg'] * abs($action_weight), 2); break; } } } } if ( date('Y-m-d H:i:s', $order_timestamp) >= '2017-10-02 13:00:00' && date('Y-m-d', $order_timestamp) <= '2017-10-15' ) { $total_weight = 0; foreach($items as $k=>$item) { if ($item['payments_type'] != 2) { continue; } $total_weight += $item['weight_new']; } if ($total_weight > 2) { $name = 'бесплатно третий кг 2017-10-02 13:00:00 до 2017-10-15 (только на товары, которые оплачивает UE)'; $action_weight = ($total_weight < 3) ? ($total_weight - 2) : 1; foreach($items as $k=>$item) { if ($item['payments_type'] != 2) { continue; } $items[$k]['actions'][] = $name; $action_weight -= $item['weight_new']; if ($action_weight > 0) { $items[$k]['cost_added']['weight'] = 0; } else { $tariffs_ = isset($item['tariffsDB']) ? $item['tariffsDB'] : cfgMainModel::$_cfgMainModel['arr_Tariffs'][$tariff_plan]['data'][$item['payments_type']]; $items[$k]['cost_added']['weight'] = round($tariffs_['per_kg'] * abs($action_weight), 2); break; } } } } /* // ШАБЛОН ДЛЯ АКЦИИ 1КГ БЕСПЛАТНО ПО ПРОМОКОДУ 1 РАЗ ДЛЯ 1 КЛИЕНТА ИЗ СПИСКА if ( date('Y-m-d', $order_timestamp) >= '2016-09-16' && date('Y-m-d', $order_timestamp) <= '2017-12-31' ) { $promocode = mb_strtoupper('UE-LOVES-YOU'); $uids = ['13344','12998','11585','1766','12354','11135','12669','6648','11705','7091','13750','13767','11307','8849','13763','3668','13764','4551','10660','13012','13797','3797','13780','12985','13811','12656','12301','13819','8933','4038','10671','12630','13826','2289','12141','13844','2180','13851','12003','10510','5940','13868','10207','13870','3195','7924','8226','13844','12998','13888','13890','12100','6237','13900','13901','13903','1420','12183','9880','9498','23','9251','13915','3479','10364','7165','13638','13930','13933','5847','8466','4227','8343','9789','3869','13576','13943','13946','13654','2535','13948','11932','13950','13877','11693','13952','11279','13896','13793','13771','7155','13954','13954','9851','3112','13219','13958','13273','6953','27','13311','13965','9628','13233','3198','523','13973','11404','6474','6708','7196','10163','13982','9406','13983','580','13987','570','13065','6582','9532','8806','8162','13995','10299','11831','1008','6','11','12943','11475','13807','13223','11933','12093','12176','12323','1996','4144','11899','14014','6314','39','8342','880','165','6835','13972','7','14020','14019','1810','13833','13316','5117','14026','7225','3760','13920','10334','4109','13947','5172','953','12826','14058','2835','14036','14059','5474','7904','14064','11455','1952','4760','361','11133','12183','6187','13845','5859','14072','8013','14083','3596','7725','8996','8431','2290','4194','12305','12985','8849','13324','2743','10997','9867','670','14004','13856','1243','3065','8206','11375','12250','8530','14115','11922','9453','6667','3855','262','12752','14139','4164','10253','17']; $uids = ['6293', '6936', '8647']; $name = "компенсация задержки доставки с промокодом {$promocode} до 1 кг 2017-10-16 до 2017-12-31 (все товары, все способы доставки)"; // получаем user id $oUserModel = userModel::getInstance(self::$db); $user_id = 0; if ($items[0]['email']) { $user_info = $oUserModel->getUserInfobyEmail($items[0]['email']); if ($user_info && isset($user_info['userid'])) { $user_id = $user_info['userid']; } } if (in_array($user_id, $uids) && mb_strtoupper($items[0]['promo_code']) == $promocode) { $oCartModel = cartModel::getInstance(self::$db); $order_id = isset($items[0]['order_id']) ? $items[0]['order_id'] : 0; $orders_count = $oCartModel::getPromoOrdersCount($user_id, $order_id, $promocode); if ($orders_count == 0) { $action_weight = 1; // сначала обрабатываем всё, что выкупает клиент (подороже), затем всё, что выкупает UE (подешевле) $who_pays_arr = array(1, 2); foreach($who_pays_arr as $who_pays) { foreach($items as $k=>$item) { if ($item['payments_type'] != $who_pays) { continue; } $items[$k]['actions'][] = $name; $action_weight -= $item['weight_new']; if ($action_weight > 0) { $items[$k]['cost_added']['weight'] = 0; } else { $tariffs_ = isset($item['tariffsDB']) ? $item['tariffsDB'] : cfgMainModel::$_cfgMainModel['arr_Tariffs'][$tariff_plan]['data'][$item['payments_type']]; $items[$k]['cost_added']['weight'] = round($tariffs_['per_kg'] * abs($action_weight), 2); break; } } if ($action_weight <= 0) { break; } } } } } */ $domains = array('amazon.com'); foreach($domains as $domain) { if ( isset($arr[$domain]) && date('Y-m-d', $order_timestamp) >= '2017-10-16' && date('Y-m-d', $order_timestamp) <= '2017-11-19' ) { $name = 'бесплатно с amazon до 1 кг 2017-10-16 до 2017-11-19 (только на товары, которые оплачивает UE)'; $action_weight = 1; foreach($arr[$domain] as $item) { if ($item['payments_type'] != 2) { continue; } $items[$item['id']]['actions'][] = $name; $action_weight -= $item['weight_new']; if ($action_weight >= 0) { $items[$item['id']]['cost_added']['weight'] = 0; $items[$item['id']]['action_weight'] = 0; } else { $tariffs_ = isset($item['tariffsDB']) ? $item['tariffsDB'] : cfgMainModel::$_cfgMainModel['arr_Tariffs'][$tariff_plan]['data'][$item['payments_type']]; $items[$item['id']]['cost_added']['weight'] = round($tariffs_['per_kg'] * abs($action_weight), 2); $items[$item['id']]['action_weight'] = abs($action_weight); break; } } } } $date_from = '2016-10-16'; $date_to = '2017-12-31'; if ( date('Y-m-d', $order_timestamp) >= $date_from && date('Y-m-d', $order_timestamp) <= $date_to ) { $promocode = mb_strtoupper('UE-LOVES-YOU'); $uids = ['6293', '6936', '8647']; $uids = ['13344','12998','11585','1766','12354','11135','12669','6648','11705','7091','13750','13767','11307','8849','13763','3668','13764','4551','10660','13012','13797','3797','13780','12985','13811','12656','12301','13819','8933','4038','10671','12630','13826','2289','12141','13844','2180','13851','12003','10510','5940','13868','10207','13870','3195','7924','8226','13844','12998','13888','13890','12100','6237','13900','13901','13903','1420','12183','9880','9498','23','9251','13915','3479','10364','7165','13638','13930','13933','5847','8466','4227','8343','9789','3869','13576','13943','13946','13654','2535','13948','11932','13950','13877','11693','13952','11279','13896','13793','13771','7155','13954','13954','9851','3112','13219','13958','13273','6953','27','13311','13965','9628','13233','3198','523','13973','11404','6474','6708','7196','10163','13982','9406','13983','580','13987','570','13065','6582','9532','8806','8162','13995','10299','11831','1008','6','11','12943','11475','13807','13223','11933','12093','12176','12323','1996','4144','11899','14014','6314','39','8342','880','165','6835','13972','7','14020','14019','1810','13833','13316','5117','14026','7225','3760','13920','10334','4109','13947','5172','953','12826','14058','2835','14036','14059','5474','7904','14064','11455','1952','4760','361','11133','12183','6187','13845','5859','14072','8013','14083','3596','7725','8996','8431','2290','4194','12305','12985','8849','13324','2743','10997','9867','670','14004','13856','1243','3065','8206','11375','12250','8530','14115','11922','9453','6667','3855','262','12752','14139','4164','10253','17']; $name = "компенсация задержки доставки с промокодом {$promocode} до 3 (распределённых) кг 2017-10-16 до 2017-12-31 (все товары, все способы доставки)"; // получаем user id $oUserModel = userModel::getInstance(self::$db); $user_id = 0; if ($items[0]['email']) { $user_info = $oUserModel->getUserInfobyEmail($items[0]['email']); if ($user_info && isset($user_info['userid'])) { $user_id = $user_info['userid']; } } if (in_array($user_id, $uids) && mb_strtoupper($items[0]['promo_code']) == $promocode) { $oCartModel = cartModel::getInstance(self::$db); $order_id = isset($items[0]['order_id']) ? (int)$items[0]['order_id'] : 0; // $orders_count = $oCartModel::getPromoOrdersCount($user_id, $order_id, $promocode); $used_weight = $oCartModel::getUsedWeightByPromocode($user_id, $order_id, $promocode, $date_from, $date_to); $weight_left = 3 - $used_weight; if ($weight_left > 0) { $action_weight = $weight_left; // сначала обрабатываем всё, что выкупает клиент (подороже), затем всё, что выкупает UE (подешевле) $who_pays_arr = array(1, 2); foreach($who_pays_arr as $who_pays) { foreach($items as $k=>$item) { if ($item['payments_type'] != $who_pays) { continue; } $items[$k]['actions'][] = $name; $action_weight -= $item['action_weight']; if ($action_weight > 0) { $items[$k]['cost_added']['weight'] = 0; } else { $tariffs_ = isset($item['tariffsDB']) ? $item['tariffsDB'] : cfgMainModel::$_cfgMainModel['arr_Tariffs'][$tariff_plan]['data'][$item['payments_type']]; $items[$k]['cost_added']['weight'] = round($tariffs_['per_kg'] * abs($action_weight), 2); break; } } if ($action_weight <= 0) { break; } } } } } // дополнительные платежи по посылке в целом $cost_added = array( // пока не участвует и == 0, но потом если что - надо будет смотреть/менять 'receiving' => $tariffs['receiving'], ); $cost_added['check'] = $add_check ? $tariffs['check'] : 0; if ($summ_total > $tariffs['customs_min_sum']) { if ($split_package) { $cost_added['split_package'] = $tariffs['split_package']; $cost_added['customs_fee'] = 0; } else { $cost_added['split_package'] = 0; $cost_added['customs_fee'] = ($summ_total - $tariffs['customs_min_sum']) * $tariffs['customs_fee']; } } else { $cost_added['split_package'] = 0; $cost_added['customs_fee'] = 0; } // считаем итоговые цифры $cost_items = 0; $cost_delivery = 0; foreach($items as $k=>$item) { $cost_delivery_items = 0; if (! in_array($item['payments_type'], array(1))) { // не считаем в сумму товары, которые клиент оплачивает сам $cost_items += $item['price_total']; } $item_cost_added = array_sum(array_values($item['cost_added'])); // услуга "удаление упаковки" - бесплатная, значение нужно только как "да/нет" $item_cost_added -= $item['cost_added']['remove_packaging']; $items[$k]['cost_delivery'] = $item_cost_added; $cost_delivery += $items[$k]['cost_delivery']; } $cost_delivery += array_sum(array_values($cost_added)); // наполняем результирующий массив $data = array( 'items' => $items, 'tariffs' => $tariffs, 'cost_added' => $cost_added, 'cost_items' => round($cost_items, 2), 'cost_delivery' => round($cost_delivery, 2), 'cost_delivery_uah' => round($cost_delivery * $this->exchangerate_1c_usd, 2), 'cost_total_usd' => round($cost_items + $cost_delivery, 2), 'cost_total_uah' => round(($cost_items + $cost_delivery) * $this->exchangerate_1c_usd, 2), 'weight_total' => $weight_total_init, ); // dump($input, $data); } else { $data = array( 'items' => array(), 'tariffs' => $tariffs, 'cost_added' => array(), 'cost_items' => 0, 'cost_delivery' => 0, 'cost_delivery_uah' => 0, 'cost_total_usd' => 0, 'cost_total_uah' => 0, 'weight_total' => 0, ); } // dump($data, '!sv'); return $data; }//calcPricesArr public function sortArrayByWeight($a, $b) { if ($a['weight'] == $b['weight']) { return 0; } return ($a['weight'] > $b['weight']) ? -1 : 1; }//sortArrayByWeight