// [Fact]
        public async Task Can_create_product_and_delete_using_object()
        {
            var odooClient = new OdooClient(Config);

            var model = new OdooCreateProduct()
            {
                Name    = "Prod test Kg",
                UomId   = 3,
                UomPoId = 3
            };

            var createResult = await odooClient.CreateAsync(model);

            createResult.Succeed.Should().BeTrue();
            var createdProductId = createResult.Value;

            var query = OdooQuery <ProductProductOdooDto> .Create().ById(createdProductId);

            var product = await odooClient.GetAsync <ProductProductOdooDto>(query);

            product.Succeed.Should().BeTrue();
            product.Value.First().Name.Should().Be(model.Name);

            var deleteProductResult = await odooClient.DeleteAsync(product.Value.First());

            deleteProductResult.Succeed.Should().BeTrue();
            deleteProductResult.Value.Should().BeTrue();
        }
示例#2
0
        public void Can_create_builder_with_static_method()
        {
            var filters = OdooQuery <ProductProductOdooModel> .Create();

            filters.Should().NotBeNull();
            filters.Filters.Count.Should().Be(0);
            filters.ReturnFields.Count.Should().Be(0);
            filters.Limit.Should().BeNull();
            filters.Offset.Should().BeNull();
        }
        // [Fact]
        public async Task Can_create_sale_order()
        {
            var odooClient = new OdooClient(Config);

            var companyResult = await odooClient.GetAsync <CompanyOdooDto>(OdooQuery <CompanyOdooDto> .Create().ById(1));

            companyResult.Succeed.Should().BeTrue();
            var company = companyResult.Value.First();

            var partnerResult = await odooClient.GetAsync <ResPartnerOdooModel>(OdooQuery <ResPartnerOdooModel> .Create().ById(9));

            partnerResult.Succeed.Should().BeTrue();
            var partner = partnerResult.Value.First();

            var productQuery = OdooQuery <ProductProductOdooDto> .Create().ById(41);

            var productsResult = await odooClient.GetAsync <ProductProductOdooDto>(productQuery);

            productsResult.Succeed.Should().BeTrue();
            var product = productsResult.Value.First();



            var dictModel = OdooDictionaryModel.Create(() => new SaleOrderOdooModel
            {
                PricelistId = 17,

                PartnerId         = partner.Id,
                PartnerInvoiceId  = partner.Id,
                PartnerShippingId = partner.Id,

                CompanyId = company.Id,

                DateOrder = DateTime.Now,
            });

            var createResult = await odooClient.CreateAsync(dictModel);

            createResult.Message.Should().BeNullOrEmpty();
            createResult.Succeed.Should().BeTrue();


            var lineModel = OdooDictionaryModel.Create(() => new SaleOrderLineOdooDto()
            {
                OrderId       = createResult.Value,
                Name          = "test line",
                ProductId     = product.Id,
                ProductUomQty = 24,
                PriceUnit     = 15
            });

            var createLineResult = await odooClient.CreateAsync(lineModel);

            createLineResult.Succeed.Should().BeTrue();
        }
        public async Task Shoud_get_products_using_query_take()
        {
            var odooClient = new OdooClient(Config);
            var query      = OdooQuery <ProductProductOdooDto> .Create()
                             .Take(10);

            var products = await odooClient.GetAsync <ProductProductOdooDto>(query);

            products.Error.Should().BeNull();
            products.Value.Should().NotBeNull();
            products.Value.Length.Should().Be(10);
            products.Succeed.Should().BeTrue();
        }
