253 lines
9.5 KiB
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'));
|
|
}
|
|
}
|