예제 #1
0
        public async Task <bool> AddRelationItemAsync(string relationId, string srcItemId, string destItemId, string userId)
        {
            var currentRelationType = await this.db.ClassRelationsTypes.Where(r => r.Id == relationId).FirstOrDefaultAsync();

            if (currentRelationType == null)
            {
                return(false);
            }

            var searchedRelation = await this.db.ClassRelations.Where(r => r.RelationTypeId == relationId && r.SrcClassif == currentRelationType.SrcClassifId && r.SrcVer == currentRelationType.SrcVersionId && r.SrcItemId == srcItemId && r.DestClassif == currentRelationType.DestClassifId && r.DestVer == currentRelationType.DestVersionId && r.DestItemId == destItemId).FirstOrDefaultAsync();

            if (searchedRelation != null)
            {
                return(false);
            }

            await this.db.Database.BeginTransactionAsync();

            try
            {
                var newRelation = new TC_Classif_Rels()
                {
                    RelationTypeId  = relationId,
                    SrcClassif      = currentRelationType.SrcClassifId,
                    SrcVer          = currentRelationType.SrcVersionId,
                    SrcItemId       = srcItemId,
                    DestClassif     = currentRelationType.DestClassifId,
                    DestVer         = currentRelationType.DestVersionId,
                    DestItemId      = destItemId,
                    EntryTime       = DateTime.Now,
                    EnteredByUserId = userId
                };
                await this.db.ClassRelations.AddAsync(newRelation);

                await this.db.SaveChangesAsync();
            }
            catch (Exception)
            {
                this.db.Database.RollbackTransaction();
                return(false);
            }

            this.db.Database.CommitTransaction();

            return(true);
        }
예제 #2
0
        public async Task <string> AddRelItemsCollection(List <AddNewRelItemsServiceModel> items)
        {
            if (!IsRelationExist(items[0].RelationTypeId))
            {
                return($"Няма релация с код {items[0].RelationTypeId}");
            }
            await this.db.Database.BeginTransactionAsync();

            for (int i = 0; i <= items.Count() - 1; i++)
            {
                try
                {
                    var newItemDb = new TC_Classif_Rels()
                    {
                        IsDeleted       = false,
                        SrcClassif      = items[i].SrcClassif,
                        SrcVer          = items[i].SrcVer,
                        SrcItemId       = items[i].SrcItemId.Trim(),
                        DestClassif     = items[i].DestClassif,
                        DestVer         = items[i].DestVer,
                        DestItemId      = items[i].DestItemId.Trim(),
                        RelationTypeId  = items[i].RelationTypeId,
                        EnteredByUserId = items[i].EnteredByUserId,
                        EntryTime       = items[i].EntryTime
                    };
                    await this.db.ClassRelations.AddAsync(newItemDb);

                    await this.db.SaveChangesAsync();
                }
                catch (Exception)
                {
                    this.db.Database.RollbackTransaction();
                    return($"Ред N:{i} има грешка или релацията вече е добавена");
                }
            }
            this.db.Database.CommitTransaction();
            return("success");
        }
