public TerceroCliente UnMap() { Tercero tercero = this.Tercero.UnMap(); TerceroCliente cliente = new TerceroCliente.TerceroClienteBuilder(tercero) .Build(); this.Precios.ForEach(x => cliente.AddPrecio(x.UnMap())); return(cliente); }
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) }); }