Ejemplo n.º 1
0
        public async Task <IActionResult> PostAsync([FromBody] Sale sale)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState.GetErrorMessages()));
            }

            var existingCustomer = await _customerRepo.FindByIdAsync(sale.CustomerId);

            if (existingCustomer == null)
            {
                return(NotFound(new List <string> {
                    "Customer Not Found"
                }));
            }

            var existingProduct = await _productRepo.FindByIdAsync(sale.ProductId);

            if (existingProduct == null)
            {
                return(NotFound(new List <string> {
                    "Product Not Found"
                }));
            }

            var existingStore = await _storeRepo.FindByIdAsync(sale.StoreId);

            if (existingStore == null)
            {
                return(NotFound(new List <string> {
                    "Store Not Found"
                }));
            }
            try
            {
                await _saleRepo.AddAsync(sale);

                await _saleRepo.SaveChangeAsync();

                // var returnedResource = Mapper.Map<Sale, SaleReturnResource>(sale);
                var returnedResource = new SaleReturnResource
                {
                    SaleId   = sale.SaleId,
                    DateSold = sale.DateSold,
                    Customer = sale.customer.Name,
                    Store    = sale.store.Name,
                    Product  = sale.product.Name
                };
                return(Ok(returnedResource));
            }
            catch (Exception ex)
            {
                return(BadRequest(new List <string> {
                    ex.Message
                }));
            }
        }
Ejemplo n.º 2
0
        public async Task <SaleResponse> SaveAsync(Sale sale)
        {
            try{
                await saleRepository.AddAsync(sale);

                await unitOfWork.CompleteAsync();

                return(new SaleResponse(sale));
            }
            catch (Exception ex) {
                return(new SaleResponse($"Error while saving sale! Message:{ex.Message}"));
            }
        }
        public async Task <SaleResponse> SaveAsync(Sale sale)
        {
            try
            {
                await _saleRepository.AddAsync(sale);

                await _unitOfWork.CompleteAsync();

                return(new SaleResponse(sale));
            }
            catch (Exception ex)
            {
                return(new SaleResponse($"An error ocurred while saving the Sale: {ex.Message}"));
            }
        }
Ejemplo n.º 4
0
        public async Task <ActionResult <Sale> > CreateSaleAsync([FromBody] Sale sale)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(new ApiResult <Customer>()
                {
                    StatusCode = "400",
                    Errors = ModelState.Values
                             .SelectMany(v => v.Errors)
                             .Select(v => v.ErrorMessage)
                             .ToArray()
                }));
            }

            var product = await _productService.GetAsync(sale.ProductId);

            if (product == null)
            {
                return(NotFound(new ApiResult <Sale>()
                {
                    StatusCode = "404", Errors = new string[] { "Product not found" }
                }));
            }

            var customer = await _customerRepository.GetAsync(sale.CustomerId);

            if (customer == null)
            {
                return(NotFound(new ApiResult <Sale>()
                {
                    StatusCode = "404", Errors = new string[] { "Customer not found" }
                }));
            }

            sale.Cost = sale.Amount * product.Cost;

            await _saleRepository.AddAsync(sale);

            var result = new ApiResult <Sale>()
            {
                StatusCode = "200"
            };

            return(Ok(result));
        }
        public async Task <ActionResult <bool> > AddAsync(SaleDTO sale)
        {
            try
            {
                var result = await _sale.AddAsync(_mapper.Map <Sale>(CalculateTotalValue(sale)));

                if (result == null)
                {
                    return(BadRequest());
                }

                return(true);
            }
            catch (System.Exception)
            {
                return(BadRequest());
            }
        }
Ejemplo n.º 6
0
        public async Task <Result> AddAsync(SaleAddClientModel dto)
        {
            var result = new Result();
            // customer
            var existCustomer = await GetCustomer(dto);

            // sale-person
            var existPerson = await GetSalePerson(dto);

            var newSale = await GetExistSaleAsync(dto, existCustomer.Id, existPerson.Id);

            if (newSale == null)
            {
                // sale
                newSale              = dto.Create();
                newSale.CustomerId   = existCustomer.Id;
                newSale.SalePersonId = existPerson.Id;
                var createSale = await _saleRepository.AddAsync(newSale);

                await _saleRepository.CompleteAsync();

                // sale event
                var sale_added_event = AbstractDomainEvent <SaleAddClientModel> .Create(_serviceProvider);

                await sale_added_event.RaiseAsync(createSale);

                // order
                var order = new Order()
                {
                    SaleId = createSale.Id
                };
                var createdOrder = await _orderRepository.AddAsync(order);

                await _orderRepository.CompleteAsync();

                //sale event
                var orderAddedEvent = AbstractDomainEvent <OrderAddClientModel> .Create(_serviceProvider);

                await orderAddedEvent.RaiseAsync(createdOrder);

                // product
                dto.ProductIds.ForEach(p =>
                {
                    var existProducts = _productRepository.Find(x => x.ProductId == p);
                    var existProduct  = existProducts.FirstOrDefault();
                    if (existProduct == null)
                    {
                        _productRepository.Add(dto.Product(p));
                    }
                    // order-product
                    var orderProduct       = dto.CreateOrderProduct(createdOrder.Id, existProduct.Id);
                    var createOrderProduct = _orderProductRepository.Add(orderProduct);
                });

                await _productRepository.CompleteAsync();

                await _orderProductRepository.CompleteAsync();

                result.Value = newSale.ToString();
            }
            else
            {
                result.IsError   = true;
                result.Message   = "Sale does exist";
                result.StatuCode = 400;
            }

            return(result);
        }