Пример #1
0
        public async Task <IActionResult> Post([FromBody] SaleAddClientModel saleAddDto)
        {
            var result = await _saleService.AddAsync(saleAddDto);

            if (result.IsError)
            {
                return(BadRequest(result));
            }
            return(Ok(result));
        }
Пример #2
0
        private async Task <SalePerson> GetSalePerson(SaleAddClientModel dto)
        {
            var existPerson = await _salePersonRepository.FindAsync(x => x.ContactId == dto.SalePersonId);

            if (existPerson.FirstOrDefault() == null)
            {
                await _salePersonRepository.AddAsync(dto.SalePerson());

                await _salePersonRepository.CompleteAsync();
            }

            return(existPerson.FirstOrDefault());
        }
Пример #3
0
        private async Task <Customer> GetCustomer(SaleAddClientModel dto)
        {
            // customer
            var existCustomer = await _customerRepository.FindAsync(x => x.ContactId == dto.CustomerId);

            if (existCustomer.FirstOrDefault() == null)
            {
                await _customerRepository.AddAsync(dto.Customer());

                await _customerRepository.CompleteAsync();
            }

            return(existCustomer.FirstOrDefault());
        }
Пример #4
0
        private async Task <Sale> GetExistSaleAsync(SaleAddClientModel dto, Guid customerId, Guid salesPersonId)
        {
            var newSale = dto.Create();

            newSale.CustomerId   = customerId;
            newSale.SalePersonId = salesPersonId;

            var exist_Spec  = SaleExistSpecification.Create(newSale);
            var exist_Sales = await _saleRepository.FindAsync(exist_Spec.ToExpression());

            var exist_Sale = exist_Sales.FirstOrDefault();

            return(exist_Sale);
        }
Пример #5
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);
        }