Exemplo n.º 1
0
        public async Task <bool> AddNewClassVersionAsync(string classCode, string version, string remarks, DateTime validFrom, DateTime?validTo)
        {
            var currentClass = this.db.Classifications.Where(c => c.Id == classCode && c.isDeleted == false).FirstOrDefault();

            if (currentClass == null || version == null)
            {
                return(false);
            }

            var newVersion = new TC_Classif_Vers()
            {
                Classif    = currentClass.Id,
                Version    = version,
                Remarks    = remarks,
                Valid_From = validFrom,
                Valid_To   = validTo != null ? validTo : null,
                isDeleted  = false
            };

            await this.db.Database.BeginTransactionAsync();

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

                await this.db.SaveChangesAsync();
            }
            catch (Exception)
            {
                this.db.Database.RollbackTransaction();
                return(false);
            }
            this.db.Database.CommitTransaction();
            return(true);
        }
Exemplo n.º 2
0
        public async Task <bool> AddNewClassification(string classCode, string version, string name, string nameEng, string remarks, bool isHierachy, DateTime validFrom, DateTime?validTo)
        {
            if (this.IsClassificationExist(classCode))
            {
                return(false);
            }

            var newClass = new TC_Classifications()
            {
                Id         = classCode,
                Name       = name,
                NameEng    = nameEng,
                IsHierachy = isHierachy,
                isDeleted  = false,
                Remarks    = remarks
            };
            var newClassVer = new TC_Classif_Vers()
            {
                Classif    = classCode,
                Version    = version,
                Valid_From = validFrom.Date,
                Valid_To   = validTo != null ? validTo : null,
                isDeleted  = false,
                Remarks    = remarks
            };

            await this.db.Database.BeginTransactionAsync();

            try
            {
                await this.db.Classifications.AddAsync(newClass);

                await this.db.SaveChangesAsync();

                await this.db.ClassVersions.AddAsync(newClassVer);

                await this.db.SaveChangesAsync();
            }
            catch (Exception)
            {
                this.db.Database.RollbackTransaction();
                return(false);
            }
            this.db.Database.CommitTransaction();
            return(true);
        }
Exemplo n.º 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);
        }