contactModel = new ContactModel(); $this->clientModel = new ClientModel(); } /** * Список контактов */ public function index() { $organizationId = $this->requireActiveOrg(); $contacts = $this->contactModel ->where('organization_id', $organizationId) ->orderBy('created_at', 'DESC') ->findAll(); return $this->renderTwig('@CRM/contacts/index', [ 'title' => 'Контакты', 'contacts' => $contacts, ]); } /** * Форма создания контакта */ public function create() { $organizationId = $this->requireActiveOrg(); $clients = $this->clientModel ->where('organization_id', $organizationId) ->findAll(); return $this->renderTwig('@CRM/contacts/form', [ 'title' => 'Новый контакт', 'actionUrl' => '/crm/contacts', 'clients' => $clients, ]); } /** * Сохранить новый контакт */ public function store() { $organizationId = $this->requireActiveOrg(); $data = [ 'organization_id' => $organizationId, 'customer_id' => $this->request->getPost('customer_id') ?: null, 'name' => $this->request->getPost('name'), 'email' => $this->request->getPost('email') ?: null, 'phone' => $this->request->getPost('phone') ?: null, 'position' => $this->request->getPost('position') ?: null, 'is_primary' => $this->request->getPost('is_primary') ? 1 : 0, 'notes' => $this->request->getPost('notes') ?: null, ]; $this->contactModel->save($data); $contactId = $this->contactModel->getInsertID(); if ($contactId) { return redirect()->to('/crm/contacts')->with('success', 'Контакт успешно создан'); } return redirect()->back()->with('error', 'Ошибка при создании контакта')->withInput(); } /** * Форма редактирования контакта */ public function edit(int $id) { $organizationId = $this->requireActiveOrg(); $contact = $this->contactModel->find($id); if (!$contact || $contact->organization_id !== $organizationId) { return redirect()->to('/crm/contacts')->with('error', 'Контакт не найден'); } $clients = $this->clientModel ->where('organization_id', $organizationId) ->findAll(); return $this->renderTwig('@CRM/contacts/form', [ 'title' => 'Редактирование контакта', 'actionUrl' => "/crm/contacts/{$id}", 'contact' => $contact, 'clients' => $clients, ]); } /** * Обновить контакт */ public function update(int $id) { $organizationId = $this->requireActiveOrg(); $contact = $this->contactModel->find($id); if (!$contact || $contact->organization_id !== $organizationId) { return redirect()->to('/crm/contacts')->with('error', 'Контакт не найден'); } $data = [ 'customer_id' => $this->request->getPost('customer_id') ?: null, 'name' => $this->request->getPost('name'), 'email' => $this->request->getPost('email') ?: null, 'phone' => $this->request->getPost('phone') ?: null, 'position' => $this->request->getPost('position') ?: null, 'is_primary' => $this->request->getPost('is_primary') ? 1 : 0, 'notes' => $this->request->getPost('notes') ?: null, ]; $this->contactModel->update($id, $data); return redirect()->to('/crm/contacts')->with('success', 'Контакт обновлён'); } /** * Удалить контакт */ public function destroy(int $id) { $organizationId = $this->requireActiveOrg(); $contact = $this->contactModel->find($id); if (!$contact || $contact->organization_id !== $organizationId) { return redirect()->to('/crm/contacts')->with('error', 'Контакт не найден'); } $this->contactModel->delete($id); return redirect()->to('/crm/contacts')->with('success', 'Контакт удалён'); } }