bp/app/Modules/CRM/Controllers/ContactsController.php

155 lines
4.8 KiB
PHP

<?php
namespace App\Modules\CRM\Controllers;
use App\Controllers\BaseController;
use App\Modules\CRM\Models\ContactModel;
use App\Modules\Clients\Models\ClientModel;
class ContactsController extends BaseController
{
protected ContactModel $contactModel;
protected ClientModel $clientModel;
public function __construct()
{
$this->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', 'Контакт удалён');
}
}