예제 #1
0
        public ActionResult DoNewProduct(ProductNew model)
        {
            try
            {
                decimal d;
                var     productPdo = new Domain.Entities.Product();
                productPdo.PosId        = model.PosId;
                productPdo.CategoryId   = model.CategoryId;
                productPdo.Name         = HttpUtility.HtmlEncode(model.ProductName);
                productPdo.CreatedAt    = DateTime.UtcNow;
                productPdo.UserId       = "gj";
                productPdo.StatusId     = (byte)Status.Pending;
                productPdo.InternalCode = model.InternalCode.StartsWith(productPdo.UserId, StringComparison.InvariantCultureIgnoreCase) ? model.InternalCode : String.Concat(productPdo.UserId.ToUpper(), "_ES_", model.InternalCode);
                productPdo.Uid          = string.Concat("GJ_ES_", model.InternalCode);
                if (decimal.TryParse(model.PriceStr, out d))
                {
                    productPdo.Price = d;
                }

                _productRepository.Save(productPdo);
                _productRepository.SubmitChanges();

                var product = new Product(productPdo);

                ViewBag.TotalSizes = model.TotalSizes;
                return(PartialView(product));
            }
            catch (Exception ex)
            {
                throw;
            }
        }
예제 #2
0
        public void Post([FromBody] DTO.Product product)
        {
            Console.WriteLine($"DEBUG: Entering {nameof(Post)}");
            Console.WriteLine($"DEBUG: Request body contained: {product}");
            // TODO: updatedBy
            var updatedBy = "SYSTEM";

            using (var db = new TransactionServiceDbContext())
            {
                var dbProduct = db.Products.FindAsync(product.ProductId).Result;
                if (dbProduct == null)
                {
                    // PK is serial, so should be automatically generated
                    dbProduct = new Domain.Entities.Product
                    {
                        CreatedBy = updatedBy,
                        CreatedOn = DateTime.UtcNow
                    };
                    db.Add(dbProduct);
                }
                dbProduct.Name        = product.Name;
                dbProduct.Description = product.Description;
                dbProduct.UpdatedBy   = updatedBy;
                dbProduct.UpdatedOn   = DateTime.UtcNow;
                db.SaveChangesAsync();
            }
        }
        public void CalculateBinWidth_Returns_RequiredBinWidth(int quantity, Domain.Entities.Product product, float expectedBinWidth)
        {
            // Act
            var result = _ruleEngine.CalculateBinWidth(product, quantity);

            // Assert
            Assert.Equal(expectedBinWidth, result);
        }
 /// <summary>
 /// Конструктор
 /// </summary>
 /// <param name="product"> <see cref="ProductInfo"/> </param>
 public ProductSearchInfoForManager(Domain.Entities.Product product)
 {
     Guid           = product.Guid;
     Article        = product.Article;
     Name           = product.Name;
     DateTime       = product.DateTime;
     DeliveryType   = product.DeliveryType;
     DeliveryStatus = product.DeliveryStatus;
 }
예제 #5
0
 public static Dto.Model.Product MapToDto(this Domain.Entities.Product product)
 {
     return(new Dto.Model.Product()
     {
         Quantity = product.Quantity,
         Price = product.Price,
         Name = product.Name,
         ID = product.ID,
         Description = product.Description
     });
 }
