From 9af30eef634580fb2a4e75254caf073f156a65a8 Mon Sep 17 00:00:00 2001 From: Antoine Le Gonidec Date: Tue, 9 Jul 2024 14:00:52 +0200 Subject: [PATCH] Add the ability to create new Customers with an already used e-mail A same e-mail can only be used for several Customers as long as they are not linked to the same Mailbox. --- src/Email.php | 31 ++++++++++++++++++++++++++ src/Http/Controllers/CrmController.php | 6 +++-- 2 files changed, 35 insertions(+), 2 deletions(-) create mode 100644 src/Email.php diff --git a/src/Email.php b/src/Email.php new file mode 100644 index 0000000..1b53955 --- /dev/null +++ b/src/Email.php @@ -0,0 +1,31 @@ + + */ + +namespace MillionsMissingFrance\FreescoutRestrictedCustomers; + +use Illuminate\Database\Eloquent\Model; +use Watson\Rememberable\Rememberable; +use App\Email as BaseEmail; + +class Email extends BaseEmail { + /** + * Check if an Email already exists for a given Mailbox. + * + * @param Mailbox $mailbox + * @param string $email + * + * @return bool + */ + public static function alreadyExistsInMailbox($mailbox, $email) { + $emails_count = self + ::whereHas('customer', function($query) use($mailbox) { + $query->where('mailbox_id', '=', $mailbox->id); + }) + ->where('email', $email) + ->count(); + return ( $emails_count != 0 ); + } +} diff --git a/src/Http/Controllers/CrmController.php b/src/Http/Controllers/CrmController.php index 935aefd..a8902b3 100644 --- a/src/Http/Controllers/CrmController.php +++ b/src/Http/Controllers/CrmController.php @@ -7,7 +7,6 @@ namespace MillionsMissingFrance\FreescoutRestrictedCustomers\Http\Controllers; use App\Conversation; -use App\Email; use Modules\Crm\Entities\CustomerField; use Modules\Crm\Entities\CustomerCustomerField; use Validator; @@ -16,6 +15,8 @@ use Illuminate\Http\Response; use Illuminate\Routing\Controller; use Modules\Crm\Http\Controllers\CrmController as BaseCrmController; use MillionsMissingFrance\FreescoutRestrictedCustomers\Customer; +use MillionsMissingFrance\FreescoutRestrictedCustomers\Email; +use MillionsMissingFrance\FreescoutRestrictedCustomers\Mailbox; class CrmController extends BaseCrmController { public function createCustomer(Request $request) { @@ -53,10 +54,11 @@ class CrmController extends BaseCrmController { // Check email uniqueness. $fail = false; + $mailbox = Mailbox::find($request->mailbox); foreach ($request->emails as $i => $email) { $sanitized_email = Email::sanitizeEmail($email); if ($sanitized_email) { - $email_exists = Email::where('email', $sanitized_email)->first(); + $email_exists = Email::alreadyExistsInMailbox($mailbox, $sanitized_email); if ($email_exists) { $validator->getMessageBag()->add('emails.'.$i, __('A customer with this email already exists.'));