-------------------------------- BiZ9 START - 2-9-2026 ----------------------------------------------------------- -- Blank -------------------------------- BiZ9 END - 2-9-2026 ------------------------------------------------------------- -------------------------------- BiZ9 START - 2-18-2026 ----------------------------------------------------------- -- BK Index.js -- //9_portal_get static get = async(database,table,id,option) => { /* Options * ID - id_field / table. str / ex. title_url / default. id * Cache - cache_delete / table. bool / ex. true/false / default. false * Fields - field / table. obj / ex. {field_show_1:1,field_hide_2:0} / default. throw error * Sub Values ( Page Edit ) - sub_value table type. bool / ex. true/false / default. throw error * Group -- groups / table. obj. group_search / ex. [ { value_type:Value_Type.SEARCH_ITEMS,Value_Type.SEARCH_ONE, field:{field_show_1:1,field_hide_2:0}, title:{group_show_1:1,group_hide_2:0}, page_current:1, page_size:0, }]; * Foreign -- foreigns / value_type. obj. foreign_search / ex. [ { value_type:Value_Type.SEARCH_ITEMS,Value_Type.SEARCH_ONE, foreign_table:Type.DATA_PRODUCT, foreign_field:'id', parent_field:'parent_id', field:{field_show_1:1,field_hide_2:0}, title:'field_title', page_current:1, page_size:0, }]; * Join -- joins / value_type. obj. join_search / ex. [ { value_type:Value_Type.SEARCH_ITEMS,Value_Type.SEARCH_ONE search:search_obj, title:'field_title', page_current:1, page_size:0 }]; */ return new Promise((callback) => { let error= null; let cache = null; let data = Data_Logic.get(table,0); let field_result_ok = false; option = !Obj.check_is_empty(option) ? option : {}; async.series([ async function(call) { const [biz_error,biz_data] = await Cache.get(database.data_config); cache = biz_data; }, function(call){ if(option.cache_delete){ Adapter.delete_item_cache(database,cache,data.table,data.id,option).then(([biz_error,biz_data])=>{ if(biz_error){ error=Log.append(error,biz_error); }else{ call(); } }).catch(err => { Log.error('Data-Delete-Cache',err); error=Log.append(error,err); }); }else{ call(); } }, //item_by_id function(call){ Adapter.get_item(database,cache,table,id,option).then(([biz_error,biz_data])=>{ if(biz_error){ error=Log.append(error,biz_error); }else{ data = biz_data; call(); } }).catch(err => { Log.error('Data-Get',err); error=Log.append(error,err); }); }, //9_get_item_join 9_join get_item function(call){ if(option.joins){ Join.get_data(database,cache,option).then(([biz_error,biz_data])=>{ if(biz_error){ error=Log.append(error,biz_error); }else{ for(const search_item of biz_data){ data[search_item.title] = search_item.data; } call(); } }).catch(err => { Log.error('Data-Get-Item-Join',err); error=Log.append(error,err); }); }else{ call(); } }, //9_group //9_get_group get_item_group function(call){ if(option.groups && data.id){ Group.get_data(database,cache,[data],option).then(([biz_error,biz_data])=>{ if(biz_error){ error=Log.append(error,biz_error); }else{ data = biz_data[0]; } call(); }).catch(err => { Log.error('Data-Item-Group',err); error=Log.append(error,err); }); }else{ call(); } }, //9_foreigns //9_get_foreigns get_item_foreign function(call){ if(option.foreigns && data.id){ Foreign.get_data(database,cache,[data],option).then(([biz_error,biz_data])=>{ if(biz_error){ error=Log.append(error,biz_error); }else{ data = biz_data[0]; } call(); }).catch(err => { Log.error('Data-Search-Foreign',err); error=Log.append(error,err); }); }else{ call(); } }, async function(call){ if(option.sub_value && data.id){ data.sub_values = Data_Logic.get_sub_value_items(data.sub_values);; } }, ]).then(result => { callback([error,data]); }).catch(err => { Log.error("ERROR-PORTAL-GET",err); callback([error,{}]); }); }); }; -- //9_portal_search static search = (database,table,filter,sort_by,page_current,page_size,option) => { /* OPTIONS - START * Fields - field / table. obj / ex. {field_show_1:1,field_hide_2:0} / default. throw error * Distinct - distinct / table. obj. { field:'title' sort_by:Value_Type.SEARCH_SORT_BY_ASC, }; * Foreign -- foreigns / value_type. obj items / ex. [ { value_type:Value_Type.SEARCH_ITEMS,Value_Type.SEARCH_ONE,Value_Type.SEARCH_ONE foreign_table:Type.DATA_ITEM, foreign_field:'id', parent_field:'parent_id', field:{field_show_1:1,field_hide_2:0}, title:'field_title', }]; * Join -- joins / value_type. obj. join_search / ex. [ { value_type:Value_Type.SEARCH_ITEMS,Value_Type.SEARCH_ONE search:search_obj, title:'field_title', page_current:1, page_size:0 }]; * Group -- groups / value_type. obj. group_search / ex. [ { value_type:Value_Type.SEARCH_ITEMS,Value_Type.SEARCH_ONE, field:{field_show_1:1,field_hide_2:0}, title:{group_show_1:1,group_hide_2:0}, page_current:1, page_size:0, }]; * Return - value_type - item_count - page_count - filter - items /* OPTIONS - END*/ return new Promise((callback) => { let data = {value_type:value_type,item_count:0,page_count:1,filter:{},items:[]}; let cache = null; let error = null; option = !Obj.check_is_empty(option) ? option : {}; async.series([ async function(call) { const [biz_error,biz_data] = await Cache.get(database.data_config); cache = biz_data; }, function(call){ let search = Data_Logic.get_search(table,filter,sort_by,page_current,page_size); Adapter.get_item_list(database,cache,search.table,search.filter,search.sort_by,search.page_current,search.page_size,option).then(([biz_error,items,item_count,page_count])=>{ if(biz_error){ error=Log.append(error,biz_error); }else{ data.item_count=item_count; data.page_count=page_count; data.search=search; data[Value_Type.FIELD_ITEMS]=items; } call(); }).catch(err => { Log.error('Data-Search',err); error=Log.append(error,err); }); }, //9_get_items_join 9_join get_items function(call){ if(option.joins){ Join.get_data(database,cache,option).then(([biz_error,biz_data])=>{ if(biz_error){ error=Log.append(error,biz_error); }else{ for(const search_item of biz_data){ data[search_item.title] = search_item.data; } call(); } }).catch(err => { Log.error('Data-Get-Item-Join',err); error=Log.append(error,err); }); }else{ call(); } }, //9_foreigns //9_get_foreigns get_items_foreign function(call){ if(option.foreigns && data[Data_Field.ITEMS].length > 0){ Foreign.get_data(database,cache,data[Table_Field.ITEMS],option).then(([biz_error,biz_data])=>{ if(biz_error){ error=Log.append(error,biz_error); }else{ data[Data_Field.ITEMS] = biz_data; call(); } }).catch(err => { Log.error('Data-Search-Foreign',err); error=Log.append(error,err); }); }else{ call(); } }, //9_get_items_group 9_group function(call){ if(option.groups && data[Table_Field.ITEMS].length>0){ Group.get_data(database,cache,data[Table_Field.ITEMS],option).then(([biz_error,biz_data])=>{ if(biz_error){ error=Log.append(error,biz_error); }else{ data[Table_Field.ITEMS] = biz_data; } call(); }).catch(err => { Log.error('Data-Item-Group',err); error=Log.append(error,err); }); }else{ call(); } }, ]).then(result => { callback([error,data]); }).catch(err => { Log.error('DATA-PORTAL-SEARCH-ERROR',err); callback([err,[]]); }); }); }; -- //9_portal_post static post = async (database,table,data,option) => { /* option params * Fields - overwrite / obj_type. bool / ex. true,false / default. false -- post brand new obj.deleteing old. - reset / obj_type. bool / ex. true,false / default. false -- get update item aka recently saved item. - clean / obj_type. bool / ex. true,false / default. false -- checks and removes any list, groups, etc. - delete_cache / obj_type. bool / ex. true,false / default. false -- clear cache. */ return new Promise((callback) => { let error = null; let cache = {}; option = !Obj.check_is_empty(option) ? option : {}; async.series([ async function(call) { const [biz_error,biz_data] = await Cache.get(database.data_config); cache = biz_data; }, //clean function(call){ if(option.clean){ let new_data = {}; for(const field in data){ if(!Obj.check_is_array(data[field]) && !Obj.check_is_array(data[field]) && Obj.check_is_value(data[field]) && !Str.check_if_str_exist(field,'_item_count') && !Str.check_if_str_exist(field,'_page_count')) { new_data[field] = data[field]; } } data = new_data; call(); }else{ call(); } }, //delete cache item function(call){ if(option.overwrite || option.delete_cache){ Adapter.delete_item_cache(database,cache,table,data.id).then(([biz_error,biz_data])=>{ if(biz_error){ error=Log.append(error,biz_error); }else{ call(); } }).catch(err => { Log.error('Data-Post-Delete-Cache',err); error=Log.append(error,err); }); }else{ call(); } }, function(call){ Adapter.post_item(database,cache,table,data,option).then(([biz_error,biz_data])=>{ if(biz_error){ error=Log.append(error,biz_error); }else{ data = biz_data; call(); } }).catch(err => { Log.error('Data-Post-Post-Item-Apapter',err); error=Log.append(error,err); }); }, //reset function(call){ if(option.reset && data.id){ Adapter.get_item(database,cache,data.table,data.id).then(([biz_error,biz_data])=>{ if(biz_error){ error=Log.append(error,biz_error); }else{ data = biz_data; call(); } }).catch(err => { Log.error('Data-Get-Reset',err); error=Log.append(error,err); }); }else{ call(); } }, ]).then(result => { callback([error,data]); }).catch(err => { Log.error("Post-Data",err); callback([err,{}]); }); }); }; -- //9_portal_post_bulk static post_bulk = async (database,table,items) => { /* option params * n/a */ return new Promise((callback) => { let error = null; let data = Data_Logic.get(table,0); async.series([ async function(call){ const [biz_error,biz_data] = await Adapter.post_bulk(database,table,items); if(biz_error){ error=Log.append(error,biz_error); }else{ data = biz_data; } }, ]).then(result => { callback([error,data]); }).catch(err => { Log.error("Post-Bulk-Data",err); callback([err,{}]); }); }); }; -- //9_portal_delete static delete = async(database,table,id,option) => { /* * Params * - title * - description / table / example / required * Option * - delete_group / bool / true/false / default: false - delete Type.DATA_GROUP * Return * - tbd */ return new Promise((callback) => { let error = null; let cache = null; let data = Data_Logic.get(table,id); data[Data_Type.RESULT_OK_DELETE] = false; data[Data_Type.RESULT_OK_DELETE_CACHE] = false; data[Data_Type.RESULT_OK_DELETE_DATABASE] = false; data[Data_Type.RESULT_OK_GROUP_DELETE] = false; option = !Obj.check_is_empty(option) ? option : {delete_group:true}; let delete_group_list = []; async.series([ async function(call){ const [biz_error,biz_data] = await Cache.get(database.data_config); cache = biz_data; }, async function(call){ const [biz_error,biz_data] = await Adapter.delete_item(database,cache,table,id); if(biz_error){ error=Log.append(error,biz_error); }else{ if(biz_data[Data_Type.RESULT_OK_DELETE]){ data[Data_Type.RESULT_OK_DELETE] = true; data[Data_Type.RESULT_OK_DELETE_CACHE] = true; data[Data_Type.RESULT_OK_DELETE_DATABASE] = true; } } }, async function(call){ if(option.delete_group){ data[Data_Type.RESULT_OK_GROUP_DELETE] = false; let filter = {parent_id:data.id}; const [biz_error,biz_data] = await Data.delete_search(database,Data_Table.GROUP,filter); if(biz_error){ error=Log.append(error,biz_error); }else{ if(biz_data[Data_Type.RESULT_OK_DELETE]){ data[Data_Type.RESULT_OK_GROUP_DELETE] = true; } } } }, ]).then(result => { callback([error,data]); }).catch(err => { Log.error("Delete-Item",err); callback([err,{}]); }); }); }; -- //9_portal_post_items - 9_post_items static post_items = async (database,data_items) => { /* option params * n/a */ return new Promise((callback) => { let cache = {}; let error = null; async.series([ async function(call) { const [biz_error,biz_data] = await Cache.get(database.data_config); cache = biz_data; }, async function(call){ const [biz_error,biz_data] = await Adapter.post_item_list(database,cache,data_items); if(biz_error){ error=Log.append(error,biz_error); }else{ data_items = biz_data; } }, ]).then(result => { callback([error,data_items]); }).catch(err => { Log.error("Post-List-Data",err); callback([err,{}]); }); }); }; - //9_portal_delete_search static delete_search = async (database,table,filter,option) => { /* option params * n/a */ return new Promise((callback) => { let error = null; let data = Data_Logic.get(table,0,{data:{filter:filter}}); let cache = {}; data[Data_Type.RESULT_OK_DELETE] = false; let delete_item_query = { $or: [] }; let delete_group_list = []; let delete_items = []; option = !Obj.check_is_empty(option) ? option : {delete_group:true}; async.series([ async function(call) { const [biz_error,biz_data] = await Cache.get(database.data_config); cache = biz_data; }, function(call){ let search = Data_Logic.get_search(table,filter,{},1,0); Adapter.get_item_list(database,cache,search.table,search.filter,search.sort_by,search.page_current,search.page_size,option).then(([biz_error,items,item_count,page_count])=>{ if(biz_error){ error=Log.append(error,biz_error); }else{ if(items.length>0){ delete_items = items; } call(); } }).catch(err => { Log.error('Data-Search',err); error=Log.append(error,err); }); }, async function(call){ for(const data_item of delete_items){ let query_field = {}; query_field[Table_Field.PARENT_ID] = data_item.id delete_item_query.$or.push(query_field); data[Table_Field.RESULT_OK_DELETE] = true; const [biz_error,biz_data] = await Adapter.delete_item(database,cache,data_item.table,data_item.id); } }, //get_group_ids function(call){ if(option.delete_group && delete_item_query.$or.length > 0){ let search = Data_Logic.get_search(table,{},{},1,0,{field:{id:1,title:1,table:1}}); Adapter.get_item_list(database,cache,search.table,search.filter,search.sort_by,search.page_current,search.page_size,option).then(([biz_error,items,item_count,page_count])=>{ if(biz_error){ error=Log.append(error,biz_error); }else{ delete_group_list = items; call(); } }); }else{ call(); } }, async function(call){ if(option.delete_group && delete_item_query.$or.length > 0){ data[Data_Type.RESULT_OK_GROUP_DELETE] = false; let search = Data_Logic.get_search(Data_Table.GROUP,delete_item_query,{},1,0); const [biz_error,biz_data] = await Adapter.delete_item_list(database,cache,Data_Table.GROUP,search.filter); if(biz_error){ error=Log.append(error,biz_error); }else{ data[Data_Type.RESULT_OK_GROUP_DELETE] = true; } } }, ]).then(result => { callback([error,data]); }).catch(err => { Log.error("Delete-List-Data",err); callback([err,[]]); }); }); }; - //9_portal_count static count = async (database,table,filter) => { /* option params * n/a */ return new Promise((callback) => { let error = null; let cache = {}; let data = {}; async.series([ async function(call) { const [biz_error,biz_data] = await Cache.get(database.data_config); cache = biz_data; }, async function(call){ const [biz_error,biz_data] = await Adapter.get_count_item_list(database,cache,table,filter); if(biz_error){ error=Log.append(error,biz_error); }else{ data = biz_data.count; } }, ]).then(result => { callback([error,data]); }).catch(err => { Log.error("Count-List-Data",err); callback([err,{}]); }); }); }; - //9_data_copy //9_copy static copy = async (database,table,id,option) => { /* * params * - title_tbd * - description. / obj_type / ex. * options * - copy_group * - description. / obj_type / ex. true/false * return * - title_tbd * - description. / obj_type / ex. * */ return new Promise((callback) => { let error = null; let cache = {}; let data = Data_Logic.get(table,id); let top_data = Data_Logic.get(table,0); let copy_data = Data_Logic.get(table,0); option = !Obj.check_is_empty(option) ? option : {}; async.series([ async function(call) { const [biz_error,biz_data] = await Cache.get(database.data_config); cache = biz_data; }, async function(call){ let data_group_option = Data_Logic.get_group(); const [biz_error,biz_data] = await Data.get(database,table,id,{groups:[data_group_option]}); if(biz_error){ error=Log.append(error,biz_error); }else{ top_data=biz_data; } }, //top_item async function(call){ if(top_data.id){ copy_data = Data_Logic.copy(table,top_data); copy_data[Table_Field.TITLE] = 'Copy '+top_data[Table_Field.TITLE]; copy_data[Table_Field.TITLE_URL] = 'copy_'+top_data[Table_Field.TITLE_URL]; copy_data[Table_Field.SOURCE_ID] = top_data.id; copy_data[Table_Field.SOURCE_TABLE] = top_data.table; const [biz_error,biz_data] = await Data.post(database,copy_data.table,copy_data); if(biz_error){ error=Log.append(error,biz_error); }else{ copy_data=biz_data; } }else{ copy_data = Data_Logic.get_not_found(table,id); } }, async function(call){ if(top_data.id && top_data.groups.length > 0){ copy_data.groups = []; let post_groups = []; for(const group of top_data.groups){ let copy_group = Data_Logic.copy(Table_Field.GROUP,group); copy_group[Table_Field.TITLE] = 'Copy '+group[Table_Field.TITLE]; copy_group[Table_Field.TITLE_URL] = 'copy_'+group[Table_Field.TITLE_URL]; copy_group[Table_Field.SOURCE_ID] = group.id; copy_group[Table_Field.SOURCE_TABLE] = group.table; copy_group[Table_Field.PARENT_TABLE] = copy_data.table; copy_group[Table_Field.PARENT_ID] = copy_data.id; post_groups.push(copy_group); } const [biz_error,biz_data] = await Adapter.post_item_list(database,cache,post_groups); if(biz_error){ error=Log.append(error,biz_error); }else{ copy_data.groups=biz_data; } } }, ]).then(result => { data = copy_data; callback([error,data]); }).catch(err => { Log.error("Copy",err); callback([err,{}]); }); }); }; -- Fix --- type - check --- Type --- Data_Type --- get_data_type_by_type --- Field --- Field_Items, FIELD_ITEMS --- foreign_data_type -- BK Sub Value //sub_value function(call){ if(option.sub_value && data.id){ if(!option.foreigns){ option.foreigns = []; } option.foreigns.push(Data_Logic.get_foreign(Value_Type.SEARCH_ITEMS,Type.DATA_SUB_VALUE,Type.Field_PARENT_ID,Type.FIELD_ID)); call(); }else{ call(); } }, -------------------------------- BiZ9 END - 2-18-2026 ------------------------------------------------------------- -------------------------------- BiZ9 START - 2-17-2026 ----------------------------------------------------------- -- Post Stat /* //post_stat_cart async function(call){ if(data.cart.id && option.post_stat){ data.stat_cart = []; let post_cart_stat = Stat_Logic.get(Type.DATA_CART,cart.id,Type.STAT_CART,data.cart.user_id,cart); post_cart_stat.grand_total = Cart_Logic.get_total(cart).grand_total; let option = {post_unique:false}; const [biz_error,biz_data] = await Stat_Data.post(database,post_cart_stat,option); if(biz_error){ error=Log.append(error,biz_error); }else{ data.stat_cart = biz_data; } } }, //post stat cart_items async function(call){ if(data.cart.id && option.post_stat){ data.stat_cart_items = []; for(const cart_item of cart.cart_items){ let post_cart_item_stat = Stat_Logic.get(Type.DATA_CART_ITEM,cart_item.id,Type.STAT_CART_ITEM,cart.user_id,cart_item); let option = {post_unique:false}; const [biz_error,biz_data] = await Stat_Data.post(database,post_cart_item_stat,option); if(biz_error){ error=Log.append(error,biz_error); }else{ data.stat_cart_items.push(biz_data); } } } }, //post stat cart_sub_items async function(call){ if(data.cart.id && option.post_stat){ data.stat_cart_sub_items = []; for(const cart_item of cart.cart_items){ for(const cart_sub_item of cart_item.cart_sub_items){ let post_cart_sub_item_stat = Stat_Logic.get(Type.DATA_CART_SUB_ITEM,cart_sub_item.id,Type.STAT_CART_SUB_ITEM,cart.user_id,cart_sub_item); let option = {post_unique:false}; const [biz_error,biz_data] = await Stat_Data.post(database,post_cart_sub_item_stat,option); if(biz_error){ error=Log.append(error,biz_error); }else{ data.stat_cart_sub_items.push(biz_data); } } } } }, */ /* //post_stat_order async function(call){ if(data.order.id && option.post_stat){ data.stat_order = []; let post_order_stat = Stat_Logic.get(Type.DATA_ORDER,order.id,Type.STAT_ORDER,data.order.user_id,order); let option = {post_unique:false}; const [biz_error,biz_data] = await Stat_Data.post(database,post_order_stat,option); if(biz_error){ error=Log.append(error,biz_error); }else{ data.stat_order = biz_data; } } }, //post stat order_items async function(call){ if(data.order.id && option.post_stat){ data.stat_order_items = []; for(const order_item of order.order_items){ let post_order_item_stat = Stat_Logic.get(Type.DATA_ORDER_ITEM,order_item.id,Type.STAT_ORDER_ITEM,order.user_id,order_item); let option = {post_unique:false}; const [biz_error,biz_data] = await Stat_Data.post(database,post_order_item_stat,option); if(biz_error){ error=Log.append(error,biz_error); }else{ data.stat_order_items.push(biz_data); } } } }, //post stat order_sub_items async function(call){ if(data.order.id && option.post_stat){ data.stat_order_sub_items = []; for(const order_item of order.order_items){ for(const order_sub_item of order_item.order_sub_items){ let post_order_sub_item_stat = Stat_Logic.get(Type.DATA_ORDER_SUB_ITEM,order_sub_item.id,Type.STAT_ORDER_SUB_ITEM,order.user_id,order_sub_item); let option = {post_unique:false}; const [biz_error,biz_data] = await Stat_Data.post(database,post_order_sub_item_stat,option); if(biz_error){ error=Log.append(error,biz_error); }else{ data.stat_order_sub_items.push(biz_data); } } } data.stat_order_sub_items = data.stat_order_sub_items } }, //post stat order_payments async function(call){ if(data.order.id && option.post_stat){ data.stat_order_payments = []; for(const order_payment of order_payments){ let post_order_payment_stat = Stat_Logic.get(Type.DATA_ORDER_PAYMENT,order_payment.id,Type.STAT_ORDER_PAYMENT,order.user_id,order_payment); let option = {post_unique:false}; const [biz_error,biz_data] = await Stat_Data.post(database,post_order_payment_stat,option); if(biz_error){ error=Log.append(error,biz_error); }else{ data.stat_order_payments.push(biz_data); } } } }, */ -------------------------------- BiZ9 END - 2-17-2026 ------------------------------------------------------------- -------------------------------- BiZ9 START - 2-15-2026 ----------------------------------------------------------- -- Group Items BackUp //9_get_items_group function(call){ if(option.groups && data[Type.FIELD_ITEMS].length>0){ let search_items = []; for(const item of option.groups){ search_items.push({ field : item.field ? item.field : {}, title : item.title ? item.title : {}, // {groupShow:1,groupHide:0},{0:all} image : item.image ? item.image : false, page_current : item.page_current ? item.page_current : 1, page_size : item.page_current ? item.page_current : 0, }); } for(const search_item of search_items){ let group_list = []; let hide_group_list = []; let group_query = {$or:[],$and:[]}; for(const field in search_item.title) { let new_item = {}; new_item[field] = search_item.title[field]; if(new_item[field]){ let query_field = {}; query_field[Type.FIELD_TITLE_URL] = field; group_query.$or.push(query_field); }else{ let query_field = {}; query_field[Type.FIELD_TITLE_URL] = {$ne:field}; group_query.$and.push(query_field); } } for(const item of data[Type.FIELD_ITEMS]){ let query_field = {}; query_field[Type.FIELD_PARENT_ID] = item.id; group_query.$and.push(query_field); } if(group_query.$or.length <= 0){ delete group_query.$or; } let item_group_join_option = {field:search_item.field}; if(search_item.image){ item_group_join_option['foreigns'] = [Data_Logic.get_search_foreign(Type.SEARCH_ITEMS,Type.DATA_IMAGE,Type.FIELD_PARENT_ID,Type.FIELD_ID)]; } let item_group_join_search = Data_Logic.get_search(Type.DATA_GROUP,group_query,{},search_item.page_current,search_item.page_size); Portal.search_simple(database,item_group_join_search.data_type,item_group_join_search.filter,item_group_join_search.sort_by,item_group_join_search.page_current,item_group_join_search.page_size,item_group_join_option).then(([biz_error,biz_data])=>{ if(biz_error){ error=Log.append(error,biz_error); }else{ for(const data_item of data[Type.FIELD_ITEMS]){ data_item.groups = []; for(const group of biz_data[Type.FIELD_ITEMS]){ if(data_item.id == group.parent_id){ if(!data_item[Str.get_title_url(group.title)]){ data_item[Str.get_title_url(group.title)] = []; } data_item[Str.get_title_url(group.title)].push(group); data_item.groups.push(group); } } } call(); } }).catch(err => { Log.error('Data-Portal-Search-Groups',err); error=Log.append(error,err); }); } }else{ call(); } }, -------------------------------- BiZ9 END - 2-15-2026 ------------------------------------------------------------- -------------------------------- BiZ9 START - 2-14-2026 ----------------------------------------------------------- -- Bk FOreigns 1 //foreign_2 function(call){ /* function run_data_old(search_item) { return new Promise((resolve) => { let search = Data_Logic.get_search(search_item.foreign_data_type,search_item.query,{},search_item.page_current,search_item.page_size); let foreign_option = search_item.field ? search_item.field : {}; if(search_item.type == Type.SEARCH_ITEMS){ get_item_list_adapter(database,cache,search.data_type,search.filter,search.sort_by,search.page_current,search.page_size,option).then(([biz_error,items,item_count,page_count])=>{ resolve(items); }).catch(err => { Log.error('Foreign-Get-Data',err); error=Log.append(error,err); }); } }); } */ function run_data(search_item) { return new Promise((callback) => { let error = null; let data = null; async.series([ async function(call) { if(search_item.type == Type.SEARCH_ITEMS){ const biz_data = await get_items_data(search_item); /* for(const item of biz_data){ search_item.items.push(item); } */ }else if(search_item.type == Type.SEARCH_COUNT){ const biz_data = await get_count_data(search_item); search_item.data = biz_data ? biz_data : 0; }else if(search_item.type == Type.SEARCH_ONE){ search_item.page_size = 1; const biz_data = await get_items_data(search_item); search_item.data = biz_data[0].id ? biz_data[0] : Data_Logic.get_not_found(search_item.foreign_data_type,0); } }, ]).then(result => { callback(search_item); }).catch(err => { Log.error("Blank-Get",err); callback([error,[]]); }); }); }; const run = async () => { for(const search_item of foreign_search_items){ for(const search_foreign_item of search_item.foreigns){ let foreign_search_item = Foreign.get_search(search_foreign_item); for(const data_item of search_item.items){ let query_field = {}; query_field[foreign_search_item.foreign_field] = data_item[foreign_search_item.parent_field]; foreign_search_item.query.$or.push(query_field); } const biz_data = await run_data(foreign_search_item); /* for(const data_item of search_item.items){ if(search_item.type == Type.SEARCH_ITEMS){ const match_items = biz_data.filter(item_find => item_find[foreign_search_item.foreign_field] === data_item[foreign_search_item.parent_field]); data_item[foreign_search_item.title] = match_items; }else if(search_item.type == Type.SEARCH_COUNT){ data_item[foreign_search_item.title] = biz_data; }else if(search_item.type == Type.SEARCH_ONE){ data_item[foreign_search_item.title] = biz_data; } } */ } } }; run().then(() => { //call(); }) }, -------------------------------- BiZ9 END - 2-9-2026 ------------------------------------------------------------- -------------------------------- BiZ9 START - 2-12-2026 ----------------------------------------------------------- -- FOreign and Await Issues Notez ---------------------------------------------- //data_item[search_item.title] = biz_data; //get_search_data(database,cache,data_item[search_item.title],sub_search_item).then((biz_data)=>{ //cool.push(biz_data); //Log.w('correct',biz_data); //data_item[search_item.title] = biz_data; //}).catch(err => { //Log.error('Data-Blank',err); //error=Log.append(error,err); //}); ---------------------------------------------- --- blank ---- blank_ const run = async () => { for(const sub_search_item of foreign_search_foreign_items){ for(const data_item of data_items){ const promises = data_item[search_item.title].map(async sub_data_item => { const biz_data = await get_search_data(database,cache,data_item[search_item.title],sub_search_item); cool.push('rrrr'); //data_item[search_item.title] = biz_data; //get_search_data(database,cache,data_item[search_item.title],sub_search_item).then((biz_data)=>{ //cool.push(biz_data); //Log.w('correct',biz_data); //data_item[search_item.title] = biz_data; //}).catch(err => { //Log.error('Data-Blank',err); //error=Log.append(error,err); //}); }); await Promise.all(promises); } } } -------------------------------------------- const run = async () => { for(const sub_search_item of foreign_search_foreign_items){ for(const data_item of data_items){ //for(const sub_data_item of data_item[search_item.title]){ //const biz_data = await Portal.get_search_data(database,cache,data_item[search_item.title],sub_search_item); async.forEachOf(data_item[search_item.title],(sub_data_item,key,go)=>{ //get_search_data(database,cache,data_item[search_item.title],sub_search_item).then((biz_data)=>{ console.log('here'); //console.log(biz_data); console.log('aaaaaaaa'); console.log('aaaaaaaa'); //const biz_data = await get_search_data(database,cache,data_item[search_item.title],sub_search_item); //console.log(biz_data); cool.push('biz_data'); console.log('bbbbbbb'); //console.log(biz_data); console.log('bbbbbbb'); console.log('rrrrrr'); //const biz_data = await apple(); //console.log(biz_data); go(); /* }).catch(err => { Log.error('Data-Blank',err); error=Log.append(error,err); }); */ /* (async () => { const [biz_data] = await Portal.get_search_data(database,cache,data_item[search_item.title],sub_search_item); //console.log(biz_data); cool.push('biz_data'); })(); console.log('aaaaa'); //console.log(biz_data); go(); */ }, error => { }); //data_item[search_item.title] = biz_data; //data_item[search_item.title] = []; //data_items[data_item[search_item.title]].push('aaaaaa'); //Log.w('ddddd',data_item[search_item.title]); //} } } } run().then(() => { console.log('done'); Log.w('coool33',cool); //call(); }); } (async () => { const biz_data = await Portal.get_search_data(database,cache,data_item[search_item.title],sub_search_item); done(biz_data) })(); //cool_list.push(biz_data); console.log('ccccc'); Log.w('ssss',cool_list); //console.log(biz_data); //console.log('here'); //for(const biz_data_value of biz_data){ // data_items = []; //Log.w('rrrr',biz_data_value); //} //sub_data_item[sub_search_item.title] = []; //for(const sub_data_value of biz_data_value[sub_search_item.title]){ //Log.w('here',sub_data_value); //sub_data_item[sub_search_item.title].push(sub_data_value); //} //} ---------------------------------------------- -------------------------------- BiZ9 START - 2-9-2026 ----------------------------------------------------------- -- Get Foreigns Data old ---------------------------------------------- //here_1 /* function get_data(search_item) { return new Promise((resolve) => { //here_3 let query = { $or: [] }; for(const data_item of data_items){ let query_field = {}; query_field[search_item.foreign_field] = search_item.parent_value; query.$or.push(query_field); }; let search = Data_Logic.get_search(search_item.foreign_data_type,query,{},search_item.page_current,search_item.page_size); let foreign_option = search_item.field ? search_item.field : {}; for(const data_item of data_items){ let query_field = {}; query_field[search_item.foreign_field] = search_item.parent_value; query.$or.push(query_field); }; get_item_list_adapter(database,cache,search.data_type,search.filter,search.sort_by,search.page_current,search.page_size,foreign_option).then(([biz_error,items,item_count,page_count])=>{ if(biz_error){ error=Log.append(error,biz_error); }else{ search_item[Type.FIELD_ITEMS] = items; function get_item_data(data_item) { return new Promise((resolve2) => { let query = {}; if(search_item.type == Type.SEARCH_ITEMS){ query[search_item.foreign_field] = data_item[search_item.parent_field]; let search = Data_Logic.get_search(search_item.foreign_data_type,query,{},1,0); data_item[search_item.title] = []; get_item_list_adapter(database,cache,search.data_type,search.filter,search.sort_by,search.page_current,search.page_size,foreign_option).then(([biz_error,items,item_count,page_count])=>{ if(biz_error){ error=Log.append(error,biz_error); }else{ for(const sub_data_item of items){ data_item[search_item.title].push(sub_data_item); } resolve2(data_item); } }).catch(err => { Log.error('Data-Portal-Get-Foreign-Items',err); error=Log.append(error,err); }); } else if(search_item.type == Type.SEARCH_COUNT){ query[search_item.foreign_field] = data_item[search_item.parent_field]; let search = Data_Logic.get_search(search_item.foreign_data_type,query,{},1,0); get_count_item_list_adapter(database,search.data_type,search.filter).then(([biz_error,biz_data])=>{ if(biz_error){ error=Log.append(error,biz_error); }else{ data_item[search_item.title] = biz_data.count; resolve2(); } }).catch(err => { Log.error('Data-Portal-Get-Foreigns-Count',err); error=Log.append(error,err); }); } else if(search_item.type == Type.SEARCH_ONE){ query[search_item.foreign_field] = data_item[search_item.parent_field]; let search = Data_Logic.get_search(search_item.foreign_data_type,query,{},1,0); data_item[search_item.title] = []; get_item_list_adapter(database,cache,search.data_type,search.filter,search.sort_by,search.page_current,search.page_size,foreign_option).then(([biz_error,items,item_count,page_count])=>{ if(biz_error){ error=Log.append(error,biz_error); }else{ for(const sub_data_item of items){ data_item[search_item.title] = items.length ? items[0] : Data_Logic.get_not_found(search_item.foreign_data_type,0); } resolve2(data_item); } }).catch(err => { Log.error('Data-Portal-Get-Foreign-Items',err); error=Log.append(error,err); }); } }); } //here_bottom const run = async () => { for(const data_item of data_items){ await get_item_data(data_item); } } run().then(() => { resolve(); }); } }).catch(err => { Log.error('Data-Portal-Get-Foreigns-Items',err); error=Log.append(error,err); }); }); //here_4 } */ //here2 async.series([ function(call){ let foreign_search_items = []; for(const foreign_item of option.foreigns){ for(const data_item of data_items){ foreign_search_items.push({ type : foreign_item.type ? foreign_item.type : Type.SEARCH_ITEMS, foreign_data_type : foreign_item.foreign_data_type, foreign_field : foreign_item.foreign_field, parent_field : foreign_item.parent_field, parent_value : data_item[foreign_item.parent_field], field : foreign_item.field ? foreign_item.field : null, title : foreign_item.title ? foreign_item.title : foreign_item.foreign_data_type, page_current : foreign_item.page_current ? foreign_item.page_current : 1, page_size : foreign_item.page_size ? foreign_item.page_size : 0, foreigns : foreign_item.foreigns ? foreign_item.foreigns : 0, items : [] }); } } const run = async () => { for(const search_item of foreign_search_items){ //await get_data(search_item); //old await Portal.get_data_foreign_search(database,cache,data_items,search_item); } } run().then(() => { call(); }); }, ---------------------------------------------- -- Get Item Foreigns --- //9_get_item_foreigns /* function(call){ if(data.id && option.foreigns){ let foreign_search_items = []; for(const item of option.foreigns){ foreign_search_items.push({ type : item.type ? item.type : Type.SEARCH_ITEMS, foreign_data_type : item.foreign_data_type, foreign_field : item.foreign_field, parent_field : item.parent_field, field : item.field ? item.field : {}, title : item.title ? item.title : Str.get_title_url(Data_Logic.get_data_type_by_type(item.foreign_data_type,{plural:true})), page_current: item.page_current ? item.page_current : 1, page_size: item.page_size ? item.page_size : 0, }); } function get_data(search_item) { return new Promise((resolve) => { let foreign_option = {field:search_item.field}; if(search_item.type == Type.SEARCH_ITEMS){ let query = {}; query[search_item.foreign_field] = data[search_item.parent_field]; let search = Data_Logic.get_search(search_item.foreign_data_type,query,{},1,0); get_item_list_adapter(database,cache,search.data_type,search.filter,search.sort_by,search.page_current,search.page_size,option).then(([biz_error,items,item_count,page_count])=>{ if(biz_error){ error=Log.append(error,biz_error); }else{ data[search_item.title] = items.length>0?items:[]; resolve(); } }).catch(err => { Log.error('Data-Portal-Get-Foreigns-Items',err); error=Log.append(error,err); }); } else if(search_item.type == Type.SEARCH_COUNT){ let query = {}; query[search_item.foreign_field] = data[search_item.parent_field]; let search = Data_Logic.get_search(search_item.foreign_data_type,query,{},1,0); get_count_item_list_adapter(database,cache,search.data_type,search.filter).then(([biz_error,biz_data])=>{ if(biz_error){ error=Log.append(error,biz_error); }else{ data[Str.get_title_url(search_item.title)] = biz_data.count; resolve(); } }).catch(err => { Log.error('Data-Portal-Get-Foreigns-Count',err); error=Log.append(error,err); }); } else if(search_item.type == Type.SEARCH_ONE){ let query = {}; query[search_item.foreign_field] = data[search_item.parent_field]; let search = Data_Logic.get_search(search_item.foreign_data_type,query,{},1,1); get_item_list_adapter(database,cache,search.data_type,search.filter,search.sort_by,search.page_current,search.page_size,option).then(([biz_error,items,item_count,page_count])=>{ if(biz_error){ error=Log.append(error,biz_error); }else{ data[Str.get_title_url(search_item.title)] = items.length>0 ? items[0] : Data_Logic.get_not_found(search_item.foreign_data_type,data[search_item.parent_field]); resolve(); } }).catch(err => { Log.error('Data-Portal-Get-Foreigns-One',err); error=Log.append(error,err); }); } }); } const run = async () => { for(const search_item of foreign_search_items){ await get_data(search_item); } } run().then(() => { call(); }); }else{ call(); } }, */ ---------------------------------------------- --- blank ---- blank_ ---------------------------------------------- -------------------------------- BiZ9 START - 1-18-2026 ----------------------------------------------------------- -- Data ForeignZ ---------------------------------------------- --- if(search_item.type == Type.TITLE_ITEMS){ let query = {}; query[search_item.foreign_field] = data_item[search_item.parent_field]; let search = Data_Logic.get_search(search_item.foreign_data_type,query,{},1,0); data_item[search_item.title] = []; console.log('here'); console.log(search); console.log('aaaaaaaa'); console.log(foreign_option); console.log('bbbbbb'); get_item_list_adapter(database,search.data_type,search.filter,search.sort_by,search.page_current,search.page_size,foreign_option).then(([biz_error,items,item_count,page_count])=>{ console.log(biz_error); console.log('bbbbbbb'); console.log(items); if(biz_error){ error=Log.append(error,biz_error); }else{ for(const sub_data_item of items){ data_item[search_item.title].push(sub_data_item); } resolve(); } }).catch(err => { console.log('errrr'); Log.error('Data-Portal-Get-Foreign-Items',err); error=Log.append(error,err); }); } --- let query = {}; query[search_item.foreign_field] = data_item[search_item.parent_field]; let search = Data_Logic.get_search(search_item.foreign_data_type,query,{},1,1); get_item_list_adapter(database,search.data_type,search.filter,search.sort_by,search.page_current,search.page_size,foreign_option).then(([biz_error,items,item_count,page_count])=>{ if(biz_error){ error=Log.append(error,biz_error); }else{ data_item[search_item.title] = items.length ? items[0] : Data_Logic.get_not_found(search_item.foreign_data_type,0); resolve(); } }).catch(err => { Log.error('Data-Portal-Get-Foreigns-One',err); error=Log.append(error,err); }); --- blank ---- blank_ let query = {}; query[search_item.foreign_field] = data_item[search_item.parent_field]; let search = Data_Logic.get_search(search_item.foreign_data_type,query,{},1,0); get_count_item_list_adapter(database,search.data_type,search.filter).then(([biz_error,biz_data])=>{ if(biz_error){ error=Log.append(error,biz_error); }else{ data_item[search_item.title] = biz_data.count; resolve(); } }).catch(err => { Log.error('Data-Portal-Get-Foreigns-Count',err); error=Log.append(error,err); }); ---------------------------------------------- -------------------------------- BiZ9 START - 1-16-2025 ----------------------------------------------------------- -- To DO ---------------------------------------------- --- Item ---- Get Joins -- done ---- Get Groups -- done ---- Get Foreigns -- done --- Items ---- Get Joins -- done ---- Get Groups -- done ---- Get Foreigns --now ---------------------------------------------- -------------------------------- BiZ9 START - 1-16-2026 ----------------------------------------------------------- -- Blank ---------------------------------------------- --- get_foreigns if(search_item.type == Type.TITLE_ITEMS){ let query = {}; query[search_item.foreign_field] = data_item[search_item.parent_field]; let search = Data_Logic.get_search(search_item.foreign_data_type,query,{},1,0); data_item[search_item.title] = []; get_item_list_adapter(database,search.data_type,search.filter,search.sort_by,search.page_current,search.page_size,foreign_option).then(([biz_error,items,item_count,page_count])=>{ if(biz_error){ error=Log.append(error,biz_error); }else{ for(const sub_data_item of items){ data_item[search_item.title].push(sub_data_item); } } }).catch(err => { Log.error('Data-Foreigns',err); error=Log.append(error,err); }); }else if(search_item.type == Type.TITLE_COUNT){ let query = {}; query[search_item.foreign_field] = data_item[search_item.parent_field]; let search = Data_Logic.get_search(search_item.foreign_data_type,query,{},1,0); const [biz_error,biz_data] = await Portal.count(database,search.data_type,search.filter); if(biz_error){ error=Log.append(error,biz_error); }else{ data_item[search_item.title] = biz_data; } }else if(search_item.type == Type.TITLE_ONE){ let query = {}; query[search_item.foreign_field] = data_item[search_item.parent_field]; let search = Data_Logic.get_search(search_item.foreign_data_type,query,{},1,1); const [biz_error,items,item_count,page_count] = await get_item_list_adapter(database,search.data_type,search.filter,search.sort_by,search.page_current,search.page_size,foreign_option); if(biz_error){ error=Log.append(error,biz_error); }else{ data_item[search_item.title] = items.length ? items[0] : Data_Logic.get_not_found(search_item.foreign_data_type,0); } } ---------------------------------------------- -------------------------------- BiZ9 END - 12-13-2025 ----------------------------------------------------------- -------------------------------- BiZ9 START - 12-13-2025 ----------------------------------------------------------- -- GROUPZ ---------------------------------------------- --- DataType ---- Group --- FieldZ ---- id ---- parent_id ---- parent_data_type --------------------------- -- DataType --- Sub_Group -- FieldZ ---- id ---- group_id --------------------------- -- Option ---------------------------------------------- --- title ---- blank = all ---- {get_group:true, group:[array]} ---------------------------------------------- -------------------------------- BiZ9 END - 12-13-2025 -----------------------------------------------------------