/// <summary> /// Use when status on server is pending create or normal and below local we regenerate element /// </summary> /// <param name="elementGetDTO"></param> /// <param name="repository"></param> public async static Task <bool> ReGenerateElementBelowLocalAsync(ElementGetDTO elementGetDTO, IRepositoryWrapper repository) { var element = await repository.Element.FindByCondition(x => x.Id.Equals(elementGetDTO.Id)).FirstOrDefaultAsync(); element.Status = Define.NORMAL; element.IdRevitElement = elementGetDTO.IdRevitElement; repository.Element.Update(element); return(true); }
/// <summary> /// use when add a element no exist on current drawing but exist on other drawing to this drawing /// Create element and set idManager=manager, idRevit=id of revit below local /// </summary> /// <param name="elementGetDTO"></param> /// <param name="repository"></param> /// <param name="idDrawing"></param> public static void CreateElementFromStack(ElementGetDTO elementGetDTO, IRepositoryWrapper repository, Guid idDrawing) { // Tao Element Element element = new Element() { Id = Guid.NewGuid(), IdManager = elementGetDTO.IdManager, IdDrawing = idDrawing, IdRevitElement = elementGetDTO.IdRevitElement, Status = Define.NORMAL }; repository.Element.Add(element); }
/// <summary> /// Use when status of element of current drawing is pending delete change to deleted /// Change status of element to Deleted /// Change status of manager to Deleted if all status of other drawing is deleted. /// </summary> /// <param name="elementGetDTO"></param> /// <param name="repository"></param> /// <param name="status"></param> public async static Task <bool> StatusChangeFromPendingDeleteToDeletedAsync(ElementGetDTO elementGetDTO, IRepositoryWrapper repository) { var element = await repository.Element.FindByCondition(x => x.Id.Equals(elementGetDTO.Id)).FirstOrDefaultAsync(); element.IdRevitElement = Guid.Empty; element.Status = Define.DELETED; repository.Element.Update(element); // tim manager var manager = await repository.ElementManagement.FindByCondition(m => m.Id.Equals(elementGetDTO.IdManager)).FirstOrDefaultAsync(); manager.Status = await IsDeletedAll(manager.Id, repository) ? Define.DELETED : Define.DELETING; repository.ElementManagement.Update(manager); return(true); }
/// <summary> /// Create new geometry to do perform geometry be edited below local and push to server. /// </summary> /// <param name="elementGetDTO"></param> /// <param name="repository"></param> public static void CreateNewGeometryVersion(ElementGetDTO elementGetDTO, IRepositoryWrapper repository) { // Tao geometry GeometryVersion geometryVersion = new GeometryVersion() { Id = Guid.NewGuid(), IdManager = elementGetDTO.IdManager, Geometry = elementGetDTO.Geometry.Geometry, Direction = elementGetDTO.Geometry.Direction, Original = elementGetDTO.Geometry.Original, Version = string.Empty, CreatedDate = DateTime.Now, Status = string.Empty, //IdUserEdited = Guid.Empty }; repository.GeometryVersion.Add(geometryVersion); }
/// <summary> /// Use when one element be created on local and push it to server /// Create manager /// Create Element with idManager is id of manager just create above, idRevit is id of revit element below local /// Create geometry with idManager is id of manager just create above /// </summary> /// <param name="elementGetDTO"></param> /// <param name="repository"></param> /// <param name="idDrawing"></param> public static void CreateElement(ElementGetDTO elementGetDTO, IRepositoryWrapper repository, Guid idDrawing) { // can tao manager truoc ElementManagement elementManagement = new ElementManagement() { Id = Guid.NewGuid(), CreatedDate = DateTime.Now, Status = Define.NORMAL }; // Tao geometry GeometryVersion geometryVersion = new GeometryVersion() { Id = Guid.NewGuid(), IdManager = elementManagement.Id, Geometry = elementGetDTO.Geometry.Geometry, Direction = elementGetDTO.Geometry.Direction, Original = elementGetDTO.Geometry.Original, Version = string.Empty, CreatedDate = elementManagement.CreatedDate, Status = string.Empty, //IdUserEdited = Guid.Empty }; // Tao Element Element element = new Element() { Id = Guid.NewGuid(), IdManager = elementManagement.Id, IdDrawing = idDrawing, IdRevitElement = elementGetDTO.IdRevitElement, Status = Define.NORMAL }; repository.ElementManagement.Add(elementManagement); repository.Element.Add(element); repository.GeometryVersion.Add(geometryVersion); }
/// <summary> /// Use when status of element of current drawing on server change from pending delete to normal /// Change status of element of other drawing : PendingDelete->Normal, Deleted->PendingCreate /// Change status of element of current drawing to: Normal /// Change IdRevitElement to id of revit element below local /// Change Status of manager to normal /// </summary> /// <param name="elementGetDTO"></param> /// <param name="repository"></param> public async static Task <bool> StatusChangeFromPendingDeleteToNormalAsync(ElementGetDTO elementGetDTO, IRepositoryWrapper repository) { // tim manager var manager = await repository.ElementManagement.FindByCondition(m => m.Id.Equals(elementGetDTO.IdManager)).FirstOrDefaultAsync(); manager.Status = Define.NORMAL; // tim tat cac cac thuc the manager da phan phoi var elements = await repository.Element.FindByCondition(e => e.IdManager.Equals(manager.Id)).ToListAsync(); foreach (var ele in elements) { if (ele.Id.Equals(elementGetDTO.Id)) { ele.Status = Define.NORMAL; ele.IdRevitElement = elementGetDTO.IdRevitElement; continue; } // neu o trang thai normal thi moi xu ly if (ele.Status.Equals(Define.PENDING_DELETE)) { // neu gap thang dang local nay tuc la no da bi delete ele.Status = Define.NORMAL; } else if (ele.Status.Equals(Define.DELETED)) { ele.Status = Define.PENDING_CREATE; } repository.Element.Update(ele); } repository.ElementManagement.Update(manager); if (elementGetDTO.DifferenceGeometry) { CreateNewGeometryVersion(elementGetDTO, repository); } return(true); }
/// <summary> /// Logic up date when Status of element on server is changed to deleted /// Change status of element of other drawing to : Normal->PendingDelete, PendingCreate->Deleted /// Change status of element of current drawing to: Deleted /// Change IdRevitElement to Guid.empty /// Change Status of manager to Deleting or Deleted (if all status of elements are deleted) /// </summary> /// <param name="elementGetDTO"></param> /// <param name="repository"></param> public static async Task <bool> UpdateWhenStatusOfElementChangeToDeletedAsync(ElementGetDTO elementGetDTO, IRepositoryWrapper repository) { // tim manager var manager = await repository.ElementManagement.FindByCondition(m => m.Id.Equals(elementGetDTO.IdManager)).FirstOrDefaultAsync(); // tim tat cac cac thuc the manager da phan phoi var elements = await repository.Element.FindByCondition(e => e.IdManager.Equals(manager.Id)).ToListAsync(); foreach (var ele in elements) { if (ele.Id.Equals(elementGetDTO.Id)) { ele.Status = Define.DELETED; ele.IdRevitElement = Guid.Empty; continue; } // neu o trang thai normal thi moi xu ly if (ele.Status.Equals(Define.NORMAL)) { // neu gap thang dang local nay tuc la no da bi delete ele.Status = Define.PENDING_DELETE; } else if (ele.Status.Equals(Define.PENDING_CREATE)) { ele.Status = Define.DELETED; } repository.Element.Update(ele); } manager.Status = await IsDeletedAll(manager.Id, repository) ? Define.DELETED : Define.DELETING; repository.ElementManagement.Update(manager); return(true); }