function dod_show()
{
    global $available_fields, $optional_fields, $tables, $smarty, $top_message, $target;
    $generators = array();
    $fields = $from_tbls = $query_joins = $where = $groupbys = $having = $orderbys = array();
    $from_tbls[] = 'dod_generators';
    $fields = array_keys($available_fields);
    $where[] = 1;
    $orderbys[] = 'position';
    $orderbys[] = 'generator_id';
    $search_query_count = cw_db_generate_query('count(generator_id)', $from_tbls, $query_joins, $where, $groupbys, $having, array(), 0);
    $search_query = cw_db_generate_query($fields, $from_tbls, $query_joins, $where, $groupbys, $having, $orderbys);
    $total_items_res_id = db_query($search_query_count);
    $number_generators = db_num_rows($total_items_res_id);
    if (empty($number_generators)) {
        return null;
    }
    global $navigation, $page;
    $navigation = cw_core_get_navigation($target, $number_generators, $page);
    $limit_str = " LIMIT {$navigation['first_page']}, {$navigation['objects_per_page']}";
    $generators = cw_query($search_query . $limit_str);
    if (empty($generators)) {
        return null;
    }
    $generators = array_map(create_function('$elm', '$elm["description"] = strip_tags($elm["description"]); return $elm;'), $generators);
    $smarty->assign('dod_generators', cw_stripslashes($generators));
    $navigation['script'] = 'index.php?target=' . $target;
    $smarty->assign('navigation', $navigation);
}
function cw_speed_bar_search($params, $return = null)
{
    extract($params);
    global $tables, $current_language;
    $fields = $from_tbls = $query_joins = $where = $groupbys = $having = $orderbys = array();
    $orderbys[] = "{$tables['speed_bar']}.orderby";
    $from_tbls[] = 'speed_bar';
    $fields[] = "{$tables['speed_bar']}.*";
    # kornev, merge standart and additional variables
    if ($return) {
        foreach ($return as $saname => $sadata) {
            if (isset(${$saname}) && is_array(${$saname}) && empty(${$saname})) {
                ${$saname} = $sadata;
            }
        }
    }
    $language = $language ? $language : $current_language;
    $query_joins['speed_bar_lng'] = array('on' => "{$tables['speed_bar_lng']}.item_id = {$tables['speed_bar']}.item_id AND {$tables['speed_bar_lng']}.code = '{$language}'", 'only_select' => 1);
    $fields[] = "IFNULL({$tables['speed_bar_lng']}.title, {$tables['speed_bar']}.title) as title";
    if (isset($data['active'])) {
        $where[] = "{$tables['speed_bar']}.active='{$data['active']}'";
    }
    $search_query = cw_db_generate_query($fields, $from_tbls, $query_joins, $where, $groupbys, $having, $orderbys);
    return cw_query($search_query);
}
function cw_pages_search($params, $return = null)
{
    extract($params);
    global $tables, $current_language, $target;
    $fields = $from_tbls = $query_joins = $where = $groupbys = $having = $orderbys = array();
    # kornev, merge standart and additional variables
    if ($return) {
        foreach ($return as $saname => $sadata) {
            if (isset(${$saname}) && is_array(${$saname}) && empty(${$saname})) {
                ${$saname} = $sadata;
            }
        }
    }
    $from_tbls[] = 'pages';
    $fields[] = "{$tables['pages']}.*";
    $where[] = 1;
    if (!empty($data['sort_field'])) {
        $direction = $data['sort_direction'] ? 'DESC' : 'ASC';
        $orderbys[] = $data['sort_field'] . ' ' . $direction;
    } else {
        $orderbys[] = 'title';
    }
    $search_query_count = cw_db_generate_query('count(*)', $from_tbls, $query_joins, $where, $groupbys, $having, array(), 0);
    $search_query = cw_db_generate_query($fields, $from_tbls, $query_joins, $where, $groupbys, $having, $orderbys);
    $total_items_res_id = db_query($search_query_count);
    $total_items = db_num_rows($total_items_res_id);
    $page = $data['page'];
    if ($data['count']) {
        return $total_items;
    } elseif ($data['limit']) {
        $limit_str = " LIMIT {$data['limit']}";
    } elseif ($data['all']) {
        $limit_str = '';
    } else {
        $navigation = cw_core_get_navigation($target, $total_items, $page);
        $limit_str = " LIMIT {$navigation['first_page']}, {$navigation['objects_per_page']}";
    }
    $pages = cw_query($search_query . $limit_str);
    return array($pages, $navigation);
}
function cw_shipping_search($params, $return = null)
{
    extract($params);
    global $tables;
    $fields = $from_tbls = $query_joins = $where = $groupbys = $having = $orderbys = array();
    $from_tbls[] = 'shipping';
    $fields[] = "{$tables['shipping']}.*";
    # kornev, merge standart and additional variables
    if ($return) {
        foreach ($return as $saname => $sadata) {
            if (isset(${$saname}) && is_array(${$saname}) && empty(${$saname})) {
                ${$saname} = $sadata;
            }
        }
    }
    if ($data['addon']) {
        $query_joins['shipping_carriers'] = array('on' => "{$tables['shipping_carriers']}.carrier_id = {$tables['shipping']}.carrier_id", 'parent' => 'shipping', 'is_straight' => 1);
        $where[] = "{$tables['shipping_carriers']}.addon = '{$data['addon']}'";
    }
    if (isset($data['carrier_id'])) {
        $where[] = "carrier_id='{$data['carrier_id']}'";
    }
    if (isset($data['active'])) {
        $where[] = "{$tables['shipping']}.active='{$data['active']}'";
    }
    if ($data['where']) {
        $where = array_merge($where, $data['where']);
    }
    $orderbys[] = "{$tables['shipping']}.orderby";
    $search_query = cw_db_generate_query($fields, $from_tbls, $query_joins, $where, $groupbys, $having, $orderbys);
    $shippings = cw_query($search_query);
    if ($info_type & 1 && $shippings) {
        foreach ($shippings as $k => $v) {
            $shippings[$k]['cod_type_ids'] = cw_query_key("select cod_type_id from {$tables['shipping_cods']} where shipping_id='{$v['shipping_id']}'");
        }
    }
    return $shippings;
}
function cw_product_build_flat($params, $return)
{
    extract($params);
    global $tables, $addons;
    $where = "";
    if ($product_id) {
        if (!is_array($product_id)) {
            $product_id = array($product_id);
        }
        $where = "product_id in ('" . implode("', '", $product_id) . "')";
        db_query("delete from {$tables['products_flat']} where {$where}");
    } else {
        db_query("delete from {$tables['products_flat']}");
    }
    $fields = $from_tbls = $query_joins = $where = $groupbys = $having = $orderbys = array();
    $from_tbls[] = 'products';
    $fields[] = "{$tables['products']}.product_id";
    $where[] = $tables['products'] . '.' . $where;
    # kornev, get the query from the addons
    if ($return) {
        foreach ($return as $saname => $sadata) {
            if (isset(${$saname}) && is_array(${$saname}) && empty(${$saname})) {
                ${$saname} = $sadata;
            }
        }
    }
    # kornev, there are nothing to do if the fields are empty (by default)
    if (count($fields) == 1) {
        return;
    }
    $groupbys[] = "{$tables['products']}.product_id";
    # kornev, generate it;
    $search_query = cw_db_generate_query($fields, $from_tbls, $query_joins, $where, $groupbys, $having, $orderbys);
    if ($tick > 0) {
        cw_display_service_header('lbl_rebuild_products_flat');
    }
    $sd = db_query($search_query);
    $updated = 0;
    if ($sd) {
        while ($row = db_fetch_array($sd)) {
            cw_array2insert('products_flat', cw_addslashes($row), true);
            $updated++;
            if ($tick > 0 && $updated % $tick == 0) {
                cw_flush('.');
            }
            if ($tick > 0 && $updated / $tick % 100 == 0) {
                cw_flush('<br/>');
            }
        }
    }
    db_free_result($sd);
    return $updated;
}
}
if ($data['saldo'] == 1) {
    $where[] = "{$tables['accounting_records']}.total < 0";
} elseif ($data['saldo'] == 2) {
    $where[] = "{$tables['accounting_records']}.total >= 0";
}
if ($data['customer_id']) {
    $where[] = "{$tables['accounting_records']}.customer_id='{$data['customer_id']}'";
}
if ($data['group']) {
    $fields[] = "{$tables['accounting_categories']}.category as descr";
    $fields[] = "sum({$tables['accounting_records']}.total) as total";
    $groupbys[] = "{$tables['accounting_categories']}.accounting_category_id";
}
$orderbys[] = "{$tables['accounting_records']}.date asc";
$search_query_count = cw_db_generate_query('count(*)', $from_tbls, $query_joins, $where, $groupbys, $having, array(), 0);
$search_query = cw_db_generate_query($fields, $from_tbls, $query_joins, $where, $groupbys, $having, $orderbys);
$_res = db_query($search_query_count);
$total_items = db_num_rows($_res);
db_free_result($_res);
$navigation = cw_core_get_navigation($target, $total_items, $page);
if ($total_items > 0) {
    $search_query .= " LIMIT {$navigation['first_page']}, {$navigation['objects_per_page']}";
    $records = cw_query($search_query);
    if (is_array($records)) {
        foreach ($records as $k => $v) {
            cw_accounting_assign_info($records[$k]);
        }
    }
    $smarty->assign('records', $records);
}
function cw_ps_update_shipping(&$cart, &$products, $user_info, &$return, $offers_ids = array())
{
    global $tables;
    if (empty($products) || empty($cart)) {
        return false;
    }
    if (empty($offers_ids) || !isset($offers_ids['new']) || !isset($offers_ids['to_delete']) || !isset($offers_ids['suitable'])) {
        return false;
    }
    $offers = $offers_ids['new'] + $offers_ids['suitable'];
    // check if the suitable products exist...
    $fields = $from_tbls = $query_joins = $where = $groupbys = $having = $orderbys = array();
    $fields = array("{$tables['ps_bonuses']}.offer_id", "{$tables['ps_bonuses']}.apply", "{$tables['ps_bonuses']}.offer_id as offerid", "{$tables['ps_bonuses']}.bonus_id");
    $from_tbls[] = 'ps_bonuses';
    $where[] = "{$tables['ps_bonuses']}.offer_id IN ('" . implode("', '", array_keys($offers)) . "')";
    $where[] = "{$tables['ps_bonuses']}.type = '" . PS_FREE_SHIP . "'";
    $search_query = cw_db_generate_query($fields, $from_tbls, $query_joins, $where, $groupbys, $having, $orderbys);
    $offers_data = cw_query_hash($search_query, 'offer_id', false);
    //echo '<pre>', print_r($offers_data), '</pre>';
    //die;
    /*$fields = $from_tbls = $query_joins = $where = $groupbys = $having = $orderbys = array();
    
        $fields = array("$tables[ps_bonuses].offer_id", 'object_id', 'quantity', "$tables[ps_bonuses].offer_id as offerid", "$tables[ps_bonuses].bonus_id");
    
        $from_tbls[] = 'ps_bonuses';
    
        $query_joins['ps_bonus_details'] = array(
            'on' => "$tables[ps_bonuses].bonus_id = $tables[ps_bonus_details].bonus_id",
       		'is_inner' => 1,
        );
    
        $where[] = "$tables[ps_bonuses].offer_id IN ('" . implode("', '", array_keys($offers)) .  "')";
        $where[] = "$tables[ps_bonuses].type = '" . PS_FREE_SHIP .  "'";
        $where[] = "$tables[ps_bonus_details].object_type = '" . PS_OBJ_TYPE_PRODS .  "'";
    
    
        $search_query = cw_db_generate_query($fields, $from_tbls, $query_joins, $where, $groupbys, $having, $orderbys);
        $free_products = cw_query_hash($search_query, 'object_id', false);
    
        if (empty($free_products) || !is_array($free_products)) {
            return false;
        }
        */
}
function cw_ps_bundle_build($action, $category, $category_src, $filter, $products_number, $discount, $disctype)
{
    global $tables;
    $from_tbls['pc'] = 'products_categories';
    $fields[] = 'pc.product_id';
    if ($products_number < 2) {
        $products_number = 2;
    }
    if ($category != 0) {
        cw_load('category');
        $subcats = cw_call('cw_category_get_subcategory_ids', array($category));
        $where[] = 'pc.category_id IN ("' . join('","', $subcats) . '")';
    }
    $query_joins['o'] = array('tblname' => 'ps_offers', 'on' => 'o.pid = pc.product_id');
    if ($filter) {
        if ($filter['without']) {
            $where_auto[] = 'auto is NULL';
        }
        if ($filter['auto']) {
            $where_auto[] = 'auto = 1';
        }
        if ($filter['manual']) {
            $where_auto[] = 'auto = 0';
        }
        $where[] = '(' . join(' OR ', $where_auto) . ')';
    }
    $sql = cw_db_generate_query($fields, $from_tbls, $query_joins, $where);
    $pids = cw_query_column($sql);
    $products_number--;
    $subcats = cw_call('cw_category_get_subcategory_ids', array($category_src));
    $where_src = '1';
    if ($category_src != 0) {
        $where_src = "pc.category_id IN ('" . join("','", $subcats) . "')";
    }
    foreach ($pids as $pid) {
        $new_pids = cw_query("SELECT pc.product_id as id\n\t\tFROM {$tables['products_categories']} pc \n\t\tWHERE {$where_src} AND pc.product_id!='{$pid}' \n\t\tORDER BY RAND() LIMIT {$products_number}");
        $data = array('discount' => $discount, 'disctype' => $disctype, 'bundle' => $new_pids, 'auto' => 1);
        $offer_id = cw_call('cw_ps_offer_bundle_update', array($pid, $data));
    }
}
function cw_ab_staticpages_get($page_id, $active, $return = null)
{
    global $tables;
    $fields = $from_tbls = $query_joins = $where = array();
    if ($return) {
        foreach ($return as $saname => $sadata) {
            if (isset(${$saname}) && is_array(${$saname}) && empty(${$saname})) {
                ${$saname} = $sadata;
            }
        }
    }
    $fields[] = "{$tables['cms']}.contentsection_id as page_id";
    $from_tbls[] = 'cms';
    $fields[] = "{$tables['cms']}.*";
    $where[] = "{$tables['cms']}.contentsection_id='{$page_id}'";
    $current_date = time();
    $where[] = "if({$tables['cms']}.start_date > 0, {$tables['cms']}.start_date <= '" . $current_date . "', 1)";
    $where[] = "if({$tables['cms']}.end_date > 0, {$tables['cms']}.end_date >= '" . $current_date . "', 1)";
    if (isset($active)) {
        $where[] = "{$tables['cms']}.active = '" . ($active ? 'Y' : 'N') . "'";
    }
    $search_query = cw_db_generate_query($fields, $from_tbls, $query_joins, $where, $groupbys, $having, $orderbys);
    return cw_query_first($search_query);
}
function cw_gift_get_giftreg_wishlist_database($customer_id, $event_id)
{
    global $tables;
    global $items_per_page, $page, $sort, $sort_direction, $items_per_page_targets;
    global $smarty, $target, $action, $mode;
    $wishlist_items_nav = array();
    if (isset($items_per_page)) {
        $wishlist_items_nav['items_per_page'] = $items_per_page;
    }
    if (isset($page)) {
        $wishlist_items_nav['page'] = $page;
    }
    $page = 1;
    if (isset($sort)) {
        $wishlist_items_nav['sort_field'] = $sort;
    }
    if (isset($sort_direction)) {
        $wishlist_items_nav['sort_direction'] = $sort_direction;
    }
    $items_per_page_targets['wishlist'] = PHP_INT_MAX;
    $items_fields = array("{$tables['wishlist']}.*");
    $items_from_tbls = array('wishlist');
    $items_where = array("{$tables['wishlist']}.customer_id='{$customer_id}' and {$tables['wishlist']}.event_id='{$event_id}'");
    $items_groupbys = array();
    $items_having = array();
    if ($wishlist_items_nav['sort_field'] == 'forsale') {
        $items_orderbys = array("{$tables['wishlist']}.product_id" . ($wishlist_items_nav['sort_direction'] ? ' DESC' : ' ASC'));
    }
    $items_count_query = cw_db_generate_query(array('count(*)'), $items_from_tbls, $items_query_joins, $items_where, $items_groupbys, $items_having, null);
    $items_total_items = cw_query_first_cell($items_count_query);
    $items_qry = cw_db_generate_query($items_fields, $items_from_tbls, $items_query_joins, $items_where, $items_groupbys, $items_having, $items_orderbys);
    $items_per_page_targets['wishlist'] = $wishlist_items_nav['items_per_page'];
    $navigation = cw_core_get_navigation($target, $items_total_items, $wishlist_items_nav['page']);
    $navigation['script'] = "index.php?target={$target}&action={$action}&mode={$mode}";
    $smarty->assign('navigation', $navigation);
    if ($items_total_items > 0) {
        $wishlist_items = cw_query($items_qry . " LIMIT {$navigation['first_page']}, {$navigation['objects_per_page']}");
    }
    if (!empty($wishlist_items)) {
        $smarty->assign('wishlist_items_nav', $wishlist_items_nav);
    }
    return $wishlist_items;
}
function cw_accounting_get_movements($mtype, $data)
{
    global $tables;
    $fields = array();
    $from_tbls = array();
    $query_joins = array();
    $where = array();
    $groupbys = array();
    $having = array();
    $orderbys = array();
    $from_tbls[] = 'movements';
    $query_joins['accounting_categories'] = array('on' => "{$tables['accounting_categories']}.accounting_category_id = {$tables['movements']}.accounting_category_id", 'parent' => 'movements', 'is_inner' => 1);
    $fields[] = "{$tables['accounting_categories']}.category";
    /*
        $query_joins['movements_info_'.$mtype] = array (
            'tblname' => 'movements_'.$mtype,
            'on' => "movements_info.movements_id = $tables[movements].movements_id",
        );
    */
    $fields[] = "{$tables['movements']}.*";
    //    $fields[] = "movements_info.*";
    $where[] = "1";
    if ($data['warehouse_customer_id']) {
        $where[] = "{$tables['movements']}.warehouse_customer_id='" . $data['warehouse_customer_id'] . "'";
    }
    if ($data['substring']) {
        $where[] = "{$tables['movements']}.product like '%" . $data['substring'] . "%'";
    }
    if ($data['productcode']) {
        $where[] = "{$tables['movements']}.productcode like '%" . $data['productcode'] . "%'";
    }
    if ($data['price_min']) {
        $where[] = "{$tables['movements']}.price >= '" . $data['price_min'] . "'";
    }
    if ($data['price_max']) {
        $where[] = "{$tables['movements']}.price <= '" . $data['price_max'] . "'";
    }
    if ($data['amount_min']) {
        $where[] = "{$tables['movements']}.amount >= '" . $data['amount_min'] . "'";
    }
    if ($data['amount_max']) {
        $where[] = "{$tables['movements']}.amount <= '" . $data['amount_max'] . "'";
    }
    if ($data['pos_customer_id']) {
        $movements_info[] = 'G';
        $fields[] = "movements_G.pos_customer_id";
        $where[] = "movements_G.pos_customer_id='" . $data['pos_customer_id'] . "'";
    }
    if ($data['date_start']) {
        $where[] = "{$tables['movements']}.date >= '" . $data['date_start'] . "'";
    }
    if ($data['date_end']) {
        $where[] = "{$tables['movements']}.date <= '" . $data['date_end'] . "'";
    }
    if (count($movements_info)) {
        $movements_info = array_unique($movements_info);
        foreach ($movements_info as $tp) {
            $query_joins['movements_' . $tp] = array('tblname' => 'movements_' . $tp, 'on' => "movements_{$tp}.movements_id = {$tables['movements']}.movements_id", 'parent' => 'movements');
        }
    }
    if ($data['by_doc']) {
        $query_joins['docs'] = array('on' => "{$tables['docs']}.doc_id = {$tables['movements']}.doc_id", 'is_inner' => 1);
        $query_joins['docs_user_info'] = array('on' => "{$tables['docs_user_info']}.doc_info_id = {$tables['docs']}.doc_info_id", 'is_inner' => 1);
        $query_joins['docs_info'] = array('on' => "{$tables['docs_info']}.doc_info_id = {$tables['docs']}.doc_info_id", 'is_inner' => 1);
        $query_joins['warehouse_divisions'] = array('on' => "{$tables['warehouse_divisions']}.division_id = {$tables['movements']}.warehouse_customer_id", 'is_inner' => 1);
        $fields[] = "{$tables['warehouse_divisions']}.title as warehouse_title";
        $fields[] = "{$tables['docs']}.date";
        $fields[] = "{$tables['docs_user_info']}.customer_id";
        $fields[] = "{$tables['docs_info']}.total";
        $fields[] = "{$tables['docs_info']}.warehouse_customer_id";
        $groupbys[] = "{$tables['movements']}.doc_id";
    }
    $count_query = cw_db_generate_query(array('count(*)'), $from_tbls, $query_joins, $where, $groupbys, $having, $orderbys);
    if ($data['by_doc']) {
        $_res = db_query($count_query);
        $total_items = db_num_rows($_res);
        db_free_result($_res);
    } else {
        $total_items = cw_query_first_cell($count_query);
    }
    if ($data['all']) {
        $navigation = cw_core_get_navigation($target, $total_items, 0, $total_items);
    } else {
        $navigation = cw_core_get_navigation($target, $total_items, $data['page']);
    }
    if ($total_items) {
        $movements = cw_query(cw_db_generate_query($fields, $from_tbls, $query_joins, $where, $groupbys, $having, $orderbys) . " LIMIT {$navigation['first_page']}, {$navigation['objects_per_page']}");
        if ($data['by_doc']) {
            foreach ($movements as $k => $v) {
                $movements[$k]['movements'] = cw_query($sql = "select * from {$tables['movements']} where doc_id='{$v['doc_id']}'");
                $movements[$k]['items_count'] = cw_query_first_cell("select count(*) from {$tables['docs_items']} where doc_id='{$v['doc_id']}'");
            }
        }
    }
    return array($movements, $navigation);
}
function cw_taxes_search($params, $return = null)
{
    extract($params);
    global $tables, $current_language;
    $fields = $from_tbls = $query_joins = $where = $groupbys = $having = $orderbys = array();
    $from_tbls[] = 'taxes';
    $fields[] = "{$tables['taxes']}.*";
    if (!empty($product_id)) {
        $fields[] = "{$product_id} as product_id";
    }
    # kornev, merge standart and additional variables
    if ($return) {
        foreach ($return as $saname => $sadata) {
            if (isset(${$saname}) && is_array(${$saname}) && empty(${$saname})) {
                ${$saname} = $sadata;
            }
        }
    }
    if ($data['rates_count']) {
        $fields[] = "COUNT({$tables['tax_rates']}.tax_id) as rates_count";
        $query_joins[$tables['tax_rates']] = array('tblname' => "tax_rates", 'on' => "{$tables['tax_rates']}.tax_id={$tables['taxes']}.tax_id");
        $groupbys[] = "{$tables['taxes']}.tax_id";
    }
    if (isset($data['active'])) {
        $where[] = "{$tables['taxes']}.active='{$data['active']}'";
    }
    if (isset($data['use_info'])) {
        $where[] = "{$tables['taxes']}.use_info='{$data['use_info']}'";
    }
    if (!empty($data['sort_field'])) {
        $direction = $data['sort_direction'] ? 'DESC' : 'ASC';
        $orderbys[] = $data['sort_field'] . ' ' . $direction;
    } else {
        $orderbys[] = 'priority';
    }
    $search_query = cw_db_generate_query($fields, $from_tbls, $query_joins, $where, $groupbys, $having, $orderbys);
    return cw_query($search_query);
}
    }
    $groupbys[] = "{$tables['products']}.product_id";
    cw_event('on_prepare_search_orders', array($data, $docs_type, &$fields, &$query_joins, &$where, &$groupbys, &$having, &$orderbys));
    # kornev, we don't need to sort the result in counter - because it's faster to do it this way
    $count_query = cw_db_generate_query(array('count(*)'), $from_tbls, $query_joins, $where, $groupbys, $having, null);
    $_res = db_query($count_query);
    $total_items = db_num_rows($_res);
    db_free_result($_res);
    $app_config_file['interface']['items_per_page'] = array(20, 50, 100, 500, 1000, 5000, 10000);
    $smarty->assign('app_config_file', $app_config_file);
    $navigation = cw_core_get_navigation($target, $total_items, $page);
    $navigation['script'] = "index.php?target={$target}&mode=search";
    $smarty->assign('navigation', $navigation);
    if ($total_items > 0) {
        $page = $data['page'];
        $products = cw_query($qry = cw_db_generate_query($fields, $from_tbls, $query_joins, $where, $groupbys, $having, $orderbys) . " LIMIT {$navigation['first_page']}, {$navigation['objects_per_page']}");
    }
    $smarty->assign('products', $products);
    $smarty->assign('orders', $products);
    $smarty->assign('mode', $mode);
}
$location[] = array(cw_get_langvar_by_name('lbl_docs_info_' . $docs_type), 'index.php?target=' . $target);
$smarty->assign('docs_type', $docs_type);
$smarty->assign('countries', cw_map_get_countries());
$smarty->assign('states', cw_map_get_states());
$smarty->assign('payment_methods', cw_func_call('cw_payment_search', array('data' => array('type' => 1))));
$smarty->assign('shippings', cw_func_call('cw_shipping_search', array('data' => array('active' => 1))));
$smarty->assign('search_prefilled', $search_data['profit_reports'][$docs_type]);
$smarty->assign('js_tab', $search_data['profit_reports'][$docs_type]['js_tab']);
$smarty->assign('attribute_data', array('field' => 'posted_data[advanced][domain_id][]', 'values' => $search_data['profit_reports'][$docs_type]['advanced']['domain_id']));
$smarty->assign('main', 'profit_reports');
<?php

