4b1e85c855
A project must stay tied to one customer. The quote/contract/hours attach paths already rejected a foreign customer (equality on project.customer_account_id); the two remaining holes are closed here: - assignEvent: an event may only join a project that shares its customer. The event's customer(s) come from event_customer_assignments; a customer-assigned project rejects an event for a different customer (PROJECT_CUSTOMER_MISMATCH), and an empty project ADOPTS a single-customer event's customer. This is why a foreign-customer event could previously be attached. - updateProject: re-labelling a project to a customer that conflicts with the events/quotes/contracts it already holds is rejected (clearing to null is still allowed), so the customer can't be swapped out from under existing content. Frontend: the cockpit attach-event action surfaces the translated mismatch message; projects.error.customerMismatch reworded to read for both documents and events (de + en).