To solve the optimization problem described, we need to maximize the objective function `9 * hours_worked_by_Peggy + 6 * hours_worked_by_Laura` subject to several constraints involving dollar cost per hour and work quality ratings for both Peggy and Laura. The constraints include:

1. Lower bounds on combined dollar cost per hour and combined work quality rating.
2. Upper bounds on combined dollar cost per hour and combined work quality rating.
3. A specific linear constraint involving hours worked by both individuals.

Given the problem's description, we will define two decision variables: `hours_worked_by_Peggy` and `hours_worked_by_Laura`. Both are continuous variables since fractional hours are allowed for both Peggy and Laura.

The objective function to maximize is: `9 * hours_worked_by_Peggy + 6 * hours_worked_by_Laura`.

Constraints:
- The total combined dollar cost per hour from hours worked by Peggy and Laura must be greater than or equal to 35.
- The total combined work quality rating from hours worked by Peggy and Laura must be at least 51.
- `-6 * hours_worked_by_Peggy + 9 * hours_worked_by_Laura >= 0`.
- The total combined dollar cost per hour from hours worked by Peggy and Laura must not exceed 98.
- The total combined work quality rating from hours worked by Peggy and Laura must not exceed 119.

We will express these constraints in the Gurobi model.

```python
from gurobipy import *

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

# Define decision variables
hours_worked_by_Peggy = m.addVar(lb=0, vtype=GRB.CONTINUOUS, name="hours_worked_by_Peggy")
hours_worked_by_Laura = m.addVar(lb=0, vtype=GRB.CONTINUOUS, name="hours_worked_by_Laura")

# Objective function: Maximize 9 * hours_worked_by_Peggy + 6 * hours_worked_by_Laura
m.setObjective(9 * hours_worked_by_Peggy + 6 * hours_worked_by_Laura, GRB.MAXIMIZE)

# Constraints
# 1. Total combined dollar cost per hour >= 35
m.addConstr(14.74 * hours_worked_by_Peggy + 7.16 * hours_worked_by_Laura >= 35, name="dollar_cost_lower_bound")

# 2. Total combined work quality rating >= 51
m.addConstr(11.02 * hours_worked_by_Peggy + 19.32 * hours_worked_by_Laura >= 51, name="work_quality_lower_bound")

# 3. -6 * hours_worked_by_Peggy + 9 * hours_worked_by_Laura >= 0
m.addConstr(-6 * hours_worked_by_Peggy + 9 * hours_worked_by_Laura >= 0, name="linear_constraint")

# 4. Total combined dollar cost per hour <= 98
m.addConstr(14.74 * hours_worked_by_Peggy + 7.16 * hours_worked_by_Laura <= 98, name="dollar_cost_upper_bound")

# 5. Total combined work quality rating <= 119
m.addConstr(11.02 * hours_worked_by_Peggy + 19.32 * hours_worked_by_Laura <= 119, name="work_quality_upper_bound")

# Optimize the model
m.optimize()

# Print solution
if m.status == GRB.OPTIMAL:
    print("Optimal solution found:")
    print("Hours worked by Peggy:", hours_worked_by_Peggy.x)
    print("Hours worked by Laura:", hours_worked_by_Laura.x)
    print("Objective function value:", m.objVal)
else:
    print("No optimal solution found. Status:", m.status)
```