To solve this problem, we first need to define the decision variables and the objective function. Let's denote the number of fish tacos as $x$ and the number of chicken tacos as $y$. The profit per fish taco is $6, and the profit per chicken taco is $4. Therefore, the total profit can be represented as $6x + 4y$.

The constraints given in the problem are:
1. Sell at least 20 fish tacos: $x \geq 20$
2. Sell at least 40 chicken tacos: $y \geq 40$
3. Make at most 50 fish tacos: $x \leq 50$
4. Make at most 60 chicken tacos: $y \leq 60$
5. Total tacos (either type) should not exceed 80: $x + y \leq 80$

Our goal is to maximize the total profit under these constraints.

Now, let's translate this into Gurobi code in Python:

```python
from gurobipy import *

# Create a model
m = Model("Taco Stand Profit Maximization")

# Define decision variables
x = m.addVar(vtype=GRB.INTEGER, name="Fish Tacos")
y = m.addVar(vtype=GRB.INTEGER, name="Chicken Tacos")

# Set the objective function to maximize profit
m.setObjective(6*x + 4*y, GRB.MAXIMIZE)

# Add constraints
m.addConstr(x >= 20, "Minimum Fish Tacos")
m.addConstr(y >= 40, "Minimum Chicken Tacos")
m.addConstr(x <= 50, "Maximum Fish Tacos")
m.addConstr(y <= 60, "Maximum Chicken Tacos")
m.addConstr(x + y <= 80, "Total Tacos Limit")

# Optimize the model
m.optimize()

# Print the results
if m.status == GRB.OPTIMAL:
    print("Optimal solution found:")
    print(f"Fish Tacos: {x.x}")
    print(f"Chicken Tacos: {y.x}")
    print(f"Total Profit: ${6*x.x + 4*y.x:.2f}")
else:
    print("No optimal solution found")
```