public static async Task <OdooResult <long> > CreateAsync(OdooConfig odooConfig, int userUid, OdooDictionaryModel model)
        {
            var request = OdooRequestModel.Create(odooConfig, userUid, GetTableName(model), model);
            var result  = await CallAndDeserializeAsync <long[]>(request);

            return(result.Succeed ? result.ToResult(result.Value.FirstOrDefault()) : OdooResult <long> .FailedResult(result));
        }
        public static async Task <OdooResult <bool> > UpdateRangeAsync(OdooConfig odooConfig, int userUid, IOdooCreateModel model, long[] ids)
        {
            var tableName = model.OdooTableName();
            var request   = OdooRequestModel.Update(odooConfig, userUid, tableName, ids, model);

            return(await CallAndDeserializeAsync <bool>(request));
        }
        public static async Task <OdooResult <long> > GetCountAsync <T>(OdooConfig odooConfig, int userUid, OdooQuery query = null) where T : IOdooModel, new()
        {
            var tableName = OdooExtensions.GetOdooTableName <T>();
            var request   = OdooRequestModel.SearchCount(odooConfig, userUid, tableName, query);

            return(await CallAndDeserializeAsync <long>(request));
        }
        public static async Task<HttpResponseMessage> CallAsync(OdooRequestModel requestModel)
        {
            string json = JsonConvert.SerializeObject(requestModel, new IsoDateTimeConverter { DateTimeFormat = OdooConsts.DateTimeFormat });
            var data = new StringContent(json, Encoding.UTF8, "application/json");

            using (var client = new HttpClient())
            {
                client.DefaultRequestHeaders.Accept.Clear();
                client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
                var result = await client.PostAsync(requestModel.Params.Url, data);
                return result;
            }
        }
 public static async Task<OdooResult<T>> CallAndDeserializeAsync<T>(OdooRequestModel request)
 {
     try
     {
         var response = await CallAsync(request);
         var responseString = await response.Content.ReadAsStringAsync();
         var result = JsonConvert.DeserializeObject<OdooResult<T>>(responseString);
         return result;
     }
     catch (Exception e)
     {
         return OdooResult<T>.FailedResult(e.ToString());
     }
 }
        //[Fact]
        public async Task OnChange_test()
        {
            try
            {
                var loginResult = await OdooClient.LoginAsync(Config);

                var param = new OdooRequestParams(Config.ApiUrlJson, "object", "execute", Config.DbName, loginResult.Value, Config.Password, "sale.order", OdooOperation.OnChage,
                                                  new Dictionary <string, int>()
                {
                    { "onchange_pricelist_id", 17 }
                }, 135);
                var request = new OdooRequestModel(param);

                var result = OdooClient.CallAsync(request);
            }
            catch (Exception e)
            {
                Console.WriteLine(e);
                throw;
            }
        }
        public void RequestModel_should_return_request_with_corect_params_count()
        {
            var query = new OdooQuery()
            {
                ReturnFields = new HashSet <string> {
                    "name"
                },
                Filters = new OdooFilter {
                    new object[] { "id", "=", 66 }
                }
            };
            var request = OdooRequestModel.SearchRead(Config, 2, "table", query);

            request.Params.Args.Length.Should().Be(7);


            var query2 = new OdooQuery()
            {
                Filters = new OdooFilter {
                    new object[] { "id", "=", 66 }
                }
            };
            var request2 = OdooRequestModel.SearchRead(Config, 2, "table", query2);

            request2.Params.Args.Length.Should().Be(6);


            var query3 = new OdooQuery()
            {
                ReturnFields = new HashSet <string> {
                    "name"
                }
            };
            var request3 = OdooRequestModel.SearchRead(Config, 2, "table", query3);

            request3.Params.Args.Length.Should().Be(7);


            var request4 = OdooRequestModel.SearchRead(Config, 2, "table");

            request4.Params.Args.Length.Should().Be(5);


            var query5 = new OdooQuery()
            {
                Offset = 10
            };
            var request5 = OdooRequestModel.SearchRead(Config, 2, "table", query5);

            request5.Params.Args.Length.Should().Be(8);


            var query6 = new OdooQuery()
            {
                Limit = 10
            };
            var request6 = OdooRequestModel.SearchRead(Config, 2, "table", query6);

            request6.Params.Args.Length.Should().Be(9);


            var query7 = new OdooQuery()
            {
                Order = "id"
            };
            var request7 = OdooRequestModel.SearchRead(Config, 2, "table", query7);

            request7.Params.Args.Length.Should().Be(10);


            var queryTest = new OdooQuery()
            {
                ReturnFields = new HashSet <string> {
                    "name"
                },
                Filters = OdooFilter.Create().EqualTo("id", 66)
            };

            var requestTest = OdooRequestModel.SearchRead(Config, 2, "table", queryTest);

            requestTest.Params.Args.Length.Should().Be(7);
        }
        public static async Task <OdooResult <OdooVersion> > GetVersionAsync(OdooConfig odooConfig)
        {
            var request = OdooRequestModel.Version(odooConfig);

            return(await CallAndDeserializeAsync <OdooVersion>(request));
        }
        public static async Task <OdooResult <Dictionary <string, OdooPropertyInfo> > > GetModelAsync(OdooConfig odooConfig, int userUid, string tableName)
        {
            var request = OdooRequestModel.ModelFields(odooConfig, userUid, tableName);

            return(await CallAndDeserializeAsync <Dictionary <string, OdooPropertyInfo> >(request));
        }
        public static async Task <OdooResult <int> > LoginAsync(OdooConfig odooConfig)
        {
            var request = OdooRequestModel.Login(odooConfig);

            return(await CallAndDeserializeAsync <int>(request));
        }
        public static async Task <OdooResult <bool> > DeleteRangeAsync(OdooConfig odooConfig, int userUid, string tableName, long[] ids)
        {
            var request = OdooRequestModel.Delete(odooConfig, userUid, tableName, ids);

            return(await CallAndDeserializeAsync <bool>(request));
        }
        public static async Task <OdooResult <bool> > UpdateRangeAsync(OdooConfig odooConfig, int userUid, OdooDictionaryModel model, long[] ids)
        {
            var request = OdooRequestModel.Update(odooConfig, userUid, GetTableName(model), ids, model);

            return(await CallAndDeserializeAsync <bool>(request));
        }
 public static async Task<OdooResult<long>> CreateAsync(OdooConfig odooConfig, int userUid, IOdooCreateModel model, OdooContext context = null)
 {
     var request = OdooRequestModel.Create(odooConfig, userUid, model.OdooTableName(), model, context);
     var result = await CallAndDeserializeAsync<long>(request);
     return result.Succeed ? result.ToResult(result.Value) : OdooResult<long>.FailedResult(result);
 }
 public static async Task<OdooResult<T[]>> GetAsync<T>(OdooConfig odooConfig, int userUid, OdooQuery query = null, OdooContext context = null) where T : IOdooModel, new()
 {
     var tableName = OdooExtensions.GetOdooTableName<T>();
     var request = OdooRequestModel.SearchRead(odooConfig, userUid, tableName, query, context);
     return await CallAndDeserializeAsync<T[]>(request);
 }