using Simple.OData.Client; using System.Text.Json; namespace JSONParser.Structure { public class Department : Entity { public string Name { get; set; } public string ShortName { get; set; } public BusinessUnit BusinessUnit { get; set; } public Department HeadOffice { get; set; } public string Status { get; set; } public override string ToString() { return Name; } public override string Serialize() { return JsonSerializer.Serialize(this); } public override async Task Create(ODataClient client) { var newDept = new { Name = this.Name, Status = "Active", ShortName = this.ShortName, ExternalId = this.Sid, HeadOffice = new { Id = this.HeadOffice == null ? 0 : this.HeadOffice.DirectumId }, BusinessUnit = new { Id = this.BusinessUnit?.DirectumId } }; var created = await client .For("IDepartment") .Set(newDept) .InsertEntryAsync(); this.DirectumId = (long)created["Id"]; return (long)created["Id"]; } public async override Task Update(ODataClient client, long id) { var newDept = new { Name = this.Name, Status = "Active", ShortName = this.ShortName, ExternalId = this.Sid, HeadOffice = new { Id = this.HeadOffice == null ? 0 : this.HeadOffice.DirectumId }, BusinessUnit = new { Id = this.BusinessUnit?.DirectumId } }; var updated = await client .For("IDepartment") .Key(id) .Set(newDept) .UpdateEntryAsync(); this.DirectumId = (long)updated["Id"]; return (long)updated["Id"]; } public async Task GetIdBySid(ODataClient client) { long result = 0; if (!string.IsNullOrEmpty(Sid)) { var found = await client .For("IDepartment") .Filter($"ExternalId eq '{this.Sid}'") .FindEntryAsync(); if (found != null) { DirectumId = (long)found["Id"]; result = (long)found["Id"]; } } return result; } public bool IsEqual(IDictionary dept) { var result = false; long? businessUnitId = null; long? headOfficeId = null; if (dept["BusinessUnit"] != null) { businessUnitId = dept["BusinessUnit"]["Id"]; } if (dept["HeadOffice"] != null) { headOfficeId = dept["HeadOffice"]["Id"]; } if (Name == dept["Name"] && ShortName == dept["ShortName"] && BusinessUnit?.DirectumId == businessUnitId && HeadOffice?.DirectumId == headOfficeId) { result = true; } return result; } } }