To solve this problem, we first need to define the decision variables, objective function, and constraints.

Let's denote:
- \(D\) as the number of diamond necklaces produced.
- \(G\) as the number of gold necklaces produced.

The objective is to maximize profit. The profit from each diamond necklace is $1500, and from each gold necklace is $500. So, the total profit \(P\) can be represented as:
\[ P = 1500D + 500G \]

There are two main constraints based on the time availability for designing and crafting:
1. Designing constraint: Each diamond necklace takes 3 hours to design, and each gold necklace takes 5 hours. The designing team is available for 30 hours.
\[ 3D + 5G \leq 30 \]
2. Crafting constraint: Each diamond necklace takes 10 hours to craft, and each gold necklace takes 2 hours. The crafting team is available for 45 hours.
\[ 10D + 2G \leq 45 \]

Additionally, we cannot produce a negative number of necklaces:
\[ D \geq 0 \]
\[ G \geq 0 \]

Now, let's translate this into Gurobi code in Python:

```python
from gurobipy import *

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

# Define the decision variables
D = m.addVar(vtype=GRB.INTEGER, name="Diamond_Necklaces")
G = m.addVar(vtype=GRB.INTEGER, name="Gold_Necklaces")

# Set the objective function to maximize profit
m.setObjective(1500*D + 500*G, GRB.MAXIMIZE)

# Add constraints
m.addConstr(3*D + 5*G <= 30, "Designing_Constraint")
m.addConstr(10*D + 2*G <= 45, "Crafting_Constraint")

# Optimize the model
m.optimize()

# Print the results
if m.status == GRB.OPTIMAL:
    print("Optimal solution found:")
    print(f"Number of Diamond Necklaces: {D.x}")
    print(f"Number of Gold Necklaces: {G.x}")
    print(f"Maximum Profit: ${1500*D.x + 500*G.x}")
else:
    print("No optimal solution found.")
```