示例#5
0
        public void When_use_pridicate_where_shoud_return_correct_filters_model()
        {
            var filters = OdooQuery <ProductProductOdooModel> .Create()
                          .Where(x => x.Id, OdooOperator.EqualsTo, 10);

            filters.Filters.Count.Should().Be(1);
            var json = JsonConvert.SerializeObject(filters.Filters);

            json.Should().Be("[[\"id\",\"=\",10]]");

            filters.ReturnFields.Count.Should().Be(0);
            filters.Limit.Should().BeNull();
            filters.Offset.Should().BeNull();
        }
        public async Task Get_product_by_Id_test()
        {
            var odooClient = new OdooClient(Config);

            var query = OdooQuery <ProductProductOdooDto> .Create()
                        .Where(x => x.Id, OdooOperator.EqualsTo, 303);

            var products = await odooClient.GetAsync <ProductProductOdooDto>(query);

            products.Error.Should().BeNull();
            products.Value.Should().NotBeNull();
            products.Value.Length.Should().Be(1);
            products.Succeed.Should().BeTrue();
        }
示例#7
0
        public void When_use_where_with_OdooFilter_param_shoud_return_correct_filters_model()
        {
            var filters = OdooQuery <ProductProductOdooModel> .Create()
                          .Where(OdooFilter.Create().GreaterThanOrEqual("write_date", new DateTime(2020, 12, 2)))
                          .Where(OdooFilter.Create().EqualTo("name", "Bioboxen 610l"));

            filters.Filters.Count.Should().Be(2);
            var json = JsonConvert.SerializeObject(filters.Filters);

            json.Should().Be("[[\"write_date\",\">=\",\"2020-12-02T00:00:00\"],[\"name\",\"=\",\"Bioboxen 610l\"]]");

            filters.ReturnFields.Count.Should().Be(0);
            filters.Limit.Should().BeNull();
            filters.Offset.Should().BeNull();
        }
示例#8
0
        public void When_use_pridicate_where_with_two_times_shoud_return_correct_filters_model()
        {
            var filters = OdooQuery <ProductProductOdooModel> .Create()
                          .Where(x => x.WriteDate, OdooOperator.GreaterThanOrEqualTo, new DateTime(2020, 12, 2))
                          .Where(x => x.Name, OdooOperator.EqualsTo, "Bioboxen 610l")
            ;

            filters.Filters.Count.Should().Be(2);
            var json = JsonConvert.SerializeObject(filters.Filters);

            json.Should().Be("[[\"write_date\",\">=\",\"2020-12-02T00:00:00\"],[\"name\",\"=\",\"Bioboxen 610l\"]]");

            filters.ReturnFields.Count.Should().Be(0);
            filters.Limit.Should().BeNull();
            filters.Offset.Should().BeNull();
        }
        //[Fact]
        public async Task Can_create_update_delete_product()
        {
            var odooClient = new OdooClient(Config);

            var model = new OdooCreateProduct()
            {
                Name          = "Prod test Kg",
                UomId         = 3,
                UomPoId       = 3,
                InvoicePolicy = InvoicingPolicyOdooEnum.DeliveredQuantities
            };

            var createResult = await odooClient.CreateAsync(model);

            createResult.Succeed.Should().BeTrue();
            var createdProductId = createResult.Value;

            var query = OdooQuery <ProductProductOdooDto> .Create()
                        .Where(x => x.Id, OdooOperator.EqualsTo, createdProductId);

            var products = await odooClient.GetAsync <ProductProductOdooDto>(query);

            products.Succeed.Should().BeTrue();
            products.Value.Length.Should().Be(1);
            products.Value.First().Name.Should().Be(model.Name);

            model.Name += " update";

            var updateProductResult = await odooClient.UpdateAsync(model, createdProductId);

            updateProductResult.Succeed.Should().BeTrue();

            var query2 = OdooQuery <ProductProductOdooDto> .Create()
                         .Where(x => x.Id, OdooOperator.EqualsTo, createdProductId);

            var products2 = await odooClient.GetAsync <ProductProductOdooDto>(query2);

            products2.Succeed.Should().BeTrue();
            products2.Value.Length.Should().Be(1);
            products2.Value.First().Name.Should().Be(model.Name);


            var deleteProductResult = await odooClient.DeleteAsync(model.OdooTableName(), createdProductId);

            deleteProductResult.Succeed.Should().BeTrue();
            deleteProductResult.Value.Should().BeTrue();
        }
示例#10
0
        public void When_use_select_shoud_return_filds_with_odoo_prop_names()
        {
            var filters = OdooQuery <ProductProductOdooModel> .Create()
                          .Select(x => new
            {
                x.Name,
                x.Description
            });

            filters.ReturnFields.Count.Should().Be(2);
            filters.ReturnFields.First().Should().Be("name");
            filters.ReturnFields.ElementAt(1).Should().Be("description");

            filters.Filters.Count.Should().Be(0);
            filters.Limit.Should().BeNull();
            filters.Offset.Should().BeNull();
        }
示例#11
0
        public async Task Shoud_get_products_using_query_skip()
        {
            var odooClient = new OdooClient(TestConfig);
            var query      = OdooQuery <ProductProductOdooModel> .Create().Skip(5);

            var products = await odooClient.GetAsync <ProductProductOdooModel>(query);

            var allProducts = await odooClient.GetAsync <ProductProductOdooModel>();

            products.Error.Should().BeNull();
            products.Value.Should().NotBeNull();

            allProducts.Error.Should().BeNull();
            allProducts.Value.Should().NotBeNull();

            products.Value.Length.Should().Be(allProducts.Value.Length - 5);
            products.Succeed.Should().BeTrue();
        }
        public async Task Get_products_with_order_desc_query()
        {
            var odooClient = new OdooClient(Config);
            var query      = OdooQuery <ProductProductOdooDto> .Create()
                             .OrderByDescending(x => x.Id);

            var products = await odooClient.GetAsync <ProductProductOdooDto>(query);

            products.Error.Should().BeNull();
            products.Value.Should().NotBeNull();
            products.Value.Length.Should().BeGreaterThan(0);
            products.Succeed.Should().BeTrue();


            var orderedByAsc = products.Value.OrderByDescending(p => p.Id);

            products.Value.SequenceEqual(orderedByAsc).Should().BeTrue();
        }
示例#13
0
        public async Task Can_create_update_and_delete_product()
        {
            var odooClient = new OdooClient(TestConfig);

            var model = OdooDictionaryModel.Create(() => new ProductProductOdooModel
            {
                Name      = "test name",
                UomId     = 3,
                UomPoId   = 3,
                CompanyId = 1
            });

            var createResult = await odooClient.CreateAsync(model);

            createResult.Error.Should().BeNull();
            createResult.Succeed.Should().BeTrue();

            var query = OdooQuery <ProductProductOdooModel> .Create()
                        .ById(createResult.Value);

            var products = await odooClient.GetAsync <ProductProductOdooModel>(query);

            products.Succeed.Should().BeTrue();
            products.Value.First().CompanyId.Should().Be(1);

            var dict = OdooDictionaryModel.Create(() => new ProductProductOdooModel
            {
                CompanyId = null
            });

            var updateResult = await odooClient.UpdateAsync(dict, createResult.Value);

            updateResult.Succeed.Should().BeTrue();

            var products2 = await odooClient.GetAsync <ProductProductOdooModel>(query);

            products2.Succeed.Should().BeTrue();
            products2.Value.First().CompanyId.Should().BeNull();

            var deleteResult = await odooClient.DeleteAsync(products2.Value.First());

            deleteResult.Succeed.Should().BeTrue();
        }
示例#14
0
        public void When_use_select_with_anymous_model_shoud_return_correct_filters_model()
        {
            var filters = OdooQuery <ProductProductOdooModel> .Create()
                          .Select(x => new
            {
                x.Name,
                x.Description,
                x.WriteDate
            });

            filters.Limit.Should().BeNull();
            filters.Offset.Should().BeNull();
            filters.Filters.Count.Should().Be(0);

            filters.ReturnFields.Count.Should().Be(3);

            filters.ReturnFields.First().Should().Be("name");
            filters.ReturnFields.Skip(1).First().Should().Be("description");
            filters.ReturnFields.Skip(2).First().Should().Be("write_date");
        }
        public async Task Should_get_products_with_selected_properties_using_query()
        {
            var odooClient = new OdooClient(Config);

            var filters = OdooQuery <ProductProductOdooDto> .Create()
                          .Select(x => new
            {
                x.Name,
                x.Description,
                x.WriteDate
            })
                          .Where(x => x.Name, OdooOperator.EqualsTo, "Bioboxen 610l")
                          .Where(x => x.WriteDate, OdooOperator.GreaterThanOrEqualTo, new DateTime(2020, 12, 2));

            var products = await odooClient.GetAsync <ProductProductOdooDto>(filters);

            products.Error.Should().BeNull();
            products.Value.Should().NotBeNull();
            products.Value.Length.Should().Be(1);
            products.Succeed.Should().BeTrue();
        }
