## Problem Description and Formulation

The problem requires minimizing an objective function subject to several constraints. The objective function to be minimized is:

\[ 6 \times \text{hours worked by Dale} \times \text{hours worked by Paul} + 2 \times \text{hours worked by Paul} \]

The variables are:
- \(D\): hours worked by Dale
- \(P\): hours worked by Paul

The constraints are:
1. \(D \geq 0\) and \(P \geq 0\) (Implicit non-negativity constraints)
2. The total combined productivity rating must be at least 45: \(3D + 17P \geq 45\)
3. The total combined organization score must be at least 59: \(12D^2 + 6P^2 \geq 59\)
4. The total combined organization score must be at least 59 (linear form): \(12D + 6P \geq 59\)
5. \(-4D^2 + 3P^2 \geq 0\)
6. The total combined productivity rating must be at most 79: \(3D + 17P \leq 79\)
7. The total combined organization score must be at most 152: \(12D + 6P \leq 152\)
8. \(D\) must be an integer (no fractional hours for Dale)
9. \(P\) can be a real number (fractional hours allowed for Paul)

## Gurobi Code Formulation

```python
import gurobi

def solve_optimization_problem():
    # Create a new model
    m = gurobi.Model()

    # Define variables
    D = m.addVar(name="Dale_hours", vtype=gurobi.GRB.INTEGER, lb=0)  # Integer for Dale
    P = m.addVar(name="Paul_hours", vtype=gurobi.GRB.CONTINUOUS, lb=0)  # Continuous for Paul

    # Objective function
    m.setObjective(6 * D * P + 2 * P, gurobi.GRB.MINIMIZE)

    # Constraints
    m.addConstr(3 * D + 17 * P >= 45, name="productivity_rating_min")
    m.addConstr(12 * D**2 + 6 * P**2 >= 59, name="organization_score_min_quad")
    m.addConstr(12 * D + 6 * P >= 59, name="organization_score_min_lin")
    m.addConstr(-4 * D**2 + 3 * P**2 >= 0, name="quadratic_constraint")
    m.addConstr(3 * D + 17 * P <= 79, name="productivity_rating_max")
    m.addConstr(12 * D + 6 * P <= 152, name="organization_score_max")

    # Solve the model
    m.optimize()

    # Print the status and solution
    if m.status == gurobi.GRB.OPTIMAL:
        print("Optimal solution found.")
        print(f"Dale's hours: {D.varValue}")
        print(f"Paul's hours: {P.varValue}")
        print(f"Objective: {m.objVal}")
    elif m.status == gurobi.GRB.INFEASIBLE:
        print("The model is infeasible.")
    else:
        print("The model has a non-optimal status.")

solve_optimization_problem()
```

This code defines the optimization problem using Gurobi's Python interface, sets up the variables, objective function, and constraints according to the problem description, and then solves the model. The solution or a message indicating infeasibility is then printed out.