Example #1
0
        /// <summary>
        /// G마켓 상품 필수선택 정보 및 상세리스트 UI에 적합하게 조회
        /// </summary>
        public List<TempGepItemData> GetSourceItemOptionList(string gd_no, int stock_qty)
        {
            List<TempGepItemData> selections = new List<TempGepItemData>();

            SourceItemOptionInfoT info = new GmarketItemBiz().GetSourceItemOptionInfo(gd_no);
            if (info == null || info.SelectionInfoList == null || info.SelectionInfoList.Count == 0) return selections;

            if (info.DisplayType == "S")
            {
                List<SourceItemOptionRecordT> orgList = info.SelectionInfoList; // 순수하게 DB에서 가져온 원본리스트

                string[] nameArray = orgList.Select(t => t.Name).Distinct().ToArray(); // Name 추출
                List<List<SourceItemOptionRecordT>> selByName = new List<List<SourceItemOptionRecordT>>();
                int i = 0;

                // 각 Name에 대한 하위 값들을 추출
                foreach (string n in nameArray)
                {
                    var tmp = orgList.Where(t => t.Name == n).Select(t => new { OptionNo = t.OptionNo, Value = t.Value, Price = t.Price, Cnt = t.Cnt, Stat = t.Stat }).ToList();
                    List<SourceItemOptionRecordT> tmpList = new List<SourceItemOptionRecordT>();

                    foreach (var record in tmp)
                    {
                        SourceItemOptionRecordT s = new SourceItemOptionRecordT();
                        s.OptionNo = record.OptionNo;
                        s.Value = record.Value;
                        s.Price = record.Price;
                        s.Cnt = record.Cnt;
                        s.Stat = record.Stat == null ? "Y" : record.Stat;
                        tmpList.Add(s);
                    }

                    selByName.Add(tmpList);
                    i++;
                }

                // 조합형 데이터 생성
                for (int n = 0; n < selByName[0].Count; n++) // 첫번째 항목에 대한 리스트
                {
                    TempGepItemData sel = new TempGepItemData();
                    sel.sel_name = selByName[0][n].Value;
                    sel.sel_qty = info.IsSelectionInventory == false ? (Util.GetSafeString(selByName[0][n].Stat) == "N" ? 0 : stock_qty) : Util.GetSafeInt(selByName[0][n].Cnt);
                    sel.sel_price = Util.GetSafeInt(selByName[0][n].Price);
                    sel.sel_no = new BsonArray();
                    sel.sel_no.Add(selByName[0][n].OptionNo);

                    selections.Add(sel);
                }

                int mngCnt = 1;

                while (selByName.Count > mngCnt) // N번째 항목이 있다면
                {
                    List<TempGepItemData> tmpList = new List<TempGepItemData>();

                    for (int n = 0; n < selByName[mngCnt].Count; n++) // N번째 항목에 대한 리스트
                    {
                        TempGepItemData sel = new TempGepItemData();
                        sel.sel_name = selByName[mngCnt][n].Value;
                        sel.sel_qty = info.IsSelectionInventory == false ? (Util.GetSafeString(selByName[mngCnt][n].Stat) == "N" ? 0 : stock_qty) : Util.GetSafeInt(selByName[mngCnt][n].Cnt);
                        sel.sel_price = Util.GetSafeInt(selByName[mngCnt][n].Price);
                        sel.sel_no = new BsonArray();
                        sel.sel_no.Add(selByName[mngCnt][n].OptionNo);

                        for (int m = 0; m < selections.Count; m++)
                        {
                            TempGepItemData com = new TempGepItemData();
                            com.sel_name = selections[m].sel_name + " : " + sel.sel_name;
                            com.sel_qty = sel.sel_qty < selections[m].sel_qty ? sel.sel_qty : selections[m].sel_qty;
                            com.sel_price = selections[m].sel_price + sel.sel_price;
                            com.sel_no = new BsonArray();
                            com.sel_no.Add(selections[m].sel_no[0]);
                            if (mngCnt == 1) com.sel_no.Add(sel.sel_no[0]);
                            else if (mngCnt > 1) com.sel_no.Add(selections[m].sel_no[1]);
                            if (mngCnt == 2) com.sel_no.Add(sel.sel_no[0]);
                            else if (mngCnt > 2) com.sel_no.Add(selections[m].sel_no[2]);
                            if (mngCnt == 3) com.sel_no.Add(sel.sel_no[0]);
                            else if (mngCnt > 3) com.sel_no.Add(selections[m].sel_no[3]);
                            if (mngCnt == 4) com.sel_no.Add(sel.sel_no[0]);
                            else if (mngCnt > 4) com.sel_no.Add(selections[m].sel_no[4]);

                            tmpList.Add(com);
                        }
                    }

                    selections = tmpList;

                    mngCnt++;
                }
            }
            else
            {
                foreach (SourceItemOptionRecordT row in info.SelectionInfoList)
                {
                    TempGepItemData sel = new TempGepItemData();
                    sel.sel_name = row.Name + " : " + row.Value;
                    sel.sel_qty = info.IsSelectionInventory == false ? ((row.Stat != null && row.Stat == "N") ? 0 : stock_qty) : row.Cnt;
                    sel.sel_price = Util.GetSafeInt(row.Price);
                    sel.sel_no = new BsonArray();
                    sel.sel_no.Add(row.OptionNo);

                    selections.Add(sel);
                }
            }

            return selections;
        }
        /// <summary>
        /// G마켓 필수선택 기존 선택값 조회 리스트 데이터
        /// </summary>
        public List<TempGepItemData> GetGmarketOptionSelectList(string itemNo)
        {
            List<GepItemsData> list = new GmarketItemBiz().GetTempGEPItemList(MemberContext.LoginID, itemNo);

            List<TempGepItemData> reList = new List<TempGepItemData>();

            foreach (GepItemsData item in list)
            {
                TempGepItemData opt = new TempGepItemData();
                opt._id = item._id;
                opt.sel_name = item.src_info.sel_name;
                reList.Add(opt);
            }

            return reList;
        }