Commit 9a5d936c authored by Ahmad Hasan Ali's avatar Ahmad Hasan Ali
Browse files

Subscription order history

Showing with 381 additions and 40 deletions
+381 -40
<?php
namespace App\Exports;
use App\Models\userSubscription;
use App\Models\UserSubscriptionModel;
use Carbon\Carbon;
use Maatwebsite\Excel\Concerns\FromCollection;
use Maatwebsite\Excel\Concerns\FromQuery;
use Maatwebsite\Excel\Concerns\WithHeadings;
use Maatwebsite\Excel\Concerns\WithMapping;
class SubscriptionOrderExport implements FromQuery, WithHeadings, WithMapping
{
/**
* @return Builder
*/
public function query()
{
return UserSubscriptionModel::query()
->with('user');
}
/**
* @return array
*/
public function headings(): array
{
return [
'#',
'Nama User',
'Nama Langganan',
'Harga',
'Jangka Waktu',
'Waktu Berakhir',
'dibuat pada',
'diperbarui pada'
];
}
/**
* @param mixed $userSubscription
* @return array
*/
public function map($userSubscription): array
{
static $row_number = 0;
return [
++$row_number,
$userSubscription->user->userProfile->first_name . ' ' . $userSubscription->user->userProfile->last_name,
$userSubscription->subscription_name,
$userSubscription->subscription_price,
$userSubscription->subscription_time,
Carbon::parse($userSubscription->expire)->format('d M Y'),
$userSubscription->created_at,
$userSubscription->updated_at,
];
}
}
\ No newline at end of file
......@@ -88,7 +88,8 @@ public function update(Request $request, $id)
// Profile Picture handler
if ($request->hasFile('picture')) {
if (Storage::disk('s3')->exists($data->picturePath)) {
if ($data->picturePath && Storage::disk('s3')->exists($data->picturePath)) {
Storage::disk('s3')->delete($data->picturePath);
}
......
......@@ -42,7 +42,11 @@ public function add(Request $request)
UserSubscriptionModel::create([
'subscription_types_id' => $subs_type->id,
'subscription_name' => $subs_type->name,
'subscription_price' => $subs_type->price,
'subscription_time' => $subs_type->time,
'user_id' => $user_id,
'status' => 'paid',
'expire' => $expire,
]);
......@@ -64,7 +68,11 @@ public function add(Request $request)
UserSubscriptionModel::create([
'subscription_types_id' => $subs_type->id,
'subscription_name' => $subs_type->name,
'subscription_price' => $subs_type->price,
'subscription_time' => $subs_type->time,
'user_id' => $user_id,
'status' => 'paid',
'expire' => $expire,
]);
......@@ -83,7 +91,11 @@ public function add(Request $request)
UserSubscriptionModel::create([
'subscription_types_id' => $subs_type->id,
'subscription_name' => $subs_type->name,
'subscription_price' => $subs_type->price,
'subscription_time' => $subs_type->time,
'user_id' => $user_id,
'status' => 'paid',
'expire' => $expire,
]);
......
......@@ -2,17 +2,17 @@
namespace App\Http\Controllers\Superadmin\Settings;
use Dompdf\Dompdf;
use App\Http\Controllers\Controller;
use App\Models\MenuModel;
use App\Models\RoleMenuModel;
use App\Models\RolesModel;
use Illuminate\Support\Str;
use Dompdf\Dompdf;
use Illuminate\Http\Request;
use App\Models\RoleMenuModel;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Log;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Validator;
use Illuminate\Support\Str;
class MenuController extends Controller
{
......@@ -64,7 +64,7 @@ public function store(Request $request)
]);
}
$data = array_merge($request->all(), ['status' => 1, 'url' => $role->name. '/' .Str::slug($request->name, '-')]);
$data = array_merge($request->all(), ['status' => 1, 'url' => $role->name . '/' . Str::slug($request->name, '-')]);
try {
DB::beginTransaction();
......@@ -131,14 +131,14 @@ public function update(Request $request, $id)
]);
}
$data = array_merge($request->all(), ['status' => 1, 'url' => $role->name. '/' . Str::slug($request->name, '-')]);
$data = array_merge($request->all(), ['status' => 1, 'url' => $role->name . '/' . Str::slug($request->name, '-')]);
try {
DB::beginTransaction();
MenuModel::where('id', $id)->update([
'name' => $request->name,
'url' => $request->url,
'url' => $data['url'],
'icon' => $request->icon,
]);
......
<?php
namespace App\Http\Controllers\Superadmin\Subscription;
use App\Exports\SubscriptionOrderExport;
use App\Http\Controllers\Controller;
use App\Models\UserSubscriptionModel;
use Carbon\Carbon;
use Dompdf\Dompdf;
use Maatwebsite\Excel\Facades\Excel;
class SubscriptionOrderController extends Controller
{
public function index()
{
$data = UserSubscriptionModel::with('user')->get();
return view('page.superadmin.subscription.order.index', compact('data'));
}
public function reportPdf()
{
// Mendapatkan data subscription type dari database
$datas = UserSubscriptionModel::with('user')->get();
// Menghasilkan HTML dari view laporan_list_user.blade.php dengan menggunakan data user
$html = view('page.superadmin.subscription.order.report', compact('datas'));
// Membuat instance Dompdf dan mengkonfigurasinya
$dompdf = new Dompdf();
$dompdf->loadHtml($html);
$dompdf->setPaper('A4', 'portrait');
// Render file PDF
$dompdf->render();
// Memberikan respons HTTP dengan file PDF sebagai respon
return $dompdf->stream(Carbon::now()->format('m-d-Y') . '_laporan_pembelian_langganan.pdf');
}
public function reportExcel()
{
return Excel::download(new SubscriptionOrderExport, Carbon::now()->format('m-d-Y') . '_laporan_pembelian_langganan.xlsx');
}
}
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class SubscriptionOrderModel extends Model
{
use HasFactory;
protected $table = 'subscription_order';
protected $guarded = ['id'];
public function user()
{
return $this->belongsTo(User::class);
}
}
......@@ -10393,5 +10393,5 @@
"php": "^8.0.2"
},
"platform-dev": [],
"plugin-api-version": "2.1.0"
"plugin-api-version": "2.3.0"
}
......@@ -17,6 +17,10 @@ public function up()
$table->id();
$table->unsignedBigInteger('subscription_types_id');
$table->unsignedBigInteger('user_id');
$table->string('subscription_name');
$table->integer('subscription_price');
$table->integer('subscription_time');
$table->string('payment_via')->nullable();
$table->timestamp('expire');
$table->enum('status', ['pending', 'paid'])->nullable();
$table->timestamps();
......
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('subscription_order', function (Blueprint $table) {
$table->id();
$table->unsignedBigInteger('user_id');
$table->string('name');
$table->integer('price');
$table->integer('time');
$table->string('payment_via');
$table->enum('status', ['paid', 'unpaid']);
$table->timestamps();
$table->foreign('user_id')->references('id')->on('users')
->cascadeOnDelete()->cascadeOnUpdate();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('subscription_order');
}
};
......@@ -201,17 +201,6 @@ class="datetimepicker"
</div>
</div>
</div>
<div class="col-lg-3 col-sm-6 col-12 d-flex">
<div class="dash-count das2">
<div class="dash-counts">
<h4 id="subscription-users">-</h4>
<h5>User Subscription</h5>
</div>
<div class="dash-imgs">
<i data-feather="dollar-sign"></i>
</div>
</div>
</div>
</div>
<div class="row">
<h4 class="card-title">Products</h4>
......@@ -345,17 +334,6 @@ class="datetimepicker"
</div>
</div>
</div>
<div class="col-lg-3 col-sm-6 col-12 d-flex">
<div class="dash-count das2">
<div class="dash-counts">
<h4 id="subscription-users">-</h4>
<h5>User Subscription</h5>
</div>
<div class="dash-imgs">
<i data-feather="dollar-sign"></i>
</div>
</div>
</div>
</div>
<div class="row">
<h4 class="card-title">Products</h4>
......
......@@ -30,11 +30,6 @@
href="{{ route('superadmin.settings.menu.report-pdf') }}"><img
src="{{ URL::asset('/assets/img/icons/pdf.svg') }}" alt="img"></a>
</li>
<li>
<a data-bs-toggle="tooltip" data-bs-placement="top" title="excel"
href="{{ route('superadmin.people.user.report-excel') }}"><img
src="{{ URL::asset('/assets/img/icons/excel.svg') }}" alt="img"></a>
</li>
</ul>
</div>
</div>
......
......@@ -75,10 +75,11 @@
function setDefaultMenuValue(data) {
var $form = $('#menu_form');
if (!data.menu) {
$('#role_id', $form).val(data.id)
$('#role_id', $form).val(data.id);
$('#ModalLabelMenu').append('Add New Menu');
} else {
$('#id', $form).val(data.id);
$('#role_id', $form).val(data.role_id);
$('#name', $form).val(data.menu.name);
$('#icon', $form).val(data.menu.icon);
$('#ModalLabelMenu').append('Edit Menu');
......@@ -114,7 +115,7 @@ function resetFormMenu() {
var menu_role = $(this).data('menu')
var data_action = $(this).data('action')
var data_method = $(this).data('method')
console.log(menu_role);
setDefaultMenuValue(menu_role);
$('#menu_form').attr({
......
......@@ -111,4 +111,4 @@
</div>
@include('page.superadmin.subscription.management.modal')
@endsection
@endsection
\ No newline at end of file
<?php $page = 'blankpage'; ?>
@extends('layout.mainlayout')
@section('title', 'Subscription Order')
@section('forhead')
{{-- Toastr Style --}}
<link rel="stylesheet" href="{{ url('assets/plugins/toastr/toatr.css') }}">
@endsection
@section('content')
<div class="page-wrapper pagehead">
<div class="content">
<div class="page-header">
<div class="row">
<div class="col-sm-12">
<h3 class="page-title">Subscription Order</h3>
<ul class="breadcrumb">
<li class="breadcrumb-item"><a href="{{ route('superadmin.dashboard') }}">Dashboard</a></li>
<li class="breadcrumb-item active">Subscription Order</li>
</ul>
</div>
</div>
</div>
<div class="row">
<div class="col-sm-12">
<!-- /product list -->
<div class="card">
<div class="card-body">
<div class="table-top">
<div class="search-set"></div>
<div class="wordset">
<ul>
<li>
<a data-bs-toggle="tooltip" data-bs-placement="top" title="pdf"
href="{{ route('superadmin.subscription.subscription-order.report-pdf') }}"><img
src="{{ URL::asset('/assets/img/icons/pdf.svg') }}" alt="img"></a>
</li>
<li>
<a data-bs-toggle="tooltip" data-bs-placement="top" title="excel"
href="{{ route('superadmin.subscription.subscription-order.report-excel') }}"><img
src="{{ URL::asset('/assets/img/icons/excel.svg') }}"
alt="img"></a>
</li>
</ul>
</div>
</div>
<div class="table-responsive">
<table class="table datanew">
<thead>
<tr>
<th>No.</th>
<th>Nama User</th>
<th>Nama Langganan</th>
<th>Harga</th>
<th>Jangka Waktu</th>
<th>Waktu Berakhir</th>
</tr>
</thead>
<tbody>
@foreach ($data as $item)
<tr>
<td> {{ $loop->iteration }}</td>
<td>{{ $item->user->userProfile->first_name . ' ' . $item->user->userProfile->last_name }}
</td>
<td>{{ $item->subscription_name }}</td>
<td>Rp. {{ $item->subscription_price }}</td>
<td>{{ $item->subscription_time }} bulan</td>
<td>{{ Carbon\Carbon::parse($item->expire)->format('d M Y') }}</td>
</tr>
@endforeach
</tbody>
</table>
</div>
</div>
</div>
<!-- /product list -->
</div>
</div>
</div>
</div>
@endsection
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Laporan List User</title>
<style>
/* Style untuk kop laporan */
.laporan-kop {
text-align: center;
font-size: 24px;
font-weight: bold;
margin-bottom: 20px;
}
/* Style untuk logo aplikasi */
.laporan-logo {
float: left;
width: 100px;
height: 100px;
margin-right: 20px;
}
/* Style untuk informasi laporan */
.laporan-info {
margin-bottom: 20px;
clear: both;
}
/* Style untuk tabel list user */
table {
border-collapse: collapse;
width: 100%;
margin-bottom: 20px;
}
table th,
table td {
border: 1px solid black;
padding: 5px;
}
table th {
background-color: #eee;
font-weight: bold;
text-align: left;
}
table td {
font-size: 14px;
text-align: center;
}
</style>
</head>
<body>
<!-- Kop laporan -->
<div class="laporan-kop">
<img class="laporan-logo" src="{{ URL::asset('/assets/img/Pos-gotoko-black.png') }}" alt="Logo Aplikasi">
Laporan Pembelian Langganan
</div>
<!-- Informasi laporan -->
<div class="laporan-info">
Aplikasi: Go-Toko<br>
Laporan: Pembelian Langganan<br>
Dicetak oleh: {{ Auth::user()->userProfile->first_name . ' ' . Auth::user()->userProfile->last_name }}<br>
Tanggal Cetak: {{ Carbon\Carbon::now()->format('d M Y') }}
</div>
<table>
<thead>
<tr>
<th>No.</th>
<th>Nama User</th>
<th>Nama Langganan</th>
<th>Harga</th>
<th>Jangka Waktu</th>
<th>Waktu Berakhir</th>
</tr>
</thead>
<tbody>
@foreach ($datas as $item)
<tr>
<td>{{ $loop->iteration }}</td>
<td>{{ $item->user->userProfile->first_name . ' ' . $item->user->userProfile->last_name }}</td>
<td>{{ $item->subscription_name }}</td>
<td>Rp. {{ $item->subscription_price }}</td>
<td>{{ $item->subscription_time }} bulan</td>
<td>{{ Carbon\Carbon::parse($item->expire)->format('d M Y') }}</td>
</tr>
@endforeach
</tbody>
</table>
</body>
</html>
......@@ -7,6 +7,7 @@
use App\Http\Controllers\Superadmin\Settings\MenuController;
use App\Http\Controllers\Superadmin\Settings\SubmenuController;
use App\Http\Controllers\Superadmin\Subscription\SubscriptionManagementController;
use App\Http\Controllers\Superadmin\Subscription\SubscriptionOrderController;
use Illuminate\Support\Facades\Route;
Route::group(['prefix' => 'superadmin', 'as' => 'superadmin.', 'middleware' => ['auth', 'role:superadmin']], function () {
......@@ -83,5 +84,11 @@
Route::get('report-pdf', [SubscriptionManagementController::class, 'reportPdf'])->name('report-pdf');
Route::get('report-excel', [SubscriptionManagementController::class, 'reportExcel'])->name('report-excel');
});
Route::group(['prefix' => 'subscription-order', 'as' => 'subscription-order.'], function(){
Route::get('', [SubscriptionOrderController::class, 'index'])->name('index');
Route::get('report-pdf', [SubscriptionOrderController::class, 'reportPdf'])->name('report-pdf');
Route::get('report-excel', [SubscriptionOrderController::class, 'reportExcel'])->name('report-excel');
});
});
});
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment