コード例 #1
0
        public ActionResult PostCliente(TerceroClienteRequest request)
        {
            var response = new TerceroClienteCrearService(this._unitOfWork)
                           .Crear(request);

            if (response.Data == null)
            {
                return(NotFound(response.Mensaje));
            }
            return(Ok(response));
        }
コード例 #2
0
        public void ClienteCrearService(string nit, int idProducto1, double precioProducto1,
                                        int idProducto2, double precioProducto2, string esperado)
        {
            TerceroClienteRequest request = new TerceroClienteRequest(nit);

            request.Precios.Add(
                new TerceroClientePrecioRequest.TerceroClientePrecioRequestBuilder(idProducto1,
                                                                                   precioProducto1).Build());

            request.Precios.Add(
                new TerceroClientePrecioRequest.TerceroClientePrecioRequestBuilder(idProducto2,
                                                                                   precioProducto2).Build());

            Response response = new TerceroClienteCrearService(_unitOfWork).Crear(request);

            Assert.AreEqual(esperado, response.Mensaje);
        }
コード例 #3
0
        public Response Crear(TerceroClienteRequest request)
        {
            TerceroCliente cliente1 = this._unitOfWork.TerceroClienteRepository.
                                      FindBy(cliente => cliente.Tercero.Nit == request.NitTercero,
                                             includeProperties: "Tercero").FirstOrDefault();

            if (cliente1 != null)
            {
                return(new Response
                {
                    Mensaje = $"No se pudo registrar el cliente porque ya esta en el sistema"
                });
            }
            Tercero tercero = this._unitOfWork.TerceroRepository.
                              FindFirstOrDefault(tercero => tercero.Nit == request.NitTercero);

            if (tercero == null)
            {
                tercero = request.Tercero.UnMap();
            }
            TerceroCliente cliente = new TerceroCliente.TerceroClienteBuilder(tercero)
                                     .Build();

            List <Producto> productos            = this._unitOfWork.ProductoRepository.GetAll().ToList();
            List <Producto> productosEncontrados = productos.
                                                   Where(producto => request.Precios.Select(p => p.ProductoId).Contains(producto.Id)).
                                                   ToList();

            if (productosEncontrados.Count != request.Precios.Count)
            {
                var productosNoEncontrados = request.Precios.Where(precio => !productosEncontrados.
                                                                   Select(p => p.Id).Contains(precio.ProductoId)).
                                             Select(p => $"{p.NombreProducto} con Id {p.ProductoId}").ToList();
                return(new Response
                {
                    Mensaje = "Los siguientes productos no fueron encontrados en el sistema\n" +
                              string.Join("\n",
                                          productosNoEncontrados)
                });
            }

            cliente = new TerceroCliente.TerceroClienteBuilder(tercero).Build();
            try
            {
                IEnumerator <Producto> enumerator = productosEncontrados.GetEnumerator();
                request.Precios.ForEach((precio) =>
                {
                    enumerator.MoveNext();

                    TerceroClientePrecioProducto precioProducto = new TerceroClientePrecioProducto.
                                                                  TerceroClientePrecioProductoBuilder(cliente, enumerator.Current).
                                                                  SetPrecio(precio.Precio).Build();

                    cliente.AddPrecio(precioProducto);
                });
            }
            catch (InvalidOperationException e)
            {
                return(new Response {
                    Mensaje = e.Message
                });
            }

            this._unitOfWork.TerceroClienteRepository.Add(cliente);
            this._unitOfWork.Commit();
            return(new Response
            {
                Mensaje = "Cliente registrado con éxito",
                Data = new TerceroClienteRequest().Map(cliente)
            });
        }