File: /var/www/ipsremont-demo/app/Services/Email/SendEmailService.php
<?php
namespace App\Services\Email;
use App\Jobs\SendMail;
use App\Mail\BaseMail;
use App\Models\Order;
use App\Models\Service\Service;
use App\Services\PlaceholderService;
use App\Services\Service\ServiceService;
use App\User;
use Illuminate\Support\Facades\Auth;
class SendEmailService
{
public static function isBodyActive($event, $role, $lang)
{
$body = EmailTemplatesService::getTplForLetter($event, $lang, $role);
return isset($body) && $body->active;
}
public static function sendMail($event, $role, $user, $service, $order, $repair = null)
{
if (!SendEmailService::isBodyActive($event, $role, $user->lang)) {
return;
}
$placeholders = new PlaceholderService();
if ($user) {
$placeholders->initRecipientPlaceholder($user);
}
if ($service) {
$placeholders->initServicePlaceholder($service);
}
if ($order) {
$placeholders->initOrderPlaceholder($order);
}
if ($repair) {
$placeholders->initRepairPlaceholder($repair);
}
$variables = [
'user' => $user,
'event' => $event,
'placeholders' => $placeholders->getAllPlaceholders(),
];
SendMail::dispatch(new BaseMail($variables), $user->email);
}
public static function sendMailImproved($event, $role, $user, $placeholders)
{
if (!SendEmailService::isBodyActive($event, $role, $user->lang)) {
return;
}
$variables = ['user' => $user, 'event' => $event, 'placeholders' => $placeholders];
SendMail::dispatch(new BaseMail($variables), $user->email);
}
public static function orderChangeStatusMail($model)
{
return;
$admins = User::getAdmins();
$service = Service::where('id', $model->service_id)->first();
if (!Auth::check() || Auth::user()->isService()) {
$managers = $service->managers()->get();
foreach ($managers as $user) {
self::sendMail('order-' . $model->status, 'manager', $user, $service, $model);
}
} elseif (!Auth::check() || Auth::user()->isManager()) {
$services = $service->user()->get();
foreach ($services as $user) {
self::sendMail('order-' . $model->status, 'service', $user, $service, $model);
}
}
foreach ($admins as $user) {
self::sendMail('order-' . $model->status, 'admin', $user, $service, $model);
}
}
public static function orderEditMail($model, $event)
{
return;
$admins = User::getAdmins();
$service = Service::where('id', $model->service_id)->first();
if (!Auth::check() || Auth::user()->isService()) {
$managers = $service->managers()->get();
foreach ($managers as $user) {
self::sendMail($event, 'manager', $user, $service, $model);
}
} elseif (!Auth::check() || Auth::user()->isManager()) {
$services = $service->user()->get();
foreach ($services as $user) {
self::sendMail($event, 'service', $user, $service, $model);
}
}
foreach ($admins as $user) {
self::sendMail($event, 'admin', $user, $service, $model);
}
}
public static function repairChangeStatusMail($model)
{
return;
$admins = User::getAdmins();
$service = Service::where('id', $model->service_id)->first();
$order = Order::where('repair_id', $model->id)->orderBy('created_at', 'desc')->first();
if (!Auth::check() || Auth::user()->isService()) {
$managers = $service->managers()->get();
foreach ($managers as $user) {
self::sendMail('repair-' . $model->status, 'manager', $user, $service, $order, $model);
}
} elseif (!Auth::check() || Auth::user()->isManager()) {
$services = $service->user()->get();
foreach ($services as $user) {
self::sendMail('repair-' . $model->status, 'service', $user, $service, $order, $model);
}
}
foreach ($admins as $user) {
self::sendMail('repair-' . $model->status, 'admin', $user, $service, $order, $model);
}
}
public static function addressMail($model, $event, $new = null)
{
if (!Auth::user()) {
return;
}
if (Auth::user()->isService()) {
$service = ServiceService::getById($model->service_id);
$managers = $service->managers()->canLogin()->get();
$placeholders = new PlaceholderService();
if ($event == 'main-address-changed' && !$new) {
$placeholders->initServicePlaceholder($service);
} elseif ($event == 'main-address-changed' && $new) {
$placeholders->initServicePlaceholder($service, $model, 1);
} else {
$placeholders->initServicePlaceholder($service, $model);
}
foreach ($managers as $user) {
$placeholders->initRecipientPlaceholder($user);
self::sendMailImproved($event, 'manager', $user, $placeholders->getAddressChangePlaceholders());
}
}
}
public static function newServiceMail($service, $new_service)
{
$event = 'request-to-add-company';
$placeholders = new PlaceholderService();
$placeholders->initServicePlaceholder($service);
$placeholders->initNewServicePlaceholder($new_service);
if (!Auth::user()->isManager()) {
$managers = $service->managers()->canLogin()->get();
foreach ($managers as $manager) {
$placeholders->initRecipientPlaceholder($manager);
self::sendMailImproved(
$event, 'manager', $manager,
$placeholders->getNewServicePlaceholders()
);
}
}
if (!Auth::user()->isService()) {
$placeholders->initRecipientPlaceholder($service->user);
self::sendMailImproved(
$event, 'service', $service->user,
$placeholders->getNewServicePlaceholders()
);
}
if (!Auth::user()->isAdmin()) {
$admins = User::getAdmins();
foreach ($admins as $admin) {
$placeholders->initRecipientPlaceholder($admin);
self::sendMailImproved(
$event, 'admin', $admin,
$placeholders->getNewServicePlaceholders()
);
}
}
}
public static function editServiceMail($service, $event)
{
if (!Auth::user()) {
return;
}
$placeholders = new PlaceholderService();
$placeholders->initServicePlaceholder($service);
if (!Auth::user()->isManager()) {
$managers = $service->managers()->canLogin()->get();
foreach ($managers as $manager) {
$placeholders->initRecipientPlaceholder($manager);
self::sendMailImproved($event, 'manager', $manager, $placeholders->getAllPlaceholders());
}
}
if (!Auth::user()->isService()) {
$placeholders->initRecipientPlaceholder($service->user);
self::sendMailImproved($event, 'service', $service->user, $placeholders->getAllPlaceholders());
}
if (!Auth::user()->isAdmin()) {
$admins = User::getAdmins();
foreach ($admins as $admin) {
$placeholders->initRecipientPlaceholder($admin);
self::sendMailImproved($event, 'admin', $admin, $placeholders->getAllPlaceholders());
}
}
}
public static function companyActivationMail($service, $event, $old_service_company_name)
{
$placeholders = new PlaceholderService();
$placeholders->initServicePlaceholder($service);
$placeholders->setServicePlaceholder('{old_service_company_name}', $old_service_company_name);
if (!Auth::user()->isManager()) {
$managers = $service->managers()->canLogin()->get();
foreach ($managers as $manager) {
$placeholders->initRecipientPlaceholder($manager);
self::sendMailImproved(
$event, 'manager', $manager,
$placeholders->getAllPlaceholders()
);
}
}
if (!Auth::user()->isService()) {
$placeholders->initRecipientPlaceholder($service->user);
self::sendMailImproved(
$event, 'service', $service->user,
$placeholders->getAllPlaceholders()
);
}
if (!Auth::user()->isAdmin()) {
$admins = User::getAdmins();
foreach ($admins as $admin) {
$placeholders->initRecipientPlaceholder($admin);
self::sendMailImproved(
$event, 'admin', $admin,
$placeholders->getAllPlaceholders()
);
}
}
}
public static function acttcMail($model, $event)
{
return;
$placeholders = new PlaceholderService();
$placeholders->initActtcPlaceholders($model);
$placeholders->initRepairPlaceholder($model->repair);
$placeholders->initServicePlaceholder($model->service);
if (Auth::check()) {
if (!Auth::user()->isManager()) {
$managers = $model->service->managers()->canLogin()->get();
foreach ($managers as $manager) {
$placeholders->initRecipientPlaceholder($manager);
self::sendMailImproved(
$event, 'manager', $manager,
$placeholders->getPlaceholdersForActtc()
);
}
}
if (!Auth::user()->isService()) {
$placeholders->initRecipientPlaceholder($model->service->user);
self::sendMailImproved(
$event, 'service', $model->service->user,
$placeholders->getPlaceholdersForActtc()
);
}
if (!Auth::user()->isAdmin()) {
$admins = User::getAdmins();
foreach ($admins as $admin) {
$placeholders->initRecipientPlaceholder($admin);
self::sendMailImproved(
$event, 'admin', $admin,
$placeholders->getPlaceholdersForActtc()
);
}
}
} else {
$managers = $model->service->managers()->canLogin()->get();
foreach ($managers as $manager) {
$placeholders->initRecipientPlaceholder($manager);
self::sendMailImproved(
$event, 'manager', $manager,
$placeholders->getPlaceholdersForActtc()
);
}
$placeholders->initRecipientPlaceholder($model->service->user);
self::sendMailImproved(
$event, 'service', $model->service->user,
$placeholders->getPlaceholdersForActtc()
);
$admins = User::getAdmins();
foreach ($admins as $admin) {
$placeholders->initRecipientPlaceholder($admin);
self::sendMailImproved(
$event, 'admin', $admin,
$placeholders->getPlaceholdersForActtc()
);
}
}
}
public static function shipmentMail($model)
{
return;
$placeholders = new PlaceholderService();
$placeholders->initShipmentPlaceholders($model);
$placeholders->initOrderPlaceholder($model->order);
if (Auth::check()) {
if (!Auth::user()->isManager()) {
$managers = $model->order->service->managers()->canLogin()->get();
foreach ($managers as $manager) {
$placeholders->initRecipientPlaceholder($manager);
self::sendMailImproved(
'shipment-' . $model->status, 'manager', $manager,
$placeholders->getPlaceholdersForShipment()
);
}
}
if (!Auth::user()->isService()) {
$placeholders->initRecipientPlaceholder($model->order->service->user);
self::sendMailImproved(
'shipment-' . $model->status, 'service', $model->order->service->user,
$placeholders->getPlaceholdersForShipment()
);
}
if (!Auth::user()->isAdmin()) {
$admins = User::getAdmins();
foreach ($admins as $admin) {
$placeholders->initRecipientPlaceholder($admin);
self::sendMailImproved(
'shipment-' . $model->status, 'admin', $admin,
$placeholders->getPlaceholdersForShipment()
);
}
}
} else {
$managers = $model->order->service->managers()->canLogin()->get();
foreach ($managers as $manager) {
$placeholders->initRecipientPlaceholder($manager);
self::sendMailImproved(
'shipment-' . $model->status, 'manager', $manager,
$placeholders->getPlaceholdersForShipment()
);
}
$placeholders->initRecipientPlaceholder($model->order->service->user);
self::sendMailImproved(
'shipment-' . $model->status, 'service', $model->order->service->user,
$placeholders->getPlaceholdersForShipment()
);
$admins = User::getAdmins();
foreach ($admins as $admin) {
$placeholders->initRecipientPlaceholder($admin);
self::sendMailImproved(
'shipment-' . $model->status, 'admin', $admin,
$placeholders->getPlaceholdersForShipment()
);
}
}
}
}