Ejemplo n.º 1
0
        private ExpandoObject GetHeaderObject(DataTable dt, fk_doc fkDoc, List <fk_code> fkCodes)
        {
            dynamic header = new ExpandoObject();

            header.Marker = Constant.MarkerXlHeader;
            foreach (var fkcode in fkCodes.Where(x => x.Marker == Constant.MarkerXlHeader))
            {
                var cellname = fkcode.Code.Between("(", ")"); // DOCDATE(A2)
                var cellval  = dt.Rows[cellname.GetRowIndex()].ItemArray[cellname.GetColumnIndex()].ToString();
                if (fkcode.Descript.Contains("{}"))           // за{}г.
                {
                    var adelimiters = fkcode.Descript.Split("{}");
                    if (!string.IsNullOrWhiteSpace(adelimiters[0]))
                    {
                        cellval = cellval.From(adelimiters[0].Trim());
                    }
                    if (!string.IsNullOrWhiteSpace(adelimiters[1]))
                    {
                        cellval = cellval.To(adelimiters[1].Trim());
                    }
                }
                ((IDictionary <string, object>)header).Add(fkcode.Code.To("("), cellval.ToFkTypeVal(fkcode));
            }

            return(header);
        }
Ejemplo n.º 2
0
        private ExpandoObject GetMaketObject(DataTable dt, fk_doc fkDoc, List <fk_code> fkCodes)
        {
            dynamic header = new ExpandoObject();

            header.Marker = Constant.MarkerDocxHeader;
            foreach (var fkcode in fkCodes.Where(x => x.Marker.Trim() == Constant.MarkerDocxHeader))
            {
                var val = "";
                if (fkcode.Code == "MAKET")
                {
                    val = FileData.DocxTextBetweenParagaphs("Макет файла", "Пример файла");
                }
                else if (fkcode.Code == "VERSIONSTR")
                {
                    val = FileData.DocxTextBetweenParagaphs("Пример файла", "FROM", new string[1] {
                        "FK|"
                    });
                }
                else if (fkcode.Code == "NAME")
                {
                    val = ((string)FileData.DocxTextBetweenParagaphs("", "Назначение и маршрут")).Substr(0, 80);
                }
                ((IDictionary <string, object>)header).Add(fkcode.Code, val.ToFkTypeVal(fkcode));
            }


            return(header);
        }
Ejemplo n.º 3
0
        private fk_code FkCodeRecord(fk_doc fkDoc, dynamic objTb, ImportParam importParam)
        {
            if (fkDoc == null)
            {
                return(null);
            }
            //if (string.IsNullOrWhiteSpace(objTb.NumOrder)) // филтр
            //    return null;

            fk_code fkCode = new fk_code()
            {
                DocId    = fkDoc.Sysid,
                Marker   = objTb.Marker,
                NumPos   = objTb.NumPos,
                NumOrder = objTb.NumOrder,
                Code     = objTb.Code,
                FldType  = objTb.FldType,
                FldLen   = objTb.FldLen,
                IsFilled = ((string)objTb.IsFilled) == "Да",
                Descript = objTb.Descript,
                Comments = objTb.Comments
            };

            //
            fkCode.FkDoc = fkDoc;

            return(fkCode);
        }
Ejemplo n.º 4
0
        private async Task <List <ExpandoObject> > GetXlObject(DataTable dt, fk_doc fkDoc, List <fk_code> fkCodes)
        {
            var maket = ImportParam.TypeImp == ImportType.Import ? fkDoc.MaketImport :
                        ImportParam.TypeImp == ImportType.Preview ? fkDoc.MaketPreview : fkDoc.MaketFull;
            // var dicScheme = FkDictionary(maket);

            var doc = new List <ExpandoObject>();
            // HEADER
            var header = GetHeaderObject(dt, fkDoc, fkCodes);

            doc.Add(header);
            // TB
            var startrow = Convert.ToInt32(fkCodes.Where(x => x.Marker == "STARTROW").FirstOrDefault().Code);

            for (var i = startrow - 1; i < dt.Rows.Count; i++)
            {
                dynamic obj = new ExpandoObject();
                obj.Marker = Constant.MarkerXlTable;
                foreach (var fkcode in fkCodes.Where(x => x.Marker == Constant.MarkerXlTable && (x.NumOrder ?? 0) > 0)
                         .OrderBy(x => x.NumOrder))
                {
                    //if (!markerpar.Flds.Contains(fkcode.Code))
                    //    continue;
                    object val     = null;
                    var    cellval = dt.Rows[i].ItemArray[(fkcode.NumOrder ?? 0) - 1];
                    if (cellval != null)
                    {
                        val = cellval.ToString().ToFkTypeVal(fkcode);
                    }
                    ((IDictionary <string, object>)obj).Add(fkcode.Code, val);
                }
                doc.Add(obj);
            }
            return(doc);
        }
