To solve this problem, we first need to define the decision variables and the objective function. Let's denote the number of doors as \(D\) and the number of bumpers as \(B\). The profit per door is $200, and the profit per bumper is $150. Therefore, the total profit can be represented as \(200D + 150B\).

The constraints are:
1. Machine time: Each door takes 20 minutes, and each bumper takes 10 minutes. The machine is available for 3000 minutes per week. So, \(20D + 10B \leq 3000\).
2. Maximum production of doors: \(D \leq 100\).
3. Maximum production of bumpers: \(B \leq 200\).
4. Non-negativity constraints: \(D \geq 0\) and \(B \geq 0\), since the plant cannot produce a negative number of doors or bumpers.

We aim to maximize the profit, which is represented by the objective function \(200D + 150B\).

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

```python
from gurobipy import *

# Create a model
m = Model("Auto_Manufacturing")

# Define variables
doors = m.addVar(lb=0, ub=100, vtype=GRB.INTEGER, name="doors")
bumpers = m.addVar(lb=0, ub=200, vtype=GRB.INTEGER, name="bumpers")

# Set the objective function
m.setObjective(200*doors + 150*bumpers, GRB.MAXIMIZE)

# Add constraints
m.addConstr(20*doors + 10*bumpers <= 3000, "machine_time")
m.addConstr(doors <= 100, "max_doors")
m.addConstr(bumpers <= 200, "max_bumpers")

# Optimize the model
m.optimize()

# Print results
if m.status == GRB.OPTIMAL:
    print("Optimal solution found:")
    print(f"Doors: {doors.x}")
    print(f"Bumpers: {bumpers.x}")
    print(f"Maximum Profit: ${200*doors.x + 150*bumpers.x}")
else:
    print("No optimal solution found")
```