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); }
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); }
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); }