To solve this optimization problem, we will first define the decision variables and the objective function. Let's denote the number of wraps as \(W\) and the number of bowls as \(B\). The profit per wrap is $5, and the profit per bowl is $7. Therefore, the total profit can be represented as \(5W + 7B\).

The constraints are based on the availability of rice and fish. Each wrap contains 3 units of rice and 2 units of fish, while each bowl contains 5 units of rice and 3 units of fish. Given that there are 800 units of rice and 700 units of fish available, we can set up the following inequalities to represent these constraints:

1. For rice: \(3W + 5B \leq 800\)
2. For fish: \(2W + 3B \leq 700\)

Additionally, since the restaurant cannot sell a negative number of wraps or bowls, we have:

\(W \geq 0\) and \(B \geq 0\)

Our goal is to maximize the profit function \(5W + 7B\) subject to these constraints.

Now, let's translate this problem into Gurobi code in Python. We'll use the `gurobipy` library for this purpose.

```python
from gurobipy import *

# Create a new model
m = Model("FastFoodProfit")

# Define the decision variables
W = m.addVar(vtype=GRB.CONTINUOUS, name="wraps", lb=0)
B = m.addVar(vtype=GRB.CONTINUOUS, name="bowls", lb=0)

# Define the objective function
m.setObjective(5*W + 7*B, GRB.MAXIMIZE)

# Add constraints
m.addConstr(3*W + 5*B <= 800, "rice_limit")
m.addConstr(2*W + 3*B <= 700, "fish_limit")

# Optimize the model
m.optimize()

# Print the results
if m.status == GRB.OPTIMAL:
    print("Optimal solution found:")
    print(f"Wraps to sell: {W.x}")
    print(f"Bowls to sell: {B.x}")
    print(f"Maximum profit: ${5*W.x + 7*B.x:.2f}")
else:
    print("No optimal solution found")
```