예제 #6
0
        public void AddProduct(ProductDataContract pdc)
        {
            //  маппинг ProductDataContract на cущность
            Domain.Entities.Product p = new Domain.Entities.Product
            {
                Name     = pdc.Name,
                Category = pdc.Category,
                Price    = pdc.Price
            };

            m_dbe.Add(p);
        }
        public async Task RegisterNewProductAsync(Domain.Entities.Product product, List <RequestFile> photos, RequestFile profile)
        {
            const string profilePhotoName = nameof(product.ProfilePhoto);
            const string photosName       = nameof(product.Photos);
            const string bucketName       = nameof(profile.Bucket);
            const string nameOfPhotosName = nameof(RequestFile.Name);

            var productValidation = product.Validate(profilePhotoName, photosName);
            var profileValidation = profile.Validate(bucketName, nameOfPhotosName);
            var photosValidation  = photos?.SelectMany(p => p.Validate(bucketName, nameOfPhotosName));

            if (productValidation.IsValid() && profileValidation.IsValid() && photosValidation.IsValid())
            {
                await _repository.CreateProductAsync(product);

                _uploader.FileUploaded += OnPhotoUploaded;

                profile.Name     = $"{ProductName}-{product.Key}-{ProfileTypeName}-{profile.Key}".ToLower();
                profile.Bucket   = "store-lab-product-profile";
                profile.Metadata = new Dictionary <string, string>
                {
                    { ProductKeyName, product.Key },
                    { FileTypeName, ProfileTypeName }
                };

                photos?.ForEach(p =>
                {
                    p.Name     = $"{ProductName}-{product.Key}-{PhotoTypeName}-{p.Key}".ToLower();
                    p.Bucket   = "store-lab-product-photos";
                    p.Metadata = new Dictionary <string, string>
                    {
                        { ProductKeyName, product.Key },
                        { FileTypeName, PhotoTypeName }
                    };
                });

                await _uploader.UploadAsync(profile);

                await _uploader.UploadAllAsync(photos);

                var args = new RegisterNewProductEventArgs {
                    Product = product
                };

                ProductRegisted?.Invoke(this, args);
            }
            else
            {
                throw new EntityException(productValidation.Aggregate(profileValidation).Aggregate(photosValidation));
            }
        }
        private ProductsAndSizesViewModel AddNewCategory(Domain.Entities.Product p)
        {
            var c = new ProductsAndSizesViewModel();

            c.CategoryId = p.CategoryId;

            c._sizes = new List <ProductSizeQuantity>();
            foreach (var s in p.ProductDetails)
            {
                AddSizeName(c, s.ParameterValue);
            }

            c.Products = new List <Product>();
            c.Products.Add(new Product(p));

            return(c);
        }
        public GetProductResponse Map(Domain.Entities.Product source)
        {
            if (source == null)
            {
                return(null);
            }

            return(new GetProductResponse
            {
                Key = source.Key,
                Code = source.Code,
                Name = source.Name,
                Properties = source.Properties,
                ModifiedOn = source.ModifiedOn,
                CreatedOn = source.CreatedOn
            });
        }
예제 #10
0
        public async Task <BaseDto <ProductInput> > Handle(BaseRequest <ProductInput> request, CancellationToken cancellationToken)
        {
            var input   = request.data.attributes;
            var product = new Domain.Entities.Product
            {
                name  = input.name,
                price = input.price
            };

            _context.products.Add(product);
            await _context.SaveChangesAsync(cancellationToken);

            return(new BaseDto <ProductInput>
            {
                Message = "Success add product data",
                Status = true,
                Data = input
            });
        }
            public async Task <Unit> Handle(CreateProductCommand request, CancellationToken cancellationToken)
            {
                Domain.Entities.Product entity = new Domain.Entities.Product
                {
                    ProductId  = Guid.NewGuid(),
                    UserId     = request.UserId,
                    Name       = request.Name,
                    Desciption = request.Desciption,
                    Slug       = request.Slug,
                    Count      = request.Count,
                    Price      = request.Price,
                };

                _context.Products.Add(entity);

                await _context.SaveChangesAsync(cancellationToken);

                return(Unit.Value);
            }
예제 #12
0
        public static Product AsDbEntity(this Domain.Entities.Product product)
        {
            if (product is null)
            {
                return(null);
            }

            var dbEntity = new Product
            {
                Id            = product.Id,
                Name          = product.Name,
                Description   = product.Description,
                PriceCurrency = (int)product.Price.Currency,
                PriceAmount   = product.Price.Amount,
                Stock         = product.Stock
            };

            return(dbEntity);
        }
