public async Task UploadDocuments(Dictionary <Tuple <long, string>, byte[]> docsToUpload)
        {
            var categoryModel = new GeneralCategoryModel()
            {
                DocumentType = cmbDocumentType.Text,
                Year         = dtpYear.Text,
                Term         = cmbTerm.Text,
                NodeId       = WorkSpacesEnum.GetValue(WorkSpacesEnum.WorkSpaces.GeneralCategoryNodeId)
            };

            var emdNew = _serviceHelper.CategoryMaker(categoryModel);

            foreach (var item in docsToUpload)
            {
                await Task.Run(() => _serviceHelper.AddDocumentWithMetaData(item.Key.Item1, item.Key.Item2, item.Value, emdNew));
            }
        }
        public EntityMetadata CategoryMaker(GeneralCategoryModel categoryModel)
        {
            var eag = VariableHelper.Dmo.GetEntityAttributeGroupOfCategory(Resources.Admin, VariableHelper.Token, categoryModel.NodeId);

            var documentType = eag.Values.First(x => x.Description == OtCategoriesEnum.ConvertString(OtCategoriesEnum.GeneralCategory.DocType));

            documentType.Values = new object[] { categoryModel.DocumentType };

            var docYear = eag.Values.First(x => x.Description == OtCategoriesEnum.ConvertString(OtCategoriesEnum.GeneralCategory.Year));

            docYear.Values = new object[] { categoryModel.Year };

            var docTerm = eag.Values.First(x => x.Description == OtCategoriesEnum.ConvertString(OtCategoriesEnum.GeneralCategory.Quarter));

            docTerm.Values = new object[] { categoryModel.Term };

            var emdNew = new EntityMetadata {
                AttributeGroups = new[] { eag }
            };

            return(emdNew);
        }
        private async Task UploadDocuments(Dictionary <Tuple <long, string>, byte[]> docsToUpload)
        {
            var categoryModel = new GeneralCategoryModel()
            {
                DocumentType = cmbDocumentType.Text,
                Year         = dtpDistributorYear.Text,
                Term         = cmbDistriborTerm.Text,
                NodeId       = WorkSpacesEnum.GetValue(WorkSpacesEnum.WorkSpaces.GeneralCategoryNodeId)
            };

            var emdNew = _serviceHelper.CategoryMaker(categoryModel);

            foreach (var item in docsToUpload)
            {
                if (VariableHelper.Cts.IsCancellationRequested)
                {
                    return;
                }
                await Task.Run(() => _serviceHelper.AddDocumentWithMetaData(item.Key.Item1, item.Key.Item2, item.Value, emdNew), VariableHelper.Cts.Token);
            }
            MessageBox.Show(Resources.ProcessIsDone);
        }
        public async Task <bool> UploadDocuments(Dictionary <Tuple <long, string>, byte[]> docsToUpload, GeneralCategoryModel categoryModel)
        {
            try
            {
                var emdNew = CategoryMaker(categoryModel);
                foreach (var item in docsToUpload)
                {
                    if (VariableHelper.Cts.IsCancellationRequested)
                    {
                        return(false);
                    }
                    await Task.Run(() => AddDocumentWithMetaData(item.Key.Item1, item.Key.Item2, item.Value, emdNew), VariableHelper.Cts.Token);
                }

                return(true);
            }
            catch (Exception e)
            {
                Console.WriteLine(e);
                return(false);
            }
        }
        public async void DoStaffTask()
        {
            try
            {
                InvokedFormState();

                var targetNodesList = new List <EntityNode>(); // Bu boş liste doldurulup streamer helper methoduna verilecek.

                // Burada da Projeler içerisinde yüklenecek yerlerin nodeId listesini alacağız.
                // Ama ne yazık ki üst parent ten bir kaç kırınım içerideki child ları bulamıyoruz.
                var allChildNodesOfMainStaff = _serviceHelper.GetEntityNodeListIncludingChildrenUsingTypeFilter(WorkSpacesEnum.GetValue(WorkSpacesEnum.WorkSpaces.StaffNodeId), (cmbStaffChildRoot.SelectedItem as StaffChilds)?.Name);
                var targetRootAddress        = (cmbStaffChildRoot.SelectedItem as StaffChilds)?.Name;
                var countDeepness            = targetRootAddress?.Split('\\').Count();

                if (countDeepness > 3)
                {
                    MessageBox.Show(Resources.NodeDeepnessExceed);
                    return;
                }

                foreach (var childNodeOfMainStaff in allChildNodesOfMainStaff)
                {
                    switch (countDeepness)
                    {
                    case 1:
                    {
                        var oneOfTargetNode = DbEntityHelper.GetNodeByName(childNodeOfMainStaff.Id, targetRootAddress);
                        targetNodesList.Add(oneOfTargetNode);
                        break;
                    }

                    case 2:
                    {
                        var generalFirstStepTargetNodeName = targetRootAddress.Split('\\')[0];
                        var firstStepTargetNode            = DbEntityHelper.GetNodesByNameInExactParent(childNodeOfMainStaff.Id, generalFirstStepTargetNodeName).FirstOrDefault();

                        var generalSecondStepTargetNodeName = targetRootAddress.Split('\\')[1];
                        if (firstStepTargetNode != null)
                        {
                            var targetChildNode = DbEntityHelper.GetNodeByName(firstStepTargetNode.Id, generalSecondStepTargetNodeName);

                            if (targetChildNode != null)
                            {
                                targetNodesList.Add(targetChildNode);
                            }
                        }

                        break;
                    }

                    case 3:
                    {
                        var generalFirstStepTargetNodeName = targetRootAddress.Split('\\')[0];
                        var firstStepTargetNode            = DbEntityHelper.GetNodesByNameInExactParent(childNodeOfMainStaff.Id, generalFirstStepTargetNodeName).FirstOrDefault();

                        var generalSecondStepTargetNodeName = targetRootAddress.Split('\\')[1];
                        if (firstStepTargetNode == null)
                        {
                            continue;
                        }
                        var secondChildNode = DbEntityHelper.GetNodeByName(firstStepTargetNode.Id, generalSecondStepTargetNodeName);

                        var generalThirdStepTargetNodeName = targetRootAddress.Split('\\')[2];

                        var targetChildNode = DbEntityHelper.GetNodeByName(secondChildNode.Id, generalThirdStepTargetNodeName);

                        if (targetChildNode != null)
                        {
                            targetNodesList.Add(targetChildNode);
                        }
                        break;
                    }

                    default:
                        Console.WriteLine(Resources.NodeDeepnessExceed);
                        break;
                    }
                }


                if (txtStaffFolderRoot.Text == string.Empty || cmbStaffChildRoot.SelectedIndex == -1)
                {
                    MessageBox.Show(Resources.WarnMessageChooseTargets);
                    return;
                }
                var docsToUpload = StreamHelper.MakePreparedDocumentListToPush(txtStaffFolderRoot.Text, targetNodesList);

                if (docsToUpload.Count < 1)
                {
                    return;
                }

                var categoryModel = new GeneralCategoryModel()
                {
                    DocumentType = cmbStaffDocumentType.Text,
                    Year         = dtpStaffYear.Text,
                    Term         = cmbStaffTerm.Text,
                    NodeId       = WorkSpacesEnum.GetValue(WorkSpacesEnum.WorkSpaces.GeneralCategoryNodeId)
                };
                //await UploadDocuments(preparedList);
                var result = await _serviceHelper.UploadDocuments(docsToUpload, categoryModel);

                MessageBox.Show(result ? Resources.ProcessIsDone : Resources.ProcessIsNotDone);
                WaitedFormState();
                //await UploadDocuments(docsToUpload);
            }
            catch (Exception ex)
            {
                Console.WriteLine(Resources.ErrorTypeProccessing + ex);
                MessageBox.Show(Resources.ErrorTypeProccessing);
                Logger.Error(ex, Resources.ErrorTypeProccessing);
                //throw;
            }
        }
        public async void DoProjectWorks()
        {
            try
            {
                InvokedFormState();
                // Burada da Projeler içerisinde yüklenecek yerlerin nodeId listesini alacağız.
                // Ama ne yazık ki üst parent ten bir kaç kırınım içerideki child ları bulamıyoruz.
                var targetNodesList            = new List <EntityNode>(); // Bu boş liste doldurulup streamer helper methoduna verilecek.
                var allChildNodesOfMainProject = _serviceHelper.GetEntityNodeListIncludingChildrenUsingTypeFilter(WorkSpacesEnum.GetValue(WorkSpacesEnum.WorkSpaces.ProjectsNodeId), (cmbChildRoot.SelectedItem as ProjectChilds).Name);
                var targetRootAddress          = (cmbChildRoot.SelectedItem as ProjectChilds).Name;
                var countDeepness = targetRootAddress.Split('\\').Count();
                if (countDeepness > 3)
                {
                    MessageBox.Show(Resources.NodeDeepnessExceed);
                    return;
                }
                // Bu yüzden tüm node ların içerisine girip, node derinliğini hesaplayarak iç nodelara ulaşacağız ve maplemek üzere node keyleri tek tek StreamHelper a göndereceğiz.
                // Streamer helper aldığı bu node id ile bir ilişki kurabilirse map in içerisine koyup bize verecek, kuramazsa eklemeyecek.
                foreach (var childNodeOfMainProject in allChildNodesOfMainProject)
                {
                    switch (countDeepness)
                    {
                    case 1:
                    {
                        var oneOfTargetNode = DbEntityHelper.GetNodeByName(childNodeOfMainProject.Id, targetRootAddress);
                        targetNodesList.Add(oneOfTargetNode);
                        break;
                    }

                    case 2:
                    {
                        var generalFirstStepTargetNodeName = targetRootAddress.Split('\\')[0];
                        var firstStepTargetNode            = DbEntityHelper.GetNodesByNameInExactParent(childNodeOfMainProject.Id, generalFirstStepTargetNodeName).FirstOrDefault();

                        var generalSecondStepTargetNodeName = targetRootAddress.Split('\\')[1];

                        var targetChildNode = DbEntityHelper.GetNodeByName(firstStepTargetNode.Id, generalSecondStepTargetNodeName);

                        if (targetChildNode != null)
                        {
                            targetNodesList.Add(targetChildNode);
                        }

                        // Child kırınımı 2 ise
                        break;
                    }

                    case 3:
                    {
                        var generalFirstStepTargetNodeName = targetRootAddress.Split('\\')[0];
                        var firstStepTargetNode            = DbEntityHelper.GetNodesByNameInExactParent(childNodeOfMainProject.Id, generalFirstStepTargetNodeName).FirstOrDefault();

                        var generalSecondStepTargetNodeName = targetRootAddress.Split('\\')[1];

                        var secondChildNode = DbEntityHelper.GetNodeByName(firstStepTargetNode.Id, generalSecondStepTargetNodeName);

                        var generalThirdStepTargetNodeName = targetRootAddress.Split('\\')[2];

                        var targetChildNode = DbEntityHelper.GetNodeByName(secondChildNode.Id, generalThirdStepTargetNodeName);

                        // var targetChildNode = firstStepTargetNode.Where(x => x.Name == generalFirstStepTargetNodeName).FirstOrDefault();

                        if (targetChildNode != null)
                        {
                            targetNodesList.Add(targetChildNode);
                        }
                        // Child kırınım 3 ise
                        break;
                    }

                    default:
                        Console.WriteLine(Resources.NodeDeepnessExceed);
                        break;
                    }
                }

                // Bu mainChildRootElement => Document Templates içerisinde seçmiş olduğumuz child
                // mainChildRootElement inin adı ile Emlak Konut iş alanları altındaki Projeler içerisinde ne kadar aynı isimde child element varsa Bunlardan bir dictionary yap.

                if (txtFolderRoot.Text == string.Empty || cmbChildRoot.SelectedIndex == -1)
                {
                    MessageBox.Show(Resources.WarnMessageChooseTargets);
                    return;
                }
                var docsToUpload = StreamHelper.MakePreparedDocumentListToPush(txtFolderRoot.Text, targetNodesList);

                if (docsToUpload.Count < 1)
                {
                    return;
                }
                // nodeId, dosya adı, ve hedef nodeId ile yarattığımız dictionary i opentext e yüklenebilir hale getireceğiz.

                var categoryModel = new GeneralCategoryModel()
                {
                    DocumentType = cmbDocumentType.Text,
                    Year         = dtpYear.Text,
                    Term         = cmbTerm.Text,
                    NodeId       = WorkSpacesEnum.GetValue(WorkSpacesEnum.WorkSpaces.GeneralCategoryNodeId)
                };
                var result = await _serviceHelper.UploadDocuments(docsToUpload, categoryModel);

                MessageBox.Show(result ? Resources.ProcessIsDone : Resources.ProcessIsNotDone);
                WaitedFormState();
            }
            catch (Exception ex)
            {
                Console.WriteLine(Resources.ErrorTypeProccessing + ex);
                //throw;
                MessageBox.Show(Resources.ErrorTypeProccessing);
            }
        }
        /// <summary>
        /// SelectedItemList içerisinde EmlakKonut İş Alanı Türünü seçtiğimiz en alt taki checkedListBox taki node ların id sini tutar.
        /// Şimdi biz bu node ların içerisinde dönerek 2. Combobox olan "Klasör Seçimi" Node larını bulacağız, Ki bunlar TARGET Node ID lerimiz olacak.
        /// </summary>
        public async void DoDistributorWorks()
        {
            InvokedFormState();
            Debugger.NotifyOfCrossThreadDependency();
            var selectedItemList = cLstBxWorkSpaceType.CheckedItems;

            var targetNodesList       = new List <EntityNode>();
            var targetOpenTextAddress = cmbDistOTFolder.Text;
            var countDeepness         = cmbDistOTFolder.Text.Split('\\').Count();

            if (countDeepness > 3)
            {
                MessageBox.Show(Resources.NodeDeepnessExceed);
                return;
            }

            foreach (var item in selectedItemList)
            {
                var listViewItem = (ListViewItem)item;
                var itemNodeId   = (listViewItem.Tag as DistributorChilds).Id;
                var itemNodeName = (listViewItem.Tag as DistributorChilds).Name;

                switch (countDeepness)
                {
                case 1:
                {
                    var oneOfTargetNode = DbEntityHelper.GetNodeByName(itemNodeId, itemNodeName);
                    targetNodesList.Add(oneOfTargetNode);
                    break;
                }

                case 2:
                {
                    var generalFirstStepTargetNodeName = targetOpenTextAddress.Split('\\')[0];
                    var firstStepTargetNode            = DbEntityHelper.GetNodesByNameInExactParent(itemNodeId, generalFirstStepTargetNodeName).FirstOrDefault();

                    var generalSecondStepTargetNodeName = targetOpenTextAddress.Split('\\')[1];
                    if (firstStepTargetNode == null)
                    {
                        continue;
                    }
                    var targetChildNode = DbEntityHelper.GetNodeByName(firstStepTargetNode.Id, generalSecondStepTargetNodeName);

                    if (targetChildNode != null)
                    {
                        targetNodesList.Add(targetChildNode);
                    }
                    break;
                }

                case 3:
                {
                    var generalFirstStepTargetNodeName = targetOpenTextAddress.Split('\\')[0];
                    var firstStepTargetNode            = DbEntityHelper.GetNodesByNameInExactParent(itemNodeId, generalFirstStepTargetNodeName).FirstOrDefault();

                    var generalSecondStepTargetNodeName = targetOpenTextAddress.Split('\\')[1];
                    if (firstStepTargetNode == null)
                    {
                        continue;
                    }
                    var secondChildNode = DbEntityHelper.GetNodeByName(firstStepTargetNode.Id, generalSecondStepTargetNodeName);

                    var generalThirdStepTargetNodeName = targetOpenTextAddress.Split('\\')[2];

                    var targetChildNode = DbEntityHelper.GetNodeByName(secondChildNode.Id, generalThirdStepTargetNodeName);

                    if (targetChildNode != null)
                    {
                        targetNodesList.Add(targetChildNode);
                    }
                    break;
                }

                default:
                    Console.WriteLine(Resources.NodeDeepnessExceed);
                    break;
                }
            }

            var preparedList = StreamHelper.PrepareDocumentToSendMultipleTarget(targetNodesList, txtDistDocumentRoot.Text);

            if (preparedList.Count < 1)
            {
                return;
            }
            // nodeId, dos-ya adı, ve he-def nodeId ile ya-rat-tı-ğı-mız dictionary i open-text e yük-le-ne-bi-lir hale ge-ti-re-ce-ğiz.
            var categoryModel = new GeneralCategoryModel()
            {
                DocumentType = cmbDocumentType.Text,
                Year         = dtpDistributorYear.Text,
                Term         = cmbDistriborTerm.Text,
                NodeId       = WorkSpacesEnum.GetValue(WorkSpacesEnum.WorkSpaces.GeneralCategoryNodeId)
            };
            var result = await _serviceHelper.UploadDocuments(preparedList, categoryModel);

            MessageBox.Show(result ? Resources.ProcessIsDone : Resources.ProcessIsNotDone);
            WaitedFormState();
        }