Пример #1
0
        public async Task <IActionResult> PutTodoItem(int?id, DescriptionKeyGroup item)
        {
            if (id != item.DescriptionKeyGroupId)
            {
                return(BadRequest());
            }

            _detContext.Entry(item).State = EntityState.Modified;
            await _detContext.SaveChangesAsync();

            return(NoContent());
        }
        private int?GetDescKeyGroupIdByName(string descKeyGroupName, int?superDescKeyGroupid = null)
        {
            DescriptionKeyGroup dkg = null;

            if (superDescKeyGroupid != null)
            {
                dkg = _context.DescriptionKeyGroup.Where(dkg => dkg.KeyGroupName == descKeyGroupName && dkg.ParentDescriptionKeyGroupId == superDescKeyGroupid).FirstOrDefault();
            }
            else
            {
                dkg = _context.DescriptionKeyGroup.Where(dkg => dkg.KeyGroupName == descKeyGroupName).FirstOrDefault();
            }
            if (dkg != null)
            {
                return(dkg.DescriptionKeyGroupId);
            }
            return(null);
        }
        /** TODO: Relation Kopf - Unterseite? **/

        private void ImportDescKeyGroups()
        {
            //Skip Header Row and empty Row
            //First get "Region" KeyGroups
            for (int i = 3; i <= worksheetCharacteristics.Dimension.Rows; i++)
            {
                //Parse Region Col
                var cellVal = worksheetCharacteristics.Cells[i, _regionColIndexExcel].Value;
                if (cellVal != null)
                {
                    //TODO: switch back when clarified how to import desckeygroups
                    var keyGroupName = cellVal.ToString().Trim();

                    //var keyGroupName = ConcatKeyGroupName(i);

                    if (!DescKeyGroupNameExists(keyGroupName))
                    {
                        string keyGroupDataType = null;
                        if (isRegionOnlyKeyGroup(i))
                        {
                            keyGroupDataType = GetDescKeyGroupDataType(i);
                        }

                        DescriptionKeyGroup descriptionKeyGroup = new DescriptionKeyGroup {
                            KeyGroupName = keyGroupName, DescriptionKeyGroupDataType = keyGroupDataType, VisibilityCategoryId = _MapAmpelType(i)
                        };
                        _context.Add(descriptionKeyGroup);
                        SaveToContext();
                        descKeyGroupCounter++;
                    }
                }
            }

            //Lage -> Region
            Logger.Info("-- Started Lage-Region Import");
            ParseAndSaveExcelColumn(_lageColIndexExcel, _regionColIndexExcel, false);
            Logger.Info("-- Finished Lage-Region Import");
            //Merkmale -> Lage
            Logger.Info("-- Started DescKeyGroups Merkmal-Lage Import");
            ParseAndSaveExcelColumn(_merkmaleColIndexExcel, _lageColIndexExcel, true);
            Logger.Info("-- Finished DescKeyGroups: Merkmal-Lage Import");
        }
        private void SaveDKGWithParent(string keyGroupName, int?supKeyGroupId, int?supSupKeyGroupId, string supKeyGroupName, bool isMerkmaleRow, int i, int currentKeyGroupRow, string?keyGroupDataType)
        {
            if (!SupDescKeyGroupNameExists(keyGroupName, supKeyGroupId, supSupKeyGroupId))
            {
                DescriptionKeyGroup descriptionKeyGroup = null;
                //eg "Oberseite;Unterseite"
                descriptionKeyGroup = new DescriptionKeyGroup {
                    KeyGroupName = keyGroupName, ParentDescriptionKeyGroupId = supKeyGroupId, DescriptionKeyGroupDataType = isMerkmaleRow ? keyGroupDataType : null, VisibilityCategoryId = _MapAmpelType(i), OrderPriority = _GetOrderPriority(i)
                };
                _context.Add(descriptionKeyGroup);
                Logger.Debug("--- Saving DescKeyGroup \'" + keyGroupName + "\' with ParentDescKeyGroup \'" + supKeyGroupName + "\' to Context ...");
                SaveToContext();

                //Save merkmale keyGroupId to row for reference when parsing untermerkmale
                if (isMerkmaleRow)
                {
                    _keyGroupToExcelRowMapping[i] = descriptionKeyGroup.DescriptionKeyGroupId;

                    //Check if DataType = Value (Zahlenfeld) AND no DescriptionKey DataCell below --> Create DescKey with same name (eg. Einzelaugen: Anzahl Augen)
                    if (worksheetCharacteristics.Cells[i, _typColIndexExcel].Value?.ToString().Trim() == "Zahlenfeld" && worksheetCharacteristics.Cells[i + 1, currentKeyGroupRow].Value == null)
                    {
                        try
                        {
                            SaveDescriptionKey(descriptionKeyGroup.KeyGroupName, descriptionKeyGroup.KeyGroupName, descriptionKeyGroup.DescriptionKeyGroupId, i);
                        }
                        catch (Exception e)
                        {
                            Logger.Error("--- Error saving \'" + keyGroupName + "\' with ParentDescKeyGroup \'" + supKeyGroupName + "\'");
                            Logger.Error(e);
                        }
                    }
                }
                descKeyGroupCounter++;
            }
            else
            {
                Logger.Debug("--- Did not add KeyGroup: \'" + keyGroupName + "\' With ParentKeyGroup: \'" + supKeyGroupName + "\'");
                Logger.Debug("--- Entity already exists.");
            }
            //TODO: clarify - save Lage-Key groups without Region Key Groups as top-level keyGroups?
        }
        public void ParseAndSaveExcelColumn(int currentKeyGroupRow, int superiorKeyGroupRow, bool isMerkmaleRow)
        {
            for (int i = 3; i <= worksheetCharacteristics.Dimension.Rows; i++)
            {
                //Parse Region Col
                var cellVal = worksheetCharacteristics.Cells[i, currentKeyGroupRow].Value;
                //Empty row above -> new DescKeyGroup --> ignore desckeys in merkmale-row
                if (cellVal != null && worksheetCharacteristics.Cells[i - 1, currentKeyGroupRow].Value == null)
                {
                    var keyGroupName = worksheetCharacteristics.Cells[i, currentKeyGroupRow].Value.ToString().Trim();

                    //Type has to be set only on merkmale level?
                    var keyGroupDataType = isMerkmaleRow ? GetDescKeyGroupDataType(i) : null;
                    //Männchen;Weibchen --> moved to TaxDescr
                    //var keyGroupType = isMerkmaleRow && _mwColExists ? GetDescKeyGroupMWType(i) : null;

                    //Parent KeyGroup?
                    var supKeyGroupVal = worksheetCharacteristics.Cells[i, superiorKeyGroupRow].Value;

                    //If Lage empty -> get Value from Region Column and reference it
                    //cf. Row 40 "Antenne: Anzahl Antennenglieder
                    if (isMerkmaleRow && supKeyGroupVal == null)
                    {
                        //supKeyGroupVal = worksheetCharacteristics.Cells[i, _regionColIndexExcel].Value;
                    }
                    int?supSupKeyGroupId = null;
                    //Merkmal -> Lage
                    if (supKeyGroupVal != null)
                    {
                        string supKeyGroupName = supKeyGroupVal.ToString().Trim();
                        if (supKeyGroupName == "Bundesland")
                        {
                            keyGroupName = _mapBundeslandRealName(keyGroupName);
                        }
                        //Problem: Unterseite -> Körperende || Unterseite -> Kopf
                        //check first column desckeygroup
                        if (isMerkmaleRow)
                        {
                            var supSupKeyGroupName = worksheetCharacteristics.Cells[i, _regionColIndexExcel].Value?.ToString().Trim();
                            supSupKeyGroupId = GetDescKeyGroupIdByName(supSupKeyGroupName).GetValueOrDefault();
                        }
                        int?supKeyGroupId = null;
                        supKeyGroupId = GetDescKeyGroupIdByName(supKeyGroupName.ToString().Trim(), supSupKeyGroupId).GetValueOrDefault();
                        SaveDKGWithParent(keyGroupName, supKeyGroupId, supSupKeyGroupId, supKeyGroupName, isMerkmaleRow, i, currentKeyGroupRow, keyGroupDataType);
                    }
                    //Lage empty, check Region and relate merkmal directly to Region
                    else if (worksheetCharacteristics.Cells[i, _regionColIndexExcel].Value != null)
                    {
                        //tbd
                        string supKeyGroupName = worksheetCharacteristics.Cells[i, _regionColIndexExcel].Value.ToString().Trim();
                        var    supKeyGroupId   = GetDescKeyGroupIdByName(supKeyGroupName);
                        if (!SupDescKeyGroupNameExists(keyGroupName, supKeyGroupId))
                        {
                            DescriptionKeyGroup descriptionKeyGroup = new DescriptionKeyGroup {
                                KeyGroupName = keyGroupName, ParentDescriptionKeyGroupId = supKeyGroupId, DescriptionKeyGroupDataType = keyGroupDataType, VisibilityCategoryId = _MapAmpelType(i), OrderPriority = _GetOrderPriority(i)
                            };
                            _context.Add(descriptionKeyGroup);
                            SaveToContext();
                            Logger.Debug("--- Added DescKeyGroup \'" + keyGroupName + "\' With ParentKeyGroup: \'" + supKeyGroupName);
                            //Save merkmale keyGroupId to row for reference when parsing untermerkmale
                            if (isMerkmaleRow)
                            {
                                _keyGroupToExcelRowMapping[i] = descriptionKeyGroup.DescriptionKeyGroupId;
                                if (worksheetCharacteristics.Cells[i, _typColIndexExcel].Value?.ToString().Trim() == "Zahlenfeld" && worksheetCharacteristics.Cells[i + 1, currentKeyGroupRow].Value == null)
                                {
                                    SaveDescriptionKey(descriptionKeyGroup.KeyGroupName, descriptionKeyGroup.KeyGroupName, descriptionKeyGroup.DescriptionKeyGroupId, i);
                                }
                            }
                            descKeyGroupCounter++;
                        }
                        else
                        {
                            Logger.Debug("--- Did not add DescKeyGroup \'" + keyGroupName + "\' With ParentKeyGroup: \'" + supKeyGroupName);
                            Logger.Debug("--- Entity already exists");
                        }
                    }
                    //merkmal as keygroup without Lage nor Region
                    else
                    {
                        DescriptionKeyGroup descriptionKeyGroup = new DescriptionKeyGroup {
                            KeyGroupName = keyGroupName, DescriptionKeyGroupDataType = keyGroupDataType, VisibilityCategoryId = _MapAmpelType(i), OrderPriority = _GetOrderPriority(i)
                        };
                        _context.Add(descriptionKeyGroup);
                        SaveToContext();
                        Logger.Debug("--- Added DescKeyGroup \'" + keyGroupName + " with no ParentKeyGroup");
                        //Save merkmale keyGroupId to row for reference when parsing untermerkmale
                        if (isMerkmaleRow)
                        {
                            _keyGroupToExcelRowMapping[i] = descriptionKeyGroup.DescriptionKeyGroupId;
                            if (worksheetCharacteristics.Cells[i, _typColIndexExcel].Value?.ToString().Trim() == "Zahlenfeld" && worksheetCharacteristics.Cells[i + 1, currentKeyGroupRow].Value == null)
                            {
                                SaveDescriptionKey(descriptionKeyGroup.KeyGroupName, descriptionKeyGroup.KeyGroupName, descriptionKeyGroup.DescriptionKeyGroupId, i);
                            }
                        }
                        descKeyGroupCounter++;
                    }
                }
            }
        }
