public Response IniciarFabricacion(FabricacionRequest request)
        {
            Producto productoParaFabricar =
                this._unitOfWork.ProductoRepository.
                FindBy(producto => producto.Id == request.IdProducto,
                       includeProperties: "Fabricaciones").FirstOrDefault();

            if (productoParaFabricar == null)
            {
                return(new Response
                {
                    Mensaje = "El producto para fabricar no existe, agréguelo"
                });
            }

            if (productoParaFabricar.Especificacion == Especificacion.MateriaPrima)
            {
                return(new Response
                {
                    Mensaje = $"El {productoParaFabricar.Nombre} no se puede fabricar"
                });
            }

            TerceroEmpleado empleado = this._unitOfWork.TerceroEmpleadoRepository.
                                       FindBy(empleado => empleado.Tercero.Nit == request.NitEmpleado,
                                              includeProperties: "Tercero").FirstOrDefault();

            if (empleado == null)
            {
                return(new Response
                {
                    Mensaje = $"No hay un empleado con identificación {request.NitEmpleado}"
                });
            }
            if (request.Detalles.Count == 0)
            {
                return(new Response
                {
                    Mensaje = $"Por favor, agregue materias primas " +
                              $"para fabricar el {productoParaFabricar.Nombre}"
                });
            }
            Fabricacion fabricacion = new Fabricacion(empleado);

            productoParaFabricar.AgregarFabricacion(fabricacion);



            Producto temp = null;

            temp = ComprobarExistenciasDeEnMateriasPrimas(request, fabricacion, temp);

            if (fabricacion.FabricacionDetalles.Count !=
                request.Detalles.Count)
            {
                if (temp == null)
                {
                    return(new Response
                    {
                        Mensaje = "El " +
                                  $"{request.Detalles[fabricacion.FabricacionDetalles.Count].NombreMateriaPrima}" +
                                  " no se encuentra en el sistema, agréguelo"
                    });
                }
                return(new Response
                {
                    Mensaje = $"No hay cantidades suficientes de {temp.Nombre}, " +
                              $"solo hay {temp.Cantidad}"
                });
            }
            fabricacion.DescontarCantidadesEnMateriasPrimas();
            this._unitOfWork.ProductoRepository.Edit(productoParaFabricar);
            this._unitOfWork.Commit();
            return(new Response
            {
                Mensaje = "Fabricacion realizada con éxito, a espera de definir la cantidad producida",
                Data = request.Map(fabricacion)
            });
        }