## Problem Description and Formulation

The electronics repair shop aims to maximize profit by determining the optimal number of phones and laptops to repair. The shop has limited time available for inspection (6000 minutes) and fixing (7000 minutes). Each phone requires 20 minutes of inspection and 30 minutes of fixing, generating a profit of $50. Each laptop requires 30 minutes of inspection and 50 minutes of fixing, generating a profit of $60.

## Mathematical Formulation

Let's denote:
- \(P\) as the number of phones to be repaired,
- \(L\) as the number of laptops to be repaired.

The objective function to maximize profit (\(Z\)) is:
\[ Z = 50P + 60L \]

Subject to the constraints:
1. Inspection time: \( 20P + 30L \leq 6000 \)
2. Fixing time: \( 30P + 50L \leq 7000 \)
3. Non-negativity: \( P \geq 0, L \geq 0 \)

## Gurobi Code

```python
import gurobipy as gp

# Create a new model
model = gp.Model("Electronics_Repair_Shop")

# Define variables
P = model.addVar(name="phones", lb=0, vtype=gp.GRB.INTEGER)
L = model.addVar(name="laptops", lb=0, vtype=gp.GRB.INTEGER)

# Objective function: Maximize profit
model.setObjective(50 * P + 60 * L, sense=gp.GRB.MAXIMIZE)

# Constraints
model.addConstr(20 * P + 30 * L <= 6000, name="inspection_time")
model.addConstr(30 * P + 50 * L <= 7000, name="fixing_time")

# Solve the model
model.optimize()

# Print the results
if model.status == gp.GRB.OPTIMAL:
    print(f"Optimal solution found. Profit: ${model.objVal}")
    print(f"Phones to repair: {P.varValue}")
    print(f"Laptops to repair: {L.varValue}")
else:
    print("No optimal solution found.")
```