Ejemplo n.º 5
0
        public async Task <object> ParserFormat(object doc, ImportParam importParam)
        {
            var     fkcodes   = new List <fk_code>();
            dynamic header    = ((List <ExpandoObject>)doc).FirstOrDefault(x => ((dynamic)x).Marker.Trim() == Constant.MarkerDocxHeader);
            var     maket     = (string)header.MAKET;
            string  formatnom = CheckFormatInFile(header, importParam);

            if (string.IsNullOrWhiteSpace(formatnom))
            {
                return(fkcodes);
            }

            var fkDoc = await _dohodDbContext.fk_doc.Where(x => (x.Group ?? "") == importParam.FormatGroup &&
                                                           (x.Format ?? "") == importParam.Format)
                        .OrderBy(x => x.Nfrm).LastOrDefaultAsync(x => x.Nfrm == formatnom);

            if (fkDoc == null)
            {
                fkDoc = new fk_doc()
                {
                    Group  = importParam.FormatGroup,
                    Format = importParam.Format,
                    Nfrm   = formatnom,
                    Type   = "IMP",
                }
            }
            ;
            // Эти поля корректируется при переимпорте
            fkDoc.MaketImport  = maket;
            fkDoc.MaketPreview = maket;
            fkDoc.MaketFull    = maket;
            fkDoc.Name         = ((string)header.NAME).Substr(0, 80);

            //await DeleteTheFileData(importParam);
            //
            foreach (dynamic obj in (List <ExpandoObject>)doc)
            {
                if (obj.Marker.Trim() == Constant.MarkerDocxHeader)
                {
                    continue;
                }
                // TB
                var fkcode = FkCodeRecord(fkDoc, obj, importParam);
                if (fkcode != null)
                {
                    fkcodes.Add(fkcode);
                }
            }

            return(fkcodes);
        }
Ejemplo n.º 6
0
        public async Task <bool> IsFoundMfXlVersion(DataTable dt, fk_doc fkdoc)
        {
            var fkcodes = await _dohodDbContext.fk_code.AsNoTracking().Where(x => x.DocId == fkdoc.Sysid).ToListAsync();

            dynamic header = GetHeaderObject(dt, fkdoc, fkcodes);

            if (header.DOCDATE == null ||
                header.TERRITORY == null ||
                header.DATEVYB == null)
            {
                return(false);
            }

            return(true);
        }
Ejemplo n.º 7
0
        public async Task <ResultCrmDb> ParseFile()
        {
            var result = new ResultCrmDb();

            var dt = FileData.XlToDataTable();

            if (dt.Rows.Count == 0)
            {
                result.AddError(Constant.ErrCodeImport, $"Файл не содержит данных.");
                return(result);
            }

            var fkDocs = await _dohodDbContext.fk_doc.Where(x => (x.Group ?? "") == ImportParam.FormatGroup &&
                                                            (x.Format ?? "") == ImportParam.Format)
                         .OrderBy(x => x.Nfrm).ToListAsync();

            fk_doc fkDoc = null;

            foreach (fk_doc fkdoc in fkDocs)
            {
                if (await IsFoundMfXlVersion(dt, fkdoc))
                {
                    fkDoc = fkdoc;
                    break;
                }
            }
            if (fkDoc == null)
            {
                result.AddError(Constant.ErrCodeImport, $"Требуется файл формата: {ImportParam.Format}");
                return(result);
            }


            var fkCodes = await _dohodDbContext.fk_code.Where(x => x.DocId == fkDoc.Sysid).ToListAsync();

            if (fkCodes == null || fkCodes.Count == 0)
            {
                result.AddError(Constant.ErrCodeImport, $"Не заполнена структура формата {ImportParam.Format} версии {fkDoc.Nfrm} в fk_doc");
                return(result);
            }


            result.Result = await GetXlObject(dt, fkDoc, fkCodes);

            return(result);

            return(result);
        }