$search_data =& cw_session_register('search_data', array());
if ($action == 'go') {
    $date_fields = array('' => array('start_date' => 0, 'end_date' => 1));
    cw_core_process_date_fields($posted_data, $date_fields);
    $search_data['payment_history'] = $posted_data;
    cw_header_location('index.php?target=' . $target);
}
$paid_total_result = cw_query_first("SELECT SUM(commissions) AS numba FROM {$tables['salesman_payment']} WHERE paid='Y' AND salesman_customer_id='{$customer_id}'");
$smarty->assign('paid_total', $paid_total);
$data = $search_data['payment_history'];
$where = array();
$from_tbls = array('salesman_payment');
$where[] = 'paid="Y"';
if ($data['start_date']) {
    $where[] = "{$tables['salesman_payment']}.add_date>='{$data['start_date']}'";
}
if ($data['end_date']) {
    $where[] = "{$tables['salesman_payment']}.add_date>='{$data['end_date']}'";
}
$total_payments = cw_query_first_cell(cw_db_generate_query('count(*)', $from_tbls, '', $where, '', '', '', 0));
if ($total_payments) {
    $smarty->assign('payments', cw_query(cw_db_generate_query('*', $from_tbls, '', $where, '', '', array('add_date'))));
}
$navigation = cw_core_get_navigation($target, $total_payments, $page);
$navigation['script'] = 'index.php?target=' . $target;
$smarty->assign('navigation', $navigation);
$smarty->assign('search_prefilled', $data);
$smarty->assign('main', 'payment_history');
        list($from_time, $to_time) = cw_core_get_time_frame("-1 month");
    } elseif ($shippment_search == 4) {
        $from_time = cw_core_strtotime($from_date);
        $to_time = cw_core_strtotime($to_date);
    }
    $where[] = "type='S'";
    if ($from_time) {
        $where[] = "date >= '{$from_time}'";
    }
    if ($to_time) {
        $where[] = "date <= '{$to_time}'";
    }
    $count_query = cw_db_generate_query(array('count(*)'), $from_tbls, '', $where, '', '', $orderbys);
    $total_items = cw_query_first_cell($count_query);
    $navigation = cw_core_get_navigation($target, $total_items, $page);
    $navigation['script'] = "indes.php?target={$target}&mode={$mode}";
    $smarty->assign('navigation', $navigation);
    if ($total_items > 0) {
        $ship_docs = cw_query(cw_db_generate_query($fields, $from_tbls, '', $where, '', '', $orderbys) . " LIMIT {$navigation['first_page']}, {$navigation['objects_per_page']}");
        if (is_array($ship_docs)) {
            foreach ($ship_docs as $k => $v) {
                $ship_docs[$k] = cw_doc_get($v['doc_id']);
            }
        }
        $smarty->assign('ship_docs', $ship_docs);
    }
    $smarty->assign('current_section', false);
    $smarty->assign('home_style', 'iframe');
}
$smarty->assign('mode', $mode);
$smarty->assign('main', 'manager');
function cw_manufacturer_get($params, $return = null)
{
    extract($params);
    global $tables, $current_language;
    $fields = $from_tbls = $query_joins = $where = array();
    # kornev, merge standart and additional variables
    if ($return) {
        foreach ($return as $saname => $sadata) {
            if (isset(${$saname}) && is_array(${$saname}) && empty(${$saname})) {
                ${$saname} = $sadata;
            }
        }
    }
    $from_tbls[] = 'manufacturers';
    $fields[] = "{$tables['manufacturers']}.*";
    $lang = $lang ? $lang : $current_language;
    $query_joins['manufacturers_lng'] = array('on' => "{$tables['manufacturers_lng']}.manufacturer_id = {$tables['manufacturers']}.manufacturer_id AND {$tables['manufacturers_lng']}.code = '{$lang}'");
    $fields[] = "IFNULL({$tables['manufacturers_lng']}.manufacturer, {$tables['manufacturers']}.manufacturer) as manufacturer";
    $fields[] = "IFNULL({$tables['manufacturers_lng']}.descr, {$tables['manufacturers']}.descr) as descr";
    $query_joins['manufacturer_images'] = array('on' => "{$tables['manufacturer_images']}.id = {$tables['manufacturers']}.manufacturer_id");
    $fields[] = "IF({$tables['manufacturer_images']}.id IS NULL, '', 'Y') as is_image";
    $where[] = "{$tables['manufacturers']}.manufacturer_id = '{$manufacturer_id}'";
    if (isset($avail)) {
        $where[] = "{$tables['manufacturers']}.avail = '{$avail}'";
    }
    $search_query = cw_db_generate_query($fields, $from_tbls, $query_joins, $where, $groupbys, $having, $orderbys);
    $manuf = cw_query_first($search_query);
    if (!$manuf) {
        return false;
    }
    if (!empty($manuf['url']) && strpos($manuf['url'], 'www.') === 0) {
        $manuf['url'] = 'http://' . $manuf['url'];
    }
    $manuf['image'] = cw_image_get('manufacturer_images', $manufacturer_id);
    return $manuf;
}
function cw_payment_search($params, $return = null)
{
    extract($params);
    global $tables, $current_language, $addons, $cart;
    $fields = $from_tbls = $query_joins = $where = $groupbys = $having = $orderbys = array();
    # kornev, merge standart and additional variables
    if ($return) {
        foreach ($return as $saname => $sadata) {
            if (isset(${$saname}) && is_array(${$saname}) && empty(${$saname})) {
                ${$saname} = $sadata;
            }
        }
    }
    $language = $language ? $language : $current_language;
    $from_tbls[] = 'payment_methods';
    $fields[] = "{$tables['payment_methods']}.*";
    $query_joins['payment_methods_lng'] = array('on' => "{$tables['payment_methods_lng']}.payment_id = {$tables['payment_methods']}.payment_id AND {$tables['payment_methods_lng']}.code = '{$language}'", 'only_select' => 1);
    $fields[] = "IFNULL({$tables['payment_methods_lng']}.title, {$tables['payment_methods']}.title) as title";
    $fields[] = "IFNULL({$tables['payment_methods_lng']}.descr, {$tables['payment_methods']}.descr) as descr";
    $where = array();
    if (isset($data['active'])) {
        $where[] = "active='{$data['active']}'";
    }
    if ($data['type']) {
        $where[] = "(payment_operations & {$data['type']} or payment_operations & 3)";
    }
    if ($data['quotes'] == 1) {
        $where[] = "is_quotes = 1";
    } elseif ($data['quotes'] == 2) {
        $where[] = "is_web = 1";
    } elseif ($data['quotes'] == 3) {
        $where[] = "is_quotes != 1";
    }
    if ($data['total']) {
        $where[] = "(min_limit = 0 or min_limit < '{$total}') and (max_limit = 0 or max_limit > '{$total}')";
    }
    if (isset($data['membership_id'])) {
        $query_joins['payment_methods_memberships'] = array('on' => "{$tables['payment_methods_memberships']}.payment_id = {$tables['payment_methods']}.payment_id and {$tables['payment_methods_memberships']}.membership_id = '{$membership_id}'", 'is_inner' => 1);
    }
    $orderbys[] = "{$tables['payment_methods']}.orderby";
    $search_query = cw_db_generate_query($fields, $from_tbls, $query_joins, $where, $groupbys, $having, $orderbys);
    $payment_methods = cw_query($search_query);
    if (empty($payment_methods)) {
        $payment_methods = null;
    }
    if ($info_type & 1 && is_array($payment_methods)) {
        foreach ($payment_methods as $k => $v) {
            $payment_methods[$k]['shippings'] = cw_query_column("select shipping_id from {$tables['payments_shippings']} where payment_id='{$v['payment_id']}'");
        }
    }
    if (is_array($payment_methods)) {
        $payment_methods[0]['is_default'] = 1;
    }
    // if used quote
    if ($addons['quote_system'] && isset($cart['info']['quote_doc_id']) && !empty($cart['info']['quote_doc_id']) && isset($cart['info']['payment_id'])) {
        foreach ($payment_methods as $method) {
            if ($method['payment_id'] == $cart['info']['payment_id']) {
                return array($method);
            }
        }
        return array();
    }
    return $payment_methods;
}
function cw_category_search($params, $return = null)
{
    extract($params);
    global $tables, $current_language;
    $fields = $from_tbls = $query_joins = $where = $groupbys = $having = $orderbys = array();
    $from_tbls[] = 'categories';
    # kornev, merge standart and additional variables
    if ($return) {
        foreach ($return as $saname => $sadata) {
            if (isset(${$saname}) && is_array(${$saname}) && empty(${$saname})) {
                ${$saname} = $sadata;
            }
        }
    }
    $query_joins['categories_lng'] = array('on' => "{$tables['categories_lng']}.category_id = {$tables['categories']}.category_id and {$tables['categories_lng']}.code='{$current_language}'\n");
    $query_joins['categories_subcount'] = array('on' => "{$tables['categories_subcount']}.category_id = {$tables['categories']}.category_id");
    $fields[] = "{$tables['categories_subcount']}.subcategory_count";
    $fields[] = "{$tables['categories_subcount']}.product_count";
    $query_joins['categories_subcount_1'] = array('tblname' => 'categories_subcount', 'on' => "categories_subcount_1.category_id = {$tables['categories']}.category_id and categories_subcount_1.status=1");
    $fields[] = "categories_subcount_1.subcategory_count as subcategory_count_web";
    $fields[] = "categories_subcount_1.product_count as product_count_web";
    $fields[] = "{$tables['categories']}.*";
    $fields[] = "IFNULL({$tables['categories_lng']}.category, {$tables['categories']}.category) as category";
    $fields[] = "IFNULL({$tables['categories_lng']}.description, {$tables['categories']}.description) as description";
    $where[] = 1;
    if ($data['substring']) {
        $where[] = "(IFNULL({$tables['categories_lng']}.category, {$tables['categories']}.category) like '%{$data['substring']}%' or IFNULL({$tables['categories_lng']}.description, {$tables['categories']}.description) like '%{$data['substring']}%')";
    }
    if (isset($data['parent_id'])) {
        $where[] = "{$tables['categories']}.parent_id='" . intval($data['parent_id']) . "'";
    }
    if (isset($data['active']) || isset($data['status'])) {
        $data['status'] = intval($data['status'] || $data['active']);
        $where[] = "{$tables['categories']}.status = '{$data['status']}'";
    }
    if (isset($data['membership_id'])) {
        $query_joins['categories_memberships'] = array('on' => "{$tables['categories_memberships']}.category_id = {$tables['categories']}.category_id");
        $where[] = "{$tables['categories_memberships']}.membership_id='{$data['membership_id']}'";
    }
    $groupbys[] = "{$tables['categories']}.category_id";
    $orderbys[] = "{$tables['categories']}.order_by";
    $search_query_count = cw_db_generate_query('count(*)', $from_tbls, $query_joins, $where, $groupbys, $having, array(), 0);
    $search_query = cw_db_generate_query($fields, $from_tbls, $query_joins, $where, $groupbys, $having, $orderbys);
    $_res = db_query($search_query_count);
    $total_items = db_num_rows($_res);
    db_free_result($_res);
    $page = $data['page'];
    if ($data['count']) {
        return $total_items;
    } elseif ($data['limit']) {
        $limit_str = " LIMIT {$data['limit']}";
    } elseif ($data['all']) {
        $limit_str = '';
    } else {
        $navigation = cw_core_get_navigation($target, $total_items, $page);
        $limit_str = " LIMIT {$navigation['first_page']}, {$navigation['objects_per_page']}";
    }
    $categories = cw_query($search_query . $limit_str);
    if ($data['all']) {
        $navigation = cw_core_get_navigation($target, count($categories), $page, count($categories));
    }
    if (is_array($categories)) {
        foreach ($categories as $k => $v) {
            $categories[$k]['subcounts'] = cw_query_hash("SELECT cs.status, sum(cs.subcategory_count) as subcategory_count, \n\t\t\tsum(cs.product_count) as product_count\n        FROM {$tables['categories_subcount']} cs, {$tables['categories_parents']} cp\n        WHERE cs.membership_id='{$data['membership_id']}' AND\n\t\t\tcs.category_id = cp.category_id AND cp.parent_id='{$v['category_id']}'\n\t\t\tGROUP BY status", 'status', false, false);
        }
    }
    return array($categories, $navigation);
}