예제 #1
0
        public async Task <MaterialImportResults> ImportFromStream(Stream stream)
        {
            var result        = new MaterialImportResults();
            int rowIndex      = 0;
            int innerRowIndex = 0;

            try
            {
                stream.Position = 0;
                var materials = MaterialManager.GetEntities().ToList();
                using (StreamReader sr = new StreamReader(stream))
                {
                    var currentMaterialNumber = String.Empty;
                    var fullText    = String.Empty;
                    var needProcess = false;
                    while (sr.Peek() >= 0)
                    {
                        rowIndex++;

                        var line  = sr.ReadLine();
                        var parts = line.Split(';');

                        if (parts.Length > 3) //TODO
                        {
                            if (String.IsNullOrEmpty(currentMaterialNumber) || currentMaterialNumber == parts[2])
                            {
                                fullText += line;
                                currentMaterialNumber = parts[2];
                            }
                            else
                            {
                                needProcess = true;
                            }
                        }
                        else
                        {
                            needProcess = true;
                        }

                        if (needProcess)
                        {
                            if (!String.IsNullOrEmpty(currentMaterialNumber))
                            {
                                var material = materials.FirstOrDefault(o => o.Number == currentMaterialNumber);

                                if (material == null)
                                {
                                    material        = new Materials();
                                    material.Number = currentMaterialNumber;

                                    var fullTextParts = fullText.Split(';');
                                    if (fullTextParts.Length > 6)
                                    {
                                        material.Name = fullTextParts[6];
                                    }

                                    material.CreateDate = DateTime.Now;
                                    material.ChangeDate = DateTime.Now;


                                    //todo
                                    material.MaterialAmountType = (int)MaterialAmountTypes.Item;
                                    //todo default
                                    material.ProceedsAccountId = 1;

                                    result.CreatedMaterials.Add(material);
                                }
                                else
                                {
                                    result.UpdatedMaterials.Add(material);
                                }

                                fullText = line;
                                if (parts.Length >= 2)
                                {
                                    currentMaterialNumber = parts[2];
                                }
                            }

                            needProcess = false;
                        }
                    }
                }

                //foreach (var material in result.CreatedMaterials)
                //    MaterialManager.AddEntity(material);

                //await MaterialManager.SaveChangesAsynchron();

                using (var transactionScope = new TransactionScope())
                {
                    //(MaterialManager.DataContext as DbContext).BulkInsert(result.CreatedMaterials);

                    transactionScope.Complete();
                }
            }
            catch (Exception e)
            {
                result.AddError(Math.Max(rowIndex, innerRowIndex), String.Format("Import abgebrochen: \"{0}\"", e.Message));
            }

            return(result);
        }
예제 #2
0
        public async Task<MaterialImportResults> ImportFromStream(Stream stream)
        {
            var result = new MaterialImportResults();
            int rowIndex = 0;
            int innerRowIndex = 0;
            try
            {
                stream.Position = 0;
                var materials = MaterialManager.GetEntities().ToList();
                using (StreamReader sr = new StreamReader(stream))
                {
                    var currentMaterialNumber = String.Empty;
                    var fullText = String.Empty;
                    var needProcess = false;
                    while (sr.Peek() >= 0)
                    {
                        rowIndex++;

                        var line = sr.ReadLine();
                        var parts = line.Split(';');

                        if(parts.Length > 3) //TODO
                        {
                            if(String.IsNullOrEmpty(currentMaterialNumber) || currentMaterialNumber == parts[2])
                            {
                                fullText += line;
                                currentMaterialNumber = parts[2];
                            }
                            else
                            {
                                needProcess = true;
                            }
                        }
                        else
                        {
                            needProcess = true;
                        }

                        if (needProcess)
                        {
                            if (!String.IsNullOrEmpty(currentMaterialNumber))
                            {
                                var material = materials.FirstOrDefault(o => o.Number == currentMaterialNumber);

                                if (material == null)
                                {
                                    material = new Materials();
                                    material.Number = currentMaterialNumber;

                                    var fullTextParts = fullText.Split(';');
                                    if (fullTextParts.Length > 6)
                                    {
                                        material.Name = fullTextParts[6];
                                    }

                                    material.CreateDate = DateTime.Now;
                                    material.ChangeDate = DateTime.Now;


                                    //todo
                                    material.MaterialAmountType = (int)MaterialAmountTypes.Item;
                                    //todo default
                                    material.ProceedsAccountId = 1;

                                    result.CreatedMaterials.Add(material);
                                }
                                else
                                {
                                    result.UpdatedMaterials.Add(material);
                                }

                                fullText = line;
                                if (parts.Length >= 2)
                                {
                                    currentMaterialNumber = parts[2];
                                }
                            }

                            needProcess = false;
                        }
                    }
                }

                //foreach (var material in result.CreatedMaterials)
                //    MaterialManager.AddEntity(material);
                
                //await MaterialManager.SaveChangesAsynchron();

                using (var transactionScope = new TransactionScope())
                {
                    //(MaterialManager.DataContext as DbContext).BulkInsert(result.CreatedMaterials);
                    
                    transactionScope.Complete();
                }
            }
            catch (Exception e)
            {
                result.AddError(Math.Max(rowIndex, innerRowIndex), String.Format("Import abgebrochen: \"{0}\"", e.Message));
            }

            return result;
        }