Compare commits
19 Commits
50b9bb341c
...
21ae8c7d7e
Author | SHA1 | Date |
---|---|---|
|
21ae8c7d7e | |
|
865faec964 | |
|
52a37b0bc6 | |
|
78e6e30a60 | |
|
2724413e20 | |
|
9cac2a6be3 | |
|
00628de085 | |
|
81a14c5d8a | |
|
28ed616aa1 | |
|
fc9557d37f | |
|
d25ebb2d09 | |
|
173ee9d33a | |
|
ce3308d673 | |
|
81f95d8a42 | |
|
d3288c7cd4 | |
|
bcc3d8b575 | |
|
dbe920e45f | |
|
44fda60efe | |
|
c13313e87d |
|
@ -0,0 +1,74 @@
|
|||
<?php
|
||||
|
||||
namespace App\Console\Commands;
|
||||
|
||||
use Illuminate\Console\Command;
|
||||
use Illuminate\Support\Facades\Artisan;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
|
||||
class CreateAtasCommand extends Command
|
||||
{
|
||||
/**
|
||||
* The name and signature of the console command.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $signature = 'app:generate-atas';
|
||||
|
||||
/**
|
||||
* The console command description.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $description = 'Command description';
|
||||
|
||||
/**
|
||||
* Execute the console command.
|
||||
*/
|
||||
public function handle()
|
||||
{
|
||||
|
||||
|
||||
$this->info('Migration started..');
|
||||
|
||||
$migrate = Artisan::call('migrate');
|
||||
|
||||
$this->info('Migrate successfully.');
|
||||
|
||||
$this->info('Truncate started..');
|
||||
// Nonaktifkan constraint
|
||||
DB::statement('SET FOREIGN_KEY_CHECKS=0;');
|
||||
|
||||
$this->info('Foreign key check disabled.');
|
||||
|
||||
DB::statement('TRUNCATE table roles');
|
||||
$this->info('Truncate roles successfully.');
|
||||
DB::statement('TRUNCATE table model_has_roles');
|
||||
$this->info('Truncate model_has_roles successfully.');
|
||||
DB::statement('TRUNCATE table model_has_permissions');
|
||||
$this->info('Truncate model_has_permissions successfully.');
|
||||
DB::statement('TRUNCATE table permissions');
|
||||
$this->info('Truncate permissions successfully.');
|
||||
DB::statement('TRUNCATE table role_has_permissions');
|
||||
$this->info('Truncate role_has_permissions successfully.');
|
||||
// Aktifkan kembali constraint
|
||||
DB::statement('SET FOREIGN_KEY_CHECKS=1;');
|
||||
$this->info('Foreign key check enabled.');
|
||||
$this->info('Truncate successfully.');
|
||||
|
||||
$this->info('Permission started..');
|
||||
Artisan::call('route:clear');
|
||||
$this->info('Route cache cleared successfully.');
|
||||
Artisan::call('permission:cache-reset');
|
||||
$this->info('Permission cache reset successfully.');
|
||||
Artisan::call('permission:create-permission-routes');
|
||||
$this->info('Permission successfully.');
|
||||
|
||||
$this->info('Seeder started..');
|
||||
Artisan::call('db:seed', [
|
||||
'--class' => 'GenerateAtasSeeder',
|
||||
'--force' => true
|
||||
]);
|
||||
$this->info('Seeder successfully.');
|
||||
}
|
||||
}
|
|
@ -0,0 +1,46 @@
|
|||
<?php
|
||||
|
||||
namespace App\Console\Commands;
|
||||
|
||||
use Illuminate\Console\Command;
|
||||
use Illuminate\Support\Facades\Artisan;
|
||||
|
||||
class CreateFreshCommand extends Command
|
||||
{
|
||||
/**
|
||||
* The name and signature of the console command.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $signature = 'app:generate-fresh';
|
||||
|
||||
/**
|
||||
* The console command description.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $description = 'Command description';
|
||||
|
||||
/**
|
||||
* Execute the console command.
|
||||
*/
|
||||
public function handle()
|
||||
{
|
||||
$this->info('Migration started..');
|
||||
|
||||
$migrate = Artisan::call('migrate:fresh --seed');
|
||||
|
||||
$this->info('Migrate successfully.');
|
||||
|
||||
$this->info('Permission started..');
|
||||
Artisan::call('permission:create-permission-routes');
|
||||
$this->info('Permission successfully.');
|
||||
|
||||
$this->info('Seeder started..');
|
||||
Artisan::call('db:seed', [
|
||||
'--class' => 'GenerateFreshSeeder',
|
||||
'--force' => true
|
||||
]);
|
||||
$this->info('Seeder successfully.');
|
||||
}
|
||||
}
|
|
@ -42,10 +42,11 @@ class CreateRoutePermissionCommand extends Command
|
|||
}
|
||||
if (is_null($permission)) {
|
||||
permission::create(['name' => $data, 'group_name' => $first_group, 'desc' => $comment]);
|
||||
$this->info('Permission routes ' . $route->getName() . ' added successfully.');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$this->info('Permission routes added successfully.');
|
||||
$this->info('All Permission routes added successfully.');
|
||||
}
|
||||
}
|
||||
|
|
|
@ -90,3 +90,7 @@ function RemoveSpecialCharPlus($str)
|
|||
// Returning the result
|
||||
return $res;
|
||||
}
|
||||
|
||||
function toDmy($date){
|
||||
return date("d-m-Y", strtotime($date));
|
||||
}
|
|
@ -0,0 +1,323 @@
|
|||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Admins;
|
||||
|
||||
use App\Helpers\ResponseFormatter;
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Http\Controllers\Kasir\Menu;
|
||||
use App\Models\MenuTerlarisView;
|
||||
use App\Models\Pengeluaran;
|
||||
use App\Models\Pesanan;
|
||||
use Carbon\Carbon;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use Yajra\DataTables\Facades\DataTables;
|
||||
|
||||
class DashboardController extends Controller
|
||||
{
|
||||
/**
|
||||
* Display a listing of the resource.
|
||||
*/
|
||||
public function index()
|
||||
{
|
||||
return view('pages.admin.dashboard');
|
||||
}
|
||||
|
||||
/**
|
||||
* @Author: xelz
|
||||
* @Date: 2024-01-26 18:59:12
|
||||
* @Desc: Display Menu Terlaris
|
||||
*/
|
||||
|
||||
public function menuTerlaris()
|
||||
{
|
||||
|
||||
$data = MenuTerlarisView::where([['kategori_produk_id', '=', 2], ['tgl_start_promo', '=', null]])->get();
|
||||
|
||||
return DataTables::of($data)
|
||||
->addIndexColumn()
|
||||
->make(true);
|
||||
}
|
||||
|
||||
public function getCalculationPendapatan()
|
||||
{
|
||||
$pendapatanBulan = $this->calculatePendapatanBulan();
|
||||
$pendapatanHari = $this->calculatePendapatanHari();
|
||||
$pengeluaranBulan = $this->calculatePengeluaranBulan();
|
||||
$pengeluaranHari = $this->calculatePengeluaranHari();
|
||||
|
||||
return ResponseFormatter::success(['pendapatanBulan' => $pendapatanBulan, 'pendapatanHari' => $pendapatanHari, 'pengeluaranBulan' => $pengeluaranBulan, 'pengeluaranHari' => $pengeluaranHari]);
|
||||
}
|
||||
|
||||
private function calculatePendapatanBulan()
|
||||
{
|
||||
// tanggal bulan ini
|
||||
$first_day_of_the_current_month = Carbon::today()->startOfMonth();
|
||||
$last_day_of_the_current_month = $first_day_of_the_current_month->copy()->endOfMonth();
|
||||
|
||||
// tanggal bulan lalu
|
||||
$first_day_of_the_previous_month = $first_day_of_the_current_month->copy()->subMonth()->startOfMonth();
|
||||
$last_day_of_the_previous_month = $first_day_of_the_current_month->copy()->subMonth()->endOfMonth();
|
||||
|
||||
// get data jumlah penjualan keseluruhan dalam satu bulan
|
||||
$penjualanSatuBulan = Pesanan::whereBetween('tanggal_pesanan', [$first_day_of_the_current_month, $last_day_of_the_current_month])->sum('grand_total');
|
||||
$penjualanBulanLalu = Pesanan::whereBetween('tanggal_pesanan', [$first_day_of_the_previous_month, $last_day_of_the_previous_month])->sum('grand_total');
|
||||
|
||||
/**
|
||||
* @Author: xelz
|
||||
* @Date: 2024-01-30 15:52:41
|
||||
* @Desc: constant status
|
||||
* 1 netral
|
||||
* 2 plus
|
||||
* 3 minus
|
||||
*/
|
||||
$statusCalculation = 1;
|
||||
|
||||
// calculate percentage of sales growth in the last month and this month
|
||||
if ($penjualanBulanLalu != 0) {
|
||||
$statusCalculation = 2;
|
||||
$percentageOfSalesGrowth = ($penjualanSatuBulan - $penjualanBulanLalu) / $penjualanBulanLalu * 100;
|
||||
// minus or not
|
||||
if ($percentageOfSalesGrowth < 0) {
|
||||
$statusCalculation = 3;
|
||||
$percentageOfSalesGrowth = $percentageOfSalesGrowth * -1;
|
||||
}
|
||||
} else {
|
||||
$statusCalculation = 1;
|
||||
$percentageOfSalesGrowth = 0;
|
||||
}
|
||||
|
||||
return [
|
||||
'penjualanSatuBulan' => $penjualanSatuBulan,
|
||||
'penjualanBulanLalu' => $penjualanBulanLalu,
|
||||
'statusCalculation' => $statusCalculation,
|
||||
'percentageOfSalesGrowth' => $percentageOfSalesGrowth
|
||||
];
|
||||
}
|
||||
|
||||
private function calculatePendapatanHari()
|
||||
{
|
||||
// tanggal hari ini
|
||||
$first_day_of_the_current_day = Carbon::today()->startOfDay();
|
||||
|
||||
$last_day_of_the_current_day = $first_day_of_the_current_day->copy()->endOfDay();
|
||||
|
||||
// tanggal kemarin
|
||||
$first_day_of_the_previous_day = $first_day_of_the_current_day->copy()->subDay()->startOfDay();
|
||||
$last_day_of_the_previous_day = $first_day_of_the_current_day->copy()->subDay()->endOfDay();
|
||||
|
||||
// get data jumlah penjualan keseluruhan dalam satu bulan
|
||||
$penjualanHariIni = Pesanan::whereBetween('tanggal_pesanan', [$first_day_of_the_current_day, $last_day_of_the_current_day])->sum('grand_total');
|
||||
$penjualanKemarin = Pesanan::whereBetween('tanggal_pesanan', [$first_day_of_the_previous_day, $last_day_of_the_previous_day])->sum('grand_total');
|
||||
|
||||
/**
|
||||
* @Author: xelz
|
||||
* @Date: 2024-01-30 15:52:41
|
||||
* @Desc: constant status
|
||||
* 1 netral
|
||||
* 2 plus
|
||||
* 3 minus
|
||||
*/
|
||||
$statusCalculation = 1;
|
||||
|
||||
// calculate percentage of sales growth in the last month and this month
|
||||
if ($penjualanKemarin != 0) {
|
||||
$statusCalculation = 2;
|
||||
$percentageOfSalesGrowth = ($penjualanHariIni - $penjualanKemarin) / $penjualanKemarin * 100;
|
||||
// minus or not
|
||||
if ($percentageOfSalesGrowth < 0) {
|
||||
$statusCalculation = 3;
|
||||
$percentageOfSalesGrowth = $percentageOfSalesGrowth * -1;
|
||||
}
|
||||
} else {
|
||||
$statusCalculation = 1;
|
||||
$percentageOfSalesGrowth = 0;
|
||||
}
|
||||
|
||||
return [
|
||||
'penjualanHariIni' => $penjualanHariIni,
|
||||
'penjualanKemarin' => $penjualanKemarin,
|
||||
'statusCalculation' => $statusCalculation,
|
||||
'percentageOfSalesGrowth' => $percentageOfSalesGrowth
|
||||
];
|
||||
}
|
||||
|
||||
private function calculatePengeluaranBulan()
|
||||
{
|
||||
// tanggal bulan ini
|
||||
$first_day_of_the_current_month = Carbon::today()->startOfMonth();
|
||||
$last_day_of_the_current_month = $first_day_of_the_current_month->copy()->endOfMonth();
|
||||
|
||||
// tanggal bulan lalu
|
||||
$first_day_of_the_previous_month = $first_day_of_the_current_month->copy()->subMonth()->startOfMonth();
|
||||
$last_day_of_the_previous_month = $first_day_of_the_current_month->copy()->subMonth()->endOfMonth();
|
||||
|
||||
// get data jumlah penjualan keseluruhan dalam satu bulan
|
||||
$penjualanSatuBulan = pengeluaran::whereBetween('tanggal', [$first_day_of_the_current_month, $last_day_of_the_current_month])->sum('nominal');
|
||||
$penjualanBulanLalu = pengeluaran::whereBetween('tanggal', [$first_day_of_the_previous_month, $last_day_of_the_previous_month])->sum('nominal');
|
||||
|
||||
/**
|
||||
* @Author: xelz
|
||||
* @Date: 2024-01-30 15:52:41
|
||||
* @Desc: constant status
|
||||
* 1 netral
|
||||
* 2 plus
|
||||
* 3 minus
|
||||
*/
|
||||
$statusCalculation = 1;
|
||||
|
||||
// calculate percentage of sales growth in the last month and this month
|
||||
if ($penjualanBulanLalu != 0) {
|
||||
$statusCalculation = 2;
|
||||
$percentageOfSalesGrowth = ($penjualanSatuBulan - $penjualanBulanLalu) / $penjualanBulanLalu * 100;
|
||||
// minus or not
|
||||
if ($percentageOfSalesGrowth < 0) {
|
||||
$statusCalculation = 3;
|
||||
$percentageOfSalesGrowth = $percentageOfSalesGrowth * -1;
|
||||
}
|
||||
} else {
|
||||
$statusCalculation = 1;
|
||||
$percentageOfSalesGrowth = 0;
|
||||
}
|
||||
|
||||
return [
|
||||
'penjualanSatuBulan' => $penjualanSatuBulan,
|
||||
'penjualanBulanLalu' => $penjualanBulanLalu,
|
||||
'statusCalculation' => $statusCalculation,
|
||||
'percentageOfSalesGrowth' => $percentageOfSalesGrowth
|
||||
];
|
||||
}
|
||||
|
||||
private function calculatePengeluaranHari()
|
||||
{
|
||||
// tanggal hari ini
|
||||
$first_day_of_the_current_day = Carbon::today()->startOfDay();
|
||||
|
||||
$last_day_of_the_current_day = $first_day_of_the_current_day->copy()->endOfDay();
|
||||
|
||||
// tanggal kemarin
|
||||
$first_day_of_the_previous_day = $first_day_of_the_current_day->copy()->subDay()->startOfDay();
|
||||
$last_day_of_the_previous_day = $first_day_of_the_current_day->copy()->subDay()->endOfDay();
|
||||
|
||||
// get data jumlah penjualan keseluruhan dalam satu bulan
|
||||
$penjualanHariIni = Pengeluaran::whereBetween('tanggal', [$first_day_of_the_current_day, $last_day_of_the_current_day])->sum('nominal');
|
||||
$penjualanKemarin = pengeluaran::whereBetween('tanggal', [$first_day_of_the_previous_day, $last_day_of_the_previous_day])->sum('nominal');
|
||||
|
||||
/**
|
||||
* @Author: xelz
|
||||
* @Date: 2024-01-30 15:52:41
|
||||
* @Desc: constant status
|
||||
* 1 netral
|
||||
* 2 plus
|
||||
* 3 minus
|
||||
*/
|
||||
$statusCalculation = 1;
|
||||
|
||||
// calculate percentage of sales growth in the last month and this month
|
||||
if ($penjualanKemarin != 0) {
|
||||
$statusCalculation = 2;
|
||||
$percentageOfSalesGrowth = ($penjualanHariIni - $penjualanKemarin) / $penjualanKemarin * 100;
|
||||
|
||||
// minus or not
|
||||
if ($percentageOfSalesGrowth < 0) {
|
||||
$statusCalculation = 3;
|
||||
$percentageOfSalesGrowth = $percentageOfSalesGrowth * -1;
|
||||
}
|
||||
} else {
|
||||
$statusCalculation = 1;
|
||||
$percentageOfSalesGrowth = 0;
|
||||
}
|
||||
|
||||
return [
|
||||
'penjualanHariIni' => $penjualanHariIni,
|
||||
'penjualanKemarin' => $penjualanKemarin,
|
||||
'statusCalculation' => $statusCalculation,
|
||||
'percentageOfSalesGrowth' => $percentageOfSalesGrowth
|
||||
];
|
||||
}
|
||||
|
||||
public function getChart()
|
||||
{
|
||||
$allPenjualan = Pesanan::sum('grand_total');
|
||||
|
||||
$weekThisMonth = $this->getDataEachWeekThisMonth();
|
||||
$weekLastMonth = $this->getDataEachWeekLastMonth();
|
||||
|
||||
return ResponseFormatter::success(['allPenjualan' => $allPenjualan, 'weekThisMonth' => $weekThisMonth, 'weekLastMonth' => $weekLastMonth]);
|
||||
}
|
||||
|
||||
private function getDataEachWeekThisMonth()
|
||||
{
|
||||
//format string
|
||||
$f = 'Y-m-d';
|
||||
|
||||
//if you want to record time as well, then replace today() with now()
|
||||
//and remove startOfDay()
|
||||
$today = Carbon::today();
|
||||
$date = $today->copy()->firstOfMonth()->startOfDay();
|
||||
$eom = $today->copy()->endOfMonth()->startOfDay();
|
||||
|
||||
$dates = [];
|
||||
|
||||
for ($i = 1; $date->lte($eom); $i++) {
|
||||
|
||||
//record start date
|
||||
$startDate = $date->copy();
|
||||
|
||||
//loop to end of the week while not crossing the last date of month
|
||||
while ($date->dayOfWeek != Carbon::SUNDAY && $date->lte($eom)) {
|
||||
$date->addDay();
|
||||
}
|
||||
|
||||
$dates['Minggu ke ' . $i] = $startDate->format($f) . ' 00:00:00 |' . $date->format($f) . ' 23:59:59';
|
||||
$date->addDay();
|
||||
}
|
||||
|
||||
$datapenjualan = [];
|
||||
|
||||
foreach ($dates as $key => $value) {
|
||||
$dataPenjualan = Pesanan::whereBetween('tanggal_pesanan', explode('|', $value))->sum('grand_total');
|
||||
|
||||
|
||||
$datapenjualan[$key] = $dataPenjualan;
|
||||
}
|
||||
|
||||
return $datapenjualan;
|
||||
}
|
||||
|
||||
private function getDataEachWeekLastMonth()
|
||||
{
|
||||
//format string
|
||||
$f = 'Y-m-d';
|
||||
|
||||
//if you want to record time as well, then replace today() with now()
|
||||
//and remove startOfDay()
|
||||
$today = Carbon::today()->subMonth();
|
||||
$date = $today->copy()->firstOfMonth()->startOfDay();
|
||||
$eom = $today->copy()->endOfMonth()->startOfDay();
|
||||
|
||||
$dates = [];
|
||||
|
||||
for ($i = 1; $date->lte($eom); $i++) {
|
||||
|
||||
//record start date
|
||||
$startDate = $date->copy();
|
||||
|
||||
//loop to end of the week while not crossing the last date of month
|
||||
while ($date->dayOfWeek != Carbon::SUNDAY && $date->lte($eom)) {
|
||||
$date->addDay();
|
||||
}
|
||||
|
||||
$dates['Minggu ke ' . $i] = $startDate->format($f) . ' 00:00:00 |' . $date->format($f) . ' 23:59:59';
|
||||
$date->addDay();
|
||||
}
|
||||
|
||||
$datapenjualan = [];
|
||||
foreach ($dates as $key => $value) {
|
||||
$dataPenjualan = Pesanan::whereBetween('tanggal_pesanan', explode('|', $value))->sum('grand_total');
|
||||
$datapenjualan[$key] = $dataPenjualan;
|
||||
}
|
||||
|
||||
return $datapenjualan;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,155 @@
|
|||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Admins\Pengeluaran;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Models\BukuBesar;
|
||||
use App\Models\Pengeluaran;
|
||||
use App\Models\RekeningCoa;
|
||||
use Carbon\Carbon;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
|
||||
class PengeluaranController extends Controller
|
||||
{
|
||||
/**
|
||||
* Display a listing of the resource.
|
||||
*/
|
||||
public function index()
|
||||
{
|
||||
$coaBiaya = RekeningCoa::where('kode_coa', 5)->get();
|
||||
$rekeningCoaTf = RekeningCoa::where('kode_coa', 1)->where('sub_kode_coa', 200)->get();
|
||||
|
||||
return view('pages.admin.pengeluaran.index', compact('coaBiaya', 'rekeningCoaTf'));
|
||||
}
|
||||
|
||||
public function simpan(Request $request)
|
||||
{
|
||||
try {
|
||||
DB::beginTransaction();
|
||||
|
||||
$user = request()->user();
|
||||
|
||||
Pengeluaran::create([
|
||||
'faktur' => "PG-" . date('YmdHis'),
|
||||
'tanggal' => $request->tanggal,
|
||||
'jenis_transaksi' => $request->jenis_transaksi,
|
||||
'nominal' => $request->nominal,
|
||||
'keterangan' => $request->keterangan,
|
||||
'user_id' => $user->id
|
||||
]);
|
||||
if ($request->jenis_transaksi == "1") {
|
||||
BukuBesar::create([
|
||||
'faktur' => "PG-" . date('YmdHis'),
|
||||
'tanggal' => $request->tanggal,
|
||||
'rekening_coa_id' => "2",
|
||||
'kode_rekening_coa' => "1.100.01",
|
||||
'keterangan_coa' => "Kas Kasir",
|
||||
'keterangan' => $request->keterangan,
|
||||
'debet' => 0,
|
||||
'kredit' => $request->nominal
|
||||
]);
|
||||
BukuBesar::create([
|
||||
'faktur' => "PG-" . date('YmdHis'),
|
||||
'tanggal' => $request->tanggal,
|
||||
'rekening_coa_id' => $request->id_rekening_coa,
|
||||
'kode_rekening_coa' => $request->kode_coa,
|
||||
'keterangan_coa' => $request->keterangan_coa,
|
||||
'keterangan' => $request->keterangan,
|
||||
'debet' => $request->nominal,
|
||||
'kredit' => 0,
|
||||
]);
|
||||
} else {
|
||||
BukuBesar::create([
|
||||
'faktur' => "PG-" . date('YmdHis'),
|
||||
'tanggal' => $request->tanggal,
|
||||
'rekening_coa_id' => $request->id_rekening_coa_transfer,
|
||||
'kode_rekening_coa' => $request->kode_coa_transfer,
|
||||
'keterangan_coa' => $request->keterangan_coa_transfer,
|
||||
'keterangan' => $request->keterangan,
|
||||
'debet' => 0,
|
||||
'kredit' => $request->nominal
|
||||
]);
|
||||
BukuBesar::create([
|
||||
'faktur' => "PG-" . date('YmdHis'),
|
||||
'tanggal' => $request->tanggal,
|
||||
'rekening_coa_id' => $request->id_rekening_coa,
|
||||
'kode_rekening_coa' => $request->kode_coa,
|
||||
'keterangan_coa' => $request->keterangan_coa,
|
||||
'keterangan' => $request->keterangan,
|
||||
'debet' => $request->nominal,
|
||||
'kredit' => 0,
|
||||
]);
|
||||
}
|
||||
|
||||
DB::commit();
|
||||
|
||||
return response()->json(['status' => true, 'message' => 'Data berhasil tersimpan']);
|
||||
} catch (\Throwable $th) {
|
||||
DB::rollBack();
|
||||
|
||||
dd($th->getMessage());
|
||||
return response()->json(['status' => false, 'message' => 'Kesalahan menyimpan data']);
|
||||
}
|
||||
}
|
||||
|
||||
public function laporan(Request $request)
|
||||
{
|
||||
$mpdf = new \Mpdf\Mpdf([
|
||||
'mode' => 'utf-8',
|
||||
'format' => 'A4',
|
||||
'orientation' => 'portrait',
|
||||
'margin_left' => 15,
|
||||
'margin_right' => 15,
|
||||
'margin_top' => 10,
|
||||
'margin_bottom' => 10,
|
||||
'default_font_size' => 9,
|
||||
'default_font' => 'arial',
|
||||
]);
|
||||
$mpdf->AddPage();
|
||||
$mpdf->setFooter('{PAGENO}');
|
||||
|
||||
$data = Pengeluaran::with('user')->whereDate('tanggal', '>=', $request->filter_tanggal_1)
|
||||
->whereDate('tanggal', '<=', $request->filter_tanggal_2)
|
||||
->get();
|
||||
$html = view('pages.admin.pengeluaran.laporan', [
|
||||
'data' => $data,
|
||||
'filter_tanggal_1' => $request->filter_tanggal_1,
|
||||
'filter_tanggal_2' => $request->filter_tanggal_2,
|
||||
]);
|
||||
$mpdf->writeHTML($html);
|
||||
$mpdf->Output('Laporan_Pengeluaran.pdf', 'I');
|
||||
return response()->header('Content-Type', 'application/pdf');
|
||||
}
|
||||
|
||||
public function getDatapengeluaran(Request $request)
|
||||
{
|
||||
$nomor = 1;
|
||||
$filter_tanggal_1 = $request->filter_tanggal_1;
|
||||
$filter_tanggal_2 = $request->filter_tanggal_2;
|
||||
$data = Pengeluaran::with('user')
|
||||
->when($filter_tanggal_1, function ($query) use ($filter_tanggal_1) {
|
||||
return $query->whereDate('tanggal', '>=', $filter_tanggal_1);
|
||||
})
|
||||
->when($filter_tanggal_2, function ($query) use ($filter_tanggal_2) {
|
||||
return $query->whereDate('tanggal', '<=', $filter_tanggal_2);
|
||||
})
|
||||
->when(!$filter_tanggal_1 && !$filter_tanggal_2, function ($query) {
|
||||
return $query->whereDate('tanggal', Carbon::today());
|
||||
})
|
||||
->orderBy('tanggal', 'desc')
|
||||
->get();
|
||||
return datatables()
|
||||
->of($data)
|
||||
->addColumn('nomor', function ($data) use (&$nomor) {
|
||||
return $nomor++;
|
||||
})
|
||||
->addColumn('ubah', function ($data) {
|
||||
return '<div class="btn-group">
|
||||
<a href="javascript:void(0)" onclick="detail(\'' . $data->id . '\')"><span class="btn btn-xs btn-warning mr-1"><i class="fas fa-eye"></i></span></a>
|
||||
<a href="javascript:void(0)" onclick="print(\'' . $data->id . '\')"><span class="btn btn-xs btn-success"><i class="fas fa-print"></i></span></a></div>';
|
||||
})
|
||||
->rawColumns(['ubah'])
|
||||
->make(true);
|
||||
}
|
||||
}
|
|
@ -29,7 +29,7 @@ class RoleController extends Controller
|
|||
// call table user with pagination
|
||||
$datas = Role::latest()->paginate(10);
|
||||
|
||||
return view('pages.admins.roles.index', compact('datas'));
|
||||
return view('pages.admin.roles.index', compact('datas'));
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -38,7 +38,7 @@ class RoleController extends Controller
|
|||
public function create()
|
||||
{
|
||||
$permissions = Permission::all()->groupBy('group_name');
|
||||
return view('pages.admins.roles.create', compact('permissions'));
|
||||
return view('pages.admin.roles.create', compact('permissions'));
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -48,36 +48,28 @@ class RoleController extends Controller
|
|||
{
|
||||
// validation
|
||||
$rules = array(
|
||||
'name' => 'required',
|
||||
'email' => 'required|email',
|
||||
'password' => 'required|min:8'
|
||||
'name' => 'required|unique:roles',
|
||||
'permission' => 'required|min:8',
|
||||
);
|
||||
$validator = Validator::make($request->all(), $rules);
|
||||
|
||||
// check validation
|
||||
if ($validator->fails()) {
|
||||
return Redirect::to('admin/roles/create')
|
||||
return Redirect::to('roles/create')
|
||||
->withErrors($validator)
|
||||
->withInput($request->except('password'));
|
||||
} else {
|
||||
// create new account
|
||||
$user = Role::create([
|
||||
'name' => $request->name,
|
||||
'email' => $request->email,
|
||||
'password' => bcrypt($request->password),
|
||||
]);
|
||||
|
||||
// Create role for user
|
||||
$role = Role::findOrFail($request->role); // Pengunjung
|
||||
$user->assignRole($role);
|
||||
$role = Role::create(['name' => $request->input('name')]);
|
||||
$role->syncPermissions($request->get('permission'));
|
||||
|
||||
// Create Session message
|
||||
Session::flash('roles-message', [
|
||||
'type' => 'success',
|
||||
'msg' => 'Anda berhasil menambahkan data!'
|
||||
'msg' => 'Berhasil menambah data!'
|
||||
]);
|
||||
|
||||
return Redirect::to('admin/roles');
|
||||
return Redirect::to('roles');
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -100,7 +92,7 @@ class RoleController extends Controller
|
|||
$permissions = Permission::get()->groupBy('group_name');
|
||||
|
||||
// call view pages
|
||||
return view('pages.admins.roles.edit', compact('role', 'permissions', 'rolePermissions'));
|
||||
return view('pages.admin.roles.edit', compact('role', 'permissions', 'rolePermissions'));
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -110,14 +102,14 @@ class RoleController extends Controller
|
|||
{
|
||||
// validation
|
||||
$rules = array(
|
||||
'name' => 'required|min:5',
|
||||
'name' => 'required|unique:roles,name,' . $id . ',id',
|
||||
'permission' => 'required|min:8',
|
||||
);
|
||||
$validator = Validator::make($request->all(), $rules);
|
||||
|
||||
// process the login
|
||||
if ($validator->fails()) {
|
||||
return Redirect::to('admin/roles/edit/' . $id)
|
||||
return Redirect::to('roles/edit/' . $id)
|
||||
->withErrors($validator)
|
||||
->withInput();
|
||||
} else {
|
||||
|
@ -129,10 +121,10 @@ class RoleController extends Controller
|
|||
// Create Session message
|
||||
Session::flash('roles-message', [
|
||||
'type' => 'success',
|
||||
'msg' => 'Anda berhasil mengubah data!'
|
||||
'msg' => 'Berhasil mengubah data!'
|
||||
]);
|
||||
|
||||
return Redirect::to('admin/roles');
|
||||
return Redirect::to('roles');
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -2,10 +2,13 @@
|
|||
|
||||
namespace App\Http\Controllers\Admins\Users;
|
||||
|
||||
use App\Helpers\ResponseFormatter;
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Models\User;
|
||||
use GuzzleHttp\Psr7\Response;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\Auth;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use Illuminate\Support\Facades\Redirect;
|
||||
use Illuminate\Support\Facades\Session;
|
||||
use Illuminate\Support\Facades\Validator;
|
||||
|
@ -19,21 +22,36 @@ class UserController extends Controller
|
|||
*/
|
||||
public function index()
|
||||
{
|
||||
// call table user with pagination
|
||||
$users = User::latest()->paginate(10);
|
||||
|
||||
return view('pages.admins.users.index', compact('users'));
|
||||
}
|
||||
|
||||
/**
|
||||
* Show the form for creating a new resource.
|
||||
*/
|
||||
public function create()
|
||||
{
|
||||
// fetch data role
|
||||
$roles = Role::latest()->get();
|
||||
|
||||
// call view users.create
|
||||
return view('pages.admins.users.create', compact('roles'));
|
||||
return view('pages.admin.users.index', compact('roles'));
|
||||
}
|
||||
|
||||
public function getDataUser()
|
||||
{
|
||||
$users = User::with('role')->latest()->get();
|
||||
|
||||
return datatables()->of($users)
|
||||
->addColumn('rolenya', function ($users) {
|
||||
$roles = '';
|
||||
foreach ($users->role as $role) {
|
||||
$roles .= '<span class="badge badge-primary">' . $role->name . '</span> ';
|
||||
}
|
||||
return $roles;
|
||||
})
|
||||
->addColumn('action', function ($users) {
|
||||
return '
|
||||
<button class="btn btn-sm btn-warning btn-edit-user" data-user=' . $users . '><i class="fas fa-edit"></i></button>
|
||||
<button class="btn btn-sm btn-danger btn-hapus-user" data-user=' . $users . '><i class="fas fa-trash"></i></button>
|
||||
';
|
||||
})
|
||||
->addColumn('updated_atnya', function ($users) {
|
||||
return tanggal_indonesia($users->updated_at) . ' ' . $users->updated_at->format('H:i:s');
|
||||
})
|
||||
->rawColumns(['action' => 'action', 'rolenya' => 'rolenya', 'updated_atnya' => 'updated_atnya'])
|
||||
->addIndexColumn()
|
||||
->make(true);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -42,19 +60,30 @@ class UserController extends Controller
|
|||
public function store(Request $request)
|
||||
{
|
||||
// validation
|
||||
$rules = array(
|
||||
$validator = Validator::make($request->all(), [
|
||||
'name' => 'required',
|
||||
'email' => 'required|email',
|
||||
'password' => 'required|min:8'
|
||||
);
|
||||
$validator = Validator::make($request->all(), $rules);
|
||||
'email' => 'required|email|unique:users',
|
||||
'password' => 'required|min:8|confirmed',
|
||||
'role_id' => 'required'
|
||||
], [
|
||||
'name.required' => 'Nama tidak boleh kosong!',
|
||||
'email.required' => 'Email tidak boleh kosong!',
|
||||
'email.email' => 'Email tidak valid!',
|
||||
'email.unique' => 'Email sudah terdaftar!',
|
||||
'password.required' => 'Password tidak boleh kosong!',
|
||||
'password.min' => 'Password minimal 8 karakter!',
|
||||
'password.confirmed' => 'Password tidak sama!',
|
||||
'role_id.required' => 'Role tidak boleh kosong!',
|
||||
]);
|
||||
|
||||
// check validation
|
||||
if ($validator->fails()) {
|
||||
return Redirect::to('admin/users/create')
|
||||
->withErrors($validator)
|
||||
->withInput($request->except('password'));
|
||||
} else {
|
||||
return ResponseFormatter::error($validator->errors()->first());
|
||||
}
|
||||
|
||||
try {
|
||||
DB::beginTransaction();
|
||||
|
||||
// create new account
|
||||
$user = User::create([
|
||||
'name' => $request->name,
|
||||
|
@ -63,16 +92,15 @@ class UserController extends Controller
|
|||
]);
|
||||
|
||||
// Create role for user
|
||||
$role = Role::findOrFail($request->role); // Pengunjung
|
||||
$user->assignRole($role);
|
||||
|
||||
// Create Session message
|
||||
Session::flash('users-message', [
|
||||
'type' => 'success',
|
||||
'msg' => 'Anda berhasil menambahkan data!'
|
||||
]);
|
||||
|
||||
return Redirect::to('admin/users');
|
||||
foreach ($request->role_id as $key => $value) {
|
||||
$role = Role::findOrFail($value); // Pengunjung
|
||||
$user->assignRole($role);
|
||||
}
|
||||
DB::commit();
|
||||
return ResponseFormatter::success($user, "User berhasil ditambahkan");
|
||||
} catch (\Throwable $th) {
|
||||
DB::rollBack();
|
||||
return ResponseFormatter::error($th->getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -90,11 +118,10 @@ class UserController extends Controller
|
|||
public function edit(string $id)
|
||||
{
|
||||
// get data from user
|
||||
$user = User::findOrFail($id);
|
||||
$roles = Role::latest()->get();
|
||||
|
||||
// call view pages
|
||||
return view('pages.admins.users.edit', compact('user', 'roles'));
|
||||
$user = User::with('role')->findOrFail($id);
|
||||
return ResponseFormatter::success([
|
||||
'user' => $user
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -103,45 +130,54 @@ class UserController extends Controller
|
|||
public function update(Request $request, string $id)
|
||||
{
|
||||
// validation
|
||||
$rules = array(
|
||||
'name' => 'required|min:5',
|
||||
'password' => 'required|min:8',
|
||||
);
|
||||
$validator = Validator::make($request->all(), $rules);
|
||||
$validator = Validator::make($request->all(), [
|
||||
'name_edit' => 'required',
|
||||
'email_edit' => 'required|email|unique:users,email,' . $id,
|
||||
'role_id_edit' => 'required'
|
||||
], [
|
||||
'name_edit.required' => 'Nama tidak boleh kosong!',
|
||||
'email_edit.required' => 'Email tidak boleh kosong!',
|
||||
'email_edit.email' => 'Email tidak valid!',
|
||||
'email_edit.unique' => 'Email sudah terdaftar!',
|
||||
'role_id.required' => 'Role tidak boleh kosong!',
|
||||
]);
|
||||
|
||||
// process the login
|
||||
// check validation
|
||||
if ($validator->fails()) {
|
||||
return Redirect::to('admin/users/edit/' . $id)
|
||||
->withErrors($validator)
|
||||
->withInput($request->except('password'));
|
||||
} else {
|
||||
return ResponseFormatter::error($validator->errors()->first());
|
||||
}
|
||||
|
||||
try {
|
||||
DB::beginTransaction();
|
||||
|
||||
// create new account
|
||||
$user = User::findOrFail($id);
|
||||
if (!$user) {
|
||||
// Create Session message
|
||||
Session::flash('users-message', [
|
||||
'type' => 'warning',
|
||||
'msg' => 'Data pengguna tidak ditemukan!'
|
||||
]);
|
||||
|
||||
return Redirect::to('admin/users');
|
||||
}
|
||||
$user->update([
|
||||
'name' => $request->name,
|
||||
'password' => bcrypt($request->password),
|
||||
'name' => $request->name_edit,
|
||||
'email' => $request->email_edit,
|
||||
]);
|
||||
|
||||
// Update role for user
|
||||
$user->removeRole($user->roles[0]->name);
|
||||
$user->assignRole($request->role);
|
||||
// Password change
|
||||
if ($request->password_edit) {
|
||||
$user->update([
|
||||
'password' => bcrypt($request->password_edit),
|
||||
]);
|
||||
}
|
||||
|
||||
// Create Session message
|
||||
Session::flash('users-message', [
|
||||
'type' => 'success',
|
||||
'msg' => 'Anda berhasil mengubah data!'
|
||||
]);
|
||||
// Delete role for user
|
||||
$user->roles()->detach();
|
||||
|
||||
return Redirect::to('admin/users');
|
||||
// Assing role for user
|
||||
foreach ($request->role_id_edit as $key => $value) {
|
||||
$role = Role::findOrFail($value); // Pengunjung
|
||||
$user->assignRole($role);
|
||||
}
|
||||
|
||||
DB::commit();
|
||||
return ResponseFormatter::success($user, "User berhasil diubah");
|
||||
} catch (\Throwable $th) {
|
||||
DB::rollBack();
|
||||
return ResponseFormatter::error($th->getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -150,29 +186,17 @@ class UserController extends Controller
|
|||
*/
|
||||
public function destroy(string $id)
|
||||
{
|
||||
// get data from role
|
||||
$role = Role::findOrFail($id);
|
||||
// get data from user
|
||||
$user = User::findOrFail($id);
|
||||
|
||||
// check role
|
||||
if (!$role) {
|
||||
// Create Session message
|
||||
Session::flash('roles-message', [
|
||||
'type' => 'warning',
|
||||
'msg' => 'Data pengguna tidak ditemukan!'
|
||||
]);
|
||||
|
||||
return Redirect::to('admin/roles');
|
||||
// check user
|
||||
if (!$user) {
|
||||
return ResponseFormatter::error("Data pengguna tidak ditemukan!");
|
||||
}
|
||||
|
||||
// delete role
|
||||
$role->delete();
|
||||
// delete user
|
||||
$user->delete();
|
||||
|
||||
// Create Session message
|
||||
Session::flash('roles-message', [
|
||||
'type' => 'success',
|
||||
'msg' => 'Anda berhasil menghapus data!'
|
||||
]);
|
||||
|
||||
return Redirect::to('admin/roles');
|
||||
return ResponseFormatter::success(null, "User berhasil dihapus!");
|
||||
}
|
||||
}
|
||||
|
|
|
@ -102,12 +102,15 @@ class AuthController extends Controller
|
|||
|
||||
try {
|
||||
if (Auth::attempt($validator->validated(), $request->has('remember_me') ? true : false)) {
|
||||
$user = auth()->user();
|
||||
session()->put('id', $user->id);
|
||||
session()->put('name', $user->name);
|
||||
Session::flash('login-message', [
|
||||
'type' => 'success',
|
||||
'msg' => 'Anda berhasil melakukan Login!'
|
||||
]);
|
||||
|
||||
return redirect()->intended('/transaksi');
|
||||
return Redirect::to($this->redirectTo());
|
||||
}
|
||||
|
||||
// Create Session message
|
||||
|
@ -130,6 +133,23 @@ class AuthController extends Controller
|
|||
}
|
||||
}
|
||||
|
||||
public function redirectTo()
|
||||
{
|
||||
$role = Auth::user()->role;
|
||||
switch ($role[0]->name) {
|
||||
case 'Admin':
|
||||
return '/dashboard';
|
||||
break;
|
||||
case 'Kasir':
|
||||
return '/transaksi';
|
||||
break;
|
||||
|
||||
default:
|
||||
return '/transaksi';
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Logout and back to form login
|
||||
*/
|
||||
|
|
|
@ -22,15 +22,15 @@ class History extends Controller
|
|||
$filter_tanggal_2 = $request->filter_tanggal_2;
|
||||
$data = Pesanan::with(['detailPesanan', 'user'])
|
||||
->when($filter_tanggal_1, function ($query) use ($filter_tanggal_1) {
|
||||
return $query->whereDate('created_at', '>=', $filter_tanggal_1);
|
||||
return $query->whereDate('tanggal_pesanan', '>=', $filter_tanggal_1);
|
||||
})
|
||||
->when($filter_tanggal_2, function ($query) use ($filter_tanggal_2) {
|
||||
return $query->whereDate('created_at', '<=', $filter_tanggal_2);
|
||||
return $query->whereDate('tanggal_pesanan', '<=', $filter_tanggal_2);
|
||||
})
|
||||
->when(!$filter_tanggal_1 && !$filter_tanggal_2, function ($query) {
|
||||
return $query->whereDate('created_at', Carbon::today());
|
||||
return $query->whereDate('tanggal_pesanan', Carbon::today());
|
||||
})
|
||||
->orderBy('created_at', 'desc')
|
||||
->orderBy('tanggal_pesanan', 'desc')
|
||||
->get();
|
||||
|
||||
return datatables()
|
||||
|
@ -70,7 +70,8 @@ class History extends Controller
|
|||
return view('pages.Kasir.print_dapur', compact('pesanan'));
|
||||
}
|
||||
|
||||
public function getDataDetailHistory(Request $request){
|
||||
public function getDataDetailHistory(Request $request)
|
||||
{
|
||||
$data = DetailPesanan::with('pesanan')->where('pesanan_id', $request->id_pesanan)->get();
|
||||
|
||||
return response()->json(['status' => true, 'data' => $data]);
|
||||
|
|
|
@ -3,20 +3,37 @@
|
|||
namespace App\Http\Controllers\Kasir;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Models\KategoriProduk;
|
||||
use App\Models\KelompokKategori;
|
||||
use App\Models\KelompokKategoriPivot;
|
||||
use App\Models\Pesanan;
|
||||
use App\Models\Produk;
|
||||
use Carbon\Carbon;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\Redirect;
|
||||
use Illuminate\Support\Facades\Session;
|
||||
use Illuminate\Support\Facades\Validator;
|
||||
|
||||
class Menu extends Controller
|
||||
{
|
||||
public function index()
|
||||
{
|
||||
return view('pages.Menu.index');
|
||||
// return $data = KelompokKategoriPivot::with(['kelompokKategori', 'produk'])->first();
|
||||
$kategori_produks = KategoriProduk::get();
|
||||
|
||||
return view('pages.Menu.index', compact('kategori_produks'));
|
||||
}
|
||||
|
||||
public function kelompokKategori($id) {
|
||||
$kelompok_kategoris = KelompokKategori::where('kategori_produk_id', $id)->get();
|
||||
|
||||
return $kelompok_kategoris;
|
||||
}
|
||||
|
||||
public function getDataMenu()
|
||||
{
|
||||
$data = Produk::with(['kategori_produk'])->get();
|
||||
// $data = Produk::with(['kategori_produk'])->get();
|
||||
$data = KelompokKategoriPivot::with(['kelompokKategori', 'produk'])->get();
|
||||
$nomor = 1;
|
||||
|
||||
return $datatables = datatables()
|
||||
|
@ -24,15 +41,117 @@ class Menu extends Controller
|
|||
->addColumn('nomor', function ($data) use (&$nomor) {
|
||||
return $nomor++;
|
||||
})
|
||||
->addColumn('kode_produk', function ($data) {
|
||||
return $data->produk->kode_produk;
|
||||
})
|
||||
->addColumn('nama_produk', function ($data) {
|
||||
return $data->produk->nama_produk;
|
||||
})
|
||||
->addColumn('harga_produk', function ($data) {
|
||||
return $data->produk->harga_produk;
|
||||
})
|
||||
->addColumn('nama_kelompok_kategori', function ($data) {
|
||||
return $data->kelompokKategori->nama_kelompok_kategori;
|
||||
})
|
||||
->addColumn('kategori_produk', function ($data) {
|
||||
return $data->kategori_produk->nama_kategori_produk;
|
||||
return $data->produk->kategori_produk->nama_kategori_produk;
|
||||
})
|
||||
->addColumn('ubah', function ($data) {
|
||||
return '<div class="btn-group">
|
||||
<a href="javascript:void(0)" onclick="print(\'' . $data->id . '\')"><span class="btn btn-xs btn-success"><i class="fas fa-print"></i></span></a>
|
||||
<a href="javascript:void(0)" onclick="editMenu(\'' . $data->id . '\')">
|
||||
<span class="btn btn-md btn-warning"><i class="fas fa-edit"></i> Edit</span>
|
||||
</a>
|
||||
</div>';
|
||||
})
|
||||
->rawColumns(['nomor', 'kode_produk', 'ubah'])
|
||||
->rawColumns(['nomor', 'ubah'])
|
||||
->make(true);
|
||||
}
|
||||
|
||||
// Tambah Menu
|
||||
public function store(Request $request) {
|
||||
// validation
|
||||
$rules = array(
|
||||
'kategori_produk' => 'required',
|
||||
'kelompok_produk' => 'required',
|
||||
'kode_produk' => 'required',
|
||||
'nama_produk' => 'required',
|
||||
'harga_produk' => 'required',
|
||||
'tersedia' => 'required',
|
||||
'deskripsi_produk' => 'required',
|
||||
);
|
||||
$validator = Validator::make($request->all(), $rules);
|
||||
|
||||
// check validation
|
||||
if ($validator->fails()) {
|
||||
// If validation fails, return with errors
|
||||
return response()->json(['errors' => $validator->errors()], 422);
|
||||
} else {
|
||||
// create product
|
||||
$produk = Produk::create([
|
||||
'kategori_produk_id' => $request->kategori_produk,
|
||||
'kode_produk' => $request->kode_produk,
|
||||
'nama_produk' => $request->nama_produk,
|
||||
'harga_produk' => $request->harga_produk,
|
||||
'tersedia' => $request->tersedia,
|
||||
'deskripsi_produk' => $request->deskripsi_produk,
|
||||
'created_at' => Carbon::now()
|
||||
]);
|
||||
|
||||
$pivot_produk = KelompokKategoriPivot::create([
|
||||
'kelompok_kategori_id' => $request->kelompok_produk,
|
||||
'produk_id' => $produk->id,
|
||||
'created_at' => Carbon::now()
|
||||
]);
|
||||
|
||||
// Return a success response
|
||||
return response()->json(['message' => 'Data created successfully']);
|
||||
}
|
||||
}
|
||||
|
||||
public function show($id) {
|
||||
$data = KelompokKategoriPivot::with(['kelompokKategori', 'produk'])->findOrFail($id);
|
||||
return response()->json($data);
|
||||
}
|
||||
|
||||
// Ubah Menu
|
||||
public function update(Request $request, $id) {
|
||||
// validation
|
||||
$rules = array(
|
||||
'kategori_produk' => 'required',
|
||||
'kelompok_produk' => 'required',
|
||||
'kode_produk' => 'required',
|
||||
'nama_produk' => 'required',
|
||||
'harga_produk' => 'required',
|
||||
'tersedia' => 'required',
|
||||
'deskripsi_produk' => 'required',
|
||||
);
|
||||
$validator = Validator::make($request->all(), $rules);
|
||||
|
||||
// check validation
|
||||
if ($validator->fails()) {
|
||||
// If validation fails, return with errors
|
||||
return response()->json(['errors' => $validator->errors()], 422);
|
||||
} else {
|
||||
$pivot = KelompokKategoriPivot::findOrFail($id);
|
||||
$produk = Produk::find($pivot->produk_id);
|
||||
|
||||
// update pivot produk
|
||||
$pivot->update([
|
||||
'kelompok_ketegori_id' => $request->kelompok_produk,
|
||||
]);
|
||||
|
||||
// update produk
|
||||
$produk->update([
|
||||
'kategori_produk_id' => $request->kategori_produk,
|
||||
'kode_produk' => $request->kode_produk,
|
||||
'nama_produk' => $request->nama_produk,
|
||||
'harga_produk' => $request->harga_produk,
|
||||
'tersedia' => $request->tersedia,
|
||||
'deskripsi_produk' => $request->deskripsi_produk,
|
||||
]);
|
||||
|
||||
// Return a success response
|
||||
return response()->json(['message' => 'Data created successfully']);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -118,6 +118,8 @@ class Transaksi extends Controller
|
|||
'orderMenus.required' => 'Pesanan tidak boleh kosong',
|
||||
]);
|
||||
|
||||
$user = request()->user();
|
||||
|
||||
try {
|
||||
DB::beginTransaction();
|
||||
|
||||
|
@ -131,28 +133,50 @@ class Transaksi extends Controller
|
|||
$lastCountPesanan = Pesanan::whereDate('created_at', date('Y-m-d'))->count() + 1;
|
||||
// calculate nomor antrian
|
||||
$nomorAntrian = $lastCountPesanan;
|
||||
$pesananDatas = [
|
||||
'kode_pesanan' => $request->orderCode,
|
||||
'nama_pemesan' => $request->namaPemesan,
|
||||
'nomor_pemesan' => $request->nomorPemesan,
|
||||
'nomor_meja' => $request->nomorMeja,
|
||||
'status_pesanan' => '1',
|
||||
'tanggal_pesanan' => date('Y-m-d H:i:s'),
|
||||
'keterangan_pesanan' => $request->keteranganPesanan ?? null,
|
||||
'nomor_antrian' => $nomorAntrian,
|
||||
'total_pesanan' => $orderMenusQty,
|
||||
'total_bayar' => $orderMenusRupiah,
|
||||
'grand_total' => $request->totalDiskon,
|
||||
'nominal_bayar' => $request->nominalBayar,
|
||||
'diskon_persen' => $request->diskon,
|
||||
'nominal_kembali' => $request->kembali,
|
||||
'status_bayar' => '1',
|
||||
'user_id' => '1',
|
||||
'jenis_pembayaran' => $request->jenis_pembayaran,
|
||||
'coa_kas' => $request->coa_kas,
|
||||
];
|
||||
|
||||
$pesananModels = \App\Models\Pesanan::create($pesananDatas);
|
||||
if($request->jenis_pembayaran == "1"){
|
||||
$pesananDatas = [
|
||||
'kode_pesanan' => $request->orderCode,
|
||||
'nama_pemesan' => $request->namaPemesan,
|
||||
'nomor_pemesan' => $request->nomorPemesan,
|
||||
'nomor_meja' => $request->nomorMeja,
|
||||
'status_pesanan' => '1',
|
||||
'tanggal_pesanan' => date('Y-m-d H:i:s'),
|
||||
'keterangan_pesanan' => $request->keteranganPesanan ?? null,
|
||||
'nomor_antrian' => $nomorAntrian,
|
||||
'total_pesanan' => $orderMenusQty,
|
||||
'total_bayar' => $orderMenusRupiah,
|
||||
'grand_total' => $request->totalDiskon,
|
||||
'nominal_bayar' => $request->nominalBayar,
|
||||
'diskon_persen' => $request->diskon,
|
||||
'nominal_kembali' => $request->kembali,
|
||||
'status_bayar' => '1',
|
||||
'user_id' => $user->id,
|
||||
'jenis_pembayaran' => $request->jenis_pembayaran,
|
||||
];
|
||||
$pesananModels = \App\Models\Pesanan::create($pesananDatas);
|
||||
}else{
|
||||
$pesananDatas = [
|
||||
'kode_pesanan' => $request->orderCode,
|
||||
'nama_pemesan' => $request->namaPemesan,
|
||||
'nomor_pemesan' => $request->nomorPemesan,
|
||||
'nomor_meja' => $request->nomorMeja,
|
||||
'status_pesanan' => '1',
|
||||
'tanggal_pesanan' => date('Y-m-d H:i:s'),
|
||||
'keterangan_pesanan' => $request->keteranganPesanan ?? null,
|
||||
'nomor_antrian' => $nomorAntrian,
|
||||
'total_pesanan' => $orderMenusQty,
|
||||
'total_bayar' => $orderMenusRupiah,
|
||||
'grand_total' => $request->totalDiskon,
|
||||
'nominal_bayar' => $request->totalDiskon,
|
||||
'diskon_persen' => $request->diskon,
|
||||
'nominal_kembali' => 0,
|
||||
'status_bayar' => '1',
|
||||
'user_id' => $user->id,
|
||||
'jenis_pembayaran' => $request->jenis_pembayaran,
|
||||
];
|
||||
$pesananModels = \App\Models\Pesanan::create($pesananDatas);
|
||||
}
|
||||
|
||||
foreach ($request->orderMenus as $key => $value) {
|
||||
// calculate produk promo untuk mengurangi stok
|
||||
|
@ -181,12 +205,37 @@ class Transaksi extends Controller
|
|||
}
|
||||
|
||||
// keuangan
|
||||
// jika pembayaran tunai
|
||||
if($request->jenis_pembayaran == "1"){
|
||||
// jika pembayaran non tunai
|
||||
if($request->jenis_pembayaran == "2"){
|
||||
BukuBesar::create([
|
||||
'faktur' => 'PJ-'.date('YmdHis'),
|
||||
'tanggal' => date('Y-m-d'),
|
||||
'rekening_coa_id' => $request->id_rekening_coa,
|
||||
'pesanans_id' => $pesananModels->id,
|
||||
'kode_rekening_coa' => $request->kode_coa,
|
||||
'keterangan_coa' => $request->keterangan_coa,
|
||||
'keterangan' => 'Penjualan Non Tunai['.$request->orderCode.']',
|
||||
'debet' => $request->totalDiskon,
|
||||
'kredit' => 0
|
||||
]);
|
||||
BukuBesar::create([
|
||||
'faktur' => 'PJ-'.date('YmdHis'),
|
||||
'tanggal' => date('Y-m-d'),
|
||||
'rekening_coa_id' => "35",
|
||||
'pesanans_id' => $pesananModels->id,
|
||||
'kode_rekening_coa' => "4.100.01",
|
||||
'keterangan_coa' => "Pendapatan Penjualan",
|
||||
'keterangan' => 'Penjualan Non Tunai['.$request->orderCode.']',
|
||||
'debet' => 0,
|
||||
'kredit' => $request->totalDiskon
|
||||
]);
|
||||
// jika pembayaran tunai
|
||||
}else{
|
||||
BukuBesar::create([
|
||||
'faktur' => 'PJ-'.date('YmdHis'),
|
||||
'tanggal' => date('Y-m-d'),
|
||||
'rekening_coa_id' => "2",
|
||||
'pesanans_id' => $pesananModels->id,
|
||||
'kode_rekening_coa' => "1.100.01",
|
||||
'keterangan_coa' => "Kas Kasir",
|
||||
'keterangan' => 'Penjualan Tunai['.$request->orderCode.']',
|
||||
|
@ -197,15 +246,13 @@ class Transaksi extends Controller
|
|||
'faktur' => 'PJ-'.date('YmdHis'),
|
||||
'tanggal' => date('Y-m-d'),
|
||||
'rekening_coa_id' => "35",
|
||||
'pesanans_id' => $pesananModels->id,
|
||||
'kode_rekening_coa' => "4.100.01",
|
||||
'keterangan_coa' => "Pendapatan Penjualan",
|
||||
'keterangan' => 'Penjualan Tunai['.$request->orderCode.']',
|
||||
'debet' => 0,
|
||||
'kredit' => $request->totalDiskon
|
||||
]);
|
||||
// jika pembayaran non tunai
|
||||
}else{
|
||||
|
||||
}
|
||||
|
||||
DB::commit();
|
||||
|
|
|
@ -0,0 +1,13 @@
|
|||
<?php
|
||||
|
||||
namespace App\Http\Controllers;
|
||||
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
class LaporanController extends Controller
|
||||
{
|
||||
public function index()
|
||||
{
|
||||
return view('pages.admin.laporan.index');
|
||||
}
|
||||
}
|
|
@ -65,7 +65,7 @@ class Kernel extends HttpKernel
|
|||
'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
|
||||
'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class,
|
||||
'role' => \Spatie\Permission\Middleware\RoleMiddleware::class,
|
||||
'permission' => \Spatie\Permission\Middleware\PermissionMiddleware::class,
|
||||
'permission' => \App\Http\Middleware\PermissionMiddleware::class,
|
||||
'role_or_permission' => \Spatie\Permission\Middleware\RoleOrPermissionMiddleware::class,
|
||||
];
|
||||
}
|
||||
|
|
|
@ -0,0 +1,48 @@
|
|||
<?php
|
||||
|
||||
namespace App\Http\Middleware;
|
||||
|
||||
use Closure;
|
||||
use Illuminate\Http\Request;
|
||||
use Spatie\Permission\Exceptions\UnauthorizedException;
|
||||
use Symfony\Component\HttpFoundation\Response;
|
||||
|
||||
class PermissionMiddleware
|
||||
{
|
||||
/**
|
||||
* Handle an incoming request.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @param \Closure(\Illuminate\Http\Request): (\Illuminate\Http\Response|\Illuminate\Http\RedirectResponse) $next
|
||||
* @return \Illuminate\Http\Response|\Illuminate\Http\RedirectResponse
|
||||
*/
|
||||
public function handle($request, Closure $next, $permission = null, $guard = null)
|
||||
{
|
||||
$authGuard = app('auth')->guard($guard);
|
||||
|
||||
if ($authGuard->guest()) {
|
||||
throw UnauthorizedException::notLoggedIn();
|
||||
}
|
||||
|
||||
if (!is_null($permission)) {
|
||||
$permissions = is_array($permission)
|
||||
? $permission
|
||||
: explode('|', $permission);
|
||||
}
|
||||
|
||||
if (is_null($permission)) {
|
||||
$permission = $request->route()->getName();
|
||||
|
||||
$permissions = array($permission);
|
||||
}
|
||||
|
||||
|
||||
foreach ($permissions as $permission) {
|
||||
if ($authGuard->user()->can($permission)) {
|
||||
return $next($request);
|
||||
}
|
||||
}
|
||||
|
||||
throw UnauthorizedException::forPermissions($permissions);
|
||||
}
|
||||
}
|
|
@ -21,7 +21,20 @@ class RedirectIfAuthenticated
|
|||
|
||||
foreach ($guards as $guard) {
|
||||
if (Auth::guard($guard)->check()) {
|
||||
return redirect(RouteServiceProvider::HOME);
|
||||
// return redirect(RouteServiceProvider::HOME);
|
||||
$role = Auth::user()->role;
|
||||
switch ($role[0]->name) {
|
||||
case 'Admin':
|
||||
return redirect('/dashboard');
|
||||
break;
|
||||
case 'Kasir':
|
||||
return redirect('/transaksi');
|
||||
break;
|
||||
|
||||
default:
|
||||
return redirect('/transaksi');
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -0,0 +1,13 @@
|
|||
<?php
|
||||
|
||||
namespace App\Models;
|
||||
|
||||
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
|
||||
class MenuTerlarisView extends Model
|
||||
{
|
||||
use HasFactory;
|
||||
|
||||
protected $table = 'menu_terlaris_view';
|
||||
}
|
|
@ -0,0 +1,18 @@
|
|||
<?php
|
||||
|
||||
namespace App\Models;
|
||||
|
||||
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
|
||||
class Pengeluaran extends Model
|
||||
{
|
||||
use HasFactory;
|
||||
|
||||
protected $table = 'pengeluaran';
|
||||
protected $guarded = [];
|
||||
|
||||
public function user(){
|
||||
return $this->belongsTo(User::class, 'user_id');
|
||||
}
|
||||
}
|
|
@ -7,6 +7,7 @@ use Illuminate\Database\Eloquent\Factories\HasFactory;
|
|||
use Illuminate\Foundation\Auth\User as Authenticatable;
|
||||
use Illuminate\Notifications\Notifiable;
|
||||
use Laravel\Sanctum\HasApiTokens;
|
||||
use Spatie\Permission\Models\Role;
|
||||
use Spatie\Permission\Traits\HasRoles;
|
||||
|
||||
class User extends Authenticatable
|
||||
|
@ -43,4 +44,17 @@ class User extends Authenticatable
|
|||
'email_verified_at' => 'datetime',
|
||||
'password' => 'hashed',
|
||||
];
|
||||
|
||||
/**
|
||||
* The attributes that should be cast.
|
||||
*
|
||||
* @var array<string, string>
|
||||
*/
|
||||
protected $guard_name = 'web';
|
||||
|
||||
// role
|
||||
public function role()
|
||||
{
|
||||
return $this->belongsToMany(Role::class, 'model_has_roles', 'model_id', 'role_id');
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,21 @@
|
|||
<?php
|
||||
|
||||
namespace App\Traits;
|
||||
|
||||
use App\Helpers\ResponseFormatter;
|
||||
use Illuminate\Http\Exceptions\HttpResponseException;
|
||||
use Illuminate\Contracts\Validation\Validator;
|
||||
|
||||
trait FailedValidation
|
||||
{
|
||||
/**
|
||||
* Useful for auto create id with uuid when first call create function.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
|
||||
protected function failedValidation(Validator $validator)
|
||||
{
|
||||
throw new HttpResponseException(ResponseFormatter::error($validator->errors()->first(), 400));
|
||||
}
|
||||
}
|
|
@ -13,6 +13,7 @@
|
|||
"laravel/framework": "^10.10",
|
||||
"laravel/sanctum": "^3.3",
|
||||
"laravel/tinker": "^2.8",
|
||||
"mpdf/mpdf": "^8.2",
|
||||
"realrashid/sweet-alert": "^6.0",
|
||||
"spatie/laravel-permission": "^6.3",
|
||||
"yajra/laravel-datatables": "^10.1"
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
|
||||
"This file is @generated automatically"
|
||||
],
|
||||
"content-hash": "c2a087156cf7cdb5fbd03918562d593c",
|
||||
"content-hash": "622a1b44adad65bf17c6308f5e4f8fe0",
|
||||
"packages": [
|
||||
{
|
||||
"name": "brick/math",
|
||||
|
@ -2387,6 +2387,238 @@
|
|||
],
|
||||
"time": "2023-10-27T15:32:31+00:00"
|
||||
},
|
||||
{
|
||||
"name": "mpdf/mpdf",
|
||||
"version": "v8.2.2",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/mpdf/mpdf.git",
|
||||
"reference": "596a87b876d7793be7be060a8ac13424de120dd5"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/mpdf/mpdf/zipball/596a87b876d7793be7be060a8ac13424de120dd5",
|
||||
"reference": "596a87b876d7793be7be060a8ac13424de120dd5",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"ext-gd": "*",
|
||||
"ext-mbstring": "*",
|
||||
"mpdf/psr-http-message-shim": "^1.0 || ^2.0",
|
||||
"mpdf/psr-log-aware-trait": "^2.0 || ^3.0",
|
||||
"myclabs/deep-copy": "^1.7",
|
||||
"paragonie/random_compat": "^1.4|^2.0|^9.99.99",
|
||||
"php": "^5.6 || ^7.0 || ~8.0.0 || ~8.1.0 || ~8.2.0 || ~8.3.0",
|
||||
"psr/http-message": "^1.0 || ^2.0",
|
||||
"psr/log": "^1.0 || ^2.0 || ^3.0",
|
||||
"setasign/fpdi": "^2.1"
|
||||
},
|
||||
"require-dev": {
|
||||
"mockery/mockery": "^1.3.0",
|
||||
"mpdf/qrcode": "^1.1.0",
|
||||
"squizlabs/php_codesniffer": "^3.5.0",
|
||||
"tracy/tracy": "~2.5",
|
||||
"yoast/phpunit-polyfills": "^1.0"
|
||||
},
|
||||
"suggest": {
|
||||
"ext-bcmath": "Needed for generation of some types of barcodes",
|
||||
"ext-xml": "Needed mainly for SVG manipulation",
|
||||
"ext-zlib": "Needed for compression of embedded resources, such as fonts"
|
||||
},
|
||||
"type": "library",
|
||||
"autoload": {
|
||||
"files": [
|
||||
"src/functions.php"
|
||||
],
|
||||
"psr-4": {
|
||||
"Mpdf\\": "src/"
|
||||
}
|
||||
},
|
||||
"notification-url": "https://packagist.org/downloads/",
|
||||
"license": [
|
||||
"GPL-2.0-only"
|
||||
],
|
||||
"authors": [
|
||||
{
|
||||
"name": "Matěj Humpál",
|
||||
"role": "Developer, maintainer"
|
||||
},
|
||||
{
|
||||
"name": "Ian Back",
|
||||
"role": "Developer (retired)"
|
||||
}
|
||||
],
|
||||
"description": "PHP library generating PDF files from UTF-8 encoded HTML",
|
||||
"homepage": "https://mpdf.github.io",
|
||||
"keywords": [
|
||||
"pdf",
|
||||
"php",
|
||||
"utf-8"
|
||||
],
|
||||
"support": {
|
||||
"docs": "http://mpdf.github.io",
|
||||
"issues": "https://github.com/mpdf/mpdf/issues",
|
||||
"source": "https://github.com/mpdf/mpdf"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
"url": "https://www.paypal.me/mpdf",
|
||||
"type": "custom"
|
||||
}
|
||||
],
|
||||
"time": "2023-11-07T13:52:14+00:00"
|
||||
},
|
||||
{
|
||||
"name": "mpdf/psr-http-message-shim",
|
||||
"version": "v2.0.1",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/mpdf/psr-http-message-shim.git",
|
||||
"reference": "f25a0153d645e234f9db42e5433b16d9b113920f"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/mpdf/psr-http-message-shim/zipball/f25a0153d645e234f9db42e5433b16d9b113920f",
|
||||
"reference": "f25a0153d645e234f9db42e5433b16d9b113920f",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"psr/http-message": "^2.0"
|
||||
},
|
||||
"type": "library",
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
"Mpdf\\PsrHttpMessageShim\\": "src/"
|
||||
}
|
||||
},
|
||||
"notification-url": "https://packagist.org/downloads/",
|
||||
"license": [
|
||||
"MIT"
|
||||
],
|
||||
"authors": [
|
||||
{
|
||||
"name": "Mark Dorison",
|
||||
"email": "mark@chromatichq.com"
|
||||
},
|
||||
{
|
||||
"name": "Kristofer Widholm",
|
||||
"email": "kristofer@chromatichq.com"
|
||||
},
|
||||
{
|
||||
"name": "Nigel Cunningham",
|
||||
"email": "nigel.cunningham@technocrat.com.au"
|
||||
}
|
||||
],
|
||||
"description": "Shim to allow support of different psr/message versions.",
|
||||
"support": {
|
||||
"issues": "https://github.com/mpdf/psr-http-message-shim/issues",
|
||||
"source": "https://github.com/mpdf/psr-http-message-shim/tree/v2.0.1"
|
||||
},
|
||||
"time": "2023-10-02T14:34:03+00:00"
|
||||
},
|
||||
{
|
||||
"name": "mpdf/psr-log-aware-trait",
|
||||
"version": "v3.0.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/mpdf/psr-log-aware-trait.git",
|
||||
"reference": "a633da6065e946cc491e1c962850344bb0bf3e78"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/mpdf/psr-log-aware-trait/zipball/a633da6065e946cc491e1c962850344bb0bf3e78",
|
||||
"reference": "a633da6065e946cc491e1c962850344bb0bf3e78",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"psr/log": "^3.0"
|
||||
},
|
||||
"type": "library",
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
"Mpdf\\PsrLogAwareTrait\\": "src/"
|
||||
}
|
||||
},
|
||||
"notification-url": "https://packagist.org/downloads/",
|
||||
"license": [
|
||||
"MIT"
|
||||
],
|
||||
"authors": [
|
||||
{
|
||||
"name": "Mark Dorison",
|
||||
"email": "mark@chromatichq.com"
|
||||
},
|
||||
{
|
||||
"name": "Kristofer Widholm",
|
||||
"email": "kristofer@chromatichq.com"
|
||||
}
|
||||
],
|
||||
"description": "Trait to allow support of different psr/log versions.",
|
||||
"support": {
|
||||
"issues": "https://github.com/mpdf/psr-log-aware-trait/issues",
|
||||
"source": "https://github.com/mpdf/psr-log-aware-trait/tree/v3.0.0"
|
||||
},
|
||||
"time": "2023-05-03T06:19:36+00:00"
|
||||
},
|
||||
{
|
||||
"name": "myclabs/deep-copy",
|
||||
"version": "1.11.1",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/myclabs/DeepCopy.git",
|
||||
"reference": "7284c22080590fb39f2ffa3e9057f10a4ddd0e0c"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/7284c22080590fb39f2ffa3e9057f10a4ddd0e0c",
|
||||
"reference": "7284c22080590fb39f2ffa3e9057f10a4ddd0e0c",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"php": "^7.1 || ^8.0"
|
||||
},
|
||||
"conflict": {
|
||||
"doctrine/collections": "<1.6.8",
|
||||
"doctrine/common": "<2.13.3 || >=3,<3.2.2"
|
||||
},
|
||||
"require-dev": {
|
||||
"doctrine/collections": "^1.6.8",
|
||||
"doctrine/common": "^2.13.3 || ^3.2.2",
|
||||
"phpunit/phpunit": "^7.5.20 || ^8.5.23 || ^9.5.13"
|
||||
},
|
||||
"type": "library",
|
||||
"autoload": {
|
||||
"files": [
|
||||
"src/DeepCopy/deep_copy.php"
|
||||
],
|
||||
"psr-4": {
|
||||
"DeepCopy\\": "src/DeepCopy/"
|
||||
}
|
||||
},
|
||||
"notification-url": "https://packagist.org/downloads/",
|
||||
"license": [
|
||||
"MIT"
|
||||
],
|
||||
"description": "Create deep copies (clones) of your objects",
|
||||
"keywords": [
|
||||
"clone",
|
||||
"copy",
|
||||
"duplicate",
|
||||
"object",
|
||||
"object graph"
|
||||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/myclabs/DeepCopy/issues",
|
||||
"source": "https://github.com/myclabs/DeepCopy/tree/1.11.1"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
"url": "https://tidelift.com/funding/github/packagist/myclabs/deep-copy",
|
||||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2023-03-08T13:26:56+00:00"
|
||||
},
|
||||
{
|
||||
"name": "nesbot/carbon",
|
||||
"version": "2.72.1",
|
||||
|
@ -2879,6 +3111,56 @@
|
|||
],
|
||||
"time": "2024-01-09T09:30:37+00:00"
|
||||
},
|
||||
{
|
||||
"name": "paragonie/random_compat",
|
||||
"version": "v9.99.100",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/paragonie/random_compat.git",
|
||||
"reference": "996434e5492cb4c3edcb9168db6fbb1359ef965a"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/paragonie/random_compat/zipball/996434e5492cb4c3edcb9168db6fbb1359ef965a",
|
||||
"reference": "996434e5492cb4c3edcb9168db6fbb1359ef965a",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"php": ">= 7"
|
||||
},
|
||||
"require-dev": {
|
||||
"phpunit/phpunit": "4.*|5.*",
|
||||
"vimeo/psalm": "^1"
|
||||
},
|
||||
"suggest": {
|
||||
"ext-libsodium": "Provides a modern crypto API that can be used to generate random bytes."
|
||||
},
|
||||
"type": "library",
|
||||
"notification-url": "https://packagist.org/downloads/",
|
||||
"license": [
|
||||
"MIT"
|
||||
],
|
||||
"authors": [
|
||||
{
|
||||
"name": "Paragon Initiative Enterprises",
|
||||
"email": "security@paragonie.com",
|
||||
"homepage": "https://paragonie.com"
|
||||
}
|
||||
],
|
||||
"description": "PHP 5.x polyfill for random_bytes() and random_int() from PHP 7",
|
||||
"keywords": [
|
||||
"csprng",
|
||||
"polyfill",
|
||||
"pseudorandom",
|
||||
"random"
|
||||
],
|
||||
"support": {
|
||||
"email": "info@paragonie.com",
|
||||
"issues": "https://github.com/paragonie/random_compat/issues",
|
||||
"source": "https://github.com/paragonie/random_compat"
|
||||
},
|
||||
"time": "2020-10-15T08:29:30+00:00"
|
||||
},
|
||||
{
|
||||
"name": "phpoffice/phpspreadsheet",
|
||||
"version": "1.29.0",
|
||||
|
@ -3865,6 +4147,78 @@
|
|||
],
|
||||
"time": "2023-02-15T07:13:11+00:00"
|
||||
},
|
||||
{
|
||||
"name": "setasign/fpdi",
|
||||
"version": "v2.6.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/Setasign/FPDI.git",
|
||||
"reference": "a6db878129ec6c7e141316ee71872923e7f1b7ad"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/Setasign/FPDI/zipball/a6db878129ec6c7e141316ee71872923e7f1b7ad",
|
||||
"reference": "a6db878129ec6c7e141316ee71872923e7f1b7ad",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"ext-zlib": "*",
|
||||
"php": "^5.6 || ^7.0 || ^8.0"
|
||||
},
|
||||
"conflict": {
|
||||
"setasign/tfpdf": "<1.31"
|
||||
},
|
||||
"require-dev": {
|
||||
"phpunit/phpunit": "~5.7",
|
||||
"setasign/fpdf": "~1.8.6",
|
||||
"setasign/tfpdf": "~1.33",
|
||||
"squizlabs/php_codesniffer": "^3.5",
|
||||
"tecnickcom/tcpdf": "~6.2"
|
||||
},
|
||||
"suggest": {
|
||||
"setasign/fpdf": "FPDI will extend this class but as it is also possible to use TCPDF or tFPDF as an alternative. There's no fixed dependency configured."
|
||||
},
|
||||
"type": "library",
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
"setasign\\Fpdi\\": "src/"
|
||||
}
|
||||
},
|
||||
"notification-url": "https://packagist.org/downloads/",
|
||||
"license": [
|
||||
"MIT"
|
||||
],
|
||||
"authors": [
|
||||
{
|
||||
"name": "Jan Slabon",
|
||||
"email": "jan.slabon@setasign.com",
|
||||
"homepage": "https://www.setasign.com"
|
||||
},
|
||||
{
|
||||
"name": "Maximilian Kresse",
|
||||
"email": "maximilian.kresse@setasign.com",
|
||||
"homepage": "https://www.setasign.com"
|
||||
}
|
||||
],
|
||||
"description": "FPDI is a collection of PHP classes facilitating developers to read pages from existing PDF documents and use them as templates in FPDF. Because it is also possible to use FPDI with TCPDF, there are no fixed dependencies defined. Please see suggestions for packages which evaluates the dependencies automatically.",
|
||||
"homepage": "https://www.setasign.com/fpdi",
|
||||
"keywords": [
|
||||
"fpdf",
|
||||
"fpdi",
|
||||
"pdf"
|
||||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/Setasign/FPDI/issues",
|
||||
"source": "https://github.com/Setasign/FPDI/tree/v2.6.0"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
"url": "https://tidelift.com/funding/github/packagist/setasign/fpdi",
|
||||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2023-12-11T16:03:32+00:00"
|
||||
},
|
||||
{
|
||||
"name": "spatie/laravel-permission",
|
||||
"version": "6.3.0",
|
||||
|
@ -7388,65 +7742,6 @@
|
|||
},
|
||||
"time": "2023-12-10T02:24:34+00:00"
|
||||
},
|
||||
{
|
||||
"name": "myclabs/deep-copy",
|
||||
"version": "1.11.1",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/myclabs/DeepCopy.git",
|
||||
"reference": "7284c22080590fb39f2ffa3e9057f10a4ddd0e0c"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/7284c22080590fb39f2ffa3e9057f10a4ddd0e0c",
|
||||
"reference": "7284c22080590fb39f2ffa3e9057f10a4ddd0e0c",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"php": "^7.1 || ^8.0"
|
||||
},
|
||||
"conflict": {
|
||||
"doctrine/collections": "<1.6.8",
|
||||
"doctrine/common": "<2.13.3 || >=3,<3.2.2"
|
||||
},
|
||||
"require-dev": {
|
||||
"doctrine/collections": "^1.6.8",
|
||||
"doctrine/common": "^2.13.3 || ^3.2.2",
|
||||
"phpunit/phpunit": "^7.5.20 || ^8.5.23 || ^9.5.13"
|
||||
},
|
||||
"type": "library",
|
||||
"autoload": {
|
||||
"files": [
|
||||
"src/DeepCopy/deep_copy.php"
|
||||
],
|
||||
"psr-4": {
|
||||
"DeepCopy\\": "src/DeepCopy/"
|
||||
}
|
||||
},
|
||||
"notification-url": "https://packagist.org/downloads/",
|
||||
"license": [
|
||||
"MIT"
|
||||
],
|
||||
"description": "Create deep copies (clones) of your objects",
|
||||
"keywords": [
|
||||
"clone",
|
||||
"copy",
|
||||
"duplicate",
|
||||
"object",
|
||||
"object graph"
|
||||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/myclabs/DeepCopy/issues",
|
||||
"source": "https://github.com/myclabs/DeepCopy/tree/1.11.1"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
"url": "https://tidelift.com/funding/github/packagist/myclabs/deep-copy",
|
||||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2023-03-08T13:26:56+00:00"
|
||||
},
|
||||
{
|
||||
"name": "nunomaduro/collision",
|
||||
"version": "v7.10.0",
|
||||
|
|
|
@ -12,7 +12,7 @@ return new class extends Migration
|
|||
public function up(): void
|
||||
{
|
||||
Schema::table('pesanans', function (Blueprint $table) {
|
||||
$table->foreignId('coa_kas')->nullable()->after('jenis_pembayaran')->references('id')->on('rekening_coa')->onUpdate('cascade')->onDelete('cascade');
|
||||
$table->foreignId('coa_kas')->nullable()->after('jenis_pembayaran')->comment('kolom ini tidak terpakai')->references('id')->on('rekening_coa')->onUpdate('cascade')->onDelete('cascade');
|
||||
});
|
||||
}
|
||||
|
||||
|
|
|
@ -0,0 +1,28 @@
|
|||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
return new class extends Migration
|
||||
{
|
||||
/**
|
||||
* Run the migrations.
|
||||
*/
|
||||
public function up(): void
|
||||
{
|
||||
Schema::table('buku_besar', function (Blueprint $table) {
|
||||
$table->foreignId('pesanans_id')->nullable()->after('rekening_coa_id')->references('id')->on('pesanans')->onUpdate('cascade')->onDelete('cascade');
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*/
|
||||
public function down(): void
|
||||
{
|
||||
Schema::table('buku_besar', function (Blueprint $table) {
|
||||
$table->dropColumn('coa_kas');
|
||||
});
|
||||
}
|
||||
};
|
|
@ -0,0 +1,30 @@
|
|||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
return new class extends Migration
|
||||
{
|
||||
/**
|
||||
* Run the migrations.
|
||||
*/
|
||||
public function up(): void
|
||||
{
|
||||
Schema::table('permissions', function (Blueprint $table) {
|
||||
$table->string('group_name'); // For MySQL 8.0 use string('guard_name', 125);
|
||||
$table->string('desc'); // For MySQL 8.0 use string('guard_name', 125);
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*/
|
||||
public function down(): void
|
||||
{
|
||||
Schema::table('permissions', function (Blueprint $table) {
|
||||
$table->dropColumn('group_name');
|
||||
$table->dropColumn('desc');
|
||||
});
|
||||
}
|
||||
};
|
|
@ -0,0 +1,33 @@
|
|||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
return new class extends Migration
|
||||
{
|
||||
/**
|
||||
* Run the migrations.
|
||||
*/
|
||||
public function up(): void
|
||||
{
|
||||
Schema::create('pengeluaran', function (Blueprint $table) {
|
||||
$table->id();
|
||||
$table->string('faktur')->nullable();
|
||||
$table->date('tanggal')->nullable();
|
||||
$table->integer('jenis_transaksi')->nullable()->comment('1 = Tunai, 2 = Transfer');
|
||||
$table->integer('nominal')->nullable();
|
||||
$table->string('keterangan')->nullable();
|
||||
$table->foreignId('user_id')->nullable()->references('id')->on('users')->onUpdate('cascade')->onDelete('cascade');
|
||||
$table->timestamps();
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*/
|
||||
public function down(): void
|
||||
{
|
||||
Schema::dropIfExists('pengeluaran');
|
||||
}
|
||||
};
|
|
@ -0,0 +1,38 @@
|
|||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
return new class extends Migration
|
||||
{
|
||||
/**
|
||||
* Run the migrations.
|
||||
*/
|
||||
public function up(): void
|
||||
{
|
||||
DB::statement('CREATE OR REPLACE VIEW menu_terlaris_view AS
|
||||
SELECT
|
||||
detail_pesanans.produk_id,
|
||||
produks.*,
|
||||
COUNT(detail_pesanans.produk_id) AS jumlah_produk_terjual
|
||||
FROM
|
||||
detail_pesanans
|
||||
JOIN produks ON produks.id = detail_pesanans.produk_id
|
||||
GROUP BY
|
||||
detail_pesanans.produk_id,
|
||||
produks.nama_produk
|
||||
ORDER BY
|
||||
jumlah_produk_terjual DESC
|
||||
');
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*/
|
||||
public function down(): void
|
||||
{
|
||||
DB::statement('DROP VIEW IF EXISTS menu_terlaris_view');
|
||||
}
|
||||
};
|
|
@ -18,8 +18,8 @@ class AddUsers extends Seeder
|
|||
// Add Users
|
||||
$data = User::create([
|
||||
'name' => 'Admin',
|
||||
'email' => 'admin@mail.id',
|
||||
'password' => bcrypt('password')
|
||||
'email' => 'admin@mail.com',
|
||||
'password' => bcrypt('adminsaja')
|
||||
]);
|
||||
|
||||
$permissions = Permission::pluck('id', 'id')->all();
|
||||
|
|
|
@ -20,6 +20,7 @@ class DatabaseSeeder extends Seeder
|
|||
KelompokKategoriPivotSeeder::class,
|
||||
|
||||
// UserSeeder::class,
|
||||
// KasirSeeder::class,
|
||||
RekeningCoaSeeder::class
|
||||
];
|
||||
|
||||
|
|
|
@ -0,0 +1,22 @@
|
|||
<?php
|
||||
|
||||
namespace Database\Seeders;
|
||||
|
||||
use Illuminate\Database\Console\Seeds\WithoutModelEvents;
|
||||
use Illuminate\Database\Seeder;
|
||||
use Illuminate\Support\Facades\Artisan;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
|
||||
class GenerateAtasSeeder extends Seeder
|
||||
{
|
||||
/**
|
||||
* Run the database seeds.
|
||||
*/
|
||||
public function run(): void
|
||||
{
|
||||
$classes = [
|
||||
RoleSeeder::class,
|
||||
];
|
||||
foreach ($classes as $class) $this->call($class);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,21 @@
|
|||
<?php
|
||||
|
||||
namespace Database\Seeders;
|
||||
|
||||
use Illuminate\Database\Console\Seeds\WithoutModelEvents;
|
||||
use Illuminate\Database\Seeder;
|
||||
|
||||
class GenerateFreshSeeder extends Seeder
|
||||
{
|
||||
/**
|
||||
* Run the database seeds.
|
||||
*/
|
||||
public function run(): void
|
||||
{
|
||||
$classes = [
|
||||
UserSeeder::class,
|
||||
KasirSeeder::class,
|
||||
];
|
||||
foreach ($classes as $class) $this->call($class);
|
||||
}
|
||||
}
|
|
@ -13,10 +13,8 @@ class PermissionSeeder extends Seeder
|
|||
public function run(): void
|
||||
{
|
||||
$classes = [
|
||||
// UserSeeder::class,
|
||||
// KasirSeeder::class,
|
||||
// AddRoles::class,
|
||||
RoleSeeder::class,
|
||||
GenerateAtasSeeder::class,
|
||||
// GenerateFreshSeeder::class,
|
||||
];
|
||||
foreach ($classes as $class) $this->call($class);
|
||||
}
|
||||
|
|
|
@ -17,6 +17,7 @@ class RoleSeeder extends Seeder
|
|||
*/
|
||||
public function run(): void
|
||||
{
|
||||
// admin
|
||||
$role = Role::create(['name' => 'Admin']);
|
||||
|
||||
$permissions = Permission::pluck('id', 'id')->all();
|
||||
|
@ -27,6 +28,7 @@ class RoleSeeder extends Seeder
|
|||
|
||||
$user->assignRole([$role->id]);
|
||||
|
||||
// kasir
|
||||
$role = Role::create(['name' => 'Kasir']);
|
||||
|
||||
$permissions = Permission::pluck('id', 'id')->all();
|
||||
|
|
|
@ -18,9 +18,9 @@ class UserSeeder extends Seeder
|
|||
$user = [
|
||||
[
|
||||
'name' => 'admin',
|
||||
'email' => 'admin@mail.id',
|
||||
'email' => 'admin@mail.com',
|
||||
'email_verified_at' => now(),
|
||||
'password' => '$2y$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi', // password
|
||||
'password' => bcrypt('adminsaja')
|
||||
],
|
||||
];
|
||||
|
||||
|
|
|
@ -1,90 +1,67 @@
|
|||
<!-- Navbar -->
|
||||
<nav class="main-header navbar navbar-expand-lg navbar-light navbar-warning">
|
||||
<div class="container" style="display: contents">
|
||||
<a href="/" class="navbar-brand">
|
||||
<a href="{{ route('transaksi.index') }}" class="navbar-brand">
|
||||
<span class="brand-text font-weight-bold ml-2" style="color: rgba(62, 62, 62, 0.526)">Sepiring Telur
|
||||
Keriting</span>
|
||||
</a>
|
||||
|
||||
{{-- <div class="collapse navbar-collapse order-3" id="navbarCollapse">
|
||||
<div class="collapse navbar-collapse order-3" id="navbarCollapse">
|
||||
<!-- Left navbar links -->
|
||||
<ul class="navbar-nav">
|
||||
<li class="nav-item">
|
||||
<a href="index3.html" class="nav-link">Home</a>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<a href="#" class="nav-link">Contact</a>
|
||||
</li>
|
||||
@can('dashboard.index', auth()->user())
|
||||
<li class="nav-item">
|
||||
<a href="{{ route('dashboard.index') }}" class="nav-link">Dashboard</a>
|
||||
</li>
|
||||
@endcan
|
||||
<li class="nav-item dropdown">
|
||||
<a id="dropdownSubMenu1" href="#" data-toggle="dropdown" aria-haspopup="true"
|
||||
aria-expanded="false" class="nav-link dropdown-toggle">Dropdown</a>
|
||||
<a id="dropdownSubMenu1" href="javascript:void(0)" data-toggle="dropdown" aria-haspopup="true"
|
||||
aria-expanded="false" class="nav-link dropdown-toggle">Transaksi</a>
|
||||
<ul aria-labelledby="dropdownSubMenu1" class="dropdown-menu border-0 shadow">
|
||||
<li><a href="#" class="dropdown-item">Some action </a></li>
|
||||
<li><a href="#" class="dropdown-item">Some other action</a></li>
|
||||
|
||||
<li class="dropdown-divider"></li>
|
||||
|
||||
<!-- Level two dropdown-->
|
||||
<li class="dropdown-submenu dropdown-hover">
|
||||
<a id="dropdownSubMenu2" href="#" role="button" data-toggle="dropdown"
|
||||
aria-haspopup="true" aria-expanded="false" class="dropdown-item dropdown-toggle">Hover
|
||||
for action</a>
|
||||
<ul aria-labelledby="dropdownSubMenu2" class="dropdown-menu border-0 shadow">
|
||||
<li>
|
||||
<a tabindex="-1" href="#" class="dropdown-item">level 2</a>
|
||||
</li>
|
||||
|
||||
<!-- Level three dropdown-->
|
||||
<li class="dropdown-submenu">
|
||||
<a id="dropdownSubMenu3" href="#" role="button" data-toggle="dropdown"
|
||||
aria-haspopup="true" aria-expanded="false"
|
||||
class="dropdown-item dropdown-toggle">level 2</a>
|
||||
<ul aria-labelledby="dropdownSubMenu3" class="dropdown-menu border-0 shadow">
|
||||
<li><a href="#" class="dropdown-item">3rd level</a></li>
|
||||
<li><a href="#" class="dropdown-item">3rd level</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<!-- End Level three -->
|
||||
|
||||
<li><a href="#" class="dropdown-item">level 2</a></li>
|
||||
<li><a href="#" class="dropdown-item">level 2</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<!-- End Level two -->
|
||||
<li><a href="#" class="dropdown-item">Order </a></li>
|
||||
<li><a href="{{ route('pengeluaran.index') }}" class="dropdown-item">Pengeluaran</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
@canany(['users.index', 'menu.index'], auth()->user())
|
||||
<li class="nav-item dropdown">
|
||||
<a id="dropdownSubMenu1" href="#" data-toggle="dropdown" aria-haspopup="true"
|
||||
aria-expanded="false" class="nav-link dropdown-toggle">Master Data</a>
|
||||
<ul aria-labelledby="dropdownSubMenu1" class="dropdown-menu border-0 shadow">
|
||||
<li><a href="#" class="dropdown-item">Data Jenis Menu</a></li>
|
||||
@can('menu.index', auth()->user())
|
||||
<li><a href="{{ route('menu.index') }}" class="dropdown-item">Data Menu</a></li>
|
||||
@endcan
|
||||
@can('users.index', auth()->user())
|
||||
<li class="dropdown-divider"></li>
|
||||
<li><a href="{{ route('users.index') }}" class="dropdown-item">Setting User</a></li>
|
||||
<li><a href="{{ route('roles.index') }}" class="dropdown-item">Setting Role</a></li>
|
||||
@endcan
|
||||
</ul>
|
||||
</li>
|
||||
@endcanany
|
||||
</ul>
|
||||
|
||||
<!-- SEARCH FORM -->
|
||||
<form class="form-inline ml-0 ml-md-3">
|
||||
<div class="input-group input-group-sm">
|
||||
<input class="form-control form-control-navbar" type="search" placeholder="Search"
|
||||
aria-label="Search">
|
||||
<div class="input-group-append">
|
||||
<button class="btn btn-navbar" type="submit">
|
||||
<i class="fas fa-search"></i>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div> --}}
|
||||
</div>
|
||||
|
||||
<!-- Right navbar links -->
|
||||
<ul class="order-1 order-md-3 navbar-nav navbar-no-expand ml-auto">
|
||||
<!-- Messages Dropdown Menu -->
|
||||
<li class="nav-item dropdown">
|
||||
<a class="nav-link" id="transaksi @if (Request::is('transaksi')) active @endif"
|
||||
href="{{ route('transaksi.index') }}" role="button">
|
||||
Transaksi
|
||||
</a>
|
||||
</li>
|
||||
@can('transaksi.index', auth()->user())
|
||||
<li class="nav-item dropdown">
|
||||
<a class="nav-link" id="transaksi @if (Request::is('transaksi')) active @endif"
|
||||
href="{{ route('transaksi.index') }}" role="button">
|
||||
Transaksi
|
||||
</a>
|
||||
</li>
|
||||
@endcan
|
||||
<!-- Notifications Dropdown Menu -->
|
||||
<li class="nav-item dropdown">
|
||||
<a class="nav-link @if (Request::is('history')) active @endif" id="history"
|
||||
href="{{ route('history.index') }}" role="button">
|
||||
History
|
||||
</a>
|
||||
</li>
|
||||
@can('history.index', auth()->user())
|
||||
<li class="nav-item dropdown">
|
||||
<a class="nav-link @if (Request::is('history')) active @endif" id="history"
|
||||
href="{{ route('history.index') }}" role="button">
|
||||
History
|
||||
</a>
|
||||
</li>
|
||||
@endcan
|
||||
<li class="nav-item">
|
||||
<a class="nav-link" id="full-screen" data-widget="control-sidebar" data-slide="true"
|
||||
href="javascript:void(0)" role="button">
|
||||
|
@ -93,7 +70,8 @@
|
|||
</li>
|
||||
<li class="nav-item dropdown">
|
||||
<a id="dropdownSubMenu1" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"
|
||||
class="nav-link" href="#">
|
||||
class="nav-link row" href="#">
|
||||
{{ auth()->user()->name }}
|
||||
<i class="fas fa-user"></i>
|
||||
</a>
|
||||
<ul aria-labelledby="dropdownSubMenu1" class="dropdown-menu border-0 shadow">
|
||||
|
|
|
@ -18,6 +18,7 @@ scratch. This page gets rid of all links and provides the needed markup only.
|
|||
<link rel="stylesheet" href="{{ asset('assets/plugins/fontawesome-free/css/fontawesome.min.css') }}">
|
||||
<link rel="stylesheet" href="{{ asset('assets/plugins/fontawesome-free/css/all.min.css') }}">
|
||||
<link rel="stylesheet" href="{{ asset('assets/plugins/fontawesome-free/css/solid.min.css') }}">
|
||||
@stack('style2')
|
||||
<!-- Theme style -->
|
||||
<link rel="stylesheet" href="{{ asset('assets/dist/css/adminlte.min.css') }}">
|
||||
|
||||
|
|
|
@ -36,7 +36,8 @@
|
|||
<input type="date" class="form-control form-control-sm" id="filter_tanggal_2">
|
||||
</div>
|
||||
<div class="col-md-2">
|
||||
<a href="javascript:void(0)" class="btn btn-sm btn-primary" id="btn_filter"><i class="fas fa-search mr-1"></i>Filter data</a>
|
||||
<a href="javascript:void(0)" class="btn btn-sm btn-primary" id="btn_filter"><i
|
||||
class="fas fa-search mr-1"></i>Filter data</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -79,4 +80,3 @@
|
|||
|
||||
@include('pages.History.style')
|
||||
@include('pages.History.js')
|
||||
|
||||
|
|
|
@ -93,10 +93,7 @@
|
|||
.reduce((a, b) => intVal(a) + intVal(b), 0);
|
||||
|
||||
// GrandTotal over all pages
|
||||
diskonTotal = api
|
||||
.column(7)
|
||||
.data()
|
||||
.reduce((a, b) => intVal(a) + intVal(b), 0);
|
||||
|
||||
|
||||
// Total over this page
|
||||
pageTotal = api
|
||||
|
@ -116,7 +113,6 @@
|
|||
api.column(5).footer().innerHTML = totalPesanan + ' Item';
|
||||
api.column(6).footer().innerHTML =
|
||||
'Rp. ' + pageTotal.toString().replace(/\B(?=(\d{3})+(?!\d))/g, '.');
|
||||
api.column(7).footer().innerHTML = diskonTotal + ' %';
|
||||
api.column(8).footer().innerHTML =
|
||||
'Rp. ' + totalAll.toString().replace(/\B(?=(\d{3})+(?!\d))/g, '.');
|
||||
}
|
||||
|
@ -133,7 +129,8 @@
|
|||
<script>
|
||||
function print(id) {
|
||||
var url = "{{ route('history.print', '') }}/" + id + '?print=true'
|
||||
window.open(url, '_blank');
|
||||
// window.open(url, '_blank');
|
||||
window.open(url, '_blank', "toolbar=yes,scrollbars=yes,resizable=yes,top=500,left=500,width=900,height=600");
|
||||
}
|
||||
</script>
|
||||
<script>
|
||||
|
|
|
@ -71,18 +71,21 @@
|
|||
function printDapurTigaKali(id) {
|
||||
var url = "{{ route('transaksi.printDapurTigaKali', '') }}/" + id + '?print=true'
|
||||
window.open(url, '_blank');
|
||||
// window.open(result.url, '_blank', "toolbar=yes,scrollbars=yes,resizable=yes,top=500,left=500,width=900,height=600");
|
||||
location.reload(true);
|
||||
}
|
||||
|
||||
function printDapurDuaKali(id) {
|
||||
var url = "{{ route('transaksi.printDapurDuaKali', '') }}/" + id + '?print=true'
|
||||
window.open(url, '_blank');
|
||||
// window.open(result.url, '_blank', "toolbar=yes,scrollbars=yes,resizable=yes,top=500,left=500,width=900,height=600");
|
||||
location.reload(true);
|
||||
}
|
||||
|
||||
function printDapurSatuKali(id) {
|
||||
var url = "{{ route('transaksi.printDapurSatuKali', '') }}/" + id + '?print=true'
|
||||
window.open(url, '_blank');
|
||||
// window.open(result.url, '_blank', "toolbar=yes,scrollbars=yes,resizable=yes,top=500,left=500,width=900,height=600");
|
||||
location.reload(true);
|
||||
}
|
||||
</script>
|
||||
|
@ -110,11 +113,11 @@
|
|||
minute: 'numeric',
|
||||
second: 'numeric'
|
||||
};
|
||||
|
||||
|
||||
// tampilkan pada id datetime-order
|
||||
document.getElementById('datetime-order').innerHTML = utc.toLocaleDateString("id-ID", options);
|
||||
}
|
||||
|
||||
|
||||
// show time every second
|
||||
setInterval(showTime, 1000);
|
||||
|
||||
|
@ -187,7 +190,7 @@
|
|||
<br>
|
||||
${(diskonSatuan > 0) ? '<small class="text-primary"><s>Rp. ' + (harga * qty) + '</s></small> | <small class="text-danger">Rp. ' + total + '</small>' : '<small class="text-primary">Rp. ' + totalLama + '</small>'}
|
||||
<div class="input-group input-group-sm mt-1">
|
||||
<input type="text" name="keterangan_satuan" data-keterangan="" class="form-control rounded-0" placeholder="Keterangan.." value='${paketFreenyaini}'>
|
||||
<input type="text" name="keterangan_satuan" data-keterangan="" class="form-control rounded-3" placeholder="Keterangan.." value='${paketFreenyaini}'>
|
||||
</div>
|
||||
</td>
|
||||
`;
|
||||
|
@ -198,7 +201,7 @@
|
|||
<br>
|
||||
${(diskonSatuan > 0) ? '<small class="text-primary"><s>Rp. ' + (harga * qty) + '</s></small> | <small class="text-danger">Rp. ' + total + '</small>' : '<small class="text-primary">Rp. ' + totalLama + '</small>'}
|
||||
<div class="input-group input-group-sm mt-1">
|
||||
<input type="text" name="keterangan_satuan" data-keterangan="" class="form-control rounded-0" placeholder="Keterangan..">
|
||||
<input type="text" name="keterangan_satuan" data-keterangan="" class="form-control rounded-3" placeholder="Keterangan..">
|
||||
</div>
|
||||
</td>
|
||||
`;
|
||||
|
@ -210,7 +213,7 @@
|
|||
<span class="input-group-append">
|
||||
<button type="button" class="btn btn-default btn-xs btn-flat tai" onclick="decrementMenu(${globalId}, '${params.nama_produk}')"><b>-</b></button>
|
||||
</span>
|
||||
<input type="text" name="bayar" class="form-control rounded-0" readonly value="${qty}">
|
||||
<input type="text" name="bayar" class="form-control rounded-3" readonly value="${qty}">
|
||||
<span class="input-group-append">
|
||||
<button type="button" class="btn btn-default btn-xs btn-flat" onclick="incrementMenu(${globalId}, '${params.nama_produk}')">+</button>
|
||||
</span>
|
||||
|
@ -220,7 +223,7 @@
|
|||
table.rows[index].cells[2].innerHTML = `
|
||||
<td class="text-center">
|
||||
<div class="input-group input-group-sm">
|
||||
<input type="number" name="diskon_satuan" oninput="inputNum(this)" class="form-control rounded-0" value="${diskonSatuan}" onkeyup="diskonSatuanMenu(${globalId}, '${params.nama_produk}', this.value)">
|
||||
<input type="number" name="diskon_satuan" oninput="inputNum(this)" class="form-control rounded-3" value="${diskonSatuan}" onkeyup="diskonSatuanMenu(${globalId}, '${params.nama_produk}', this.value)">
|
||||
</div>
|
||||
</td>
|
||||
`;
|
||||
|
@ -249,7 +252,7 @@
|
|||
<br>
|
||||
<small class="text-primary">Rp. ${params.harga_produk}</small>
|
||||
<div class="input-group input-group-sm mt-1">
|
||||
<input type="text" name="keterangan_satuan" class="form-control rounded-0" data-keterangan="${paketFreenyaini}" placeholder="Keterangan.." value="${paketFreenyaini}">
|
||||
<input type="text" name="keterangan_satuan" class="form-control rounded-3" data-keterangan="${paketFreenyaini}" placeholder="Keterangan.." value="${paketFreenyaini}">
|
||||
</div>
|
||||
</td>
|
||||
<td class="text-center">
|
||||
|
@ -257,7 +260,7 @@
|
|||
<span class="input-group-append">
|
||||
<button type="button" class="btn btn-default btn-xs btn-flat" onclick="decrementMenu(${globalId}, '${params.nama_produk}')"><b>-</b></button>
|
||||
</span>
|
||||
<input type="text" name="bayar" class="form-control rounded-0" readonly value="${menuQty}">
|
||||
<input type="text" name="bayar" class="form-control rounded-3" readonly value="${menuQty}">
|
||||
<span class="input-group-append">
|
||||
<button type="button" class="btn btn-default btn-xs btn-flat" onclick="incrementMenu(${globalId}, '${params.nama_produk}')">+</button>
|
||||
</span>
|
||||
|
@ -265,7 +268,7 @@
|
|||
</td>
|
||||
<td class="text-center">
|
||||
<div class="input-group input-group-sm">
|
||||
<input type="number" name="diskon_satuan" oninput="inputNum(this)" class="form-control rounded-0" value="0" onkeyup="diskonSatuanMenu(${globalId}, '${params.nama_produk}', this.value)">
|
||||
<input type="number" name="diskon_satuan" oninput="inputNum(this)" class="form-control rounded-3" value="0" onkeyup="diskonSatuanMenu(${globalId}, '${params.nama_produk}', this.value)">
|
||||
</div>
|
||||
</td>
|
||||
<td class="text-center">
|
||||
|
@ -283,7 +286,7 @@
|
|||
<br>
|
||||
<small class="text-primary">Rp. ${params.harga_produk}</small>
|
||||
<div class="input-group input-group-sm mt-1">
|
||||
<input type="text" name="keterangan_satuan" data-keterangan="" class="form-control rounded-0" placeholder="Keterangan..">
|
||||
<input type="text" name="keterangan_satuan" data-keterangan="" class="form-control rounded-3" placeholder="Keterangan..">
|
||||
</div>
|
||||
</td>
|
||||
<td class="text-center">
|
||||
|
@ -291,7 +294,7 @@
|
|||
<span class="input-group-append">
|
||||
<button type="button" class="btn btn-default btn-xs btn-flat" onclick="decrementMenu(${globalId}, '${params.nama_produk}')"><b>-</b></button>
|
||||
</span>
|
||||
<input type="text" name="bayar" class="form-control rounded-0" readonly value="${menuQty}">
|
||||
<input type="text" name="bayar" class="form-control rounded-3" readonly value="${menuQty}">
|
||||
<span class="input-group-append">
|
||||
<button type="button" class="btn btn-default btn-xs btn-flat" onclick="incrementMenu(${globalId}, '${params.nama_produk}')">+</button>
|
||||
</span>
|
||||
|
@ -299,7 +302,7 @@
|
|||
</td>
|
||||
<td class="text-center">
|
||||
<div class="input-group input-group-sm">
|
||||
<input type="number" name="diskon_satuan" oninput="inputNum(this)" class="form-control rounded-0" value="0" onkeyup="diskonSatuanMenu(${globalId}, '${params.nama_produk}', this.value)">
|
||||
<input type="number" name="diskon_satuan" oninput="inputNum(this)" class="form-control rounded-3" value="0" onkeyup="diskonSatuanMenu(${globalId}, '${params.nama_produk}', this.value)">
|
||||
</div>
|
||||
</td>
|
||||
<td class="text-center">
|
||||
|
@ -396,7 +399,7 @@
|
|||
<br>
|
||||
${(diskonSatuan > 0) ? '<small class="text-primary"><s>Rp. ' + (harga * qty) + '</s></small> | <small class="text-danger">Rp. ' + total + '</small>' : '<small class="text-primary">Rp. ' + totalLama + '</small>'}
|
||||
<div class="input-group input-group-sm mt-1">
|
||||
<input type="text" name="keterangan_satuan" data-keterangan="${valueKeterangan}" value="${valueKeterangan}" class="form-control rounded-0" placeholder="Keterangan..">
|
||||
<input type="text" name="keterangan_satuan" data-keterangan="${valueKeterangan}" value="${valueKeterangan}" class="form-control rounded-3" placeholder="Keterangan..">
|
||||
</div>
|
||||
</td>
|
||||
`;
|
||||
|
@ -407,13 +410,12 @@
|
|||
<span class="input-group-append">
|
||||
<button type="button" class="btn btn-default btn-xs btn-flat" onclick="decrementMenu(${params}, '${nama_produk}')"><b>-</b></button>
|
||||
</span>
|
||||
<input type="text" name="bayar" class="form-control rounded-0" readonly value="${qty}">
|
||||
<input type="text" name="bayar" class="form-control rounded-3" readonly value="${qty}">
|
||||
<span class="input-group-append">
|
||||
<button type="button" class="btn btn-default btn-xs btn-flat" onclick="incrementMenu(${params}, '${nama_produk}')">+</button>
|
||||
</span>
|
||||
</div>
|
||||
</td>
|
||||
`;
|
||||
</td>`;
|
||||
|
||||
calculateTotal();
|
||||
}
|
||||
|
@ -435,7 +437,8 @@
|
|||
var diskonSatuan = table.rows[index].getAttribute('data-diskon-satuan');
|
||||
var total = table.rows[index].getAttribute('data-total');
|
||||
var harga = table.rows[index].getAttribute('data-harga');
|
||||
var valueKeterangan = table.rows[index].cells[0].getElementsByTagName('input')[0].getAttribute('data-keterangan');
|
||||
var valueKeterangan = table.rows[index].cells[0].getElementsByTagName('input')[0].getAttribute(
|
||||
'data-keterangan');
|
||||
|
||||
if (qty > 1) {
|
||||
qty = parseInt(qty) - 1;
|
||||
|
@ -453,7 +456,7 @@
|
|||
<br>
|
||||
${(diskonSatuan > 0) ? '<small class="text-primary"><s>Rp. ' + (harga * qty) + '</s></small> | <small class="text-danger">Rp. ' + total + '</small>' : '<small class="text-primary">Rp. ' + totalLama + '</small>'}
|
||||
<div class="input-group input-group-sm mt-1">
|
||||
<input type="text" name="keterangan_satuan" data-keterangan="${valueKeterangan}" value="${valueKeterangan}" class="form-control rounded-0" placeholder="Keterangan..">
|
||||
<input type="text" name="keterangan_satuan" data-keterangan="${valueKeterangan}" value="${valueKeterangan}" class="form-control rounded-3" placeholder="Keterangan..">
|
||||
</div>
|
||||
</td>
|
||||
`;
|
||||
|
@ -464,7 +467,7 @@
|
|||
<span class="input-group-append">
|
||||
<button type="button" class="btn btn-default btn-xs btn-flat" onclick="decrementMenu(${params}, '${nama_produk}')"><b>-</b></button>
|
||||
</span>
|
||||
<input type="text" name="bayar" class="form-control rounded-0" readonly value="${qty}">
|
||||
<input type="text" name="bayar" class="form-control rounded-3" readonly value="${qty}">
|
||||
<span class="input-group-append">
|
||||
<button type="button" class="btn btn-default btn-xs btn-flat" onclick="incrementMenu(${params}, '${nama_produk}')">+</button>
|
||||
</span>
|
||||
|
@ -493,7 +496,8 @@
|
|||
var diskonSatuan = parseInt(diskon);
|
||||
var total = table.rows[index].getAttribute('data-total');
|
||||
var harga = table.rows[index].getAttribute('data-harga');
|
||||
var valueKeterangan = table.rows[index].cells[0].getElementsByTagName('input')[0].getAttribute('data-keterangan');
|
||||
var valueKeterangan = table.rows[index].cells[0].getElementsByTagName('input')[0].getAttribute(
|
||||
'data-keterangan');
|
||||
|
||||
// if (diskonSatuan >= 1) {
|
||||
// console.log(diskonSatuan);
|
||||
|
@ -512,7 +516,7 @@
|
|||
<br>
|
||||
${(diskonSatuan >= 1) ? '<small class="text-primary"><s>Rp. ' + (harga * qty) + '</s></small> | <small class="text-danger">Rp. ' + total + '</small>' : '<small class="text-primary">Rp. ' + totalLama + '</small>'}
|
||||
<div class="input-group input-group-sm mt-1">
|
||||
<input type="text" name="keterangan_satuan" data-keterangan="${valueKeterangan}" value="${valueKeterangan}" class="form-control rounded-0" placeholder="Keterangan..">
|
||||
<input type="text" name="keterangan_satuan" data-keterangan="${valueKeterangan}" value="${valueKeterangan}" class="form-control rounded-3" placeholder="Keterangan..">
|
||||
</div>
|
||||
</td>
|
||||
`;
|
||||
|
@ -540,6 +544,7 @@
|
|||
dengan_rupiah.value = formatRupiah(this.value, 'Rp. ');
|
||||
});
|
||||
|
||||
|
||||
/* Fungsi */
|
||||
function formatRupiah(angka, prefix) {
|
||||
var number_string = angka.replace(/[^,\d]/g, '').toString(),
|
||||
|
@ -595,6 +600,21 @@
|
|||
})
|
||||
})
|
||||
|
||||
// bayar uang pas
|
||||
$(document).ready(function() {
|
||||
$('#bayar_uang_pas').on('click', function() {
|
||||
// Mengambil teks dari elemen dengan menggunakan innerText
|
||||
let grandTotalText = document.getElementById('total-diskon').innerText;
|
||||
|
||||
// Mengisi nilai ke input dengan format Rupiah
|
||||
$("#nominal-bayar").val(formatRupiah(grandTotalText, 'Rp. '));
|
||||
calculatekembali();
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
|
||||
|
||||
// kirim pembayaran
|
||||
$(document).ready(function() {
|
||||
$('#pesan-bayar-tunai').on('click', function() {
|
||||
|
@ -644,12 +664,6 @@
|
|||
var kode_coa = split_rekening_coa_aba_penarikan[1]
|
||||
var keterangan_coa = split_rekening_coa_aba_penarikan[2]
|
||||
|
||||
// if (rekening_coa_aba_penarikan == '') {
|
||||
// alert('Pilih kas tujuan');
|
||||
// document.getElementById('pesan-bayar-tunai').disabled = false;
|
||||
// return false;
|
||||
// }
|
||||
|
||||
if (orderMenus.length == 0) {
|
||||
alert('Menu tidak boleh kosong');
|
||||
document.getElementById('pesan-bayar-tunai').disabled = false;
|
||||
|
@ -691,7 +705,7 @@
|
|||
nominalBayar: nominalBayar,
|
||||
kembali: kembaliHidden,
|
||||
jenis_pembayaran: jenis_pembayaran,
|
||||
coa_kas: id_rekening_coa,
|
||||
id_rekening_coa: id_rekening_coa,
|
||||
kode_coa: kode_coa,
|
||||
keterangan_coa: keterangan_coa,
|
||||
};
|
||||
|
@ -706,6 +720,7 @@
|
|||
timeOut: 2000
|
||||
});
|
||||
window.open(result.url, '_blank');
|
||||
// window.open(result.url, '_blank', "toolbar=yes,scrollbars=yes,resizable=yes,top=500,left=500,width=900,height=600");
|
||||
|
||||
setTimeout(function() {
|
||||
window.location.reload(1);
|
||||
|
@ -719,9 +734,134 @@
|
|||
}
|
||||
});
|
||||
})
|
||||
|
||||
// modal bayar non tunai
|
||||
$('#pesan-bayar-nontunai').on('click', function() {
|
||||
$("#modal_nontunai").modal('show')
|
||||
})
|
||||
|
||||
// pembayaran non tunai
|
||||
$('#pembayaran-nontunai').on('click', function() {
|
||||
let jenis_pembayaran = "2"
|
||||
// return console.log(jenis_pembayaran);
|
||||
var table = document.getElementById("order-menus");
|
||||
var orderMenus = [];
|
||||
|
||||
for (var i = 1, row; row = table.rows[i]; i++) {
|
||||
var id = row.getAttribute('data-id');
|
||||
var nama = row.getAttribute('data-nama');
|
||||
var qty = row.getAttribute('data-qty');
|
||||
var diskonSatuan = row.getAttribute('data-diskon-satuan');
|
||||
var harga = row.getAttribute('data-harga');
|
||||
var total = row.getAttribute('data-total');
|
||||
if (diskonSatuan != 0 && diskonSatuan != null && diskonSatuan != undefined) {
|
||||
total = total - (total * (diskonSatuan / 100));
|
||||
} else {
|
||||
total = total
|
||||
}
|
||||
|
||||
if (id != null || qty != null || total != null) {
|
||||
orderMenus.push({
|
||||
id: id,
|
||||
nama: nama,
|
||||
qty: qty,
|
||||
diskonSatuan: diskonSatuan,
|
||||
harga: harga,
|
||||
total: total,
|
||||
keterangan: document.getElementsByName('keterangan_satuan')[i - 1].value
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
var diskon = document.getElementsByName('diskon')[0].value;
|
||||
var totalDiskon = document.getElementById('total-diskon-hidden').innerHTML;
|
||||
var bayar = document.getElementsByName('nominal-bayar')[0].value;
|
||||
var nominalBayar = bayar.replace(/[^,\d]/g, '').toString();
|
||||
var kembaliHidden = document.getElementById('kembali-hidden').innerHTML;
|
||||
var namaPemesan = document.getElementsByName('nama-pemesan')[0].value;
|
||||
var nomorPemesan = document.getElementsByName('nomor-pemesan')[0].value;
|
||||
var nomorMeja = document.getElementsByName('nomor-meja')[0].value;
|
||||
var rekening_coa_aba_penarikan = $("#rekening_coa_aba_penarikan").val()
|
||||
var split_rekening_coa_aba_penarikan = rekening_coa_aba_penarikan.split("|")
|
||||
var id_rekening_coa = split_rekening_coa_aba_penarikan[0]
|
||||
var kode_coa = split_rekening_coa_aba_penarikan[1]
|
||||
var keterangan_coa = split_rekening_coa_aba_penarikan[2]
|
||||
|
||||
if (rekening_coa_aba_penarikan == '') {
|
||||
alert('Pilih kas tujuan');
|
||||
return false;
|
||||
}
|
||||
|
||||
if (orderMenus.length == 0) {
|
||||
alert('Menu tidak boleh kosong');
|
||||
document.getElementById('pesan-bayar-tunai').disabled = false;
|
||||
return false;
|
||||
}
|
||||
// if (totalDiskon != 0) {
|
||||
// if (nominalBayar == '' || nominalBayar == 0) {
|
||||
// alert('Pembayaran tidak boleh kosong');
|
||||
// document.getElementById('pesan-bayar-tunai').disabled = false;
|
||||
// return false;
|
||||
// }
|
||||
// }
|
||||
// if (kembaliHidden < 0) {
|
||||
// alert('Pembayaran kurang');
|
||||
// document.getElementById('pesan-bayar-tunai').disabled = false;
|
||||
// return false;
|
||||
// }
|
||||
if (namaPemesan == '' || namaPemesan == null || namaPemesan == undefined) {
|
||||
alert('Nama pemesan tidak boleh kosong');
|
||||
document.getElementById('pesan-bayar-tunai').disabled = false;
|
||||
return false;
|
||||
}
|
||||
if (nomorMeja == '' || nomorMeja == null || nomorMeja == undefined) {
|
||||
alert('Nomor meja tidak boleh kosong');
|
||||
document.getElementById('pesan-bayar-tunai').disabled = false;
|
||||
return false;
|
||||
}
|
||||
|
||||
var data = {
|
||||
_token: "{{ csrf_token() }}",
|
||||
orderCode: "{{ $orderCode }}",
|
||||
orderMenus: orderMenus,
|
||||
namaPemesan: namaPemesan,
|
||||
nomorPemesan: nomorPemesan,
|
||||
nomorMeja: nomorMeja,
|
||||
keteranganPesanan: document.getElementsByName('keterangan-pesanan')[0].value,
|
||||
diskon: diskon,
|
||||
totalDiskon: totalDiskon,
|
||||
nominalBayar: nominalBayar,
|
||||
kembali: kembaliHidden,
|
||||
jenis_pembayaran: jenis_pembayaran,
|
||||
id_rekening_coa: id_rekening_coa,
|
||||
kode_coa: kode_coa,
|
||||
keterangan_coa: keterangan_coa,
|
||||
};
|
||||
|
||||
$.ajax({
|
||||
url: "{{ route('transaksi.store') }}",
|
||||
method: "POST",
|
||||
data: data,
|
||||
success: function(result) {
|
||||
document.getElementById('pesan-bayar-tunai').disabled = false;
|
||||
toastr.success(result.message, 'Success', {
|
||||
timeOut: 2000
|
||||
});
|
||||
window.open(result.url, '_blank');
|
||||
// window.open(result.url, '_blank', "toolbar=yes,scrollbars=yes,resizable=yes,top=500,left=500,width=900,height=600");
|
||||
|
||||
setTimeout(function() {
|
||||
window.location.reload(1);
|
||||
}, 1000);
|
||||
},
|
||||
error: function(xhr, status, error) {
|
||||
document.getElementById('pesan-bayar-tunai').disabled = false;
|
||||
toastr.error(xhr.responseJSON.message, 'Error', {
|
||||
timeOut: 3000
|
||||
});
|
||||
}
|
||||
});
|
||||
})
|
||||
});
|
||||
|
||||
// select paket
|
||||
|
|
|
@ -46,7 +46,7 @@
|
|||
aria-labelledby="custom-tabs-four-{{ $item->kode_kelompok_kategori }}-tab">
|
||||
<div class="row">
|
||||
@if ($item->kode_kelompok_kategori == 'PAK-SKOM')
|
||||
<div class="col-lg-12 col-md-6 col-sm-6" style="padding: 0px">
|
||||
<div class="col-lg-12 col-md-12 col-sm-12" style="padding: 0px">
|
||||
<div class="row" style="padding: 0px">
|
||||
<div class="col-xl-3 col-lg-4 col-md-4 col-sm-3"
|
||||
style="margin-left: 0px;padding-left: 0px;">
|
||||
|
@ -105,7 +105,7 @@
|
|||
@foreach ($item->kelompokKategoriPivot as $key2 => $kelompokKategoriPivot)
|
||||
@if ($kelompokKategoriPivot->produk->urutan == 1)
|
||||
<div
|
||||
class="col-xl-4 col-lg-6 col-md-4 col-sm-4">
|
||||
class="col-xl-4 col-lg-6 col-md-12 col-sm-6">
|
||||
<div onclick="selectPaket( {{ $kelompokKategoriPivot->produk }} );changeTab('vert-tabs-telur')"
|
||||
class="card card-warning card-outline btn">
|
||||
<div class="card-header">
|
||||
|
@ -135,7 +135,7 @@
|
|||
@foreach ($item->kelompokKategoriPivot as $key2 => $kelompokKategoriPivot)
|
||||
@if ($kelompokKategoriPivot->produk->urutan == 2)
|
||||
<div
|
||||
class="col-xl-4 col-lg-6 col-md-4 col-sm-4">
|
||||
class="col-xl-4 col-lg-6 col-md-12 col-sm-6">
|
||||
<div onclick="selectPaket( {{ $kelompokKategoriPivot->produk }} );changeTab('vert-tabs-sambel')"
|
||||
class="card card-warning card-outline btn">
|
||||
<div class="card-header">
|
||||
|
@ -165,7 +165,7 @@
|
|||
@foreach ($item->kelompokKategoriPivot as $key2 => $kelompokKategoriPivot)
|
||||
@if ($kelompokKategoriPivot->produk->urutan == 3)
|
||||
<div
|
||||
class="col-xl-4 col-lg-6 col-md-4 col-sm-4">
|
||||
class="col-xl-4 col-lg-6 col-md-12 col-sm-6">
|
||||
<div onclick="selectPaket( {{ $kelompokKategoriPivot->produk }} );changeTab('vert-tabs-topping')"
|
||||
class="card card-warning card-outline btn">
|
||||
<div class="card-header">
|
||||
|
@ -195,7 +195,7 @@
|
|||
@foreach ($item->kelompokKategoriPivot as $key2 => $kelompokKategoriPivot)
|
||||
@if ($kelompokKategoriPivot->produk->urutan == 4)
|
||||
<div
|
||||
class="col-xl-4 col-lg-6 col-md-4 col-sm-4">
|
||||
class="col-xl-4 col-lg-6 col-md-12 col-sm-6">
|
||||
<div onclick="selectPaket( {{ $kelompokKategoriPivot->produk }} );changeTab('vert-tabs-free')"
|
||||
class="card card-warning card-outline btn">
|
||||
<div class="card-header">
|
||||
|
@ -224,7 +224,7 @@
|
|||
@foreach ($item->kelompokKategoriPivot as $key2 => $kelompokKategoriPivot)
|
||||
@if ($kelompokKategoriPivot->produk->urutan == 5)
|
||||
<div
|
||||
class="col-xl-4 col-lg-6 col-md-4 col-sm-4">
|
||||
class="col-xl-4 col-lg-6 col-md-12 col-sm-6">
|
||||
<div onclick="selectPaket( {{ $kelompokKategoriPivot->produk }} )"
|
||||
class="card card-warning card-outline btn">
|
||||
<div class="card-header">
|
||||
|
@ -337,6 +337,28 @@
|
|||
@endif
|
||||
@endif
|
||||
@else
|
||||
@if ($kelompokKategoriPivot->kelompok_kategori_id == 2)
|
||||
<div class="col-xl-4 col-lg-6 col-md-6 col-sm-12">
|
||||
<div class="card card-warning card-outline btn"
|
||||
onclick="aadMenu( {{ $kelompokKategoriPivot->produk }} )">
|
||||
<div class="card-header px-0">
|
||||
<h6 class="m-0 text-sm text-bold">
|
||||
{{ $kelompokKategoriPivot->produk->nama_produk ?? '' }}
|
||||
</h6>
|
||||
</div>
|
||||
<div class="card-body px-0">
|
||||
<div class="col-md-12 px-0">
|
||||
<div class="col-md-12 text-sm d-flex py-2 rounded bg-secondary" style="background-color: rgb(230, 230, 230)">
|
||||
<h5 class="my-auto text-bold" style="align-items: center;">
|
||||
{{ convert_to_rupiah($kelompokKategoriPivot->produk->harga_produk) }}
|
||||
</h5>
|
||||
<a class="btn btn-warning ml-auto" id="ordered-menus"><i class="fa fa-shopping-cart"></i></a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@else
|
||||
<div class="col-xl-4 col-lg-6 col-md-6 col-sm-12">
|
||||
<div class="card card-warning card-outline btn"
|
||||
onclick="aadMenu( {{ $kelompokKategoriPivot->produk }} )">
|
||||
|
@ -364,6 +386,7 @@
|
|||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@endif
|
||||
@endif
|
||||
@endforeach
|
||||
@endif
|
||||
|
@ -387,8 +410,8 @@
|
|||
</h5>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<table class="table table-bordered table-striped" id="order-menus" width="100%">
|
||||
<thead style="background-color: lightgray">
|
||||
<table class="table table-bordered table-striped" id="order-menus" style="border-collapse: collapse; width: 100%; max-width: 600px; border-radius: 10px; overflow: hidden; box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);">
|
||||
<thead style="background-color: rgb(230, 230, 230)">
|
||||
<tr>
|
||||
<th class="text-center">Menu</th>
|
||||
<th class="text-center" width="110px">Qty</th>
|
||||
|
@ -400,7 +423,7 @@
|
|||
</thead>
|
||||
<tbody id="tbody-order-menus">
|
||||
</tbody>
|
||||
<tfoot style="background-color: lightgray">
|
||||
<tfoot style="background-color: rgb(230, 230, 230)">
|
||||
<tr>
|
||||
<th class="text-center">Total</th>
|
||||
<th colspan="3">
|
||||
|
@ -415,7 +438,7 @@
|
|||
<th class="text-center">Diskon (%)</th>
|
||||
<th colspan="3">
|
||||
<div class="input-group input-group-sm">
|
||||
<input type="number" name="diskon" class="form-control rounded-0">
|
||||
<input type="number" name="diskon" class="form-control rounded-3">
|
||||
</div>
|
||||
</th>
|
||||
</tr>
|
||||
|
@ -433,7 +456,7 @@
|
|||
<th class="text-center">Bayar</th>
|
||||
<th colspan="3">
|
||||
<div class="input-group input-group-sm">
|
||||
<input type="text" name="nominal-bayar" class="form-control rounded-0"
|
||||
<input type="text" name="nominal-bayar" class="form-control rounded-3"
|
||||
required id="nominal-bayar">
|
||||
</div>
|
||||
</th>
|
||||
|
@ -448,20 +471,25 @@
|
|||
</span>
|
||||
</th>
|
||||
</tr>
|
||||
<tr>
|
||||
<th colspan="4" class="text-center">
|
||||
<button class="btn btn-outline-primary col-sm-12 col-md-12 col-lg-12" id="bayar_uang_pas">Uang Pas</button>
|
||||
</th>
|
||||
</tr>
|
||||
<tr>
|
||||
<th colspan="4">
|
||||
<span class="row">
|
||||
<input type="text" name="nama-pemesan"
|
||||
class="form-control rounded-0 col-lg-6" placeholder="Nama Pemesan"
|
||||
class="form-control rounded-3 col-lg-6" placeholder="Nama Pemesan"
|
||||
id="nama-pemesan" required>
|
||||
<input type="text" name="nomor-pemesan"
|
||||
class="form-control rounded-0 col-lg-6" placeholder="Nomor Pemesan"
|
||||
class="form-control rounded-3 col-lg-6" placeholder="Nomor Pemesan"
|
||||
id="nomor-pemesan" oninput="inputNum(this)" required>
|
||||
<input type="number" min="1" name="nomor-meja"
|
||||
class="form-control rounded-0" placeholder="Nomor Meja" id="nomor-meja"
|
||||
class="form-control rounded-3 mt-1" placeholder="Nomor Meja" id="nomor-meja"
|
||||
required>
|
||||
<input type="text" name="keterangan-pesanan"
|
||||
placeholder="Keterangan Pesanan" class="form-control rounded-0"
|
||||
placeholder="Keterangan Pesanan" class="form-control rounded-3 mt-1"
|
||||
id="keterangan-pesanan">
|
||||
</span>
|
||||
</th>
|
||||
|
@ -469,9 +497,9 @@
|
|||
<tr style="background-color: white">
|
||||
<th colspan="4">
|
||||
<div class="btn-group btn-block">
|
||||
<button class="btn btn-warning btn-block col-sm-10 col-md-10 col-lg-10"
|
||||
<button class="btn btn-warning btn-block col-sm-8 col-md-8 col-lg-8"
|
||||
id="pesan-bayar-tunai">Bayar</button>
|
||||
<button type="button" class="btn btn-success" id="nonTunaiSaja">
|
||||
<button type="button" class="btn btn-success" id="pesan-bayar-nontunai">
|
||||
Non Tunai
|
||||
</button>
|
||||
</div>
|
||||
|
|
|
@ -1,22 +1,22 @@
|
|||
@extends('layouts.base')
|
||||
|
||||
@section('content-header')
|
||||
<div class="col-12">
|
||||
<div class="container" style="display: contents">
|
||||
<div class="row mb-2">
|
||||
<div class="col-sm-6">
|
||||
<h1 class="m-0"> Kasir <small>kasir 3.0</small></h1>
|
||||
</div>
|
||||
<div class="col-sm-6">
|
||||
<ol class="breadcrumb float-sm-right">
|
||||
<li class="breadcrumb-item"><a href="#">Home</a></li>
|
||||
<li class="breadcrumb-item"><a href="#">Kasir</a></li>
|
||||
<li class="breadcrumb-item active">History</li>
|
||||
</ol>
|
||||
<div class="col-12">
|
||||
<div class="container" style="display: contents">
|
||||
<div class="row mb-2">
|
||||
<div class="col-sm-6">
|
||||
<h3 class="m-0"> Master Data</h3>
|
||||
</div>
|
||||
<div class="col-sm-6">
|
||||
<ol class="breadcrumb float-sm-right">
|
||||
<li class="breadcrumb-item"><a href="#">Home</a></li>
|
||||
<li class="breadcrumb-item"><a href="#">Admin</a></li>
|
||||
<li class="breadcrumb-item active">Menus</li>
|
||||
</ol>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@endsection
|
||||
|
||||
@section('content')
|
||||
|
@ -88,15 +88,15 @@
|
|||
@endsection
|
||||
|
||||
@push('styles')
|
||||
<!-- Toastr -->
|
||||
<style>
|
||||
@media only screen and (max-width : 991px) {
|
||||
/* Styles */
|
||||
}
|
||||
<!-- Toastr -->
|
||||
<style>
|
||||
@media only screen and (max-width : 991px) {
|
||||
/* Styles */
|
||||
}
|
||||
|
||||
@media only screen and (max-width : 768px) {
|
||||
/* Styles */
|
||||
}
|
||||
@media only screen and (max-width : 768px) {
|
||||
/* Styles */
|
||||
}
|
||||
|
||||
@media only screen and (max-width : 414px) {
|
||||
/* Styles */
|
||||
|
@ -145,4 +145,4 @@
|
|||
})
|
||||
})
|
||||
</script>
|
||||
@endpush
|
||||
@endpush
|
||||
|
|
|
@ -0,0 +1,365 @@
|
|||
@extends('layouts.base')
|
||||
|
||||
@section('content-header')
|
||||
<div class="col-12">
|
||||
<div class="container" style="display: contents">
|
||||
<div class="row mb-2">
|
||||
<div class="col-sm-6">
|
||||
<h1 class="m-0"> Dashboard</h1>
|
||||
</div>
|
||||
<div class="col-sm-6">
|
||||
<ol class="breadcrumb float-sm-right">
|
||||
<li class="breadcrumb-item active">Dashboard</li>
|
||||
</ol>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@endsection
|
||||
|
||||
@section('content')
|
||||
<div class="row">
|
||||
<div class="col-md-12">
|
||||
<div class="card" id="calculationPendapatan">
|
||||
<div class="card-header">
|
||||
<h5 class="card-title">Laporan Pendapatan dan Pengeluaran</h5>
|
||||
</div>
|
||||
<!-- /.card-header -->
|
||||
|
||||
<!-- ./card-body -->
|
||||
<div class="card-footer">
|
||||
<div class="row">
|
||||
<div class="col-sm-3 col-6">
|
||||
<div class="description-block border-right">
|
||||
<span class="description-percentage" id="penjualanHaripercentageOfSalesGrowth">
|
||||
</span>
|
||||
<h5 class="description-header" id="penjualanHari"></h5>
|
||||
<span class="description-text">Pendapatan Hari ini</span>
|
||||
</div>
|
||||
<!-- /.description-block -->
|
||||
</div>
|
||||
<!-- /.col -->
|
||||
<div class="col-sm-3 col-6">
|
||||
<div class="description-block border-right">
|
||||
<span class="description-percentage" id="pengeluaranHaripercentageOfSalesGrowth">
|
||||
</span>
|
||||
<h5 class="description-header" id="pengeluaranHari"></h5>
|
||||
<span class="description-text">Pengeluaran Hari ini</span>
|
||||
</div>
|
||||
<!-- /.description-block -->
|
||||
</div>
|
||||
<!-- /.col -->
|
||||
<div class="col-sm-3 col-6">
|
||||
<div class="description-block border-right">
|
||||
<span class="description-percentage" id="penjualanBulanpercentageOfSalesGrowth">
|
||||
</span>
|
||||
<h5 class="description-header" id="penjualanBulan"></h5>
|
||||
<span class="description-text">Pendapatan Bulan ini</span>
|
||||
</div>
|
||||
<!-- /.description-block -->
|
||||
</div>
|
||||
<!-- /.col -->
|
||||
<div class="col-sm-3 col-6">
|
||||
<div class="description-block">
|
||||
<span class="description-percentage" id="pengeluaranBulanpercentageOfSalesGrowth">
|
||||
</span>
|
||||
<h5 class="description-header" id="pengeluaranBulan"></h5>
|
||||
<span class="description-text">Pengeluaran Bulan ini</span>
|
||||
</div>
|
||||
<!-- /.description-block -->
|
||||
</div>
|
||||
</div>
|
||||
<!-- /.row -->
|
||||
</div>
|
||||
<!-- /.card-footer -->
|
||||
</div>
|
||||
<!-- /.card -->
|
||||
</div>
|
||||
<!-- /.col -->
|
||||
</div>
|
||||
<!-- /.row -->
|
||||
|
||||
<!-- Main content -->
|
||||
<div class="content">
|
||||
<div class="container-fluid">
|
||||
<div class="row">
|
||||
<div class="col-lg-6">
|
||||
<div class="card">
|
||||
<div class="card-header border-0">
|
||||
<h3 class="card-title">Menu Terlaris</h3>
|
||||
<div class="card-tools">
|
||||
<a href="#" class="btn btn-tool btn-sm">
|
||||
<i class="fas fa-download"></i>
|
||||
</a>
|
||||
<a href="#" class="btn btn-tool btn-sm">
|
||||
<i class="fas fa-bars"></i>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="card-body table-responsive p-0">
|
||||
<table class="table table-striped table-valign-middle" id="table-terlaris">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>No</th>
|
||||
<th>Menu</th>
|
||||
<th>Harga</th>
|
||||
<th>Terjual</th>
|
||||
</tr>
|
||||
</thead>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
<!-- /.card -->
|
||||
</div>
|
||||
<!-- /.col-md-6 -->
|
||||
<div class="col-lg-6">
|
||||
<!-- /.card -->
|
||||
<div class="card">
|
||||
<div class="card-header border-0">
|
||||
<div class="d-flex justify-content-between">
|
||||
<h3 class="card-title">Penjualan</h3>
|
||||
<a href="javascript:void(0);">View Report</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<div class="d-flex">
|
||||
<p class="d-flex flex-column">
|
||||
<span class="text-bold text-lg" id="penjualanSepanjangWaktu"></span>
|
||||
<span>Penjualan Keseluruhan</span>
|
||||
</p>
|
||||
<p class="ml-auto d-flex flex-column text-right">
|
||||
<span class="text-success" id="persentaseSepanjangWaktu">
|
||||
<i class="fas fa-arrow-up"></i> 33.1%
|
||||
</span>
|
||||
<span class="text-muted">dari bulan lalu</span>
|
||||
</p>
|
||||
</div>
|
||||
<!-- /.d-flex -->
|
||||
|
||||
<div class="position-relative mb-4">
|
||||
<canvas id="sales-chart" height="200"></canvas>
|
||||
</div>
|
||||
|
||||
<div class="d-flex flex-row justify-content-end">
|
||||
<span class="mr-2">
|
||||
<i class="fas fa-square text-primary"></i> Bulan ini
|
||||
</span>
|
||||
|
||||
<span>
|
||||
<i class="fas fa-square text-gray"></i> Bulan Kemarin
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- /.col-md-6 -->
|
||||
</div>
|
||||
<!-- /.row -->
|
||||
</div>
|
||||
<!-- /.container-fluid -->
|
||||
</div>
|
||||
<!-- /.content -->
|
||||
@endsection
|
||||
|
||||
@push('styles')
|
||||
<link rel="stylesheet" href="{{ asset('assets/datatables/datatables.min.css') }} ">
|
||||
@endpush
|
||||
|
||||
@push('scripts')
|
||||
<script src="{{ asset('assets/datatables/datatables.min.js') }}"></script>
|
||||
<!-- ChartJS -->
|
||||
<script src="{{ asset('assets/plugins/chart.js/Chart.min.js') }}"></script>
|
||||
|
||||
<script type="text/javascript">
|
||||
$(function() {
|
||||
'use strict'
|
||||
|
||||
var ticksStyle = {
|
||||
fontColor: '#495057',
|
||||
fontStyle: 'bold'
|
||||
}
|
||||
|
||||
var mode = 'index'
|
||||
var intersect = true
|
||||
|
||||
$.ajax({
|
||||
url: "{{ route('dashboard.getChart') }}",
|
||||
type: "GET",
|
||||
cache: false,
|
||||
async: false,
|
||||
success: function(response) {
|
||||
var data = response.data;
|
||||
console.log(data);
|
||||
$('#penjualanSepanjangWaktu').append(converRp(data.allPenjualan));
|
||||
var $salesChart = $('#sales-chart')
|
||||
var salesChart = new Chart($salesChart, {
|
||||
type: 'bar',
|
||||
data: {
|
||||
labels: Object.keys(data.weekThisMonth),
|
||||
datasets: [{
|
||||
backgroundColor: '#007bff',
|
||||
borderColor: '#007bff',
|
||||
data: Object.values(data.weekThisMonth)
|
||||
},
|
||||
{
|
||||
backgroundColor: '#ced4da',
|
||||
borderColor: '#ced4da',
|
||||
data: Object.values(data.weekLastMonth)
|
||||
}
|
||||
]
|
||||
},
|
||||
options: {
|
||||
maintainAspectRatio: false,
|
||||
tooltips: {
|
||||
mode: mode,
|
||||
intersect: intersect
|
||||
},
|
||||
hover: {
|
||||
mode: mode,
|
||||
intersect: intersect
|
||||
},
|
||||
legend: {
|
||||
display: false
|
||||
},
|
||||
scales: {
|
||||
yAxes: [{
|
||||
// display: false,
|
||||
gridLines: {
|
||||
display: true,
|
||||
lineWidth: '4px',
|
||||
color: 'rgba(0, 0, 0, .2)',
|
||||
zeroLineColor: 'transparent'
|
||||
},
|
||||
ticks: $.extend({
|
||||
beginAtZero: true,
|
||||
// Include a dollar sign in the ticks
|
||||
callback: function(value, index,
|
||||
values) {
|
||||
return converRp(value)
|
||||
}
|
||||
}, ticksStyle)
|
||||
}],
|
||||
xAxes: [{
|
||||
display: true,
|
||||
gridLines: {
|
||||
display: false
|
||||
},
|
||||
ticks: ticksStyle
|
||||
}]
|
||||
}
|
||||
}
|
||||
})
|
||||
},
|
||||
error: function(response) {
|
||||
console.log(response);
|
||||
}
|
||||
})
|
||||
})
|
||||
|
||||
$(document).ready(function() {
|
||||
$('#table-terlaris').DataTable({
|
||||
processing: true,
|
||||
serverSide: true,
|
||||
searching: false,
|
||||
"bLengthChange": false,
|
||||
"bFilter": true,
|
||||
"bInfo": false,
|
||||
ajax: "{{ route('dashboard.menuTerlaris') }}",
|
||||
columns: [{
|
||||
data: 'DT_RowIndex',
|
||||
name: 'DT_RowIndex',
|
||||
className: 'text-center'
|
||||
},
|
||||
{
|
||||
data: 'nama_produk',
|
||||
name: 'nama_produk'
|
||||
},
|
||||
{
|
||||
data: 'harga_produk',
|
||||
name: 'harga_produk',
|
||||
'render': function(data, type, full, meta) {
|
||||
// change to IDR
|
||||
return 'Rp. ' + data.toString().replace(/\B(?=(\d{3})+(?!\d))/g, '.');
|
||||
},
|
||||
className: 'text-right'
|
||||
},
|
||||
{
|
||||
data: 'jumlah_produk_terjual',
|
||||
name: 'jumlah_produk_terjual'
|
||||
}
|
||||
]
|
||||
})
|
||||
})
|
||||
|
||||
$(document).ready(function() {
|
||||
getCalculationPendapatan();
|
||||
})
|
||||
|
||||
function getCalculationPendapatan() {
|
||||
$.ajax({
|
||||
url: "{{ route('dashboard.getCalculationPendapatan') }}",
|
||||
type: "GET",
|
||||
cache: false,
|
||||
async: false,
|
||||
success: function(response) {
|
||||
var data = response.data;
|
||||
changeDataFromCalculate('penjualanBulan', data.pendapatanBulan
|
||||
.penjualanSatuBulan, data.pendapatanBulan.percentageOfSalesGrowth,
|
||||
data.pendapatanBulan.statusCalculation)
|
||||
changeDataFromCalculate('penjualanHari', data.pendapatanHari
|
||||
.penjualanHariIni, data.pendapatanHari.percentageOfSalesGrowth,
|
||||
data.pendapatanHari.statusCalculation)
|
||||
changeDataFromCalculate('pengeluaranBulan', data.pengeluaranBulan
|
||||
.pengeluaranSatuBulan, data.pengeluaranBulan.percentageOfSalesGrowth,
|
||||
data.pengeluaranBulan.statusCalculation)
|
||||
changeDataFromCalculate('pengeluaranHari', data.pengeluaranHari
|
||||
.pengeluaranHariIni, data.pengeluaranHari.percentageOfSalesGrowth,
|
||||
data.pengeluaranHari.statusCalculation)
|
||||
},
|
||||
error: function(response) {
|
||||
console.log(response);
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
function changeDataFromCalculate(id, penjualanSatuBulan, percentageOfSalesGrowth, statusCalculation) {
|
||||
// change to IDR
|
||||
if (penjualanSatuBulan == null) {
|
||||
penjualanSatuBulan = 0;
|
||||
} else {
|
||||
penjualanSatuBulan;
|
||||
}
|
||||
|
||||
$('#' + id).append(converRp(penjualanSatuBulan));
|
||||
|
||||
// pembulatan 2 angka di belakang koma
|
||||
percentageOfSalesGrowth = percentageOfSalesGrowth.toFixed(2);
|
||||
switch (statusCalculation) {
|
||||
case 1:
|
||||
$('#' + id + 'percentageOfSalesGrowth').append('<i class="fas fa-caret-left"></i> ' +
|
||||
percentageOfSalesGrowth + '%')
|
||||
$('#' + id + 'percentageOfSalesGrowth').addClass('text-warning')
|
||||
break;
|
||||
case 2:
|
||||
$('#' + id + 'percentageOfSalesGrowth').append('<i class="fas fa-caret-up"></i> ' +
|
||||
percentageOfSalesGrowth + '%')
|
||||
$('#' + id + 'percentageOfSalesGrowth').addClass('text-success')
|
||||
break;
|
||||
case 3:
|
||||
$('#' + id + 'percentageOfSalesGrowth').append('<i class="fas fa-caret-down"></i> ' +
|
||||
percentageOfSalesGrowth + '%')
|
||||
$('#' + id + 'percentageOfSalesGrowth').addClass('text-danger')
|
||||
break;
|
||||
default:
|
||||
$('#' + id + 'percentageOfSalesGrowth').append('<i class="fas fa-caret-left"></i> ' +
|
||||
percentageOfSalesGrowth + '%')
|
||||
$('#' + id + 'percentageOfSalesGrowth').addClass('text-warning')
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
function converRp(params) {
|
||||
return ('Rp. ' + params.toString().replace(/\B(?=(\d{3})+(?!\d))/g, '.') ?? 0);
|
||||
}
|
||||
</script>
|
||||
@endpush
|
|
@ -0,0 +1,33 @@
|
|||
@extends('layouts.base')
|
||||
|
||||
@section('content-header')
|
||||
<div class="col-12">
|
||||
<div class="container" style="display: contents">
|
||||
<div class="row mb-2">
|
||||
<div class="col-sm-6">
|
||||
<h1 class="m-0"> Laporan</h1>
|
||||
</div>
|
||||
<div class="col-sm-6">
|
||||
<ol class="breadcrumb float-sm-right">
|
||||
<li class="breadcrumb-item"><a href="#">Home</a></li>
|
||||
<li class="breadcrumb-item"><a href="#">Admin</a></li>
|
||||
<li class="breadcrumb-item active">Laporan</li>
|
||||
</ol>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@endsection
|
||||
|
||||
@section('content')
|
||||
<div class="col-12 mt-2">
|
||||
<div class="container" style="display: contents">
|
||||
<div class="card">
|
||||
<div class="card bg-warning" style="min-height:5px; border-radius:1px;"></div>
|
||||
<div class="card-body">
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@endsection
|
|
@ -0,0 +1,165 @@
|
|||
@extends('layouts.base')
|
||||
|
||||
@section('content-header')
|
||||
<div class="col-12">
|
||||
<div class="container" style="display: contents">
|
||||
<div class="row mb-2">
|
||||
<div class="col-sm-6">
|
||||
<h1 class="m-0"> Pengeluaran</h1>
|
||||
</div>
|
||||
<div class="col-sm-6">
|
||||
<ol class="breadcrumb float-sm-right">
|
||||
<li class="breadcrumb-item">Home</li>
|
||||
<li class="breadcrumb-item">Transaksi</li>
|
||||
<li class="breadcrumb-item active">Pengeluaran</li>
|
||||
</ol>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@endsection
|
||||
|
||||
@section('content')
|
||||
<div class="content__boxed">
|
||||
<div class="content__wrap">
|
||||
<div class="row">
|
||||
<div class="col-sm-12 mt-2">
|
||||
<div class="card">
|
||||
<div class="card bg-warning" style="min-height:5px; border-radius:1px;"></div>
|
||||
<div class="card-body">
|
||||
<div class="col-md-12">
|
||||
<div class="row">
|
||||
<div class="col-md-12">
|
||||
<h5>Form Input Data</h5>
|
||||
</div>
|
||||
<div class="col-md-6 mt-3">
|
||||
<label>Tanggal</label>
|
||||
<input type="date" class="form-control" id="tanggal"
|
||||
value="{{ date('Y-m-d') }}">
|
||||
</div>
|
||||
<div class="col-md-6 mt-3">
|
||||
<label>Jenis Transaksi</label>
|
||||
<select class="form-control" id="jenis_transaksi">
|
||||
<option value="" selected>--Pilih Jenis Transkasi--</option>
|
||||
<option value="1">Tunai</option>
|
||||
<option value="2">Transfer</option>
|
||||
</select>
|
||||
</div>
|
||||
<div class="col-md-6 mt-3">
|
||||
<label>Rekening Coa Kebutuhan</label>
|
||||
<select class="form-control" id="rekening_coa_kebutuhan">
|
||||
<option value="" selected>--Pilih Rekening Coa--</option>
|
||||
@foreach ($coaBiaya as $biaya)
|
||||
@if ($biaya->status == 0)
|
||||
<optgroup label="{{ $biaya->coa }} | {{ $biaya->keterangan_coa }}">
|
||||
@else
|
||||
<option
|
||||
value="{{ $biaya->id }}|{{ $biaya->coa }}|{{ $biaya->keterangan_coa }}">
|
||||
{{ $biaya->coa }} | {{ $biaya->keterangan_coa }}</option>
|
||||
@endif
|
||||
@endforeach
|
||||
</select>
|
||||
</div>
|
||||
<div class="col-md-6 mt-3">
|
||||
<label>Nominal</label>
|
||||
<input type="number" min="0" class="form-control" id="nominal"
|
||||
placeholder="Nominal Pengeluaran">
|
||||
</div>
|
||||
<div class="col-md-6 mt-3">
|
||||
<label>Keterangan</label>
|
||||
<textarea class="form-control" id="keterangan" placeholder="Keterangan"></textarea>
|
||||
</div>
|
||||
<div hidden class="transfer col-6 mt-3">
|
||||
<label class="form-label">Rekening Coa Jenis Transaksi</label>
|
||||
<select class="form-control" id="rekening_coa_transfer">
|
||||
<option selected disabled>--Pilih Rekening Coa--</option>
|
||||
@foreach ($rekeningCoaTf as $coaTf)
|
||||
@if ($coaTf->status == 0)
|
||||
<optgroup label="{{ $coaTf->coa }} | {{ $coaTf->keterangan_coa }}">
|
||||
@else
|
||||
<option
|
||||
value="{{ $biaya->id }}|{{ $coaTf->coa }}|{{ $coaTf->keterangan_coa }}">
|
||||
{{ $coaTf->coa }} | {{ $coaTf->keterangan_coa }}</option>
|
||||
@endif
|
||||
@endforeach
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<hr>
|
||||
<a href="javascript:void(0)" class="btn btn-warning" id="simpan_pengeluaran">Simpan Data</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-sm-12 mt-2">
|
||||
<div class="card">
|
||||
<div class="card bg-warning" style="min-height:5px; border-radius:1px;"></div>
|
||||
<div class="card-body">
|
||||
<div class="col-md-12">
|
||||
<form action="{{ route('pengeluaran.laporan') }}" method="POST">
|
||||
@csrf
|
||||
<div class="row">
|
||||
<div class="col-md-12">
|
||||
<h5>Form Laporan</h5>
|
||||
</div>
|
||||
<div class="col-md-4 mt-3">
|
||||
<label>Dari Tanggal</label>
|
||||
<input type="date" class="form-control" name="filter_tanggal_1"
|
||||
id="filter_tanggal_1" value="{{ date('Y-m-d') }}">
|
||||
</div>
|
||||
<div class="col-md-4 mt-3">
|
||||
<label>Sampai Tanggal</label>
|
||||
<input type="date" class="form-control" name="filter_tanggal_2"
|
||||
id="filter_tanggal_2" value="{{ date('Y-m-d') }}">
|
||||
</div>
|
||||
<div class="col-md-4 mt-5">
|
||||
<div class="row">
|
||||
<a href="javascript:void(0)" class="btn btn-sm btn-primary"
|
||||
id="btn_filter"><i class="fas fa-search mr-1"></i>Filter
|
||||
data</a>
|
||||
<button class="btn btn-sm btn-warning" type="submit" id="filter_laporan"><i
|
||||
class="fas fa-print mr-1"></i>Cetak</button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-12">
|
||||
<div class="table-responsive mt-3">
|
||||
<table id="tabelku" class="table table-hover display" style="width: 100%">
|
||||
<thead>
|
||||
<tr>
|
||||
<th class="text-center">No</th>
|
||||
<th>Faktur</th>
|
||||
<th>Kebutuhan</th>
|
||||
<th>Jenis Transaksi</th>
|
||||
<th>Jenis Transaksi</th>
|
||||
<th>Tanggal Transaksi</th>
|
||||
<th>User</th>
|
||||
<th>Nominal</th>
|
||||
<th class="text-center"><i class="fas fa-cog"></i></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tfoot>
|
||||
<tr>
|
||||
<th class="text-right"></th>
|
||||
<th class="text-right"></th>
|
||||
<th class="text-right" colspan="4">Total</th>
|
||||
<th class="text-right"></th>
|
||||
<th class="text-center"><i class="fas fa-cog"></i></th>
|
||||
</tr>
|
||||
</tfoot>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@endsection
|
||||
|
||||
@include('pages.admin.pengeluaran.js')
|
|
@ -0,0 +1,191 @@
|
|||
@push('scripts')
|
||||
<script src="{{ asset('assets/datatables/datatables.min.js') }}"></script>
|
||||
<script src="{{ asset('assets/plugins/toastr/toastr.min.js') }}"></script>
|
||||
|
||||
<script>
|
||||
$(document).ready(function() {
|
||||
let dataTable = $('#tabelku').DataTable({
|
||||
aLengthMenu: [
|
||||
[25, 50, 100, 200, -1],
|
||||
[25, 50, 100, 200, "All"]
|
||||
],
|
||||
processing: true,
|
||||
serverSide: true,
|
||||
|
||||
ajax: {
|
||||
url: '{{ route('pengeluaran.getDataPengeluaran') }}',
|
||||
data: function(d) {
|
||||
d.filter_tanggal_1 = $("#filter_tanggal_1").val();
|
||||
d.filter_tanggal_2 = $("#filter_tanggal_2").val();
|
||||
}
|
||||
},
|
||||
columns: [{
|
||||
data: 'nomor',
|
||||
name: 'nomor',
|
||||
orderable: false,
|
||||
className: 'text-center'
|
||||
},
|
||||
{
|
||||
data: 'faktur',
|
||||
name: 'faktur'
|
||||
},
|
||||
{
|
||||
data: 'keterangan',
|
||||
name: 'keterangan'
|
||||
},
|
||||
{
|
||||
data: 'jenis_trasaksi',
|
||||
name: 'jenis_trasaksi',
|
||||
className: 'text-center',
|
||||
render: function(data) {
|
||||
if (data == 1) {
|
||||
return "Tunai"
|
||||
} else {
|
||||
return "Transfer"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
data: 'tanggal',
|
||||
name: 'tanggal'
|
||||
},
|
||||
{
|
||||
data: 'user.name',
|
||||
name: 'user.name'
|
||||
},
|
||||
{
|
||||
data: 'nominal',
|
||||
name: 'nominal',
|
||||
className: 'text-right',
|
||||
render: function(data) {
|
||||
// change to IDR
|
||||
return 'Rp. ' + data.toString().replace(/\B(?=(\d{3})+(?!\d))/g, '.');
|
||||
}
|
||||
},
|
||||
{
|
||||
data: 'ubah',
|
||||
name: 'ubah',
|
||||
className: 'text-center'
|
||||
},
|
||||
],
|
||||
footerCallback: function(row, data, start, end, display) {
|
||||
let api = this.api();
|
||||
// Remove the formatting to get integer data for summation
|
||||
let intVal = function(i) {
|
||||
return typeof i === 'string' ?
|
||||
i.replace(/[\$,]/g, '') * 1 :
|
||||
typeof i === 'number' ?
|
||||
i :
|
||||
0;
|
||||
};
|
||||
|
||||
// GrandTotal over all pages
|
||||
totalAll = api
|
||||
.column(6)
|
||||
.data()
|
||||
.reduce((a, b) => intVal(a) + intVal(b), 0);
|
||||
|
||||
// Update footer
|
||||
api.column(6).footer().innerHTML =
|
||||
'Rp. ' + totalAll.toString().replace(/\B(?=(\d{3})+(?!\d))/g, '.');
|
||||
}
|
||||
})
|
||||
$('#btn_filter').on('click', function() {
|
||||
if ($("#filter_tanggal_1").val() == "" || $("#filter_tanggal_2").val() == "") {
|
||||
alert("Input pencarian tidak boleh kosong")
|
||||
} else {
|
||||
dataTable.ajax.reload();
|
||||
}
|
||||
});
|
||||
})
|
||||
</script>
|
||||
<script>
|
||||
$(document).ready(function() {
|
||||
$('#jenis_transaksi').on('change', function() {
|
||||
if ($("#jenis_transaksi").val() == "1") {
|
||||
$(".transfer").prop('hidden', true)
|
||||
} else if ($("#jenis_transaksi").val() == "2") {
|
||||
$(".transfer").prop('hidden', false)
|
||||
} else {
|
||||
$(".transfer").prop('hidden', true)
|
||||
}
|
||||
})
|
||||
})
|
||||
</script>
|
||||
<script>
|
||||
$(document).ready(function() {
|
||||
$('#simpan_pengeluaran').on('click', function() {
|
||||
// Jika jenis transaksi tunai
|
||||
if ($("#jenis_transaksi").val() == "1") {
|
||||
let rekening_coa_kebutuhan = $("#rekening_coa_kebutuhan").val()
|
||||
let split_rekening_coa_kebutuhan = rekening_coa_kebutuhan.split("|")
|
||||
let id_rekening_coa = split_rekening_coa_kebutuhan[0]
|
||||
let kode_coa = split_rekening_coa_kebutuhan[1]
|
||||
let keterangan_coa = split_rekening_coa_kebutuhan[2]
|
||||
let dataTunai = {
|
||||
tanggal: $("#tanggal").val(),
|
||||
jenis_transaksi: $("#jenis_transaksi").val(),
|
||||
nominal: $("#nominal").val(),
|
||||
keterangan: $("#keterangan").val(),
|
||||
id_rekening_coa: id_rekening_coa,
|
||||
kode_coa: kode_coa,
|
||||
keterangan_coa: keterangan_coa,
|
||||
}
|
||||
// return console.log(dataTunai);
|
||||
$.ajax({
|
||||
headers: {
|
||||
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
|
||||
},
|
||||
type: "POST",
|
||||
url: "{{ route('pengeluaran.simpan') }}",
|
||||
data: dataTunai,
|
||||
success: function(result) {
|
||||
if (result) {
|
||||
alert(result.message)
|
||||
location.reload()
|
||||
}
|
||||
}
|
||||
})
|
||||
} else {
|
||||
let rekening_coa_kebutuhan = $("#rekening_coa_kebutuhan").val()
|
||||
let split_rekening_coa_kebutuhan = rekening_coa_kebutuhan.split("|")
|
||||
let id_rekening_coa = split_rekening_coa_kebutuhan[0]
|
||||
let kode_coa = split_rekening_coa_kebutuhan[1]
|
||||
let keterangan_coa = split_rekening_coa_kebutuhan[2]
|
||||
let rekening_coa_transfer = $("#rekening_coa_transfer").val()
|
||||
let split_rekening_coa_transfer = rekening_coa_transfer.split("|")
|
||||
let id_rekening_coa_transfer = split_rekening_coa_transfer[0]
|
||||
let kode_coa_transfer = split_rekening_coa_transfer[1]
|
||||
let keterangan_coa_transfer = split_rekening_coa_transfer[2]
|
||||
let dataTranfer = {
|
||||
tanggal: $("#tanggal").val(),
|
||||
jenis_transaksi: $("#jenis_transaksi").val(),
|
||||
nominal: $("#nominal").val(),
|
||||
keterangan: $("#keterangan").val(),
|
||||
id_rekening_coa: id_rekening_coa,
|
||||
kode_coa: kode_coa,
|
||||
keterangan_coa: keterangan_coa,
|
||||
id_rekening_coa_transfer: id_rekening_coa_transfer,
|
||||
kode_coa_transfer: kode_coa_transfer,
|
||||
keterangan_coa_transfer: keterangan_coa_transfer,
|
||||
}
|
||||
// return console.log(dataTranfer);
|
||||
$.ajax({
|
||||
headers: {
|
||||
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
|
||||
},
|
||||
type: "POST",
|
||||
url: "{{ route('pengeluaran.simpan') }}",
|
||||
data: dataTranfer,
|
||||
success: function(result) {
|
||||
if (result) {
|
||||
alert(result.message)
|
||||
location.reload()
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
})
|
||||
})
|
||||
</script>
|
||||
@endpush
|
|
@ -0,0 +1,55 @@
|
|||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta http-equiv="X-UA-Compatible" content="ie=edge">
|
||||
<title>Laporan Pengeluaran</title>
|
||||
</head>
|
||||
<body>
|
||||
<table style="width: 100%;">
|
||||
<tr>
|
||||
<td>Tanggal Unduh: {{ date('d-m-Y H:i:s') }}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Dicetak Oleh: {{ Session::get('name') }}</td>
|
||||
</tr>
|
||||
</table>
|
||||
<hr>
|
||||
<table style="width: 100%;">
|
||||
<tr>
|
||||
<td style="text-align: center; font-size: 20px; font-weight: bold;">Laporan Pengeluaran</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="text-align: center;">Pencarian: {{ 'Antara Tanggal '.toDmy($filter_tanggal_1).' s/d Tanggal '.toDmy($filter_tanggal_2).'' }}</td>
|
||||
</tr>
|
||||
</table>
|
||||
<br>
|
||||
<table style="width: 100%; border-collapse:collapse; border:1px solid black;">
|
||||
<thead style="border-collapse:collapse; border:1px solid black;">
|
||||
<tr style="border-collapse:collapse; border:1px solid black;">
|
||||
<th style="border-collapse:collapse; border:1px solid black;">No</th>
|
||||
<th style="border-collapse:collapse; border:1px solid black;">Faktur</th>
|
||||
<th style="border-collapse:collapse; border:1px solid black;">Tanggal</th>
|
||||
<th style="border-collapse:collapse; border:1px solid black;">Jenis Transaksi</th>
|
||||
<th style="border-collapse:collapse; border:1px solid black;">Nominal</th>
|
||||
<th style="border-collapse:collapse; border:1px solid black;">Keterangan</th>
|
||||
<th style="border-collapse:collapse; border:1px solid black;">User</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody style="border-collapse:collapse; border:1px solid black;">
|
||||
@foreach ($data as $key => $val)
|
||||
<tr>
|
||||
<td style="text-align: center; border-collapse:collapse; border:1px solid black;">{{ $key+1 }}</td>
|
||||
<td style="border-collapse:collapse; border:1px solid black;">{{ $val->faktur }}</td>
|
||||
<td style="text-align:center; border-collapse:collapse; border:1px solid black;">{{ toDmy($val->tanggal) }}</td>
|
||||
<td style="text-align:center; border-collapse:collapse; border:1px solid black;">{{ $val->jenis_transaksi == "1" ? "Tunai" : "Transfer" }}</td>
|
||||
<td style="text-align: left; border-collapse:collapse; border:1px solid black;">Rp {{ format_uang($val->nominal) }}</td>
|
||||
<td style="border-collapse:collapse; border:1px solid black;">{{ $val->keterangan }}</td>
|
||||
<td style="text-align:center; border-collapse:collapse; border:1px solid black;">{{ $val->user->name }}</td>
|
||||
</tr>
|
||||
@endforeach
|
||||
</tbody>
|
||||
</table>
|
||||
</body>
|
||||
</html>
|
|
@ -0,0 +1,132 @@
|
|||
@extends('layouts.base')
|
||||
|
||||
@section('content-header')
|
||||
<div class="col-12">
|
||||
<div class="container" style="display: contents">
|
||||
<div class="row mb-2">
|
||||
<div class="col-sm-6">
|
||||
<h3 class="m-0"> Master Data</h3>
|
||||
</div>
|
||||
<div class="col-sm-6">
|
||||
<ol class="breadcrumb float-sm-right">
|
||||
<li class="breadcrumb-item"><a href="#">Home</a></li>
|
||||
<li class="breadcrumb-item"><a href="#">Admin</a></li>
|
||||
<li class="breadcrumb-item active">Tambah Roles</li>
|
||||
</ol>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@endsection
|
||||
|
||||
@section('content')
|
||||
<div class="col-lg-12 col-md-12 col-sm-12 mt-2">
|
||||
<div class="container" style="display: contents">
|
||||
<div class="card">
|
||||
<div class="card bg-warning" style="min-height:5px; border-radius:1px;"></div>
|
||||
<div class="card-header mt-0 pt-0">
|
||||
<div class="d-flex">
|
||||
<h4>Tambah Role</h4>
|
||||
<!-- Button trigger modal -->
|
||||
<div class="ml-auto">
|
||||
<button type="button" class="btn btn-warning" href="{{ route('roles.refresh-routes') }}">
|
||||
Refresh Role
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="card-body border-top">
|
||||
@if (count($errors) > 0)
|
||||
<div class="alert alert-danger">
|
||||
<strong>Whoops!</strong> There were some problems with your input.<br><br>
|
||||
<ul>
|
||||
@foreach ($errors->all() as $error)
|
||||
<li>{{ $error }}</li>
|
||||
@endforeach
|
||||
</ul>
|
||||
</div>
|
||||
@endif
|
||||
|
||||
<form method="POST" action="{{ route('roles.store') }}" id="formCreate">
|
||||
@method('post')
|
||||
@csrf
|
||||
<div class="row">
|
||||
<div class="col-xs-12 col-sm-12 col-md-12 mt-2">
|
||||
<div class="form-group">
|
||||
<strong>Name:</strong>
|
||||
<input type="text" class="form-control" placeholder="Role Name" name="name">
|
||||
</div>
|
||||
</div>
|
||||
<span>
|
||||
<h5 for="permissions" class="form-label mt-3 mb-3">Assign Permissions
|
||||
</h5>
|
||||
<h6 for="permissions" class="form-label mt-3 mb-3">Check All Permission
|
||||
<input type="checkbox" name="all_permission" class="check" id="allpermission">
|
||||
</h6>
|
||||
</span>
|
||||
<div class="row">
|
||||
@foreach ($permissions as $key => $permission)
|
||||
<div class="col-md-4">
|
||||
<h5>{{ $key }}</h5>
|
||||
<table class="table table-hover table-bordered">
|
||||
<tr id="checkboxnya" style="background: grey !important">
|
||||
<td scope="col" width="1%" style="background: grey !important">
|
||||
<input type="checkbox" name="all_permission" class="check"
|
||||
id="allpermission">
|
||||
</td>
|
||||
<td scope="col" width="20%" style="background: grey !important">
|
||||
Name</td>
|
||||
<td scope="col" width="1%" style="background: grey !important">
|
||||
Route</td>
|
||||
<td scope="col" width="1%" style="background: grey !important">
|
||||
Guard</td>
|
||||
</tr>
|
||||
@foreach ($permission as $item)
|
||||
<tr>
|
||||
<td>
|
||||
<input type="checkbox" name="permission[{{ $item->name }}]"
|
||||
value="{{ $item->name }}" class='permission'>
|
||||
</td>
|
||||
<td>{{ $item->desc }}</td>
|
||||
<td>{{ $item->name }}</td>
|
||||
<td>{{ $item->guard_name }}</td>
|
||||
</tr>
|
||||
@endforeach
|
||||
</table>
|
||||
</div>
|
||||
@endforeach
|
||||
</div>
|
||||
|
||||
<div class="col-xs-12 col-sm-12 col-md-12 text-end mt-3">
|
||||
<a href="{{ route('roles.index') }}" class="btn btn-info">Batalkan</a>
|
||||
<button type="submit" class="btn btn-primary">Submit</button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@endsection
|
||||
@push('scripts')
|
||||
<script>
|
||||
$('input[type="checkbox"].check').on('change', function() {
|
||||
var check = this;
|
||||
$(check).closest('tr').nextUntil('tr[id]').find('input[type="checkbox"]').prop(
|
||||
'checked',
|
||||
check
|
||||
.checked);
|
||||
});
|
||||
$(document).ready(function() {
|
||||
$('#allpermission').click(function() {
|
||||
if ($(this).is(':checked')) {
|
||||
$('.check').prop('checked', true);
|
||||
$('.permission').prop('checked', true);
|
||||
} else {
|
||||
$('.check').prop('checked', false);
|
||||
$('.permission').prop('checked', false);
|
||||
}
|
||||
});
|
||||
});
|
||||
</script>
|
||||
@endpush
|
|
@ -0,0 +1,136 @@
|
|||
@extends('layouts.base')
|
||||
|
||||
@section('content-header')
|
||||
<div class="col-12">
|
||||
<div class="container" style="display: contents">
|
||||
<div class="row mb-2">
|
||||
<div class="col-sm-6">
|
||||
<h3 class="m-0"> Master Data</h3>
|
||||
</div>
|
||||
<div class="col-sm-6">
|
||||
<ol class="breadcrumb float-sm-right">
|
||||
<li class="breadcrumb-item"><a href="#">Home</a></li>
|
||||
<li class="breadcrumb-item"><a href="#">Admin</a></li>
|
||||
<li class="breadcrumb-item active">Edit Roles</li>
|
||||
</ol>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@endsection
|
||||
|
||||
@section('content')
|
||||
<div class="col-lg-12 col-md-12 col-sm-12 mt-2">
|
||||
<div class="container" style="display: contents">
|
||||
<div class="card">
|
||||
<div class="card bg-warning" style="min-height:5px; border-radius:1px;"></div>
|
||||
<div class="card-header mt-0 pt-0">
|
||||
<div class="d-flex">
|
||||
<h4>Edit Role</h4>
|
||||
<!-- Button trigger modal -->
|
||||
<div class="ml-auto">
|
||||
<button type="button" class="btn btn-warning" href="{{ route('roles.refresh-routes') }}">
|
||||
Refresh Role
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="card-body border-top">
|
||||
@if (count($errors) > 0)
|
||||
<div class="alert alert-danger">
|
||||
<strong>Whoops!</strong> There were some problems with your input.<br><br>
|
||||
<ul>
|
||||
@foreach ($errors->all() as $error)
|
||||
<li>{{ $error }}</li>
|
||||
@endforeach
|
||||
</ul>
|
||||
</div>
|
||||
@endif
|
||||
|
||||
<form method="POST" action="{{ route('roles.update', $role->id) }}" id="formCreate">
|
||||
@method('PUT')
|
||||
@csrf
|
||||
<div class="row">
|
||||
<div class="col-xs-12 col-sm-12 col-md-12 mt-2">
|
||||
<div class="form-group">
|
||||
<strong>Name:</strong>
|
||||
<input type="text" class="form-control" placeholder="Role Name" name="name"
|
||||
value="{{ $role->name }}">
|
||||
</div>
|
||||
</div>
|
||||
<span>
|
||||
<h5 for="permissions" class="form-label mt-3 mb-3">Assign Permissions
|
||||
</h5>
|
||||
<h6 for="permissions" class="form-label mt-3 mb-3">Check All Permission
|
||||
<input type="checkbox" name="all_permission" class="check" id="allpermission">
|
||||
</h6>
|
||||
</span>
|
||||
<div class="row">
|
||||
@foreach ($permissions as $key => $permission)
|
||||
<div class="col-md-4">
|
||||
<h5>{{ $key }}</h5>
|
||||
<table class="table table-hover table-bordered">
|
||||
<tr id="checkboxnya" style="background: grey !important">
|
||||
<td scope="col" width="1%" style="background: grey !important">
|
||||
<input type="checkbox" name="all_permission" class="check"
|
||||
id="allpermission">
|
||||
</td>
|
||||
<td scope="col" width="20%" style="background: grey !important">
|
||||
Name</td>
|
||||
<td scope="col" width="1%" style="background: grey !important">
|
||||
Route</td>
|
||||
<td scope="col" width="1%" style="background: grey !important">
|
||||
Guard</td>
|
||||
</tr>
|
||||
@foreach ($permission as $item)
|
||||
<tr>
|
||||
<td>
|
||||
<input type="checkbox" name="permission[{{ $item->name }}]"
|
||||
value="{{ $item->name }}" value="{{ $item->name }}"
|
||||
class='permission'
|
||||
{{ in_array($item->name, $rolePermissions) ? 'checked' : '' }}>
|
||||
</td>
|
||||
<td>{{ $item->desc }}</td>
|
||||
<td>{{ $item->name }}</td>
|
||||
<td>{{ $item->guard_name }}</td>
|
||||
</tr>
|
||||
@endforeach
|
||||
</table>
|
||||
</div>
|
||||
@endforeach
|
||||
</div>
|
||||
|
||||
<div class="col-xs-12 col-sm-12 col-md-12 text-end mt-3">
|
||||
<a href="{{ route('roles.index') }}" class="btn btn-info">Batalkan</a>
|
||||
<button type="submit" class="btn btn-primary">Submit</button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@endsection
|
||||
|
||||
@push('scripts')
|
||||
<script>
|
||||
$('input[type="checkbox"].check').on('change', function() {
|
||||
var check = this;
|
||||
$(check).closest('tr').nextUntil('tr[id]').find('input[type="checkbox"]').prop(
|
||||
'checked',
|
||||
check
|
||||
.checked);
|
||||
});
|
||||
$(document).ready(function() {
|
||||
$('#allpermission').click(function() {
|
||||
if ($(this).is(':checked')) {
|
||||
$('.check').prop('checked', true);
|
||||
$('.permission').prop('checked', true);
|
||||
} else {
|
||||
$('.check').prop('checked', false);
|
||||
$('.permission').prop('checked', false);
|
||||
}
|
||||
});
|
||||
});
|
||||
</script>
|
||||
@endpush
|
|
@ -0,0 +1,98 @@
|
|||
@extends('layouts.base')
|
||||
|
||||
@section('content-header')
|
||||
<div class="col-12">
|
||||
<div class="container" style="display: contents">
|
||||
<div class="row mb-2">
|
||||
<div class="col-sm-6">
|
||||
<h3 class="m-0"> Master Data</h3>
|
||||
</div>
|
||||
<div class="col-sm-6">
|
||||
<ol class="breadcrumb float-sm-right">
|
||||
<li class="breadcrumb-item"><a href="#">Home</a></li>
|
||||
<li class="breadcrumb-item"><a href="#">Admin</a></li>
|
||||
<li class="breadcrumb-item active">Roles</li>
|
||||
</ol>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@endsection
|
||||
|
||||
@section('content')
|
||||
<div class="col-lg-12 col-md-12 col-sm-12 mt-2">
|
||||
<div class="container" style="display: contents">
|
||||
<div class="card">
|
||||
<div class="card bg-warning" style="min-height:5px; border-radius:1px;"></div>
|
||||
<div class="card-header mt-0 pt-0">
|
||||
<div class="d-flex">
|
||||
<h4>Daftar Role</h4>
|
||||
<!-- Button trigger modal -->
|
||||
<div class="ml-auto">
|
||||
<a href="{{ route('roles.create') }}" class="btn btn-sm btn-primary"><i class="ti ti-edit"></i>
|
||||
Tambah Role</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<div class="table-responsive mt-3">
|
||||
<table id="tabelku" class="table table-hover display" style="width: 100%">
|
||||
<thead>
|
||||
<tr>
|
||||
<th class="text-center">No</th>
|
||||
<th>Nama Role</th>
|
||||
<th>Terakhir Diupdate</th>
|
||||
<th class="text-center"><i class="fas fa-cog"></i></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
@forelse ($datas as $role)
|
||||
<tr>
|
||||
<td class="border-bottom-0">
|
||||
<h6 class="fw-normal mb-0 text-center">
|
||||
{{ ($datas->currentPage() - 1) * $datas->perPage() + $loop->index + 1 }}.
|
||||
</h6>
|
||||
</td>
|
||||
<td class="border-bottom-0">
|
||||
<h6 class="fw-semibold mb-1">{{ $role->name }}</h6>
|
||||
<span class="fw-normal">{{ $role->email }}</span>
|
||||
</td>
|
||||
<td class="border-bottom-0">
|
||||
<h6 class="fw-normal mb-0 fs-4">{{ $role->updated_at }}</h6>
|
||||
</td>
|
||||
<td class="border-bottom-0 text-center">
|
||||
<div class="d-flex align-items-center gap-2 text-center"
|
||||
style="justify-content: center">
|
||||
<a href="{{ route('roles.edit', $role->id) }}"
|
||||
class="btn btn-sm btn-warning"><i class="ti ti-edit"></i> Ubah</a>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
@empty
|
||||
<div class="alert alert-danger">
|
||||
Data Belum Tersedia.
|
||||
</div>
|
||||
@endforelse
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@endsection
|
||||
|
||||
@push('styles')
|
||||
<!-- Toastr -->
|
||||
<link rel="stylesheet" href="{{ asset('assets/plugins/toastr/toastr.min.css') }}">
|
||||
@endpush
|
||||
@push('scripts')
|
||||
<!-- Toastr -->
|
||||
<script src="{{ asset('assets/plugins/toastr/toastr.min.js') }}"></script>
|
||||
<script>
|
||||
// show toast
|
||||
@if (Session::has('roles-message'))
|
||||
toastr.{{ Session::get('roles-message.type') }}("{{ Session::get('roles-message.msg') }}")
|
||||
@endif
|
||||
</script>
|
||||
@endpush
|
|
@ -0,0 +1,74 @@
|
|||
@extends('layouts.app')
|
||||
|
||||
@section('content')
|
||||
<!-- Button Back -->
|
||||
<a href="{{ URL::to('admin/users') }}" class="mb-3 badge text-bg-light text-primary">
|
||||
<i class="ti ti-arrow-left"> </i> Kembali
|
||||
</a>
|
||||
|
||||
<div class="row d-flex align-items-strech">
|
||||
<div class="col-lg-6 mx-auto">
|
||||
<div class="card">
|
||||
<div class="card-header">
|
||||
<h3>Edit Pengguna</h3>
|
||||
</div>
|
||||
<div class="card-body border-top">
|
||||
<form method="post" action="{{ route('users.update', $user->id) }}">
|
||||
@csrf
|
||||
@method('PUT')
|
||||
<div class="mb-3">
|
||||
<label for="name" class="form-label">Name</label>
|
||||
<input type="text" class="form-control" id="name" name="name"
|
||||
placeholder="Contoh: Ardito Pratama" value="{{ isset($user->name) ? $user->name : '' }}"
|
||||
required>
|
||||
<div id="emailHelp" class="form-text">Silahkan masukkan nama lengkap anda.</div>
|
||||
<!-- error message-->
|
||||
@error('name')
|
||||
<div class="invalid-feedback">
|
||||
{{ $message }}
|
||||
</div>
|
||||
@enderror
|
||||
</div>
|
||||
<div class="mb-3">
|
||||
<label for="email" class="form-label">Email</label>
|
||||
<input type="email" class="form-control" id="email"
|
||||
value="{{ isset($user->email) ? $user->email : '' }}" disabled>
|
||||
</div>
|
||||
<div class="mb-3">
|
||||
<label for="role" class="form-label">Level Pengguna</label>
|
||||
<select class="form-select @error('role') is-invalid @enderror" id="role" name="role"
|
||||
required>
|
||||
<option value="">Pilih Level Pengguna</option>
|
||||
@forelse ($roles as $role)
|
||||
<option value="{{ $role->name }}"
|
||||
{{ $user->roles[0]->name == $role->name ? 'selected' : '' }}>{{ $role->name }}
|
||||
</option>
|
||||
@empty
|
||||
<option value="">Data Kosong</option>
|
||||
@endforelse
|
||||
</select>
|
||||
<!-- error message -->
|
||||
@error('role')
|
||||
<div class="invalid-feedback">
|
||||
{{ $message }}
|
||||
</div>
|
||||
@enderror
|
||||
</div>
|
||||
<div class="mb-3">
|
||||
<label for="password" class="form-label">Password</label>
|
||||
<input type="password" class="form-control @error('password') is-invalid @enderror"
|
||||
id="password" name="password">
|
||||
<!-- error message -->
|
||||
@error('password')
|
||||
<div class="invalid-feedback">
|
||||
{{ $message }}
|
||||
</div>
|
||||
@enderror
|
||||
</div>
|
||||
<button type="submit" class="btn btn-primary">Simpan</button>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@stop
|
|
@ -0,0 +1,73 @@
|
|||
@extends('layouts.app')
|
||||
@section('title', 'Buat Data Pengguna')
|
||||
@section('content')
|
||||
<!-- Button Back -->
|
||||
<a href="{{ URL::to('admin/users') }}" class="mb-3 badge text-bg-light text-primary">
|
||||
<i class="ti ti-arrow-left"> </i> Kembali
|
||||
</a>
|
||||
|
||||
<div class="row d-flex align-items-strech">
|
||||
<div class="col-lg-6 mx-auto">
|
||||
<div class="card">
|
||||
<div class="card-header">
|
||||
<h3>Tambah Pengguna</h3>
|
||||
</div>
|
||||
<div class="card-body border-top">
|
||||
<form method="post" action="{{ route('users.index') }}">
|
||||
@csrf
|
||||
@method('POST')
|
||||
<div class="mb-3">
|
||||
<label for="name" class="form-label">Name</label>
|
||||
<input type="text" class="form-control" id="name" name="name" placeholder="Contoh: Ardito Pratama" value="{{ old('name') }} " required>
|
||||
<div id="emailHelp" class="form-text">Silahkan masukkan nama lengkap anda.</div>
|
||||
<!-- error message-->
|
||||
@error('name')
|
||||
<div class="invalid-feedback">
|
||||
{{ $message }}
|
||||
</div>
|
||||
@enderror
|
||||
</div>
|
||||
<div class="mb-3">
|
||||
<label for="email" class="form-label">Email</label>
|
||||
<input type="email" class="form-control" id="email" name="email" value="{{ old('email') }}" required>
|
||||
<!-- error message -->
|
||||
@error('email')
|
||||
<div class="invalid-feedback">
|
||||
{{ $message }}
|
||||
</div>
|
||||
@enderror
|
||||
</div>
|
||||
<div class="mb-3">
|
||||
<label for="role" class="form-label">Level Pengguna</label>
|
||||
<select class="form-select @error('role') is-invalid @enderror" id="role" name="role" required>
|
||||
<option value="" selected>Pilih Level Pengguna</option>
|
||||
@forelse ($roles as $role)
|
||||
<option value="{{ $role->id }}">{{ $role->name }}</option>
|
||||
@empty
|
||||
<option value="">Data Kosong</option>
|
||||
@endforelse
|
||||
</select>
|
||||
<!-- error message -->
|
||||
@error('role')
|
||||
<div class="invalid-feedback">
|
||||
{{ $message }}
|
||||
</div>
|
||||
@enderror
|
||||
</div>
|
||||
<div class="mb-3">
|
||||
<label for="password" class="form-label">Password</label>
|
||||
<input type="password" class="form-control @error('password') is-invalid @enderror" id="password" name="password" required>
|
||||
<!-- error message -->
|
||||
@error('password')
|
||||
<div class="invalid-feedback">
|
||||
{{ $message }}
|
||||
</div>
|
||||
@enderror
|
||||
</div>
|
||||
<button type="submit" class="btn btn-primary">Simpan</button>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@stop
|
|
@ -0,0 +1,68 @@
|
|||
@extends('layouts.app')
|
||||
@section('title', 'Ubah Data Pengguna')
|
||||
@section('content')
|
||||
<!-- Button Back -->
|
||||
<a href="{{ URL::to('admin/users') }}" class="mb-3 badge text-bg-light text-primary">
|
||||
<i class="ti ti-arrow-left"> </i> Kembali
|
||||
</a>
|
||||
|
||||
<div class="row d-flex align-items-strech">
|
||||
<div class="col-lg-6 mx-auto">
|
||||
<div class="card">
|
||||
<div class="card-header">
|
||||
<h3>Edit Pengguna</h3>
|
||||
</div>
|
||||
<div class="card-body border-top">
|
||||
<form method="post" action="{{ route('users.update', $user->id) }}">
|
||||
@csrf
|
||||
@method('PUT')
|
||||
<div class="mb-3">
|
||||
<label for="name" class="form-label">Name</label>
|
||||
<input type="text" class="form-control" id="name" name="name" placeholder="Contoh: Ardito Pratama" value="{{ isset($user->name) ? $user->name : '' }}" required>
|
||||
<div id="emailHelp" class="form-text">Silahkan masukkan nama lengkap anda.</div>
|
||||
<!-- error message-->
|
||||
@error('name')
|
||||
<div class="invalid-feedback">
|
||||
{{ $message }}
|
||||
</div>
|
||||
@enderror
|
||||
</div>
|
||||
<div class="mb-3">
|
||||
<label for="email" class="form-label">Email</label>
|
||||
<input type="email" class="form-control" id="email" value="{{ isset($user->email) ? $user->email : '' }}" disabled>
|
||||
</div>
|
||||
<div class="mb-3">
|
||||
<label for="role" class="form-label">Level Pengguna</label>
|
||||
<select class="form-select @error('role') is-invalid @enderror" id="role" name="role" required>
|
||||
<option value="">Pilih Level Pengguna</option>
|
||||
@forelse ($roles as $role)
|
||||
<option value="{{ $role->name }}" {{ $user->roles[0]->name == $role->name ? 'selected' : '' }}>{{ $role->name }}
|
||||
</option>
|
||||
@empty
|
||||
<option value="">Data Kosong</option>
|
||||
@endforelse
|
||||
</select>
|
||||
<!-- error message -->
|
||||
@error('role')
|
||||
<div class="invalid-feedback">
|
||||
{{ $message }}
|
||||
</div>
|
||||
@enderror
|
||||
</div>
|
||||
<div class="mb-3">
|
||||
<label for="password" class="form-label">Password</label>
|
||||
<input type="password" class="form-control @error('password') is-invalid @enderror" id="password" name="password">
|
||||
<!-- error message -->
|
||||
@error('password')
|
||||
<div class="invalid-feedback">
|
||||
{{ $message }}
|
||||
</div>
|
||||
@enderror
|
||||
</div>
|
||||
<button type="submit" class="btn btn-primary">Simpan</button>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@stop
|
|
@ -0,0 +1,388 @@
|
|||
@extends('layouts.base')
|
||||
|
||||
@section('content-header')
|
||||
<div class="col-12">
|
||||
<div class="container" style="display: contents">
|
||||
<div class="row mb-2">
|
||||
<div class="col-sm-6">
|
||||
<h3 class="m-0"> Master Data</h3>
|
||||
</div>
|
||||
<div class="col-sm-6">
|
||||
<ol class="breadcrumb float-sm-right">
|
||||
<li class="breadcrumb-item"><a href="#">Home</a></li>
|
||||
<li class="breadcrumb-item"><a href="#">Admin</a></li>
|
||||
<li class="breadcrumb-item active">Users</li>
|
||||
</ol>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@endsection
|
||||
|
||||
@section('content')
|
||||
<div class="col-lg-12 col-md-12 col-sm-12 mt-2">
|
||||
<div class="container" style="display: contents">
|
||||
<div class="card">
|
||||
<div class="card bg-warning" style="min-height:5px; border-radius:1px;"></div>
|
||||
<div class="card-header mt-0 pt-0">
|
||||
<div class="d-flex">
|
||||
<h4>Daftar User</h4>
|
||||
<!-- Button trigger modal -->
|
||||
<div class="ml-auto">
|
||||
<button type="button" class="btn btn-primary" data-toggle="modal"
|
||||
data-target="#modal-default-add">
|
||||
Tambah User
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
{{-- <h5 class="card-title">Form List Data</h5> --}}
|
||||
<div class="table-responsive mt-3">
|
||||
<table id="tabelku" class="table table-hover display" style="width: 100%">
|
||||
<thead>
|
||||
<tr>
|
||||
<th class="text-center">No</th>
|
||||
<th>Nama User</th>
|
||||
<th>Email User</th>
|
||||
<th>Role</th>
|
||||
<th>Terakhir Diupdate</th>
|
||||
<th class="text-center"><i class="fas fa-cog"></i></th>
|
||||
</tr>
|
||||
</thead>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Modal Tambah Menu -->
|
||||
<div class="modal fade" id="modal-default-add">
|
||||
<div class="modal-dialog modal-lg">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<h4 class="modal-title">Tambah User</h4>
|
||||
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
|
||||
<span aria-hidden="true">×</span>
|
||||
</button>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<form id="form-tambah-user" method="post" enctype="multipart/form-data">
|
||||
@csrf
|
||||
<div class="form-group">
|
||||
<label for="user-name" class="col-form-label">Nama User:</label>
|
||||
<input type="text" class="form-control" id="user-name" name="name" required>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="user-email" class="col-form-label">Email User:</label>
|
||||
<input type="text" class="form-control" id="user-email" name="email" required>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="password-input" class="col-form-label">Password User:</label>
|
||||
<input type="text" class="form-control" id="password-input" name="password" required>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="konfirmasi-password-input" class="col-form-label">Konfirmasi Password User:</label>
|
||||
<input type="text" class="form-control" id="konfirmasi-password-input"
|
||||
name="password_confirmation" required>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="role-text" class="col-form-label">Role:</label>
|
||||
<div class="form-group select2-primary">
|
||||
<select class="select2" multiple="multiple" data-placeholder="Pilih role user" required
|
||||
name="role_id[]" style="width: 100%;">
|
||||
@foreach ($roles as $item)
|
||||
<option value="{{ $item->id }}">{{ $item->name }}</option>
|
||||
@endforeach
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="modal-footer justify-content-between">
|
||||
<button type="button" class="btn btn-default" data-dismiss="modal">Batal</button>
|
||||
<button type="submit" class="btn btn-primary" id="simpan-form-tambah">Simpan</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="modal fade" id="modal-default-edit">
|
||||
<div class="modal-dialog modal-lg">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<h4 class="modal-title">Edit User</h4>
|
||||
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
|
||||
<span aria-hidden="true">×</span>
|
||||
</button>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<form id="form-edit-user" method="put" enctype="multipart/form-data">
|
||||
@csrf
|
||||
<div class="form-group">
|
||||
<label for="user-name-edit" class="col-form-label">Nama User:</label>
|
||||
<input type="text" class="form-control" id="user-name_edit" name="name_edit" required>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="user-email_edit" class="col-form-label">Email User:</label>
|
||||
<input type="text" class="form-control" id="user-email_edit" name="email_edit" required>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="password-input_edit" class="col-form-label">Password User:</label>
|
||||
<input type="text" class="form-control" id="password-input_edit" name="password_edit"
|
||||
placeholder="Kosongkan jika tidak ingin mengubah password">
|
||||
</div>
|
||||
<div class="form-group" id="password_confirm_edit" style="display: none">
|
||||
<label for="konfirmasi-password-input_edit" class="col-form-label">Konfirmasi Password
|
||||
User:</label>
|
||||
<input type="text" class="form-control" id="konfirmasi-password-input_edit"
|
||||
placeholder="Kosongkan jika tidak ingin mengubah password"
|
||||
name="password_confirmation_edit">
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="role-text" class="col-form-label">Role:</label>
|
||||
<div class="form-group select2-primary">
|
||||
<select class="edit_select2" multiple="multiple" data-placeholder="Pilih role user"
|
||||
required name="role_id_edit[]" style="width: 100%;">
|
||||
@foreach ($roles as $item)
|
||||
<option value="{{ $item->id }}">{{ $item->name }}</option>
|
||||
@endforeach
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="modal-footer justify-content-between">
|
||||
<button type="button" class="btn btn-default" data-dismiss="modal">Batal</button>
|
||||
<button type="submit" class="btn btn-primary" id="simpan-form-tambah">Simpan</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="modal fade" id="modal-default-hapus">
|
||||
<div class="modal-dialog modal-lg">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<h4 class="modal-title">Hapus User</h4>
|
||||
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
|
||||
<span aria-hidden="true">×</span>
|
||||
</button>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<p id="title-terhapus">…</p>
|
||||
</div>
|
||||
<div class="modal-footer justify-content-between">
|
||||
<button type="button" class="btn btn-default" data-dismiss="modal">Batal</button>
|
||||
<button type="button" class="btn btn-danger button-hapus">Hapus</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@endsection
|
||||
|
||||
@push('styles')
|
||||
<!-- Toastr -->
|
||||
<link rel="stylesheet" href="{{ asset('assets/plugins/toastr/toastr.min.css') }}">
|
||||
|
||||
<link rel="stylesheet" href="{{ asset('assets/datatables/datatables.min.css') }}">
|
||||
|
||||
<!-- Select2 -->
|
||||
<link rel="stylesheet" href="{{ asset('assets/plugins/select2/css/select2.min.css') }}">
|
||||
@endpush
|
||||
|
||||
@push('scripts')
|
||||
<!-- Toastr -->
|
||||
<script src="{{ asset('assets/plugins/toastr/toastr.min.js') }}"></script>
|
||||
<!-- Select2 -->
|
||||
<script src="{{ asset('assets/plugins/select2/js/select2.full.min.js') }}"></script>
|
||||
|
||||
<script src="{{ asset('assets/datatables/datatables.min.js') }}"></script>
|
||||
<script type="text/javascript">
|
||||
$.ajaxSetup({
|
||||
headers: {
|
||||
'X-CSRF-TOKEN': '{{ csrf_token() }}'
|
||||
}
|
||||
});
|
||||
// check password dan konfirmasi password
|
||||
$('#konfirmasi-password-input').on('keyup', function() {
|
||||
if ($('#password-input').val() == $('#konfirmasi-password-input').val()) {
|
||||
$('#konfirmasi-password-input').removeClass('is-invalid')
|
||||
$('#konfirmasi-password-input').addClass('is-valid')
|
||||
} else {
|
||||
$('#konfirmasi-password-input').removeClass('is-valid')
|
||||
$('#konfirmasi-password-input').addClass('is-invalid')
|
||||
}
|
||||
})
|
||||
|
||||
//Initialize Select2 Elements
|
||||
$('.select2').select2({
|
||||
dropdownParent: $("#modal-default-add")
|
||||
})
|
||||
$('.edit_select2').select2({
|
||||
dropdownParent: $("#modal-default-edit")
|
||||
})
|
||||
|
||||
$(document).ready(function() {
|
||||
$('#tabelku').DataTable({
|
||||
processing: true,
|
||||
serverSide: true,
|
||||
ajax: "{{ route('users.getDataUser') }}",
|
||||
columns: [{
|
||||
data: 'DT_RowIndex',
|
||||
name: 'DT_RowIndex',
|
||||
className: 'text-center'
|
||||
},
|
||||
{
|
||||
data: 'name',
|
||||
name: 'name'
|
||||
},
|
||||
{
|
||||
data: 'email',
|
||||
name: 'email'
|
||||
},
|
||||
{
|
||||
data: 'rolenya',
|
||||
name: 'rolenya'
|
||||
},
|
||||
{
|
||||
data: 'updated_atnya',
|
||||
name: 'updated_atnya',
|
||||
className: 'text-center'
|
||||
},
|
||||
{
|
||||
data: 'action',
|
||||
name: 'action',
|
||||
className: 'text-center'
|
||||
},
|
||||
]
|
||||
})
|
||||
})
|
||||
|
||||
// handle password edit user keyup
|
||||
$('#password-input_edit').on('keyup', function() {
|
||||
if ($('#password-input_edit').val() != '') {
|
||||
$('#password_confirm_edit').show()
|
||||
if ($('#password-input_edit').val() == $('#konfirmasi-password-input_edit').val()) {
|
||||
$('#konfirmasi-password-input_edit').removeClass('is-invalid')
|
||||
$('#konfirmasi-password-input_edit').addClass('is-valid')
|
||||
} else {
|
||||
$('#konfirmasi-password-input_edit').removeClass('is-valid')
|
||||
$('#konfirmasi-password-input_edit').addClass('is-invalid')
|
||||
}
|
||||
} else {
|
||||
$('#password_confirm_edit').hide()
|
||||
}
|
||||
})
|
||||
|
||||
$('#konfirmasi-password-input_edit').on('keyup', function() {
|
||||
if ($('#password-input_edit').val() == $('#konfirmasi-password-input_edit').val()) {
|
||||
$('#konfirmasi-password-input_edit').removeClass('is-invalid')
|
||||
$('#konfirmasi-password-input_edit').addClass('is-valid')
|
||||
} else {
|
||||
$('#konfirmasi-password-input_edit').removeClass('is-valid')
|
||||
$('#konfirmasi-password-input_edit').addClass('is-invalid')
|
||||
}
|
||||
})
|
||||
|
||||
|
||||
$(document).ready(function() {
|
||||
// ajax tambah user
|
||||
$('#form-tambah-user').on('submit', function(e) {
|
||||
e.preventDefault();
|
||||
$.ajax({
|
||||
url: "{{ route('users.store') }}",
|
||||
type: "POST",
|
||||
dataType: "json",
|
||||
data: $(this).serialize(),
|
||||
cache: false,
|
||||
async: false,
|
||||
success: function(response) {
|
||||
toastr.success(response.meta.message)
|
||||
$('#modal-default-add').modal('hide')
|
||||
$('#form-tambah-user')[0].reset()
|
||||
$('.select2').val(null).trigger('change')
|
||||
$('#konfirmasi-password-input').removeClass('is-valid')
|
||||
$('#tabelku').DataTable().ajax.reload()
|
||||
},
|
||||
error: function(response) {
|
||||
toastr.error(response.responseJSON.meta.message)
|
||||
}
|
||||
})
|
||||
})
|
||||
|
||||
// ajax edit user
|
||||
$(document).on('click', '.btn-edit-user', function() {
|
||||
var data = JSON.parse($(this).attr('data-user'));
|
||||
$('#user-name_edit').val(data.name)
|
||||
$('#user-email_edit').val(data.email)
|
||||
$('.edit_select2').val(data.role.map(x => x.id)).trigger('change')
|
||||
$('#modal-default-edit').modal('show')
|
||||
$('#form-edit-user').on('submit', function(e) {
|
||||
// disable button submit
|
||||
$('#simpan-form-tambah').attr('disabled', true)
|
||||
|
||||
e.preventDefault();
|
||||
$.ajax({
|
||||
url: "{{ url('users/update') }}" + '/' + data.id,
|
||||
type: "PUT",
|
||||
dataType: "json",
|
||||
data: $(this).serialize(),
|
||||
cache: false,
|
||||
async: false,
|
||||
success: function(response) {
|
||||
// enable button submit on interval 1 detik
|
||||
setTimeout(function() {
|
||||
$('#simpan-form-tambah').attr('disabled', false)
|
||||
}, 500);
|
||||
toastr.success(response.meta.message)
|
||||
$('#modal-default-edit').modal('hide')
|
||||
$('#form-edit-user')[0].reset()
|
||||
$('.edit_select2').val(null).trigger('change')
|
||||
$('#konfirmasi-password-input_edit').removeClass('is-valid')
|
||||
$('#tabelku').DataTable().ajax.reload()
|
||||
},
|
||||
error: function(response) {
|
||||
// enable button submit on interval 1 detik
|
||||
setTimeout(function() {
|
||||
$('#simpan-form-tambah').attr('disabled', false)
|
||||
}, 500);
|
||||
toastr.error(response.responseJSON.meta.message)
|
||||
}
|
||||
})
|
||||
})
|
||||
})
|
||||
|
||||
// ajax hapus user
|
||||
$(document).on('click', '.btn-hapus-user', function() {
|
||||
var data = JSON.parse($(this).attr('data-user'));
|
||||
var dataAppend = '<p>Apakah anda yakin ingin menghapus user <b>' + data.name +
|
||||
'</b> email <b>' +
|
||||
data.email + '</b> ?</p>';
|
||||
$('#title-terhapus').html(dataAppend);
|
||||
$('.button-hapus').attr('data-id', data.id);
|
||||
$('#modal-default-hapus').modal('show');
|
||||
})
|
||||
|
||||
$(document).on('click', '.button-hapus', function() {
|
||||
var id = $(this).attr('data-id');
|
||||
$.ajax({
|
||||
url: "{{ url('users/delete') }}" + '/' + id,
|
||||
type: "DELETE",
|
||||
dataType: "json",
|
||||
cache: false,
|
||||
async: false,
|
||||
success: function(response) {
|
||||
toastr.success(response.meta.message)
|
||||
$('#modal-default-hapus').modal('hide')
|
||||
$('#tabelku').DataTable().ajax.reload()
|
||||
},
|
||||
error: function(response) {
|
||||
toastr.error(response.responseJSON.meta.message)
|
||||
}
|
||||
})
|
||||
})
|
||||
})
|
||||
</script>
|
||||
@endpush
|
|
@ -1,9 +1,14 @@
|
|||
<?php
|
||||
|
||||
use App\Http\Controllers\Admins\DashboardController;
|
||||
use App\Http\Controllers\Admins\Pengeluaran\PengeluaranController;
|
||||
use App\Http\Controllers\Admins\Users\RoleController;
|
||||
use App\Http\Controllers\Admins\Users\UserController;
|
||||
use App\Http\Controllers\Auths\AuthController;
|
||||
use App\Http\Controllers\Kasir\History;
|
||||
use App\Http\Controllers\Kasir\Menu;
|
||||
use App\Http\Controllers\Kasir\Transaksi;
|
||||
use App\Http\Controllers\LaporanController;
|
||||
use Illuminate\Support\Facades\Redirect;
|
||||
use Illuminate\Support\Facades\Route;
|
||||
|
||||
|
@ -27,7 +32,7 @@ Route::group(['middleware' => 'guest'], function () {
|
|||
Route::post('login', [AuthController::class, 'login_proses'])->name('login.process')->comment("Login Action");
|
||||
});
|
||||
|
||||
Route::group(['middleware' => ['auth']], function () {
|
||||
Route::group(['middleware' => ['auth', 'permission']], function () {
|
||||
// Logout
|
||||
Route::get('logout', [AuthController::class, 'logout'])->name('logout')->comment("Logout Action");
|
||||
|
||||
|
@ -51,7 +56,52 @@ Route::group(['middleware' => ['auth']], function () {
|
|||
});
|
||||
|
||||
Route::group(['prefix' => 'menu'], function () {
|
||||
Route::get('/', [Menu::class, 'index'])->name('menu.index')->comment("Halaman Menu");
|
||||
Route::resource('menu', Menu::class);
|
||||
// Route::get('/', [Menu::class, 'index'])->name('menu.index')->comment("Halaman Menu");
|
||||
Route::get('/kelompok-kategori/{id}', [Menu::class, 'kelompokKategori'])->name('menu.kelompok-kategori')->comment("Ambil Data Kelompok Kategori");
|
||||
Route::get('/getDataMenu', [Menu::class, 'getDataMenu'])->name('menu.getDataMenu')->comment("Ambil data Menu");
|
||||
});
|
||||
|
||||
// Dashboard
|
||||
Route::group(['prefix' => 'dashboard'], function () {
|
||||
Route::get('/', [DashboardController::class, 'index'])->name('dashboard.index')->comment('Halaman Dashboard');
|
||||
Route::get('/menuTerlaris', [DashboardController::class, 'menuTerlaris'])->name('dashboard.menuTerlaris')->comment("Ambil data Menu Terlaris");
|
||||
Route::get('/getCalculationPendapatan', [DashboardController::class, 'getCalculationPendapatan'])->name('dashboard.getCalculationPendapatan')->comment("Ambil data Total Penjualan");
|
||||
Route::get('/getChart', [DashboardController::class, 'getChart'])->name('dashboard.getChart')->comment("Ambil data Total Penjualan");
|
||||
});
|
||||
|
||||
|
||||
// Profile
|
||||
// Route::get('profile', [ProfileController::class, 'index'])->name('profile.index')->comment('Halaman Profile');
|
||||
// Route::post('profile', [ProfileController::class, 'update'])->name('profile.update')->comment('Update Profile');
|
||||
|
||||
// Users
|
||||
Route::group(['prefix' => 'users'], function () {
|
||||
Route::get('/', [UserController::class, 'index'])->name('users.index')->comment('Halaman User');
|
||||
Route::get('/getDataUser', [UserController::class, 'getDataUser'])->name('users.getDataUser')->comment('Ambil data User');
|
||||
Route::get('/create', [UserController::class, 'create'])->name('users.create')->comment('Halaman Tambah User');
|
||||
Route::post('/', [UserController::class, 'store'])->name('users.store')->comment('Tambah User');
|
||||
Route::get('/{id}/edit', [UserController::class, 'edit'])->name('users.edit')->comment('Halaman Edit User');
|
||||
Route::put('/update/{id}', [UserController::class, 'update'])->name('users.update')->comment('Perbarui User');
|
||||
Route::delete('/delete/{id}', [UserController::class, 'destroy'])->name('users.delete')->comment('Menghapus User');
|
||||
});
|
||||
|
||||
// Roles
|
||||
Route::group(['prefix' => 'roles'], function () {
|
||||
Route::get('/', [RoleController::class, 'index'])->name('roles.index')->comment('Halaman Roles');
|
||||
Route::get('/create', [RoleController::class, 'create'])->name('roles.create')->comment('Halaman Tambah Roles');
|
||||
Route::post('/', [RoleController::class, 'store'])->name('roles.store')->comment('Tambah Roles');
|
||||
Route::get('/edit/{id}', [RoleController::class, 'edit'])->name('roles.edit')->comment('Halaman Edit Roles');
|
||||
Route::put('/update/{id}', [RoleController::class, 'update'])->name('roles.update')->comment('Perbarui Roles');
|
||||
Route::delete('/delete/{id}', [RoleController::class, 'destroy'])->name('roles.delete')->comment('Menghapus Roles');
|
||||
Route::get('/refresh-routes', [RoleController::class, 'refreshRoutes'])->name('roles.refresh-routes')->comment('Refresh Permission Routes');
|
||||
});
|
||||
|
||||
// Pengeluaran
|
||||
Route::group(['prefix' => 'pengeluaran'], function () {
|
||||
Route::get('/', [PengeluaranController::class, 'index'])->name('pengeluaran.index')->comment('Halaman Pengeluaran');
|
||||
Route::post('/simpan', [PengeluaranController::class, 'simpan'])->name('pengeluaran.simpan')->comment('Halaman Simpan Pengeluaran');
|
||||
Route::post('/laporan', [PengeluaranController::class, 'laporan'])->name('pengeluaran.laporan')->comment('Halaman Laporan');
|
||||
Route::get('/getDatapengeluaran', [PengeluaranController::class, 'getDatapengeluaran'])->name('pengeluaran.getDataPengeluaran')->comment("Ambil data Riwayat Transaksi");
|
||||
});
|
||||
});
|
||||
|
|
Loading…
Reference in New Issue