예제 #3
0
        public async Task <string> CreateCopyVersionAsync(string classCode, string versionCode, string newVersion, string userId, bool copyRelations)
        {
            if (await this.IsClassVersionExistAsync(classCode, versionCode) == false)
            {
                return($"Грешка!!! Няма версия източник с код: {classCode} {versionCode}");
            }
            if (await this.IsClassVersionExistAsync(classCode, newVersion) == true)
            {
                return($"Грешка!!! Вече има версия с код: {classCode} {newVersion}");
            }

            var sourceVersion = await this.db.ClassVersions.Where(v => v.Classif == classCode && v.Version == versionCode).FirstOrDefaultAsync();


            var brandNewVersion = new TC_Classif_Vers()
            {
                Classif      = sourceVersion.Classif,
                Version      = newVersion,
                Remarks      = sourceVersion.Remarks,
                ByLow        = sourceVersion.ByLow,
                Publications = sourceVersion.Publications,
                UseAreas     = sourceVersion.UseAreas,
                Parent       = sourceVersion.Parent,
                Valid_From   = sourceVersion.Valid_From,
                Valid_To     = sourceVersion.Valid_To
            };

            var           connectionString = Configuration.GetSection("ConnectionStrings:DefaultConnection").Value;
            SqlConnection con    = new SqlConnection(connectionString);
            SqlCommand    com    = new SqlCommand("ALTER TABLE ClassItems NOCHECK CONSTRAINT FK_ClassItems_ClassItems_Classif_Version_ParentItemCode");
            SqlCommand    comend = new SqlCommand("ALTER TABLE ClassItems CHECK CONSTRAINT FK_ClassItems_ClassItems_Classif_Version_ParentItemCode");

            com.Connection    = con;
            comend.Connection = con;

            con.Open();
            com.ExecuteNonQuery();


            await this.db.Database.BeginTransactionAsync();

            try
            {
                await this.db.ClassVersions.AddAsync(brandNewVersion);

                await this.db.SaveChangesAsync();

                var items = await this.db.ClassItems.Where(i => i.Classif == classCode && i.Version == versionCode).ToListAsync();

                foreach (var item in items)
                {
                    var newItem = new TC_Classif_Items()
                    {
                        Classif          = item.Classif,
                        Version          = brandNewVersion.Version,
                        Description      = item.Description,
                        DescriptionShort = item.DescriptionShort,
                        DescriptionEng   = item.DescriptionEng,
                        Includes         = item.Includes,
                        IncludesMore     = item.IncludesMore,
                        IncludesNo       = item.IncludesNo,
                        IsLeaf           = item.IsLeaf,
                        ItemCode         = item.ItemCode,
                        ItemLevel        = item.ItemLevel,
                        EntryTime        = DateTime.Now,
                        IsDeleted        = item.IsDeleted,
                        OrderNo          = item.OrderNo,
                        OtherCode        = item.OtherCode,
                        ParentItemCode   = item.ParentItemCode,
                        EnteredByUserId  = userId,
                    };
                    await this.db.ClassItems.AddAsync(newItem);
                }
                await this.db.SaveChangesAsync();
            }
            catch (Exception)
            {
                this.db.Database.RollbackTransaction();
                comend.ExecuteNonQuery();
                con.Close();
                return($"Грешка!!! Възникна проблем при създаването на новата версия.");
            }
            this.db.Database.CommitTransaction();
            comend.ExecuteNonQuery();
            con.Close();
            var result = $"Версия с код: {classCode} {newVersion} беше създадена успешно \n";

            if (copyRelations)
            {
                await this.db.Database.BeginTransactionAsync();

                try
                {
                    var sourceRelations = await this.db.ClassRelationsTypes.Where(r => r.SrcClassifId == classCode && r.SrcVersionId == versionCode).ToListAsync();

                    var destRelations = await this.db.ClassRelationsTypes.Where(r => r.DestClassifId == classCode && r.DestVersionId == versionCode).ToListAsync();

                    foreach (var rel in sourceRelations)
                    {
                        var newRelationType = new TC_Classif_Rel_Types()
                        {
                            SrcClassifId  = classCode,
                            SrcVersionId  = newVersion,
                            DestClassifId = rel.DestClassifId,
                            DestVersionId = rel.DestVersionId,
                            Description   = $"Копие от релация \"{rel.Description}\". Сменена версия \"{versionCode}\" с версия \"{newVersion}\"",
                            Valid_From    = rel.Valid_From,
                            Valid_To      = rel.Valid_To
                        };
                        await this.db.ClassRelationsTypes.AddAsync(newRelationType);

                        await this.db.SaveChangesAsync();

                        var relItemsList = await this.db.ClassRelations.Where(ri => ri.RelationTypeId == rel.Id).ToListAsync();

                        foreach (var relItem in relItemsList)
                        {
                            var newRelation = new TC_Classif_Rels()
                            {
                                RelationTypeId  = newRelationType.Id,
                                SrcClassif      = relItem.SrcClassif,
                                SrcVer          = newRelationType.SrcVersionId,
                                SrcItemId       = relItem.SrcItemId,
                                DestClassif     = relItem.DestClassif,
                                DestVer         = relItem.DestVer,
                                DestItemId      = relItem.DestItemId,
                                EntryTime       = DateTime.Now,
                                EnteredByUserId = userId
                            };
                            await this.db.ClassRelations.AddAsync(newRelation);
                        }
                        await this.db.SaveChangesAsync();
                    }
                    foreach (var rel in destRelations)
                    {
                        var newRelationType = new TC_Classif_Rel_Types()
                        {
                            SrcClassifId  = classCode,
                            SrcVersionId  = rel.SrcVersionId,
                            DestClassifId = rel.DestClassifId,
                            DestVersionId = newVersion,
                            Description   = $"Копие от релация \"{rel.Description}\". Сменена версия \"{versionCode}\" с версия \"{newVersion}\"",
                            Valid_From    = rel.Valid_From,
                            Valid_To      = rel.Valid_To
                        };
                        await this.db.ClassRelationsTypes.AddAsync(newRelationType);

                        await this.db.SaveChangesAsync();

                        var relItemsList = await this.db.ClassRelations.Where(ri => ri.RelationTypeId == rel.Id).ToListAsync();

                        foreach (var relItem in relItemsList)
                        {
                            var newRelation = new TC_Classif_Rels()
                            {
                                RelationTypeId  = newRelationType.Id,
                                SrcClassif      = relItem.SrcClassif,
                                SrcVer          = relItem.SrcVer,
                                SrcItemId       = relItem.SrcItemId,
                                DestClassif     = relItem.DestClassif,
                                DestVer         = newRelationType.DestVersionId,
                                DestItemId      = relItem.DestItemId,
                                EntryTime       = DateTime.Now,
                                EnteredByUserId = userId
                            };
                            await this.db.ClassRelations.AddAsync(newRelation);
                        }
                        await this.db.SaveChangesAsync();
                    }
                }
                catch (Exception)
                {
                    this.db.Database.RollbackTransaction();
                    return(result + $"Грешка!!! Възникна проблем при копирането релационните таблици.");
                }
                this.db.Database.CommitTransaction();
                result = result + Environment.NewLine + $"Копирането на релационните таблици беше успешно.";
            }
            return(result);
        }