using _1CDataBus.RabbitMQ; using _1CDataBus.Structure; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using Simple.OData.Client; using System.Linq.Expressions; using System.Text; using System.Text.Encodings.Web; using System.Text.Json; using System.Text.Json.Serialization; namespace _1CDataBus.Controllers { [ApiController] [Route("[controller]")] public class ContractsController : ControllerBase { private readonly IConfiguration _config; private readonly ILogger _logger; private RabbitConnection _rabbit; private ODataClient _client; public ContractsController(ILogger logger, IConfiguration config) { _config = config; _logger = logger; _rabbit = new RabbitConnection(_config); var odata = new ODataAccess(_config); _client = odata.Client; } [HttpPost("SendContractFromQDoc")] public async Task SendContractFromQDoc(long id) { var contract = await _client .For("IContract") .Key(id) .Expand("BusinessUnit") .Expand("Counterparty") .Expand("Currency") .Expand("DealKindSungero") .FindEntryAsync(); var sendContract = new Contract(contract); await SendContractTo1C(sendContract); } //[HttpPost("Test")] //public async Task TestDelete() //{ // var peoples = await _client // .For("IPersons") // .Filter("Name eq \'Маударбеков Азат Муратбекович\'") // .FindEntriesAsync(); // foreach (dynamic person in peoples) // { // try // { // long Id = person["Id"]; // await _client // .For("IPersons") // .Key(Id) // .DeleteEntryAsync(); // } // catch (Exception) // { // } // } //} [HttpPost("SendContract")] public async Task SendContractTo1C([FromBody]Contract contract) { JsonSerializerOptions options = new() { Encoder = JavaScriptEncoder.UnsafeRelaxedJsonEscaping, WriteIndented = true }; var serialized = JsonSerializer.Serialize(contract, options); await _rabbit.SendMessage(serialized); } [HttpGet("GetContract")] public async Task GetContract(long contractId) { var contract = await _client .For("IContracts") .Expand("Versions/Body") .Key(contractId) .FindEntryAsync(); var versions = (IEnumerable)contract["Versions"]; var lastVersion = versions.OrderByDescending(x => x["Number"]).FirstOrDefault(); byte[] bytes = lastVersion["Body"]["Value"]; var base64 = Convert.ToBase64String(bytes); return base64; } } }