示例#16
0
        public void When_use_pridicate_where_with_two_forgin_key_shoud_return_correct_filters_model()
        {
            var filters = OdooQuery <ProductProductOdooModel> .Create()
                          .Where <ResCompanyOdooModel, AccountTaxOdooModel>(x => x.PropertyAccountExpenseId, x => x.AccountSaleTaxId, x => x.CountryCode, OdooOperator.EqualsTo, "BE");

            filters.Filters.Count.Should().Be(1);
            filters.Filters[0].Should().NotBeNull();

            var arr = filters.Filters[0] as ArrayList;

            arr[0].Should().Be("property_account_expense_id.account_sale_tax_id.country_code");
            arr[1].Should().Be("=");
            arr[2].Should().Be("BE");

            var json = JsonConvert.SerializeObject(filters.Filters);

            json.Should().Be("[[\"property_account_expense_id.account_sale_tax_id.country_code\",\"=\",\"BE\"]]");

            filters.ReturnFields.Count.Should().Be(0);
            filters.Limit.Should().BeNull();
            filters.Offset.Should().BeNull();
        }
示例#17
0
        public async Task Can_create_update_get_and_delete_customer()
        {
            var model = OdooDictionaryModel.Create(() => new ResPartnerOdooModel()
            {
                Name        = "dupa",
                CountryId   = 20,
                City        = "dupa",
                Zip         = "dupa",
                Street      = "dupa",
                CompanyType = CompanyTypeResPartnerOdooEnum.Individual
            });

            var odooClient = new OdooClient(TestConfig);
            var products   = await odooClient.CreateAsync(model);

            products.Succeed.Should().BeTrue();
            products.Value.Should().BePositive();

            model.Add(x => x.Name, "new name");

            var editedCustomer = await odooClient.UpdateAsync(model, products.Value);

            editedCustomer.Succeed.Should().BeTrue();

            var query = new OdooQuery();

            query.Filters.EqualTo("id", products.Value);
            var customers = await odooClient.GetAsync <ResPartnerOdooModel>(query);

            customers.Succeed.Should().BeTrue();
            customers.Value.Length.Should().Be(1);
            customers.Value.First().Name.Should().Be("new name");

            var deleteResult = await odooClient.DeleteAsync(customers.Value.First());

            deleteResult.Succeed.Should().BeTrue();
        }
 public async Task<OdooResult<long>> GetCountAsync<T>(int userUid, OdooQuery query = null, OdooContext context = null) where T : IOdooModel, new()
 {
     return await GetCountAsync<T>(Config, userUid, query, SelectContext(context , Config.Context));
 }
 public async Task <OdooResult <long> > GetCountAsync <T>(OdooQuery query = null) where T : IOdooModel, new()
 {
     return(await ExecuteWitrAccesDenideRetryAsync(userUid => GetCountAsync <T>(userUid, query)));
 }
 public async Task <OdooResult <long> > GetCountAsync <T>(int userUid, OdooQuery query = null) where T : IOdooModel, new()
 {
     return(await GetCountAsync <T>(_config, userUid, query));
 }
        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 async Task<OdooResult<long>> GetCountAsync<T>(OdooQuery query = null, OdooContext context = null) where T : IOdooModel, new()
 {
     return await ExecuteWitrAccesDenideRetryAsync(userUid => GetCountAsync<T>(userUid, query, SelectContext(context , Config.Context)));
 }
        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<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);
 }