Anons79 Mini Shell

Directory : /home/aplikasiposinfo/www/langganan.fixmate.id/app/Http/Controllers/
Upload File :
Current File : /home/aplikasiposinfo/www/langganan.fixmate.id/app/Http/Controllers/LanggananController.php

<?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]