```json
{
  "sym_variables": [
    ("x0", "office chairs"),
    ("x1", "color printers")
  ],
  "objective_function": "7.49 * x0 + 9.65 * x1",
  "constraints": [
    "19 * x0 + 16 * x1 <= 110",  // Storage space upper bound
    "8 * x0 + 21 * x1 <= 79",    // Dollar cost upper bound
    "19 * x0 + 16 * x1 >= 25",    // Storage space lower bound
    "8 * x0 + 21 * x1 >= 30",    // Dollar cost lower bound
    "5 * x0 - 7 * x1 >= 0",
    "19 * x0 + 16 * x1 <= 71",    // Additional storage space constraint
    "8 * x0 + 21 * x1 <= 60",    // Additional dollar cost constraint
    "x0 >= 0",
    "x1 >= 0"
  ]
}
```

```python
import gurobipy as gp

try:
    # Create a new model
    m = gp.Model("office_optimization")

    # Create variables
    office_chairs = m.addVar(vtype=gp.GRB.INTEGER, name="office_chairs")
    color_printers = m.addVar(vtype=gp.GRB.INTEGER, name="color_printers")

    # Set objective function
    m.setObjective(7.49 * office_chairs + 9.65 * color_printers, gp.GRB.MINIMIZE)

    # Add constraints
    m.addConstr(19 * office_chairs + 16 * color_printers <= 110, "storage_space_upper")
    m.addConstr(8 * office_chairs + 21 * color_printers <= 79, "dollar_cost_upper")
    m.addConstr(19 * office_chairs + 16 * color_printers >= 25, "storage_space_lower")
    m.addConstr(8 * office_chairs + 21 * color_printers >= 30, "dollar_cost_lower")
    m.addConstr(5 * office_chairs - 7 * color_printers >= 0, "chair_printer_ratio")
    m.addConstr(19 * office_chairs + 16 * color_printers <= 71, "storage_space_upper2")
    m.addConstr(8 * office_chairs + 21 * color_printers <= 60, "dollar_cost_upper2")


    # Optimize model
    m.optimize()

    if m.status == gp.GRB.OPTIMAL:
        print('Obj: %g' % m.objVal)
        print('Office Chairs:', office_chairs.x)
        print('Color Printers:', color_printers.x)
    elif m.status == gp.GRB.INFEASIBLE:
        print('The model is infeasible.')
    else:
        print('Optimization ended with status %d' % m.status)


except gp.GurobiError as e:
    print('Error code ' + str(e.errno) + ': ' + str(e))

except AttributeError:
    print('Encountered an attribute error')
```