MIF_E31211908/app/Http/Controllers/MasterData/LaporanController.php

253 lines
9.5 KiB
PHP

<?php
namespace App\Http\Controllers\MasterData;
use App\Http\Controllers\Controller;
use App\Models\Penjualan;
use App\Models\ListItemPenjualan;
use Illuminate\Http\Request;
use Carbon\Carbon;
use Illuminate\Support\Facades\DB;
class LaporanController extends Controller
{
public function laporanHarian()
{
$startDate = now()->startOfMonth()->toDateString();
$endDate = now()->endOfMonth()->toDateString();
$penjualans = Penjualan::with('listItem')->whereBetween('created_at', [$startDate, $endDate])->get();
$dailyTotals = [];
$now = now()->toDateString();
$startDaily = $now;
$endDaily = $now;
$penjualansDaily = Penjualan::with('listItem')
->whereDate('created_at', $now)
->get();
foreach ($penjualans as $penjualan) {
$date = $penjualan->created_at->toDateString();
if (!isset($dailyTotals[$date])) {
$dailyTotals[$date] = 0;
}
foreach ($penjualan->listItem as $item) {
$dailyTotals[$date] += $item->qty * $item->barang->harga_jual;
}
}
$totalHargaJual = 0;
$totalModal = 0;
$totalBarangTerjual = 0;
foreach ($penjualansDaily as $penjualan) {
foreach ($penjualan->listItem as $listItem) {
$totalHargaJual += (int) $listItem->barang->harga_jual * $listItem->qty;
}
}
foreach ($penjualansDaily as $penjualan) {
foreach ($penjualan->listItem as $listItem) {
$totalModal += (int) $listItem->barang->harga_beli * $listItem->qty;
$totalBarangTerjual += $listItem->qty;
}
}
$data = [
'title' => 'Data Laporan Harian',
'dailyTotals' => $dailyTotals,
'totalBarangTerjual' => $totalBarangTerjual,
'totalPenjualan' => $totalHargaJual,
'totalPendapatan' => $totalHargaJual - $totalModal
];
return view('page.dashboard.laporan.laporanHarian', compact('data'));
}
public function laporanBulanan()
{
$startDate = '2023-01-01';
$endDate = now()->toDateString(); // Set end date to today's date
$penjualans = Penjualan::with('listItem')
->whereBetween('created_at', [$startDate, $endDate])
->get();
$dailyTotals = [];
$totalHargaJual = 0;
$totalModal = 0;
$totalBarangTerjual = 0;
// die(dd($penjualans));
foreach ($penjualans as $penjualan) {
$date = $penjualan->created_at->toDateString();
if (!isset($dailyTotals[$date])) {
$dailyTotals[$date] = 0;
}
foreach ($penjualan->listItem as $item) {
$dailyTotals[$date] += $item->qty * $item->barang->harga_jual;
}
// Calculate totals for this month
}
$penjualan_bulan_ini = Penjualan::with('listItem')
->whereMonth('created_at', date("m"))
->whereYear('created_at', date("Y"))
->get();
foreach ($penjualan_bulan_ini as $penjualan) {
foreach ($penjualan->listItem as $listItem) {
$totalHargaJual += (int) $listItem->barang->harga_jual * $listItem->qty;
$totalModal += (int) $listItem->barang->harga_beli * $listItem->qty;
$totalBarangTerjual += $listItem->qty;
}
}
$totalPendapatan = $totalHargaJual - $totalModal;
$bulan = [
'01' => 'Januari',
'02' => 'Februari',
'03' => 'Maret',
'04' => 'April',
'05' => 'Mei',
'06' => 'Juni',
'07' => 'Juli',
'08' => 'Agustus',
'09' => 'September',
'10' => 'Oktober',
'11' => 'November',
'12' => 'Desember'
];
$lap_bulanan = [];
$tahun = date("Y");
foreach($bulan as $key=>$value){
$data_penjualan = Penjualan::with('listItem')
->whereMonth('created_at', "=",$key)
->whereYear('created_at', "=",$tahun)
->get();
$total = 0;
foreach($data_penjualan as $v){
foreach($v->listItem as $items){
$total += (int) $items->barang->harga_jual * $items->qty;
}
}
array_push($lap_bulanan,['bulan'=>$value,'total'=>$total]);
}
$data = [
'title' => 'Data Laporan Bulanan',
'dailyTotals' => array_sum($dailyTotals),
'totalBarangTerjual' => $totalBarangTerjual,
'totalPenjualan' => $totalHargaJual,
'totalPendapatan' => $totalPendapatan,
'lap_bulanan' => $lap_bulanan
];
return view('page.dashboard.laporan.laporanBulanan', compact('data'));
}
public function laporanPembayaran(Request $request)
{
if ($request->ajax()) {
if ($request->isMethod('get')) {
$query = Penjualan::query()->with('listItem');
if ($request->has('search')) {
$searchTerm = $request->input('search');
$query->where('created_at', 'like', "%$searchTerm%");
}
if ($request->has('start_date') && $request->has('end_date')) {
$startDate = Carbon::createFromFormat('Y-m-d', $request->input('start_date'))->startOfDay();
$endDate = Carbon::createFromFormat('Y-m-d', $request->input('end_date'))->endOfDay();
$query->whereBetween('created_at', [$startDate, $endDate]);
}
$data = $query->get();
if ($data->count() > 0) {
$transformedData = $data->flatMap(function ($item) {
$totalModal = 0;
$totalLaba = 0;
return collect($item->listItem)->map(function ($listItem) use (&$totalModal, &$totalLaba, $item) {
$modal = $listItem['qty'] * $listItem['barang']['harga_beli'];
$laba = $listItem['qty'] * $listItem['barang']['harga_jual'];
$totalModal += $modal;
$totalLaba += $laba;
$labaBersih = $totalLaba - $totalModal;
return [
'tanggal' => $item->created_at,
'pembayaran' => $item->pembayaran,
'no_transaksi' => $item->no_transaksi,
'kode' => $listItem['barang']['kode'],
'nama_barang' => $listItem['barang']['nama'],
'qty' => $listItem['qty'],
'modal' => $totalModal,
'laba' => $labaBersih,
'laba_kotor' => $totalLaba
];
});
});
$startDate = Carbon::createFromFormat('Y-m-d', $request->input('start_date'))->startOfDay();
$endDate = Carbon::createFromFormat('Y-m-d', $request->input('end_date'))->endOfDay();
// $startDate = Carbon::createFromFormat('Y-m-d', "2024-06-01")->startOfDay();
// $endDate = Carbon::createFromFormat('Y-m-d', "2024-06-18")->endOfDay();
$penjualan = Penjualan::whereBetween('created_at', [$startDate, $endDate])
->groupBy(DB::raw("DATE_FORMAT(penjualan.created_at, '%Y-%m-%d')"))->get();
$label = [];
$modal_total = [];
$omset_total = [];
$pendapatan_total = [];
// dd($penjualan);
// die();
foreach($penjualan as $value){
$item = ListItemPenjualan::
selectRaw("barang.*,qty")
->join('barang',"barang.id",'barang_id')
->whereDate('list_item_penjualan.created_at', '=', date('Y-m-d',strtotime($value->created_at)))->get();
$modal = 0;
$omset = 0;
foreach($item as $v){
$modal += $v->qty*$v->harga_beli;
$omset += $v->qty*$v->harga_jual;
}
$pendapatan = $omset-$modal;
array_push($label,date('d M Y',strtotime($value->created_at)));
array_push($modal_total,$modal);
array_push($omset_total,$omset);
array_push($pendapatan_total,$pendapatan);
}
$res['label'] = $label;
$res['grafik_modal'] = $modal_total;
$res['grafik_omset'] = $omset_total;
$res['grafik_pendapatan'] = $pendapatan_total;
$res['message'] = $transformedData;
return response()->json($res, 200);
} else {
return response()->json(['message' => 'Tidak ada data!'], 200);
}
}
}
$data = [
'title' => 'Data Laporan Harian',
];
return view('page.dashboard.laporan.laporanPembayaran', compact('data'));
}
}