<?php
namespace App\Http\Controllers;
use App\Helpers\Helper;
use App\Models\Langganan;
use App\Models\logAktifitas;
use App\Models\Paket;
use App\Models\pengaturanAplikasi;
use App\Models\User;
use Barryvdh\DomPDF\Facade\Pdf;
use Carbon\Carbon;
use Exception;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Log;
use Illuminate\Support\Facades\Validator;
use PDO;
use RecursiveDirectoryIterator;
use RecursiveIteratorIterator;
use Throwable;
use Illuminate\Support\Facades\Http;
class LanggananController extends Controller
{
public function index()
{
$pakets = Paket::all();
return response()->view('Langganan.index', compact('pakets'));
}
public function indexFrontClass()
{
$paket = Paket::where('kategori', 'Tampil')->where('jenis', 'Kelas')->latest()->with('detail')->get();
$data['datas'] = $paket;
return response()->view('Langganan.frontClass', $data);
}
public function indexFrontApp()
{
$paket = Paket::where('kategori', 'Tampil')->where('jenis', 'Aplikasi')->latest()->with('detail')->get();
$data['datas'] = $paket;
return response()->view('Langganan.frontApp', $data);
}
public function store(Request $request)
{
try {
$validator = Validator::make($request->all(), [
'email' => 'required|email',
'paket_id' => 'required',
], [
'email.required' => 'Masukan Data Email Pengguna.',
'email.email' => 'Masukan Data Email dengan Benar!',
'paket_id.required' => 'Tambahkan Paket.',
]);
if ($validator->fails()) {
return response()->json([
'status' => 'error',
'errors' => $validator->errors(),
], 422);
}
$pengguna = User::where('email', $request->email)->first();
if (isset($pengguna)) {
$dataLangganan = [
'no_langganan' => 'SCB_' . date('his'),
'user_id' => $pengguna->id,
'paket_id' => $request->paket_id,
'status' => 'belum aktif',
];
$langganan = Langganan::create($dataLangganan);
$time = Carbon::now('Asia/Makassar')->format('Y-m-d H:i:s');
$log_aktifitas = [
'user_id' => $pengguna->id,
'langganan_id' => $langganan->id,
'aktifitas' => 'Langganan baru! telah ditambahkan dengan nomor langganan ' . $langganan->no_langganan,
'waktu' => $time,
];
logAktifitas::create($log_aktifitas);
return response()->json([
'status' => 'success',
'message' => 'Data Langganan Berhasil Ditambahkan!.',
], 200);
} else {
return response()->json([
'status' => 'error',
'errors' => 'Pengguna tidak ditemukan!',
], 422);
}
} catch (Throwable $th) {
return response()->json([
'status' => 'error',
'errors' => $th->getMessage(),
], 422);
// return redirect()->route('error.500');
}
}
public function Aktifasi(string $id)
{
DB::beginTransaction();
try {
$langganan = Langganan::with('paket', 'user', 'user.profile')->find($id);
if ($langganan->domain == null || $langganan->domain == "" || $langganan->domain == "-") {
DB::rollBack();
return response()->json([
'status' => 'error',
'message' => 'Paket gagal diaktifkan!. Nama domain harus diisi',
], 500);
}
$status = $langganan->status;
if ($status != 'paket aktif') {
$status_paket = 'paket aktif';
} else {
$status_paket = 'paket tidak aktif';
}
$durasi = $langganan->paket->durasi_paket;
switch ($langganan->paket->satuan_durasi_paket) {
case 'Hari':
$tlg_selesai = now()->addDays($durasi);
break;
case 'Bulan':
$tlg_selesai = now()->addMonths($durasi);
break;
case 'Tahun':
$tlg_selesai = now()->addYears($durasi);
break;
default:
throw new Exception("Satuan durasi paket tidak valid.");
}
$data = [
'tgl_mulai' => now(),
'tgl_selesai' => $tlg_selesai,
'status' => $status_paket,
];
$langganan->update($data);
if (env('AUTO_CREATE_DOMAIN') == true && $status_paket == 'paket aktif') {
$domain = $langganan->domain;
$tgl_selesai = $langganan->tgl_selesai;
if (($langganan->link == null && $domain != null && $domain != "") || $langganan->log_file == null) {
$domainResult = Helper::createDomain($domain, $tgl_selesai,@$langganan->user->email);
$langganan->update([
'link' => 'https://' . $domainResult['subdomain'] . '/login/page',
'log_file' => $domainResult['log_file'],
'username' => $domainResult['username'],
'password' => $domainResult['password'],
]);
}
}
if ($status_paket == 'paket tidak aktif') {
try {
$response = Http::post(str_replace("/login/page", "/api/deactive", $langganan->link), [
'email' => $langganan->username,
'password' => $langganan->password,
]);
Log::info($response);
} catch (\Throwable $th) {
//throw $th;
Log::error($th);
}
} else {
try {
$response = Http::post(str_replace("/login/page", "/api/activated", $langganan->link), [
'email' => $langganan->username,
'password' => $langganan->password,
'countdown' => date("Y-m-d", strtotime($tlg_selesai))
]);
Log::info($response);
} catch (\Throwable $th) {
//throw $th;
Log::error($th);
}
}
DB::commit();
return response()->json([
'status' => 'success',
'message' => 'Paket Berhasil diaktifkan!.',
'domainResult' => @$domainResult ?? null,
], 200);
} catch (Throwable $th) {
DB::rollBack();
Log::error($th);
return response()->json([
'status' => 'error',
'message' => 'Paket gagal diaktifkan!.',
], 500);
}
}
public function statusDomain(Request $request)
{
return response()->json(Helper::checkStatusCreatedDomain($request->logFile), 200);
}
public function getLangganan(Request $request)
{
$search = $request->search;
$langgananQuery = Langganan::latest();
if ($search) {
$langgananQuery->where(function ($query) use ($search) {
$query->where('no_langganan', 'like', '%' . $search . '%')
->orwhere('status', 'like', '%' . $search . '%')
->orWhereHas('user', function ($query) use ($search) {
$query->where('email', 'like', '%' . $search . '%');
})->orWhereHas('paket', function ($query) use ($search) {
$query->where('nama_paket', 'like', '%' . $search . '%');
})->orWhereHas('user.profile', function ($query) use ($search) {
$query->where('no_telp', 'like', '%' . $search . '%');
});
});
}
$langganans = $langgananQuery->with(['user', 'paket', 'user.profile'])->paginate(10);
$data = $langganans->items();
$transformedData = [];
foreach ($data as $langganan) {
$log_file = $langganan->log_file;
$statusDomain = null;
if ($log_file != null) {
$statusDomain = Helper::checkStatusCreatedDomain($log_file);
}
$transformedData[] = [
'id' => $langganan->id,
'no_langganan' => $langganan->no_langganan,
'user' => $langganan->user,
'paket' => $langganan->paket,
'link' => $langganan->link,
'username' => $langganan->username,
'password' => $langganan->password,
'tgl_mulai' => $langganan->tgl_mulai ? Carbon::parse($langganan->tgl_mulai)->format('d-m-Y') : '-',
'tgl_selesai' => $langganan->tgl_selesai ? Carbon::parse($langganan->tgl_selesai)->format('d-m-Y') : '-',
'kadaluwarsa' => Carbon::parse($langganan->tgl_selesai)->lt(Carbon::today()),
'status' => $langganan->status ?? '-',
'domain' => $langganan->domain ?? '-',
'status_domain' => $statusDomain != null ? (@$statusDomain['status'] ?? "not_found") : "not_found",
'log_file' => $langganan->log_file ?? null,
];
}
if ($langganans->total() > 0) {
return response()->json([
'status' => 'success',
'data' => $transformedData,
'next_page_url' => $langganans->nextPageUrl(),
], 200);
} else {
return response()->json([
'status' => 'error',
'data' => [],
'errors' => 'Data tidak tersedia.',
], 200);
}
}
public function update(Request $request, string $id)
{
try {
$langganan = Langganan::find($id);
$validator = Validator::make($request->all(), [
'email' => 'required|email',
'paket_id' => 'required|exists:pakets,id',
], [
'email.required' => 'Masukan Data Email Pengguna.',
'email.email' => 'Masukan Data Email dengan Benar!',
'paket_id.required' => 'Tambahkan Paket.',
'paket_id.exists' => 'Paket tidak ditemukan.',
]);
if ($validator->fails()) {
return response()->json([
'status' => 'error',
'errors' => $validator->errors(),
], 422);
}
$pengguna = User::where('email', $request->email)->first();
if (isset($pengguna)) {
$dataLangganan = [
'user_id' => $pengguna->id,
'paket_id' => $request->paket_id,
'link' => $request->link,
'domain' => $request->domain,
'username' => $request->username,
'password' => $request->password,
];
$langganan->update($dataLangganan);
if ($request->has('password') && $request->password != "") {
try {
$response = Http::post(str_replace("/login/page", "/api/update-password", $langganan->link), [
'email' => $langganan->username,
'password' => $langganan->password,
'token' => 4321
]);
Log::info($response);
} catch (\Throwable $th) {
//throw $th;
Log::error($th);
}
}
return response()->json([
'status' => 'success',
'message' => 'Data Langganan Berhasil Di Ubah!.',
], 200);
} else {
return response()->json([
'status' => 'error',
'errors' => 'Pengguna tidak ditemukan!',
], 422);
}
} catch (Throwable $th) {
return response()->json([
'status' => 'error',
'message' => $th->getMessage(),
], 200);
// return redirect()->route('error.500');
}
}
public function destroy(string $id)
{
try {
$data = Langganan::findOrFail($id);
if ($data->domain != null && $data->link != null) {
try {
Helper::deleteDomain($data->domain);
} catch (\Throwable $th) {
//throw $th;
Log::error($th);
}
}
$data->delete();
return response()->json([
'status' => 'success',
'message' => 'Data berhasil dihapus!',
], 200);
} catch (Throwable $th) {
return response()->json([
'status' => 'error',
'message' => 'Terjadi kesalahan: ' . $th->getMessage(),
], 500);
}
}
public function userLangganan(Request $request)
{
try {
$validator = Validator::make($request->all(), [
'user_id' => 'required',
'paket_id' => 'required',
], [
'user_id.required' => 'Masukan Data Email Pengguna.',
'paket_id.required' => 'Tambahkan Paket.',
]);
if ($validator->fails()) {
return response()->json([
'status' => 'error',
'errors' => $validator->errors(),
], 422);
}
$dataLangganan = [
'no_langganan' => 'SCB_' . date('his'),
'user_id' => $request->user_id,
'paket_id' => $request->paket_id,
'status' => 'belum aktif',
];
$langganan = Langganan::create($dataLangganan);
$time = Carbon::now('Asia/Makassar')->format('Y-m-d H:i:s');
$log_aktifitas = [
'user_id' => $request->user_id,
'langganan_id' => $langganan->id,
'aktifitas' => 'Langganan baru! telah ditambahkan dengan nomor langganan ' . $langganan->no_langganan,
'waktu' => $time,
];
logAktifitas::create($log_aktifitas);
return response()->json([
'status' => 'success',
'message' => 'Data Langganan Berhasil Ditambahkan!.',
], 200);
} catch (Throwable $th) {
return response()->json([
'status' => 'error',
'message' => $th->getMessage(),
], 422);
// return redirect()->route('error.500');
}
}
public function generateNota(string $id)
{
$langganan = Langganan::where('id', $id)->with(['user.profile', 'paket.detail.item'])->first();
$store = pengaturanAplikasi::first();
$data = [
'langganan' => $langganan,
'store' => $store,
];
$pdf = Pdf::loadView('Component.nota', $data);
return $pdf->stream('nota-pembelian.pdf');
}
}
Anons79 File Manager Version 1.0, Coded By Anons79
Email: [email protected]