update marketing
All checks were successful
All checks were successful
This commit is contained in:
@@ -0,0 +1,39 @@
|
||||
<?php
|
||||
|
||||
namespace Modules\MarketingAddon\App\Http\Controllers;
|
||||
|
||||
use Illuminate\Http\Request;
|
||||
use App\Http\Controllers\Controller;
|
||||
use Modules\MarketingAddon\App\Models\EmailSetting;
|
||||
|
||||
class AcnooEmailSettingController extends Controller
|
||||
{
|
||||
public function index()
|
||||
{
|
||||
$businessId = auth()->user()->business_id;
|
||||
$email_setting = EmailSetting::where('business_id', $businessId)->first() ?? new EmailSetting();
|
||||
|
||||
return view('marketingaddon::email-settings.index', compact('email_setting'));
|
||||
}
|
||||
|
||||
public function store(Request $request)
|
||||
{
|
||||
$request->validate([
|
||||
'driver' => 'required|string|max:25|in:smtp,sendmail',
|
||||
'host' => 'nullable|string|max:255',
|
||||
'port' => 'nullable|numeric',
|
||||
'username' => 'nullable|string|max:255',
|
||||
'password' => 'nullable|string|max:255',
|
||||
'encryption' => 'nullable|string|max:25',
|
||||
'from_name' => 'nullable|string|max:255',
|
||||
'from_address' => 'nullable|string|max:255',
|
||||
]);
|
||||
|
||||
EmailSetting::updateOrCreate(
|
||||
['business_id' => auth()->user()->business_id],
|
||||
$request->only(['driver', 'host', 'port', 'username', 'password', 'encryption', 'from_name', 'from_address'])
|
||||
);
|
||||
|
||||
return response()->json(__('Email setting updated successfully.'));
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,48 @@
|
||||
<?php
|
||||
|
||||
namespace Modules\MarketingAddon\App\Http\Controllers;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use Illuminate\Http\Request;
|
||||
use Modules\MarketingAddon\App\Models\MessageReport;
|
||||
|
||||
class AcnooMessageLogController extends Controller
|
||||
{
|
||||
public function index(Request $request)
|
||||
{
|
||||
$message_logs = MessageReport::with('user:id,email')
|
||||
->where('business_id', auth()->user()->business_id)
|
||||
->when($request->search, function ($q) use ($request) {
|
||||
$q->where(function ($q) use ($request) {
|
||||
$q->where('title', 'like', '%' . $request->search . '%')
|
||||
->orWhere('channel', 'like', '%' . $request->search . '%')
|
||||
->orWhere('phone', 'like', '%' . $request->search . '%')
|
||||
->orWhere('status', 'like', '%' . $request->search . '%')
|
||||
->orWhereHas('user', function ($q) use ($request) {
|
||||
$q->where('email', 'like', '%' . $request->search . '%');
|
||||
});
|
||||
});
|
||||
})
|
||||
->when($request->type, function ($q) use ($request) {
|
||||
$q->where(function ($q) use ($request) {
|
||||
$q->where('channel', $request->type);
|
||||
});
|
||||
})
|
||||
->when($request->status, function ($q) use ($request) {
|
||||
$q->where(function ($q) use ($request) {
|
||||
$q->where('status', $request->status);
|
||||
});
|
||||
})
|
||||
->latest()
|
||||
->paginate($request->per_page ?? 20)
|
||||
->appends($request->query());
|
||||
|
||||
if ($request->ajax()) {
|
||||
return response()->json([
|
||||
'data' => view('marketingaddon::message-logs.datas', compact('message_logs'))->render(),
|
||||
]);
|
||||
}
|
||||
|
||||
return view('marketingaddon::message-logs.index', compact('message_logs'));
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,154 @@
|
||||
<?php
|
||||
|
||||
namespace Modules\MarketingAddon\App\Http\Controllers;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Validation\Rule;
|
||||
use Maatwebsite\Excel\Facades\Excel;
|
||||
use Modules\MarketingAddon\App\Exports\SmsGatewayExport;
|
||||
use Modules\MarketingAddon\App\Models\GatewayType;
|
||||
use Modules\MarketingAddon\App\Models\Smsgateway;
|
||||
|
||||
class AcnooSmsGatewayController extends Controller
|
||||
{
|
||||
public function index(Request $request)
|
||||
{
|
||||
$gateways = Smsgateway::with('type:id,name')
|
||||
->where('business_id', auth()->user()->business_id)
|
||||
->when($request->filled('channel'), function ($q) use ($request) {
|
||||
$q->where('channel', $request->channel);
|
||||
})
|
||||
->when($request->filled('search'), function ($q) use ($request) {
|
||||
$q->where(function ($query) use ($request) {
|
||||
$query->where('name', 'like', '%' . $request->search . '%')
|
||||
->orWhereHas('type', function ($type) use ($request) {
|
||||
$type->where('name', 'like', '%' . $request->search . '%');
|
||||
});
|
||||
});
|
||||
})
|
||||
->latest()
|
||||
->paginate($request->per_page ?? 20)
|
||||
->appends($request->query());
|
||||
|
||||
if ($request->ajax()) {
|
||||
return response()->json([
|
||||
'data' => view('marketingaddon::sms-gateways.datas', compact('gateways'))->render()
|
||||
]);
|
||||
}
|
||||
|
||||
return view('marketingaddon::sms-gateways.index', compact('gateways'));
|
||||
}
|
||||
|
||||
public function create(Request $request)
|
||||
{
|
||||
$types = GatewayType::where('channel', $request->channel)
|
||||
->latest()
|
||||
->get();
|
||||
|
||||
return view('marketingaddon::sms-gateways.create', compact('types'));
|
||||
}
|
||||
|
||||
public function store(Request $request)
|
||||
{
|
||||
$request->validate([
|
||||
'status' => 'required|integer',
|
||||
'params' => 'required|array',
|
||||
'params.*' => 'required|string',
|
||||
'name' => [
|
||||
'required',
|
||||
Rule::unique('smsgateways')->where(function ($q) {
|
||||
return $q->where('business_id', auth()->user()->business_id);
|
||||
}),
|
||||
],
|
||||
'type_id' => 'required|exists:gateway_types,id',
|
||||
]);
|
||||
|
||||
$type = GatewayType::findOrFail($request->type_id);
|
||||
|
||||
Smsgateway::create($request->all() + [
|
||||
'driver' => $type->driver,
|
||||
'namespace' => $type->namespace,
|
||||
'business_id' => auth()->user()->business_id
|
||||
]);
|
||||
|
||||
return response()->json([
|
||||
'message' => __(':channel gateway created successfully.', ['channel' => ucfirst($request->channel)]),
|
||||
'redirect' => route('business.sms-gateways.index', ['channel' => $request->channel])
|
||||
]);
|
||||
}
|
||||
|
||||
public function show(string $id)
|
||||
{
|
||||
$gateway = Smsgateway::findOrFail($id);
|
||||
$gateway->update(['status' => !$gateway->status]);
|
||||
return response()->json(['message' => 'Sms gateway']);
|
||||
}
|
||||
|
||||
public function edit(Request $request, string $id)
|
||||
{
|
||||
$types = GatewayType::where('channel', $request->channel)->latest()->get();
|
||||
$gateway = Smsgateway::where('business_id', auth()->user()->business_id)->findOrFail($id);
|
||||
|
||||
return view('marketingaddon::sms-gateways.edit', compact('gateway', 'types'));
|
||||
}
|
||||
|
||||
public function update(Request $request, string $id)
|
||||
{
|
||||
$request->validate([
|
||||
'status' => 'required|integer',
|
||||
'params' => 'required|array',
|
||||
'params.*' => 'required|string',
|
||||
'type_id' => 'required|exists:gateway_types,id',
|
||||
'name' => [
|
||||
'required',
|
||||
Rule::unique('smsgateways', 'name')->ignore($id)->where(function ($q) {
|
||||
return $q->where('business_id', auth()->user()->business_id);
|
||||
}),
|
||||
],
|
||||
]);
|
||||
|
||||
$type = GatewayType::findOrFail($request->type_id);
|
||||
$gateway = Smsgateway::findOrFail($id);
|
||||
|
||||
$gateway->update($request->all() + [
|
||||
'driver' => $type->driver,
|
||||
'namespace' => $type->namespace
|
||||
]);
|
||||
|
||||
return response()->json([
|
||||
'message' => __(':channel gateway updated successfully.', ['channel' => ucfirst($request->channel)]),
|
||||
'redirect' => route('business.sms-gateways.index', ['channel' => $request->channel])
|
||||
]);
|
||||
}
|
||||
|
||||
public function destroy(Request $request, string $id)
|
||||
{
|
||||
Smsgateway::where('id', $id)->delete();
|
||||
|
||||
return response()->json([
|
||||
'message' => __(':channel gateway deleted successfully.', ['channel' => ucfirst($request->channel)]),
|
||||
'redirect' => route('business.sms-gateways.index', ['channel' => $request->channel])
|
||||
]);
|
||||
}
|
||||
|
||||
public function deleteAll(Request $request)
|
||||
{
|
||||
Smsgateway::whereIn('id', $request->ids)->delete();
|
||||
|
||||
return response()->json([
|
||||
'message' => __('Selected :channel gateway deleted successfully.', ['channel' => $request->channel]),
|
||||
'redirect' => route('business.sms-gateways.index', ['channel' => $request->channel])
|
||||
]);
|
||||
}
|
||||
|
||||
public function exportExcel()
|
||||
{
|
||||
return Excel::download(new SmsGatewayExport, 'sms-gateway.xlsx');
|
||||
}
|
||||
|
||||
public function exportCsv()
|
||||
{
|
||||
return Excel::download(new SmsGatewayExport, 'sms-gateway.csv');
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,37 @@
|
||||
<?php
|
||||
|
||||
namespace Modules\MarketingAddon\App\Http\Controllers;
|
||||
|
||||
use App\Models\Option;
|
||||
use Illuminate\Http\Request;
|
||||
use App\Http\Controllers\Controller;
|
||||
use Illuminate\Support\Facades\Cache;
|
||||
|
||||
class AcnooSmsGatewaySettingController extends Controller
|
||||
{
|
||||
public function index()
|
||||
{
|
||||
$businessId = auth()->user()->business_id;
|
||||
$sms_gateway_setting_key = 'sms-gateway-setting-' . $businessId;
|
||||
$sms_gateway_setting = Option::where('key', $sms_gateway_setting_key)->first();
|
||||
return view('marketingaddon::sms-gateway-settings.index', compact('sms_gateway_setting'));
|
||||
}
|
||||
|
||||
public function store(Request $request)
|
||||
{
|
||||
$request->validate([
|
||||
'sms_gateway_setting' => 'required|string|max:100|in:api,android',
|
||||
]);
|
||||
|
||||
$key = 'sms-gateway-setting-' . auth()->user()->business_id;
|
||||
|
||||
Option::updateOrCreate(
|
||||
['key' => $key],
|
||||
['value' => $request->sms_gateway_setting]
|
||||
);
|
||||
|
||||
Cache::forget($key);
|
||||
|
||||
return response()->json(__('SMS Gateway setting updated successfully.'));
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,87 @@
|
||||
<?php
|
||||
|
||||
namespace Modules\MarketingAddon\App\Http\Controllers;
|
||||
|
||||
use App\Models\Option;
|
||||
use Illuminate\Http\Request;
|
||||
use App\Http\Controllers\Controller;
|
||||
use Illuminate\Support\Facades\Cache;
|
||||
use Modules\MarketingAddon\App\Models\Template;
|
||||
|
||||
class AcnooTemplateController extends Controller
|
||||
{
|
||||
public function index(Request $request)
|
||||
{
|
||||
$businessId = auth()->user()->business_id;
|
||||
$type = $request->type;
|
||||
|
||||
$templates = Template::where('business_id', $businessId)
|
||||
->where('type', $type)
|
||||
->get()
|
||||
->keyBy('title');
|
||||
|
||||
$page_data = Option::where('key', 'notification_settings_' . $businessId)->first()?->value ?? [];
|
||||
|
||||
return view('marketingaddon::templates.index', compact('templates', 'page_data'));
|
||||
}
|
||||
|
||||
public function store(Request $request)
|
||||
{
|
||||
$businessId = auth()->user()->business_id;
|
||||
$type = $request->type;
|
||||
$tabs = ['new_sale', 'payment_received', 'payment_paid', 'purchase', 'payment_reminder', 'attendance'];
|
||||
|
||||
$request->validate(collect($tabs)
|
||||
->flatMap(function ($key) use ($request, $type) {
|
||||
if (!$request->has($key)) {
|
||||
return [];
|
||||
}
|
||||
return [
|
||||
"{$key}.template" => 'nullable|string|max:255',
|
||||
"{$key}.subject" => $type === 'email' ? 'required|string|max:255' : 'nullable|string|max:255',
|
||||
"{$key}.message" => 'required|string|max:1000',
|
||||
];
|
||||
})->toArray()
|
||||
);
|
||||
|
||||
$optionKey = 'notification_settings_' . $businessId;
|
||||
|
||||
$option = Option::firstOrCreate(
|
||||
['key' => $optionKey],
|
||||
['value' => []]
|
||||
);
|
||||
|
||||
$optionValue = $option->value ?? [];
|
||||
|
||||
foreach ($tabs as $tab) {
|
||||
if (!$request->has($tab)) continue;
|
||||
|
||||
$tabData = $request->{$tab};
|
||||
|
||||
$optionValue[$tab][$type]['enabled'] = $tabData[$type]['enabled'] ?? 0;
|
||||
|
||||
$message = $tabData['message'] ?? null;
|
||||
$variables = $message ? extractTemplateVariables($message) : [];
|
||||
|
||||
Template::updateOrCreate(
|
||||
[
|
||||
'business_id' => $businessId,
|
||||
'title' => $tab,
|
||||
'type' => $type,
|
||||
],
|
||||
[
|
||||
'subject' => $tabData['subject'] ?? null,
|
||||
'template' => $tabData['template'] ?? null,
|
||||
'message' => $message,
|
||||
'variables' => $variables,
|
||||
]
|
||||
);
|
||||
}
|
||||
|
||||
$option->update(['value' => $optionValue]);
|
||||
|
||||
Cache::forget($optionKey);
|
||||
|
||||
return response()->json(__(ucfirst($type) . ' template updated successfully'));
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
<?php
|
||||
|
||||
namespace Modules\MarketingAddon\App\Http\Controllers;
|
||||
|
||||
use App\Models\Party;
|
||||
use App\Http\Controllers\Controller;
|
||||
|
||||
class PaymentReminderController extends Controller
|
||||
{
|
||||
/**
|
||||
* Display a listing of the resource.
|
||||
*/
|
||||
public function index(string $party_id)
|
||||
{
|
||||
$party = Party::with('business')->findOrFail($party_id);
|
||||
|
||||
$this->paymentReminderMessage($party->business, $party);
|
||||
|
||||
return redirect()->back()->with('message', 'Payment reminder sent successfully.');
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user