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 = [], []