Пример #6
0
        public async Task <ActionResult <DescriptionKeyGroup> > PostDescriptionKeyGroupItem(DescriptionKeyGroup item)
        {
            try
            {
                _detContext.DescriptionKeyGroup.Add(item);
                await _detContext.SaveChangesAsync();

                return(CreatedAtAction(nameof(GetDescriptionKeyGroupItem), new { id = item.DescriptionKeyGroupId }, item));
            } catch (System.Exception e)
            {
                var exp = e;
            }
            return(null);
        }
        private int?GetDescKeyGroupIdFromKeyGroupList(List <string> descKeyGroupList)
        {
            List <DescriptionKeyGroup> descKeyGroup = null;

            if (descKeyGroupList != null)
            {
                if (descKeyGroupList.Count == 1)
                {
                    descKeyGroup = _contextDet.DescriptionKeyGroup
                                   .Where(dkg => dkg.KeyGroupName == descKeyGroupList[0])
                                   .ToList();
                    //TODO: clarify what to do when more than 1 result but excel only 1 desckeygroup element?
                    if (descKeyGroup != null)
                    {
                        if (descKeyGroup.Count == 0)
                        {
                            Logger.Debug("--- Could not find DescKeyGroupId [{0}]", string.Join(", ", descKeyGroupList));
                        }
                        else if (descKeyGroup.Count == 1)
                        {
                            return(descKeyGroup.FirstOrDefault().DescriptionKeyGroupId);
                        }
                        else
                        {
                            Logger.Debug("--- Could not determine DescKeyGroupId for combination: [{0}]", string.Join(", ", descKeyGroupList));
                        }
                    }
                }

                else if (descKeyGroupList.Count == 2)
                {
                    descKeyGroup = _contextDet.DescriptionKeyGroup
                                   .Where(dkg => dkg.KeyGroupName == descKeyGroupList[0])
                                   .Include(dkg => dkg.ParentDescriptionKeyGroup).ToList();

                    if (descKeyGroup != null)
                    {
                        if (descKeyGroup.Count == 0)
                        {
                            Logger.Debug("--- Could not find DescKeyGroupId [{0}]", string.Join(", ", descKeyGroupList));
                        }
                        else if (descKeyGroup.Count == 1)
                        {
                            return(descKeyGroup.First().DescriptionKeyGroupId);
                        }
                        else
                        {
                            DescriptionKeyGroup descKeyGroupParentFilter = descKeyGroup.Where(dkg => dkg.ParentDescriptionKeyGroup.KeyGroupName == descKeyGroupList[1]).FirstOrDefault();
                            if (descKeyGroupParentFilter != null)
                            {
                                return(descKeyGroupParentFilter.DescriptionKeyGroupId);
                            }
                        }
                    }
                }

                else if (descKeyGroupList.Count == 3)
                {
                    if (descKeyGroupList[1].Contains(";"))
                    {
                        var descKeyArr = descKeyGroupList[1].Split(";");
                        foreach (string dkName in descKeyArr)
                        {
                        }
                    }

                    descKeyGroup = _contextDet.DescriptionKeyGroup
                                   .Where(dkg => dkg.KeyGroupName == descKeyGroupList[0])
                                   .Include(dkg => dkg.ParentDescriptionKeyGroup)
                                   .ThenInclude(dkgp => dkgp.ParentDescriptionKeyGroup)
                                   .ToList();

                    if (descKeyGroup != null)
                    {
                        if (descKeyGroup.Count == 0)
                        {
                            Logger.Debug("--- Could not find DescKeyGroupId [{0}]", string.Join(", ", descKeyGroupList));
                            return(null);
                        }
                        else if (descKeyGroup.Count == 1)
                        {
                            return(descKeyGroup.FirstOrDefault().DescriptionKeyGroupId);
                        }
                        else
                        {
                            try
                            {
                                //descKeyGroup.RemoveAll(dkg => dkg.ParentDescriptionKeyGroup == null);

                                List <DescriptionKeyGroup> descKeyGroupParentFilterList = descKeyGroup
                                                                                          .Where(dkg => dkg.ParentDescriptionKeyGroup?.KeyGroupName == descKeyGroupList[1])
                                                                                          .ToList();
                                if (descKeyGroupParentFilterList != null)
                                {
                                    if (descKeyGroupParentFilterList.Count == 0)
                                    {
                                        Logger.Debug("--- Could not find DescKeyGroupId [{0}]", string.Join(", ", descKeyGroupList));
                                        return(null);
                                    }
                                    else if (descKeyGroupParentFilterList.Count == 1)
                                    {
                                        return(descKeyGroupParentFilterList.FirstOrDefault().DescriptionKeyGroupId);
                                    }
                                    else
                                    {
                                        var descKeyGroupGrandParentFilterList = descKeyGroupParentFilterList.Where(dkgp => dkgp.ParentDescriptionKeyGroup.KeyGroupName == descKeyGroupList[2]).FirstOrDefault();
                                        Logger.Debug("--- Could not find DescKeyGroupId [{0}]", string.Join(", ", descKeyGroupList));
                                        return(null);
                                    }
                                }
                            }
                            catch (Exception e)
                            {
                                Logger.Error(e, $"Error Getting Parent DKG Info for DKG {descKeyGroup.FirstOrDefault().KeyGroupName}");
                            }
                        }
                    }
                }
            }
            return(null);
        }