Ejemplo n.º 8
0
        private async Task <List <ExpandoObject> > GetFkObject(string txt, fk_doc fkDoc, List <fk_code> fkCodes)
        {
            var maket = ImportParam.TypeImp == ImportType.Import  ? fkDoc.MaketImport :
                        ImportParam.TypeImp == ImportType.Preview ? fkDoc.MaketPreview : fkDoc.MaketFull;
            var dicScheme = FkDictionary(maket);
            var doc       = new List <ExpandoObject>();

            using (StringReader reader = new StringReader(txt))
            {
                while (true)
                {
                    var line = await reader.ReadLineAsync();

                    if (line == null)
                    {
                        break;
                    }

                    var aline  = line.Split('|');
                    var marker = aline[0];
                    if (string.IsNullOrWhiteSpace(marker) ||
                        marker == versionMarker ||
                        !dicScheme.ContainsKey(marker))
                    {
                        continue;
                    }

                    var     markerpar = dicScheme[marker];
                    dynamic obj       = new ExpandoObject();
                    obj.Marker = marker;
                    foreach (var fkcode in fkCodes.Where(x => x.Marker == marker && (x.NumOrder ?? 0) > 0)
                             .OrderBy(x => x.NumOrder))
                    {
                        if (!markerpar.Flds.Contains(fkcode.Code))
                        {
                            continue;
                        }

                        var val = aline[fkcode.NumOrder ?? 0].ToFkTypeVal(fkcode);
                        ((IDictionary <string, object>)obj).Add(fkcode.Code, val);
                    }
                    doc.Add(obj);
                }
                return(doc);
            }
        }
Ejemplo n.º 9
0
        private List <ExpandoObject> GetDocsObject(DataTable dt, fk_doc fkDoc, List <fk_code> fkCodes)
        {
            var doc = new List <ExpandoObject>();
            // MAKET
            var header = GetMaketObject(dt, fkDoc, fkCodes);

            doc.Add(header);
            // TB
            var startrow   = 1; // Пропуская заголовок
            var numorder   = 0;
            var prevMarker = "";

            for (var i = startrow; i < dt.Rows.Count; i++)
            {
                dynamic obj = new ExpandoObject();
                foreach (var fkcode in fkCodes.Where(x => x.Marker.Trim() == Constant.MarkerDocxTable) // && (x.NumOrder ?? 0) > 0
                         .OrderBy(x => x.NumOrder))
                {
                    object val     = null;
                    var    cellval = dt.Rows[i].ItemArray[(fkcode.NumOrder ?? 0) - 1];
                    if (cellval != null)
                    {
                        val = ((string)cellval).ToFkTypeVal(fkcode);
                    }
                    ((IDictionary <string, object>)obj).Add(fkcode.Code, val);
                }
                var isMarkerHeader = string.IsNullOrWhiteSpace(obj.FldType) &&
                                     string.IsNullOrWhiteSpace(obj.FldLen); // &&  string.IsNullOrWhiteSpace(obj.Comments); ZF - !!!
                var isHeaderComment = isMarkerHeader && string.IsNullOrWhiteSpace(obj.Code);
                if (isMarkerHeader && !isHeaderComment)
                {
                    // Начало блока
                    prevMarker = ((string)obj.Code).To("(", true);
                    numorder   = 0;
                }
                obj.Marker   = prevMarker;
                obj.NumPos   = i;
                obj.NumOrder = isHeaderComment ? 0 : numorder++;
                doc.Add(obj);
            }
            return(doc);
        }