fix report gadaian v2 not sync with v3
This commit is contained in:
@@ -29,6 +29,7 @@ use App\KomuditiTransaksi;
|
|||||||
use App\Advansur;
|
use App\Advansur;
|
||||||
use App\HistoryEmasSandaran;
|
use App\HistoryEmasSandaran;
|
||||||
use App\InOutMar;
|
use App\InOutMar;
|
||||||
|
use App\Services\Miscellaneous\StatistikService;
|
||||||
|
|
||||||
use Illuminate\Http\Request;
|
use Illuminate\Http\Request;
|
||||||
|
|
||||||
@@ -587,44 +588,78 @@ class GadaiController extends Controller
|
|||||||
|
|
||||||
public function getLaporanGadaiRangeDate($kodcaw,Request $request){
|
public function getLaporanGadaiRangeDate($kodcaw,Request $request){
|
||||||
|
|
||||||
$cawangan = Cawangan::on('mysql7')->where('kodcaw','=',$kodcaw)->first();
|
$mula = $request->mula;
|
||||||
|
$akhir = $request->akhir;
|
||||||
|
|
||||||
$gadai_data = Gadai::on($cawangan['mysql'])->select('t_gadai','norujukan','nokp','semakbarcode','masa','berat','nilaimarhun','pinjaman','upah12','percentpinj','teller','nokp','ujrah','onepercent','tagbaru')
|
$cawangan = Cawangan::on('mysql7')->where('kodcaw', $kodcaw)->first();
|
||||||
->where('t_gadai','>=',$request->mula)
|
|
||||||
->where('t_gadai','<=',$request->akhir)
|
|
||||||
->orderBy('t_gadai')
|
|
||||||
->orderBy('teller')
|
|
||||||
->orderBy('sirig')
|
|
||||||
->get();
|
|
||||||
|
|
||||||
$gadai = [];
|
$gadai_data = Gadai::on($cawangan['mysql'])
|
||||||
|
->whereBetween('t_gadai', [$request->mula, $request->akhir])
|
||||||
|
->orderBy('t_gadai')
|
||||||
|
->orderBy('teller')
|
||||||
|
->orderBy('sirig')
|
||||||
|
->get();
|
||||||
|
|
||||||
if($gadai_data){
|
$nokps = $gadai_data->pluck('nokp')->unique();
|
||||||
foreach($gadai_data as $index=>$gadaiData){
|
|
||||||
$customer_info = Customer::on('mysql7')->where('kplama','=',$gadaiData['nokp'])->orWhere('kpbaru','=',$gadaiData['nokp'])->first();
|
|
||||||
array_push($gadai,[
|
|
||||||
"t_gadai"=> $gadaiData['t_gadai'],
|
|
||||||
"norujukan"=> $gadaiData['norujukan'],
|
|
||||||
"nama"=> $customer_info['nama'],
|
|
||||||
"nokp"=> $gadaiData['nokp'],
|
|
||||||
"semakbarcode"=> $gadaiData['semakbarcode'],
|
|
||||||
"masa"=> $gadaiData['masa'],
|
|
||||||
"berat"=> $gadaiData['berat'],
|
|
||||||
"nilaimarhun"=> $gadaiData['nilaimarhun'],
|
|
||||||
"pinjaman"=> $gadaiData['pinjaman'],
|
|
||||||
"upah12"=> $gadaiData['upah12'],
|
|
||||||
"percentpinj"=> $gadaiData['percentpinj'],
|
|
||||||
"alamat1"=> $customer_info['alamat1'],
|
|
||||||
"teller"=> $gadaiData['teller'],
|
|
||||||
"ujrah"=> $gadaiData['ujrah'],
|
|
||||||
"onepercent"=> $gadaiData['onepercent'],
|
|
||||||
"tagbaru"=> $gadaiData['tagbaru']
|
|
||||||
|
|
||||||
]);
|
$customers = Customer::on('mysql7')
|
||||||
|
->where(function($query) use ($nokps) {
|
||||||
|
$query->whereIn('kpbaru', $nokps)
|
||||||
|
->orWhereIn('kplama', $nokps);
|
||||||
|
})
|
||||||
|
->get()
|
||||||
|
->flatMap(fn($c) => [
|
||||||
|
$c->kpbaru => $c,
|
||||||
|
$c->kplama => $c
|
||||||
|
]);
|
||||||
|
$gadai = $gadai_data->map(function ($g) use ($customers) {
|
||||||
|
|
||||||
|
foreach($customers as $key=>$value){
|
||||||
|
if($g->nokp == $value->kpbaru || $g->nokp == $value->kplama){
|
||||||
|
$customer = $value;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
return response()->json($gadai);
|
return [
|
||||||
|
|
||||||
|
"nama" => optional($customer)->nama,
|
||||||
|
"alamat1" => optional($customer)->alamat1,
|
||||||
|
"t_gadai" => $g->t_gadai,
|
||||||
|
"norujukan" => $g->norujukan,
|
||||||
|
"norujukan"=> $g->norujukan,
|
||||||
|
|
||||||
|
"nokp"=> $g->nokp,
|
||||||
|
"semakbarcode"=> $g->semakbarcode,
|
||||||
|
"masa"=> $g->masa,
|
||||||
|
"berat"=> $g->berat,
|
||||||
|
"nilaimarhun"=> $g->nilaimarhun,
|
||||||
|
"pinjaman"=> $g->pinjaman,
|
||||||
|
"upah12"=> $g->upah12,
|
||||||
|
"percentpinj"=> $g->percentpinj,
|
||||||
|
"alamat1"=> optional($customer)->alamat1,
|
||||||
|
"teller"=> $g->teller,
|
||||||
|
"ujrah"=> $g->ujrah,
|
||||||
|
"onepercent"=> $g->onepercent,
|
||||||
|
"tagbaru"=> $g->tagbaru,
|
||||||
|
"kodkerja"=> optional($customer)->kodkerja,
|
||||||
|
"bangsa"=> optional($customer)->bangsa,
|
||||||
|
|
||||||
|
];
|
||||||
|
});
|
||||||
|
// dd($gadai);
|
||||||
|
|
||||||
|
$statistikService = new StatistikService($kodcaw,$mula,$akhir);
|
||||||
|
$reportgadai = $statistikService->LaporanStatistik($gadai);
|
||||||
|
// dd($nokps);
|
||||||
|
|
||||||
|
return response()->json([
|
||||||
|
'gadai' => $gadai,
|
||||||
|
'kodcaw' => $kodcaw,
|
||||||
|
'mula' => $mula,
|
||||||
|
'akhir' => $akhir,
|
||||||
|
'statistik' => $reportgadai,
|
||||||
|
'jumlah' => $gadai->count(),
|
||||||
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getLaporanBatalGadai($kodcaw,$tarikh){
|
public function getLaporanBatalGadai($kodcaw,$tarikh){
|
||||||
|
|||||||
@@ -0,0 +1,165 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Services\Miscellaneous;
|
||||||
|
|
||||||
|
use App\Http\Controllers\Controller;
|
||||||
|
use App\Cawangan;
|
||||||
|
use App\Gadai;
|
||||||
|
use Illuminate\Http\Request;
|
||||||
|
use Illuminate\Support\Facades\DB;
|
||||||
|
use App\Services\Reports\GadaianService as ReportGadaianService;
|
||||||
|
use App\Helper;
|
||||||
|
use App\Tebus;
|
||||||
|
use Illuminate\Support\Carbon;
|
||||||
|
|
||||||
|
|
||||||
|
class StatistikService
|
||||||
|
{
|
||||||
|
protected $kodcaw;
|
||||||
|
protected $mysql;
|
||||||
|
protected $mula;
|
||||||
|
protected $akhir;
|
||||||
|
|
||||||
|
public function __construct($kodcaw,$mula,$akhir)
|
||||||
|
{
|
||||||
|
$this->kodcaw = $kodcaw;
|
||||||
|
$this->mysql = Cawangan::on('mysql7')->where('kodcaw', $kodcaw)->value('mysql');
|
||||||
|
$this->mula = $mula;
|
||||||
|
$this->akhir = $akhir;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function LaporanStatistik($gadai) : array
|
||||||
|
{
|
||||||
|
$reportPembiayaan = $this->countPawnByType($gadai);
|
||||||
|
$reportLoanAmount = $this->countPawnByLoan($gadai);
|
||||||
|
$reportMarhunValue = $this->countMarhunByValue($gadai);
|
||||||
|
$reportMarhunMargin = $this->countMarhunByMargin($gadai);
|
||||||
|
$reportCustomerJob = $this->countCustomerByJob($gadai);
|
||||||
|
$reportCustomerRace = $this->countCustomerByRace($gadai);
|
||||||
|
// dd($reportCustomerRace);
|
||||||
|
|
||||||
|
return [
|
||||||
|
'reportPembiayaan' => $reportPembiayaan,
|
||||||
|
'reportLoanAmount' => $reportLoanAmount,
|
||||||
|
'reportMarhunValue' => $reportMarhunValue,
|
||||||
|
'reportMarhunMargin' => $reportMarhunMargin,
|
||||||
|
'reportCustomerJob' => $reportCustomerJob,
|
||||||
|
'reportCustomerRace' => $reportCustomerRace,
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
private function countPawnByType($gadai)
|
||||||
|
{
|
||||||
|
$pembiayaanbaru = Tebus::on($this->mysql)
|
||||||
|
->join('gadai as g1', 'tebus.norujukan', '=', 'g1.norujukan')
|
||||||
|
->join('gadai as g2', function ($join) {
|
||||||
|
$join->on('g2.nokp', '=', 'g1.nokp')
|
||||||
|
->on('g2.t_gadai', '=', 'tebus.t_tebus')
|
||||||
|
->whereRaw('ABS(g2.berat - g1.berat) <= 0.02')
|
||||||
|
->whereColumn('g2.norujukan', '!=', 'g1.norujukan');
|
||||||
|
})
|
||||||
|
->whereBetween('tebus.t_tebus', [$this->mula, $this->akhir])
|
||||||
|
->groupBy('tebus.norujukan')
|
||||||
|
->selectRaw("
|
||||||
|
tebus.norujukan as norujukan_tebus,
|
||||||
|
MAX(g2.norujukan) as norujukanpembiayaansemula,
|
||||||
|
MAX(g1.taglel) as taglel_lama
|
||||||
|
")
|
||||||
|
->get()
|
||||||
|
->toArray();
|
||||||
|
|
||||||
|
$pembiayaanbaruNorujukan = array_column($pembiayaanbaru, 'norujukanpembiayaansemula');
|
||||||
|
$filteredNorujukanLelongan = array_column(
|
||||||
|
array_filter($pembiayaanbaru, function ($item) {
|
||||||
|
return $item['taglel_lama'] == 1;
|
||||||
|
}),
|
||||||
|
'norujukanpembiayaansemula'
|
||||||
|
);
|
||||||
|
$filteredPSNorujukan = array_column(
|
||||||
|
array_filter($pembiayaanbaru, function ($item) {
|
||||||
|
return $item['taglel_lama'] == 0;
|
||||||
|
}),
|
||||||
|
'norujukanpembiayaansemula'
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
$pembiayaanbaru = $gadai->whereIn('norujukan', $filteredPSNorujukan)->count();
|
||||||
|
$pembiayaansemula = $gadai->whereNotIn('norujukan', $pembiayaanbaruNorujukan)->count();
|
||||||
|
$lelongan = $gadai->whereIn('norujukan', $filteredNorujukanLelongan)->count();
|
||||||
|
|
||||||
|
return [
|
||||||
|
'pembiayaanbaru' => $pembiayaanbaru,
|
||||||
|
'pembiayaansemula' => $pembiayaansemula,
|
||||||
|
'lelongan' => $lelongan
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
private function countPawnByLoan($gadai)
|
||||||
|
{
|
||||||
|
return collect($gadai)->countBy(function ($item) {
|
||||||
|
$loan = $item['pinjaman'];
|
||||||
|
|
||||||
|
if ($loan <= 400.99) return '< 400.99';
|
||||||
|
if ($loan >= 401 && $loan <= 2000) return '401 - 2000';
|
||||||
|
if ($loan >= 2001 && $loan <= 24999) return '2001 - 2499';
|
||||||
|
if ($loan >= 2500) return '>= 2500';
|
||||||
|
if ($loan > 101000) return '>101000';
|
||||||
|
})->toArray();
|
||||||
|
}
|
||||||
|
|
||||||
|
private function countMarhunByValue($gadai)
|
||||||
|
{
|
||||||
|
return collect($gadai)->countBy(function ($item) {
|
||||||
|
$nilaimarhun = $item['nilaimarhun'];
|
||||||
|
|
||||||
|
if ($nilaimarhun <= 400.99) return '< 1-400';
|
||||||
|
if ($nilaimarhun >= 401 && $nilaimarhun <= 2000) return '401-2000';
|
||||||
|
if ($nilaimarhun > 2001) return '> 2001';
|
||||||
|
})->toArray();
|
||||||
|
}
|
||||||
|
|
||||||
|
private function countMarhunByMargin($gadai)
|
||||||
|
{
|
||||||
|
return collect($gadai)->countBy(function ($item) {
|
||||||
|
$margin= $item['percentpinj'];
|
||||||
|
|
||||||
|
if ($margin >= 10 && $margin <= 40.99) return '10-40.99';
|
||||||
|
if ($margin >= 41 && $margin <= 60.99) return '41-60.99';
|
||||||
|
if ($margin >= 61 && $margin <= 80) return '> 61-80';
|
||||||
|
})->toArray();
|
||||||
|
}
|
||||||
|
|
||||||
|
private function countCustomerByJob($gadai)
|
||||||
|
{
|
||||||
|
$jobMap = [
|
||||||
|
1 => 'Peniaga',
|
||||||
|
2 => 'Pekerja Swasta',
|
||||||
|
3 => 'Pekerja Kerajaan',
|
||||||
|
4 => 'Bekerja Sendiri',
|
||||||
|
5 => 'Suri Rumah',
|
||||||
|
6 => 'Lain-lain',
|
||||||
|
];
|
||||||
|
|
||||||
|
return collect($gadai)->countBy(function ($item) use ($jobMap) {
|
||||||
|
$kodkerja = floatval($item['kodkerja']);
|
||||||
|
return $jobMap[$kodkerja] ?? 'Lain-lain';
|
||||||
|
})->toArray();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private function countCustomerByRace($gadai){
|
||||||
|
|
||||||
|
$raceMap = [
|
||||||
|
'M' => 'Melayu',
|
||||||
|
'C' => 'Cina',
|
||||||
|
'I' => 'India',
|
||||||
|
'L' => 'Lain-lain',
|
||||||
|
];
|
||||||
|
|
||||||
|
return collect($gadai)->countBy(function ($item) use ($raceMap) {
|
||||||
|
return $raceMap[$item['bangsa']] ?? 'Lain-lain';
|
||||||
|
|
||||||
|
})->toArray();
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user