예제 #13
0
        private ProductsByCategoryViewModel GetProductsByCategories(int posId)
        {
            var con = new System.Data.SqlClient.SqlConnection(MySettings.ConnectionStringDefault);
            con.Open();
            var cmd = new System.Data.SqlClient.SqlCommand(
            @"select
            --    top 1000
            p.id as id,             -- 0
            p.internal_code,
            p.uid,
            p.name,
            p.price,
            c.id as category_id,    -- 5
            c.name as category_name,
            isnull(pd.parameter_value, '') as size_name,
            isnull(pd.price_minor, 0) as price_minor,
            isnull(pd.price_release_minor, 0) as price_release_minor,
            isnull(pd.quantity, 0),             -- 10
            isnull(pd.id, 0) as price_id,
            isnull(pd.data_json, '') as data_json
            from product p
            join category c on p.category_id = c.id
            left join product_detail pd on p.id = pd.product_id
            where p.pos_id = " + posId + @"
            order by p.id", con);

            ProductsByCategoryViewModel productsByCategories = new ProductsByCategoryViewModel();
            var products = new List<OnBalance.Domain.Entities.Product>();
            decimal priceMinor, priceReleaseMinor;
            int priceId;
            string dataJson;
            Dictionary<int, string> categoryNames = new Dictionary<int, string>();

            var r = cmd.ExecuteReader();
            while (r.Read())
            {
                var p = new Product();
                p.Id = r.GetInt32(0);
                p.InternalCode = r.GetString(1);
                p.Uid = r.GetString(2);
                p.Name = r.GetString(3);
                //p.Price = r.GetDecimal(4);
                p.CategoryId = r.GetInt32(5);
                p.Price = r.GetDecimal(9);
                priceMinor = r.GetDecimal(8);
                priceReleaseMinor = r.GetDecimal(9);
                var psq = new ProductSizeQuantity();
                psq.SizeName = r.GetString(7);
                psq.Quantity = r.GetInt32(10);
                priceId = r.GetInt32(11);
                dataJson = r.GetString(12);

                // Store category name
                categoryNames[p.CategoryId] = r.GetString(6);

                var existing = products.FirstOrDefault(x => x.Id == p.Id);
                if (existing == null)
                {
                    var newP = new Domain.Entities.Product
                    {
                        Id = p.Id,
                        InternalCode = p.InternalCode,
                        Uid = p.Uid,
                        Name = p.Name,
                        CategoryId = p.CategoryId

                    };
                    newP.ProductDetails.Add(new Domain.Entities.ProductDetail
                    {
                        Id = priceId,
                        ParameterValue = psq.SizeName,
                        Quantity = psq.Quantity,
                        PriceMinor = priceMinor,
                        PriceReleaseMinor = priceReleaseMinor,
                        DataJson = dataJson,
                    });
                    products.Add(newP);
                }
                else
                {
                    existing.ProductDetails.Add(new Domain.Entities.ProductDetail {
                        Id = priceId,
                        ParameterValue = psq.SizeName,
                        Quantity = psq.Quantity,
                        PriceMinor = priceMinor,
                        PriceReleaseMinor = priceReleaseMinor,
                        DataJson = dataJson
                    });
                }
            }

            productsByCategories = new ProductsByCategoryViewModel(products);

            // Fill category names
            foreach (var c in productsByCategories.ProductsByCategories)
            {
                var firstProduct = c.Products.FirstOrDefault();
                if (firstProduct != null)
                {
                    c.CategoryName = categoryNames.Keys.Contains(firstProduct.CategoryId) ? categoryNames[firstProduct.CategoryId] : "";
                }
            }
            return productsByCategories;
        }
예제 #14
0
        public ActionResult DoNewProduct(ProductNew model)
        {
            try
            {
                decimal d;
                var productPdo = new Domain.Entities.Product();
                productPdo.PosId = model.PosId;
                productPdo.CategoryId = model.CategoryId;
                productPdo.Name = HttpUtility.HtmlEncode(model.ProductName);
                productPdo.CreatedAt = DateTime.UtcNow;
                productPdo.UserId = "gj";
                productPdo.StatusId = (byte)Status.Pending;
                productPdo.InternalCode = model.InternalCode.StartsWith(productPdo.UserId, StringComparison.InvariantCultureIgnoreCase) ? model.InternalCode : String.Concat(productPdo.UserId.ToUpper(), "_ES_", model.InternalCode);
                productPdo.Uid = string.Concat("GJ_ES_", model.InternalCode);
                if (decimal.TryParse(model.PriceStr, out d))
                {
                    productPdo.Price = d;
                }

                _productRepository.Save(productPdo);
                _productRepository.SubmitChanges();

                var product = new Product(productPdo);

                ViewBag.TotalSizes = model.TotalSizes;
                return PartialView(product);
            }
            catch (Exception ex)
            {

                throw;
            }
        }