To solve the optimization problem described, we first need to establish a symbolic representation of the variables and the objective function, followed by the constraints.

Let's denote:
- \(x_1\) as the hours worked by George,
- \(x_2\) as the hours worked by John,
- \(x_3\) as the hours worked by Dale.

The objective function is to maximize: \(4x_1 + 5x_2 + 8x_3\).

Given constraints:
1. The organization score for George, John, and Dale are 4, 10, and 4 respectively.
2. The total combined organization score from hours worked by George and John should be at most 104: \(4x_1 + 10x_2 \leq 104\).
3. The total combined organization score from all three should be no more than 160 (corrected based on the provided resource upper bound): \(4x_1 + 10x_2 + 4x_3 \leq 160\).
4. \(x_1\) must be an integer.
5. \(x_2\) can be a fraction.
6. \(x_3\) must be an integer.

Thus, the symbolic representation of the problem is:
```json
{
  'sym_variables': [('x1', 'hours worked by George'), ('x2', 'hours worked by John'), ('x3', 'hours worked by Dale')],
  'objective_function': '4*x1 + 5*x2 + 8*x3',
  'constraints': ['4*x1 + 10*x2 <= 104', '4*x1 + 10*x2 + 4*x3 <= 160', 'x1 is integer', 'x3 is integer']
}
```

Now, to implement this in Gurobi, we'll write the Python code. Note that we'll use the `gurobipy` library for this purpose.

```python
from gurobipy import *

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

# Define variables
x1 = m.addVar(vtype=GRB.INTEGER, name="hours_worked_by_George")
x2 = m.addVar(vtype=GRB.CONTINUOUS, name="hours_worked_by_John")
x3 = m.addVar(vtype=GRB.INTEGER, name="hours_worked_by_Dale")

# Set the objective function
m.setObjective(4*x1 + 5*x2 + 8*x3, GRB.MAXIMIZE)

# Add constraints
m.addConstr(4*x1 + 10*x2 <= 104, "organization_score_George_John")
m.addConstr(4*x1 + 10*x2 + 4*x3 <= 160, "total_organization_score")

# Optimize the model
m.optimize()

# Print results
if m.status == GRB.OPTIMAL:
    print("Optimal solution found:")
    print(f"Hours worked by George: {x1.x}")
    print(f"Hours worked by John: {x2.x}")
    print(f"Hours worked by Dale: {x3.x}")
    print(f"Objective function value: {m.objVal}")
else:
    print("No optimal solution found")
```