bykovme/nswallet

View on GitHub
src/NSWallet/NSWallet.Shared/Business/BusinessLayerCopyMove.cs

Summary

Maintainability
A
0 mins
Test Coverage
using System.Collections.Generic;
using System.Linq;

namespace NSWallet.Shared
{
    public static partial class BL
    {
        //static string copyPrefix = TR.Tr("item_prefix_copy") + " ";

        public static string GetCopyPrefix() {
            return TR.Tr("item_prefix_copy") + " ";;
        }

        public static string CopyItem(string sourceItemID)
        {
            var item = GetItemByID(sourceItemID);
            if (item != null) {
                if (!item.Folder) {
                    return copyItem(item);
                }
                return copyFolder(item);
            }
            return null;
        }

        public static string CopyField(string sourceItemID)
        {
            var fieldID = CurrentFieldID;
            var item = GetItemByID(sourceItemID);
            var field = item.Fields.SingleOrDefault(x => x.FieldID == fieldID);
            var weight = getWeight(item);
            if (field != null && item != null) {
                return AddField(field.FieldType, field.FieldValue, null, weight);
            }
            return null;
        }

        public static void MoveItem(string sourceItemID)
        {
            UpdateItemParentID(sourceItemID, CurrentItemID);
        }

        public static void MoveField(string sourceItemID)
        {
            var fieldID = CurrentFieldID;
            var item = GetItemByID(sourceItemID);
            if (item != null) {
                var field = item.Fields.SingleOrDefault(x => x.FieldID == fieldID);
                if (field != null) {
                    AddField(field.FieldType, field.FieldValue);
                    DeleteField(field.FieldID, item.ItemID);
                }
            }
        }

        static string copyItem(NSWItem item)
        {
            var name = GetCopyPrefix() + item.Name;
            var icon = IconController.SubstringItemName(item.Icon);
            var itemID = AddItem(name, icon, item.Folder);
            copyItemFields(itemID, item.Fields);
            return itemID;
        }

        static void copyItemFields(string itemID, List<NSWField> fields)
        {
            if (fields != null) {
                foreach (var field in fields) {
                    AddField(field.FieldType, field.FieldValue, itemID, field.SortWeight);
                }
            }
        }

        static string copyFolder(NSWItem item)
        {
            var itemID = Common.GenerateUniqueString(GConsts.ITEMID_LENGTH);
            var copyItemsData = prepareCopyFolderModel(item, itemID);
            saveLocallyItemsInFolder(copyItemsData, item.ItemID, itemID);
            addFolderToDatabase(copyItemsData);
            return itemID;
        }

        static List<CopyMoveModel> prepareCopyFolderModel(NSWItem item, string newItemID)
        {
            return new List<CopyMoveModel> {
                new CopyMoveModel {
                    ItemID = newItemID,
                    Item = item,
                    ParentID = CurrentItemID
                }
            };
        }

        static void saveLocallyItemsInFolder(List<CopyMoveModel> copyItemsData, string itemID, string parentID)
        {
            var parentList = GetListByParentID(itemID, false);
            foreach (var item in parentList) {
                if (!item.Folder) {
                    createNewItemID(copyItemsData, item, parentID);
                } else {
                    var newItemID = createNewItemID(copyItemsData, item, parentID);
                    saveLocallyItemsInFolder(copyItemsData, item.ItemID, newItemID);
                }
            }
        }

        static string createNewItemID(List<CopyMoveModel> copyItemsData, NSWItem item, string parentID)
        {
            var newItemID = Common.GenerateUniqueString(GConsts.ITEMID_LENGTH);
            copyItemsData.Add(new CopyMoveModel {
                ItemID = newItemID,
                Item = item,
                ParentID = parentID
            });
            return newItemID;
        }

        static void addFolderToDatabase(List<CopyMoveModel> copyItemsData)
        {
            int count = 0;
            foreach (var itemDict in copyItemsData) {
                var item = itemDict.Item;
                string name = item.Name;
                if (count == 0) {
                    name = GetCopyPrefix() + name;
                }
                if (item.Folder) {
                    AddItem(name, IconController.SubstringFolderName(item.Icon), item.Folder,
                            itemDict.ParentID, itemDict.ItemID);
                } else {
                    AddItem(name, IconController.SubstringItemName(item.Icon), item.Folder,
                            itemDict.ParentID, itemDict.ItemID);
                    copyItemFields(itemDict.ItemID, item.Fields);
                }
                count++;
            }
        }

        static int getWeight(NSWItem item)
        {
            int weight = 0;
            if (item.Fields != null) {
                weight = item.Fields.Max(x => x.SortWeight);
            }
            return weight + 100;
        }
    }
}