diff --git a/dashboard/src/App.jsx b/dashboard/src/App.jsx
index 888d248..cc75da5 100644
--- a/dashboard/src/App.jsx
+++ b/dashboard/src/App.jsx
@@ -179,7 +179,13 @@ function CustomerForm({ onDone, onCancel, customer }) {
}
}
+ const [error, setError] = useState('')
+
const submit = async () => {
+ if (!form.name.trim()) { setError('שם לקוח הוא שדה חובה'); return }
+ if (!form.espocrm_url.trim()) { setError('EspoCRM URL הוא שדה חובה'); return }
+ if (!isEdit && !form.espocrm_api_key) { setError('יש להזין שם משתמש וסיסמה'); return }
+ setError('')
const payload = { ...form }
if (!payload.espocrm_api_key) delete payload.espocrm_api_key
const url = isEdit ? `${API}/customers/${customer.id}` : `${API}/customers`
@@ -223,6 +229,7 @@ function CustomerForm({ onDone, onCancel, customer }) {
השאר ריק כדי לא לשנות
)}
+ {error && {error}
}
)
}
diff --git a/server.py b/server.py
index ef8621f..d2953b8 100644
--- a/server.py
+++ b/server.py
@@ -541,7 +541,14 @@ class APIHandler(BaseHTTPRequestHandler):
VALUES (%s,%s,%s,%s,%s,%s,%s,%s) RETURNING id""",
(body['name'], body.get('email'), body['espocrm_url'], body['espocrm_api_key'],
body.get('coolify_url'), body.get('coolify_token'), body.get('coolify_app_uuid'), body.get('notes')), fetch='one')
- self._respond(201, {'id': row['id'], 'name': body['name']})
+ cid = row['id']
+ # Auto-assign all active extensions to new customer
+ all_exts = query("SELECT id FROM extensions WHERE is_active", fetch='all')
+ for ext in all_exts:
+ query("""INSERT INTO customer_extensions (customer_id, extension_id, auto_update, license_status)
+ VALUES (%s, %s, true, 'active') ON CONFLICT DO NOTHING""",
+ (cid, ext['id']), fetch=None)
+ self._respond(201, {'id': cid, 'name': body['name']})
def _update_customer(self, cid, body):
fields, values = [], []