1069 lines
43 KiB
PHP
Executable File
1069 lines
43 KiB
PHP
Executable File
<?php
|
|
|
|
namespace App\Http\Controllers;
|
|
|
|
use App\Exports\TransactionDealerExport;
|
|
use App\Exports\TransactionExport;
|
|
use App\Exports\TransactionSaExport;
|
|
use App\Models\Dealer;
|
|
use App\Models\Transaction;
|
|
use App\Models\User;
|
|
use App\Models\Work;
|
|
use Exception;
|
|
use Illuminate\Http\Request;
|
|
use Illuminate\Support\Carbon;
|
|
use Illuminate\Support\Facades\Auth;
|
|
use Illuminate\Support\Facades\DB;
|
|
use Illuminate\Support\Facades\Storage;
|
|
use Maatwebsite\Excel\Facades\Excel;
|
|
use Illuminate\Support\Facades\Validator;
|
|
|
|
class ApiController extends Controller
|
|
{
|
|
public function report_export_dealer(Request $request) {
|
|
$filename = 'dealer/'.date('dmYHis').rand(0,3).'dealer.xlsx';
|
|
Excel::store(new TransactionDealerExport($request), $filename, 'report');
|
|
|
|
$file = asset('storage/report/'. $filename);
|
|
|
|
return $file;
|
|
}
|
|
|
|
public function report_export_sa(Request $request) {
|
|
$filename = 'sa/'.date('dmYHis').rand(0,3).'sa.xlsx';
|
|
Excel::store(new TransactionSaExport($request), $filename, 'report');
|
|
|
|
$file = asset('storage/report/'. $filename);
|
|
|
|
return $file;
|
|
}
|
|
|
|
public function resume(Request $request)
|
|
{
|
|
$data = Transaction::where('user_id', Auth::user()->id);
|
|
|
|
if($request->type == 'monthly') {
|
|
$data = $data->whereMonth('date', '=', date('m'))->whereYear('date', date('Y'));
|
|
}
|
|
|
|
if($request->type == 'daily') {
|
|
$data = $data->whereDate('date', '=', date('Y-m-d'));
|
|
}
|
|
|
|
if($request->type == 'total_monthly_dealer') {
|
|
$data = Transaction::where('dealer_id', Auth::user()->dealer_id)->whereMonth('date', '=', date('m'))->whereYear('date', date('Y'));
|
|
}
|
|
|
|
$data = $data->count();
|
|
|
|
return response()->json([
|
|
'message' => 'Get resume',
|
|
'data' => ["count" => $data],
|
|
'status' => true,
|
|
'code' => 200
|
|
], 200);
|
|
}
|
|
|
|
public function dealer_monthly(Request $request)
|
|
{
|
|
if(!isset($request->month)) {
|
|
$request['month'] = date('m');
|
|
}
|
|
|
|
$id = Auth::user()->dealer_id;
|
|
$works = Work::select('id', 'name', 'shortname')->whereHas('transactions', function($q) use($request, $id) {
|
|
if(isset($request->month)) {
|
|
return $q->whereMonth('date', '=', $request->month)->whereYear('date', date('Y'))->where('dealer_id', $id);
|
|
}
|
|
})->get();
|
|
|
|
$dealer = Dealer::find($id);
|
|
$dates = Transaction::select(DB::raw('DATE(`date`) as date'))->where('dealer_id', $id)->whereMonth('date', $request->month)->whereYear('date', date('Y'))->groupBy(DB::raw('DATE(`date`)'))->get()->toArray();
|
|
$dates = $this->array_value_recursive('date', $dates);
|
|
|
|
$month_trxs = [];
|
|
$month_trxs_total = [];
|
|
$yesterday_month_trxs_total = [];
|
|
foreach($works as $work1) {
|
|
$prev_mth_start = date('Y-m-d', strtotime(date('Y-'. $request->month .'-1')." -1 month"));
|
|
$prev_mth = explode('-', $prev_mth_start);
|
|
if($request->month == date('m')) {
|
|
$prev_mth_end = $prev_mth[0].'-'.$prev_mth[1].'-'.date('d');
|
|
}else{
|
|
$prev_mth_end = $prev_mth[0].'-'.$prev_mth[1].'-'.date('t');
|
|
}
|
|
|
|
$yesterday_month_trx = Transaction::where('work_id', $work1->id)->where('dealer_id', $id)->whereDate('date', '>=', $prev_mth_start)->whereDate('date', '<=', $prev_mth_end)->sum('qty');
|
|
|
|
if(array_key_exists($work1->id, $yesterday_month_trxs_total)) {
|
|
$yesterday_month_trxs_total[$work1->id] += $yesterday_month_trx;
|
|
}else{
|
|
$yesterday_month_trxs_total[$work1->id] = $yesterday_month_trx;
|
|
}
|
|
}
|
|
|
|
if($dates) {
|
|
foreach($dates as $key => $date) {
|
|
$date_works = [];
|
|
foreach ($works as $key2 => $work) {
|
|
$d = Transaction::where('work_id', $work->id)->where('dealer_id', $id)->whereDate('date', $date);
|
|
|
|
if(isset($request->month)) {
|
|
$d = $d->whereMonth('date', '=', $request->month)->whereYear('date', date('Y'));
|
|
}
|
|
|
|
$d = $d->sum('qty');
|
|
|
|
if($d) {
|
|
if(array_key_exists($work->id, $month_trxs_total)) {
|
|
$month_trxs_total[$work->id] += $d;
|
|
}else{
|
|
$month_trxs_total[$work->id] = $d;
|
|
}
|
|
$date_works[] = [
|
|
'work_id' => $work->id,
|
|
'work_name' => $work->name,
|
|
'shortname' => $work->shortname,
|
|
'date' => $date,
|
|
'qty' => (int) $d,
|
|
];
|
|
}else{
|
|
$date_works[] = [
|
|
'work_id' => $work->id,
|
|
'work_name' => $work->name,
|
|
'shortname' => $work->shortname,
|
|
'date' => $date,
|
|
'qty' => 0,
|
|
];
|
|
}
|
|
|
|
}
|
|
|
|
$month_trxs[] = [
|
|
'date' => Carbon::parse(strtotime($date))->translatedFormat('d F Y'),
|
|
'works' => $date_works
|
|
];
|
|
}
|
|
}
|
|
|
|
$final_month_trxs_total = [];
|
|
$final_yesterday_month_trxs_total = [];
|
|
foreach($works as $work1) {
|
|
$final_month_trxs_total[$work1->id] = $month_trxs_total[$work1->id];
|
|
$final_yesterday_month_trxs_total[$work1->id] = $yesterday_month_trxs_total[$work1->id];
|
|
}
|
|
$month_trxs_total = array_values($final_month_trxs_total);
|
|
$yesterday_month_trxs_total = array_values($final_yesterday_month_trxs_total);
|
|
|
|
$works_count = count($works);
|
|
$month = $request->month;
|
|
|
|
$totals = [
|
|
"works" => $works,
|
|
"months" => [
|
|
"prev" => Carbon::parse(strtotime(date('Y-'. $request->month .'-1')." -1 month"))->translatedFormat('F'),
|
|
"now" => Carbon::create()->startOfMonth()->month($month)->startOfMonth()->translatedFormat('F')
|
|
|
|
],
|
|
"data" => []
|
|
];
|
|
for($i = 0; $i < count($month_trxs_total); $i++) {
|
|
$totals["data"][] = [
|
|
"prev" => (int) $yesterday_month_trxs_total[$i],
|
|
"now" => (int) $month_trxs_total[$i],
|
|
];
|
|
}
|
|
|
|
$data = [
|
|
"total_work" => $works_count,
|
|
"month" => Carbon::create()->startOfMonth()->month($month)->startOfMonth()->translatedFormat('F'),
|
|
"totals" => $totals,
|
|
"month_trx" => $month_trxs
|
|
];
|
|
|
|
return response()->json([
|
|
'message' => 'Get Dealer Montly Report',
|
|
'data' => $data,
|
|
'status' => true,
|
|
'code' => 200
|
|
], 200);
|
|
}
|
|
|
|
public function sa_monthly(Request $request)
|
|
{
|
|
if(!isset($request->month)) {
|
|
$request['month'] = date('m');
|
|
}
|
|
|
|
$works = Work::select('id', 'name')->whereHas('transactions', function($q) use($request) {
|
|
if(isset($request->month)) {
|
|
return $q->whereMonth('date', '=', $request->month)->whereYear('date', date('Y'));
|
|
}
|
|
})->get();
|
|
|
|
$sas = User::select('id', 'name')->whereHas('sa_transactions', function($q) use($request) {
|
|
if(isset($request->month)) {
|
|
return $q->whereMonth('date', '=', $request->month)->whereYear('date', date('Y'));
|
|
}
|
|
})->get();
|
|
|
|
$trxs = [];
|
|
foreach ($works as $key2 => $work) {
|
|
$work_sas = [];
|
|
foreach($sas as $key => $sa) {
|
|
$work_qty = Transaction::where('work_id', $work->id)->where('user_sa_id', $sa->id)->whereMonth('date', '=', $request->month)->whereYear('date', date('Y'));
|
|
$work_qty = $work_qty->sum('qty');
|
|
if($work_qty) {
|
|
$work_sas[] = [
|
|
'sa_name' => $sa->name,
|
|
'user_sa_id' => $sa->id,
|
|
'work_id' => $work->id,
|
|
'qty' => $work_qty,
|
|
];
|
|
}else{
|
|
$work_sas[] = [
|
|
'sa_name' => $sa->name,
|
|
'user_sa_id' => $sa->id,
|
|
'work_id' => $work->id,
|
|
'qty' => 0,
|
|
];
|
|
}
|
|
}
|
|
|
|
$trxs[] = [
|
|
'work_id' => $work->id,
|
|
'work_name' => $work->name,
|
|
'works' => $work_sas
|
|
];
|
|
}
|
|
|
|
|
|
$month = $request->month;
|
|
$data = [
|
|
"month" => Carbon::create()->startOfMonth()->month($month)->startOfMonth()->translatedFormat('F'),
|
|
"work_count" => count($works),
|
|
"data" => $trxs
|
|
];
|
|
|
|
return response()->json([
|
|
'message' => 'Get SA Montly Report',
|
|
'data' => $data,
|
|
'status' => true,
|
|
'code' => 200
|
|
], 200);
|
|
}
|
|
|
|
private function array_value_recursive($key, array $arr){
|
|
$val = array();
|
|
array_walk_recursive($arr, function($v, $k) use($key, &$val){
|
|
if($k == $key) array_push($val, $v);
|
|
});
|
|
|
|
return $val;
|
|
}
|
|
|
|
public function login(Request $request)
|
|
{
|
|
if (!Auth::attempt($request->only('email', 'password'))) {
|
|
return response()->json([
|
|
'message' => 'Unauthorized',
|
|
'status' => false,
|
|
'code' => 401
|
|
], 401);
|
|
}
|
|
|
|
$user = User::join('roles AS r', 'r.id', 'users.role_id')->select('users.name as name', 'users.email as email', 'users.dealer_id as dealer_id', 'r.name as role', "users.id as id")->where('email', $request->email)->with('dealer')->firstOrFail();
|
|
$token = $user->createToken('auth_token')->plainTextToken;
|
|
$user['token'] = $token;
|
|
return response()->json([
|
|
'message' => 'Login success',
|
|
'data' => $user,
|
|
'status' => true,
|
|
'code' => 200
|
|
], 200);
|
|
}
|
|
|
|
public function logout()
|
|
{
|
|
/** @var \App\Models\User $user */
|
|
$user = auth('sanctum')->user();
|
|
if ($user) {
|
|
$user->tokens()->delete();
|
|
}
|
|
return response()->json([
|
|
'message' => 'Logout success',
|
|
'status' => true,
|
|
'code' => 200
|
|
], 200);
|
|
}
|
|
|
|
public function profile()
|
|
{
|
|
$user = User::join('roles AS r', 'r.id', 'users.role_id')->select('users.name as name', 'users.email as email', 'users.dealer_id as dealer_id', 'r.name as role', "users.id as id")->where("users.id", auth('sanctum')->user()->id)->first();
|
|
if(!$user) {
|
|
return response()->json([
|
|
'message' => 'Failed get data user, Data Not Found',
|
|
'data' => [],
|
|
'status' => false,
|
|
'code' => 404
|
|
], 404);
|
|
}
|
|
|
|
return response()->json([
|
|
'message' => 'Get data user successfully',
|
|
'data' => $user,
|
|
'status' => true,
|
|
'code' => 200
|
|
], 200);
|
|
}
|
|
|
|
public function spk(Request $request)
|
|
{
|
|
$data = Transaction::leftJoin('users', 'users.id', '=', 'transactions.user_id')
|
|
->leftJoin('users as sa', 'sa.id', '=', 'transactions.user_sa_id')
|
|
->leftJoin('works as w', 'w.id', '=', 'transactions.work_id')
|
|
->leftJoin('categories as cat', 'cat.id', '=', 'w.category_id')
|
|
->leftJoin('dealers as d', 'd.id', '=', 'transactions.dealer_id')
|
|
->select('transactions.id', 'transactions.status', 'transactions.user_id as user_id', 'transactions.user_sa_id as user_sa_id', 'users.name as username', 'sa.name as sa_name', 'cat.name as category_name', 'w.name as workname', 'transactions.qty as qty', 'transactions.date as date', 'transactions.police_number as police_number', 'transactions.warranty as warranty', 'transactions.spk as spk', 'transactions.dealer_id', 'd.name as dealer_name', 'w.shortname');
|
|
|
|
if(isset($request->date_start)) {
|
|
$data->whereDate('transactions.date', '>=', $request->date_start);
|
|
}
|
|
|
|
if(isset($request->date_end)) {
|
|
$data->whereDate('transactions.date', '<=', $request->date_end);
|
|
}
|
|
|
|
if(isset($request->sa)) {
|
|
$data->where('transactions.user_sa_id', $request->sa);
|
|
}
|
|
|
|
if(isset($request->mechanic)) {
|
|
$data->where('transactions.user_id', $request->mechanic);
|
|
}
|
|
|
|
if(isset($request->dealer)) {
|
|
$data->where('transactions.dealer_id', $request->dealer);
|
|
}
|
|
|
|
$data = $data->orderBy('date', 'DESC')->get();
|
|
|
|
return response()->json([
|
|
'message' => 'Get data spk successfully',
|
|
'data' => $data,
|
|
'status' => true,
|
|
'code' => 200
|
|
], 200, ['Content-Type' => 'application/json;charset=UTF-8', 'Charset' => 'utf-8'],
|
|
JSON_UNESCAPED_UNICODE);
|
|
}
|
|
|
|
public function spk_detail($id)
|
|
{
|
|
$data = Transaction::leftJoin('users', 'users.id', '=', 'transactions.user_id')
|
|
->leftJoin('users as sa', 'sa.id', '=', 'transactions.user_sa_id')
|
|
->leftJoin('works as w', 'w.id', '=', 'transactions.work_id')
|
|
->leftJoin('categories as cat', 'cat.id', '=', 'w.category_id')
|
|
->leftJoin('dealers as d', 'd.id', '=', 'transactions.dealer_id')
|
|
->select('transactions.id', 'transactions.status', 'transactions.user_id as user_id', 'transactions.user_sa_id as user_sa_id', 'users.name as username', 'sa.name as sa_name', 'cat.name as category_name', 'w.id as work_id', 'w.name as workname', 'transactions.qty as qty', 'transactions.date as date', 'transactions.police_number as police_number', 'transactions.warranty as warranty', 'transactions.spk as spk', 'transactions.dealer_id', 'd.name as dealer_name')->where('transactions.id', $id)->first();
|
|
|
|
if(!$data) {
|
|
return response()->json([
|
|
'message' => 'Failed to get data spk, Data Not Found',
|
|
'data' => [],
|
|
'status' => false,
|
|
'code' => 404
|
|
], 404);
|
|
}
|
|
|
|
return response()->json([
|
|
'message' => 'Successfully get data spk',
|
|
'data' => $data,
|
|
'status' => true,
|
|
'code' => 200
|
|
], 200);
|
|
}
|
|
|
|
public function spk_update(Request $request, $id)
|
|
{
|
|
$transaction = Transaction::find($id);
|
|
$validation = Validator::make($request->all(), [
|
|
'spk_no' => ['required'],
|
|
'police_number' => ['required'],
|
|
'warranty' => ['required'],
|
|
'date' => ['required'],
|
|
'quantity' => ['required'],
|
|
'user_sa_id' => ['required', 'integer'],
|
|
'work_id' => ['required', 'integer'],
|
|
]);
|
|
|
|
if($validation->fails()) {
|
|
return response()->json([
|
|
'message' => 'Save work failed',
|
|
'data' => $validation->errors(),
|
|
'status' => false,
|
|
'code' => 400
|
|
], 400);
|
|
}
|
|
|
|
$transaction->update([
|
|
"spk" => $request->spk_no,
|
|
"date" => $request->date,
|
|
"police_number" => $request->police_number,
|
|
"work_id" => $request->work_id,
|
|
"qty" => $request->quantity,
|
|
"warranty" => $request->warranty,
|
|
"user_sa_id" => $request->user_sa_id,
|
|
]);
|
|
|
|
return response()->json([
|
|
'message' => 'Successfully Add Works',
|
|
'data' => $transaction,
|
|
'status' => true,
|
|
'code' => 200
|
|
], 200);
|
|
}
|
|
|
|
public function spk_delete($id)
|
|
{
|
|
$transaction = Transaction::find($id);
|
|
if(!$transaction) {
|
|
return response()->json([
|
|
'message' => 'Delete Failed. Data Not Found',
|
|
'data' => [],
|
|
'status' => false,
|
|
'code' => 404
|
|
], 404);
|
|
}
|
|
|
|
$transaction->delete();
|
|
|
|
return response()->json([
|
|
'message' => 'Data deleted',
|
|
'data' => [],
|
|
'status' => false,
|
|
'code' => 200
|
|
], 200);
|
|
}
|
|
|
|
public function daily_resume(Request $request)
|
|
{
|
|
if(!isset($request->date)) {
|
|
$request['date'] = date('Y-m-d');
|
|
}
|
|
|
|
$data = Transaction::select(DB::raw('SUM(transactions.qty) AS qty'), 'transactions.work_id', 'w.name as workname', 'w.shortname')->leftJoin('works AS w', 'w.id', '=', 'transactions.work_id')->whereDate('date', $request->date);
|
|
|
|
if(isset($request->mechanic)) {
|
|
$data = $data->where('transactions.user_id', $request->mechanic);
|
|
}
|
|
|
|
$data = $data->groupBy('work_id')->get();
|
|
|
|
if(!$data->count()) {
|
|
return response()->json([
|
|
'message' => 'Transaction Data Not Found',
|
|
'data' => [],
|
|
'status' => false,
|
|
'code' => 400
|
|
], 400);
|
|
}
|
|
|
|
return response()->json([
|
|
'message' => 'Get data transaction successfully',
|
|
'data' => $data,
|
|
'status' => true,
|
|
'code' => 200
|
|
], 200);
|
|
}
|
|
|
|
public function monthly_resume(Request $request)
|
|
{
|
|
|
|
DB::enableQueryLog();
|
|
$data = Transaction::select(DB::raw('SUM(transactions.qty) AS qty'), 'transactions.work_id', 'w.name as workname', 'w.shortname')->leftJoin('works AS w', 'w.id', '=', 'transactions.work_id')->whereMonth('date', date('m'))->whereYear('date', date('Y'));
|
|
|
|
if(isset($request->mechanic)) {
|
|
$data = $data->where('transactions.user_id', $request->mechanic);
|
|
}
|
|
|
|
$data = $data->groupBy('work_id')->get();
|
|
// print_r(DB::getQueryLog());die();
|
|
if(!$data->count()) {
|
|
return response()->json([
|
|
'message' => 'Transaction Data Not Found',
|
|
'data' => [],
|
|
'status' => false,
|
|
'code' => 400
|
|
], 400);
|
|
}
|
|
|
|
return response()->json([
|
|
'message' => 'Get data transaction successfully',
|
|
'data' => $data,
|
|
'status' => true,
|
|
'code' => 200
|
|
], 200);
|
|
}
|
|
|
|
public function share_daily()
|
|
{
|
|
$transaction_works = Work::select('id', 'name', 'shortname')->whereHas('transactions', function($q) {
|
|
return $q->whereDate('date', '=', date('Y-m-d'))->where('dealer_id',auth('sanctum')->user()->dealer_id);
|
|
})->get();
|
|
|
|
$dealer = Dealer::find(auth('sanctum')->user()->dealer_id);
|
|
$shared_text = "*[LAPORAN HARIAN MEKANIK]*\n".$dealer->name. "\n*".Carbon::now()->translatedFormat('l d F Y')."*"."\n\n\n";
|
|
foreach($transaction_works as $work) {
|
|
$shared_text .= $work->shortname."\n\n";
|
|
$total_qty = 0;
|
|
$transaction_sas = Transaction::leftJoin('users as sa', 'sa.id', '=', 'transactions.user_sa_id')
|
|
->select(DB::raw('SUM(transactions.qty) as qty'), 'sa.name as sa_name')
|
|
->where('work_id', $work->id)
|
|
->where('sa.dealer_id', $dealer->id)
|
|
->whereDate('transactions.date', '=', date('Y-m-d'))->groupBy('transactions.user_sa_id')->get();
|
|
foreach($transaction_sas as $sa) {
|
|
$shared_text .= $sa['sa_name'].':'.$sa['qty']." Unit\n";
|
|
$total_qty += $sa['qty'];
|
|
}
|
|
$shared_text .= "*TOTAL : ". $total_qty ." Unit*\n\n";
|
|
|
|
$this_month_trxs = Transaction::select(DB::raw('SUM(qty) as qty'), 'u.name')->where('work_id', $work->id)->join('users AS u', 'u.id', '=', 'transactions.user_sa_id')->where('transactions.dealer_id', $dealer->id)->whereMonth('date', date('m'))->whereYear('date', date('Y'))->groupBy('user_sa_id')->get();
|
|
$shared_text .= "*[PERIODE 1 - ". Carbon::now()->translatedFormat('d F Y') ."]*\n\n";
|
|
|
|
$sum_this_month_trx = 0;
|
|
foreach($this_month_trxs as $trx) {
|
|
$shared_text .= $trx->name.":".$trx->qty." Unit\n";
|
|
$sum_this_month_trx += $trx->qty;
|
|
}
|
|
|
|
$shared_text .= "*TOTAL : ". $sum_this_month_trx." Unit*\n\n";
|
|
}
|
|
|
|
return response()->json([
|
|
'message' => 'Get Share Format Daily Report Successfully',
|
|
'data' => $shared_text,
|
|
'status' => true,
|
|
'code' => 200
|
|
], 200);
|
|
}
|
|
|
|
public function share_monthly()
|
|
{
|
|
$dealer = Dealer::find(auth('sanctum')->user()->dealer_id);
|
|
$this_month_trxs = Transaction::select(DB::raw('SUM(qty) as qty'), 'u.name')->join('users AS u', 'u.id', '=', 'transactions.user_sa_id')->where('transactions.dealer_id', $dealer->id)->whereMonth('date', date('m'))->whereYear('date', date('Y'))->groupBy('user_sa_id')->get();
|
|
$today_trxs = Transaction::select(DB::raw('SUM(qty) as qty'), 'u.name')->join('users AS u', 'u.id', '=', 'transactions.user_sa_id')->where('transactions.dealer_id', $dealer->id)->whereDate('date', date('Y-m-d'))->groupBy('user_sa_id')->get();
|
|
|
|
$shared_text = "*[Laporan SA ". $dealer->name ." ]*\n\n*".Carbon::now()->translatedFormat('l d F Y') ."*\n\n";
|
|
$sum_today_trx = 0;
|
|
foreach($today_trxs as $trx) {
|
|
$shared_text .= $trx->name.":".$trx->qty." Unit\n";
|
|
$sum_today_trx += $trx->qty;
|
|
}
|
|
$shared_text .= "\n*TOTAL : ". $sum_today_trx ." Unit*\n\n";
|
|
$shared_text .= "*[PERIODE 1 - ". Carbon::now()->translatedFormat('d F Y') ."]*\n\n";
|
|
|
|
$sum_this_month_trx = 0;
|
|
foreach($this_month_trxs as $trx) {
|
|
$shared_text .= $trx->name.":".$trx->qty." Unit\n";
|
|
$sum_this_month_trx += $trx->qty;
|
|
}
|
|
|
|
$shared_text .= "\n*TOTAL : ". $sum_this_month_trx." Unit*";
|
|
return response()->json([
|
|
'message' => 'Get Share Format Monthly Report Successfully',
|
|
'data' => $shared_text,
|
|
'status' => true,
|
|
'code' => 200
|
|
], 200);
|
|
}
|
|
|
|
public function report_dealer(Request $request)
|
|
{
|
|
try {
|
|
if(!isset($request->month)) {
|
|
$request['month'] = date('m');
|
|
}
|
|
|
|
if(!isset($request->year)) {
|
|
$request['year'] = date('Y');
|
|
}
|
|
|
|
$year = $request->year;
|
|
|
|
$dealers = Dealer::all();
|
|
$works = Work::select('id', 'name')->whereHas('transactions', function($q) use($request) {
|
|
if(isset($request->month)) {
|
|
return $q->whereMonth('date', '=', $request->month)->whereYear('date', $request->year);
|
|
}
|
|
})->get();
|
|
|
|
if($request->has('dealer_id') && $request->dealer_id != 'all') {
|
|
$dealers = Dealer::where('id', $request->dealer_id)->get();
|
|
$works = Work::select('id', 'name')->whereHas('transactions', function($q) use($request) {
|
|
$q = $q->where('dealer_id', $request->dealer_id);
|
|
|
|
if(isset($request->month)) {
|
|
return $q->whereMonth('date', '=', $request->month)->whereYear('date', $request->year);
|
|
}
|
|
})->get();
|
|
}
|
|
|
|
$works_count = $works->count();
|
|
$trxs = [];
|
|
foreach ($dealers as $key => $dealer) {
|
|
$dealer_works = [];
|
|
foreach ($works as $key2 => $work) {
|
|
$d = Transaction::where('dealer_id', $dealer->id)->where('work_id', $work->id);
|
|
|
|
if(isset($request->month)) {
|
|
$d = $d->whereMonth('date', '=', $request->month)->whereYear('date', $year);
|
|
$month = $request->month;
|
|
}
|
|
|
|
$d = $d->sum('qty');
|
|
if($d) {
|
|
$dealer_works[] = [
|
|
'work_id' => $work->id,
|
|
'work_name' => $work->name,
|
|
'dealer_id' => $dealer->id,
|
|
'qty' => $d,
|
|
];
|
|
}
|
|
// else{
|
|
// $dealer_works[] = [
|
|
// 'work_id' => $work->id,
|
|
// 'work_name' => $work->name,
|
|
// 'dealer_id' => $dealer->id,
|
|
// 'qty' => 0,
|
|
// ];
|
|
// }
|
|
}
|
|
if($dealer_works) {
|
|
$trxs[] = [
|
|
'dealer_id' => $dealer->id,
|
|
'dealer_name' => $dealer->name,
|
|
'works' => $dealer_works
|
|
];
|
|
}
|
|
}
|
|
|
|
$month = $request->month;
|
|
// if($request->has('dealer_id')) {
|
|
// $trxs = $trxs[0];
|
|
// }
|
|
|
|
$prev_mth_start = date('Y-m-d', strtotime(date($year.'-'. $request->month .'-1')." -1 month"));
|
|
$prev_mth = explode('-', $prev_mth_start);
|
|
if($request->month == date('m')) {
|
|
$prev_mth_end = $prev_mth[0].'-'.$prev_mth[1].'-'.date('d');
|
|
}else{
|
|
$prev_mth_end = $prev_mth[0].'-'.$prev_mth[1].'-'.date('t');
|
|
}
|
|
|
|
$totals = [
|
|
"months" => [
|
|
"prev" => Carbon::create()->startOfMonth()->month($prev_mth[1])->startOfMonth()->translatedFormat('M'),
|
|
"now" => Carbon::create()->startOfMonth()->month($month)->startOfMonth()->translatedFormat('M')
|
|
],
|
|
"data" => []
|
|
];
|
|
|
|
foreach ($works as $key2 => $work) {
|
|
$now = Transaction::where('work_id', $work->id)->whereMonth('date', '=', $request->month)->whereYear('date', $year)->sum('qty');
|
|
$prev = Transaction::where('work_id', $work->id)->whereDate('date', '>=', $prev_mth_start)->whereDate('date', '<=', $prev_mth_end)->sum('qty');
|
|
|
|
if(!$prev) {
|
|
$prev = 0;
|
|
}
|
|
|
|
if(!$now) {
|
|
$now = 0;
|
|
}
|
|
|
|
$totals['data'][] = [
|
|
"work_name" => $work->name,
|
|
"prev" => (int) $prev,
|
|
"now" => (int) $now,
|
|
];
|
|
}
|
|
|
|
$data = [
|
|
"month" => Carbon::create()->startOfMonth()->month($month)->startOfMonth()->translatedFormat('M'),
|
|
"work_count" => $works_count,
|
|
"data" => $trxs,
|
|
"totals" => $totals
|
|
];
|
|
|
|
return response()->json([
|
|
'message' => 'Get Dealer Montly Report',
|
|
'data' => $data,
|
|
'status' => true,
|
|
'code' => 200
|
|
], 200, ['Content-Type' => 'application/json;charset=UTF-8', 'Charset' => 'utf-8'],
|
|
JSON_UNESCAPED_UNICODE);
|
|
}catch(Exception $e) {
|
|
return response()->json([
|
|
'message' => 'Server Error | '. $e->getMessage(),
|
|
'data' => null,
|
|
'status' => false,
|
|
'code' => 500
|
|
], 500);
|
|
}
|
|
}
|
|
|
|
public function report_sa(Request $request)
|
|
{
|
|
if(!isset($request->month)) {
|
|
$request['month'] = date('m');
|
|
}
|
|
|
|
if(!isset($request->year)) {
|
|
$request['year'] = date('Y');
|
|
}
|
|
|
|
$works = Work::select('id', 'name')->whereHas('transactions', function($q) use($request) {
|
|
$q = $q->whereMonth('date', '=', $request->month)->whereYear('date', $request->year);
|
|
|
|
if(isset($request->dealer)) {
|
|
$q = $q->where('dealer_id', '=', $request->dealer);
|
|
}
|
|
|
|
if(isset($request->sa) && $request->sa != 'all') {
|
|
$q = $q->where('user_sa_id', '=', $request->sa);
|
|
}
|
|
|
|
return $q;
|
|
})->get();
|
|
|
|
|
|
$sas = User::select('id', 'name')->whereHas('sa_transactions', function($q) use($request) {
|
|
$q = $q->whereMonth('date', '=', $request->month)->whereYear('date', $request->year);
|
|
|
|
if(isset($request->dealer)) {
|
|
$q = $q->where('dealer_id', '=', $request->dealer);
|
|
}
|
|
|
|
return $q;
|
|
});
|
|
|
|
if(isset($request->sa) && $request->sa != 'all') {
|
|
$sas = $sas->where('id', '=', $request->sa);
|
|
}
|
|
|
|
$sas = $sas->get();
|
|
|
|
$trxs = [];
|
|
foreach($sas as $key => $sa) {
|
|
$sa_works = [];
|
|
foreach ($works as $key2 => $work) {
|
|
$d = Transaction::where('user_sa_id', $sa->id)->where('work_id', $work->id)->whereMonth('date', '=', $request->month)->whereYear('date', $request->year);
|
|
|
|
if(isset($request->dealer)) {
|
|
$d = $d->where('dealer_id', '=', $request->dealer);
|
|
}
|
|
|
|
if(isset($request->sa) && $request->sa != 'all') {
|
|
$d = $d->where('user_sa_id', '=', $request->sa);
|
|
}
|
|
|
|
$d = $d->sum('qty');
|
|
if($d) {
|
|
$sa_works[] = [
|
|
'work_id' => $work->id,
|
|
'work_name' => $work->name,
|
|
'user_sa_id' => $sa->id,
|
|
'qty' => $d,
|
|
];
|
|
}
|
|
// else{
|
|
// $sa_works[] = [
|
|
// 'work_id' => $work->id,
|
|
// 'work_name' => $work->name,
|
|
// 'user_sa_id' => $sa->id,
|
|
// 'qty' => 0,
|
|
// ];
|
|
// }
|
|
}
|
|
|
|
if($sa_works) {
|
|
$trxs[] = [
|
|
'user_sa_id' => $sa->id,
|
|
'sa_name' => $sa->name,
|
|
'works' => $sa_works
|
|
];
|
|
}
|
|
}
|
|
|
|
$month = $request->month;
|
|
$data = [
|
|
"month" => Carbon::create()->startOfMonth()->month($month)->startOfMonth()->translatedFormat('F'),
|
|
"work_count" => count($works),
|
|
"data" => $trxs
|
|
];
|
|
|
|
return response()->json([
|
|
'message' => 'Get SA Montly Report',
|
|
'data' => $data,
|
|
'status' => true,
|
|
'code' => 200
|
|
], 200);
|
|
}
|
|
|
|
public function spk_close(Request $request)
|
|
{
|
|
try {
|
|
$transaction = Transaction::find($request->id);
|
|
if(!$transaction) {
|
|
return response()->json([
|
|
'message' => 'Failed Close SPK, Data Not Found',
|
|
'status' => false,
|
|
'code' => 404
|
|
], 404);
|
|
}
|
|
|
|
$transaction->update([
|
|
'status' => 1
|
|
]);
|
|
|
|
return response()->json([
|
|
'message' => 'Success Close SPK',
|
|
'status' => true,
|
|
'code' => 200
|
|
], 200);
|
|
|
|
} catch (\Throwable $th) {
|
|
return response()->json([
|
|
'message' => 'Failed Close SPK, '. $th->getMessage(),
|
|
'status' => false,
|
|
'code' => 500
|
|
], 500);
|
|
}
|
|
}
|
|
|
|
public function spk_close_bulk(Request $request)
|
|
{
|
|
try {
|
|
Transaction::whereIn('id', $request->ids)->update([
|
|
'status' => 1
|
|
]);
|
|
|
|
return response()->json([
|
|
'message' => 'Success Close SPK',
|
|
'status' => true,
|
|
'code' => 200
|
|
], 200);
|
|
} catch (\Throwable $th) {
|
|
return response()->json([
|
|
'message' => 'Failed Close SPK '. $th->getMessage(),
|
|
'status' => false,
|
|
'code' => 500
|
|
], 500);
|
|
}
|
|
}
|
|
|
|
public function report_spk_export(Request $request)
|
|
{
|
|
$filename = date('dmY_').'pekerjaan.xlsx';
|
|
$storage_path = 'spks/';
|
|
Excel::store(new TransactionExport($request), $storage_path.$filename);
|
|
|
|
$url = asset('storage/spks/'.$filename);
|
|
return $url;
|
|
}
|
|
|
|
public function work()
|
|
{
|
|
$works = Work::all();
|
|
return response()->json([
|
|
'message' => 'Successfully Get All Work ',
|
|
'data' => $works,
|
|
'status' => true,
|
|
'code' => 200
|
|
], 200);
|
|
}
|
|
|
|
public function sa()
|
|
{
|
|
$sas = User::join('roles as r', 'r.id', '=', 'users.role_id')->where('users.role_id', 4)->select('users.name as name', 'users.email as email', 'users.dealer_id as dealer_id', 'r.name as role', "users.id as id")->get();
|
|
return response()->json([
|
|
'message' => 'Successfully Get All SA ',
|
|
'data' => $sas,
|
|
'status' => true,
|
|
'code' => 200
|
|
], 200);
|
|
}
|
|
|
|
public function mechanic()
|
|
{
|
|
$mechanics = User::join('roles as r', 'r.id', '=', 'users.role_id')->where('users.role_id', 3)->select('users.name as name', 'users.email as email', 'users.dealer_id as dealer_id', 'r.name as role', "users.id as id")->get();
|
|
return response()->json([
|
|
'message' => 'Successfully Get All Mechanics ',
|
|
'data' => $mechanics,
|
|
'status' => true,
|
|
'code' => 200
|
|
], 200);
|
|
}
|
|
|
|
public function dealer()
|
|
{
|
|
$dealers = Dealer::all();
|
|
return response()->json([
|
|
'message' => 'Successfully Get All Dealers ',
|
|
'data' => $dealers,
|
|
'status' => true,
|
|
'code' => 200
|
|
], 200);
|
|
}
|
|
|
|
public function spk_kerja(Request $request)
|
|
{
|
|
$validation = Validator::make($request->all(), [
|
|
'quantity.*' => ['required', 'integer'],
|
|
'work_id.*' => ['required', 'integer'],
|
|
'spk_no' => ['required', function($attribute, $value, $fail) use($request) {
|
|
$date = $request->date;
|
|
|
|
$error_work = '';
|
|
foreach($request->work_id as $work_id) {
|
|
$check = Transaction::with(['work'])->where('work_id', $work_id)->where('date', $date)->where('spk', $value)->where('police_number', $request->police_number)->orderBy('id', 'DESC')->whereDate('created_at', date('Y-m-d'))->limit(1)->first();
|
|
if($check) {
|
|
$error_work .= $check->work->name.', ';
|
|
}
|
|
}
|
|
if($error_work) {
|
|
$fail('SPK ini sudah digunakan untuk pekerjaan '. $error_work .' sebelumnya');
|
|
}
|
|
}],
|
|
'police_number' => ['required', function($attribute, $value, $fail) use($request) {
|
|
$date = $request->date;
|
|
|
|
$error_work = '';
|
|
foreach($request->work_id as $work_id) {
|
|
$check = Transaction::with(['work'])->where('work_id', $work_id)->where('date', $date)->where('spk', $request->spk_no)->where('police_number', $value)->orderBy('id', 'DESC')->whereDate('created_at', date('Y-m-d'))->limit(1)->first();
|
|
if($check) {
|
|
$error_work .= $check->work->name.', ';
|
|
}
|
|
}
|
|
|
|
if($error_work) {
|
|
$fail('No Polisi ini sudah digunakan untuk pekerjaan '. $error_work .' sebelumnya');
|
|
}
|
|
}],
|
|
'warranty' => ['required'],
|
|
'date' => ['required', function($attribute, $value, $fail) use($request) {
|
|
$date = $request->date;
|
|
|
|
$error_work = '';
|
|
foreach($request->work_id as $work_id) {
|
|
$check = Transaction::with(['work'])->where('work_id', $work_id)->where('date', $date)->where('spk', $request->spk_no)->where('police_number', $request->police_number)->orderBy('id', 'DESC')->whereDate('created_at', date('Y-m-d'))->limit(1)->first();
|
|
if($check) {
|
|
$error_work .= $check->work->name.', ';
|
|
}
|
|
}
|
|
|
|
if($error_work) {
|
|
$fail('Tanggal ini sudah digunakan untuk pekerjaan '. $error_work .' sebelumnya');
|
|
}
|
|
}],
|
|
'user_sa_id' => ['required', 'integer'],
|
|
]);
|
|
|
|
if($validation->fails()) {
|
|
return response()->json([
|
|
'message' => 'Save work failed',
|
|
'data' => $validation->errors(),
|
|
'status' => false,
|
|
'code' => 400
|
|
], 400);
|
|
}
|
|
|
|
$data = [];
|
|
for($i = 0; $i < count($request->work_id); $i++) {
|
|
$data[] = [
|
|
"user_id" => Auth::user()->id,
|
|
"dealer_id" => Auth::user()->dealer_id,
|
|
"form" => 'work',
|
|
"work_id" => $request->work_id[$i],
|
|
"qty" => $request->quantity[$i],
|
|
"spk" => $request->spk_no,
|
|
"police_number" => $request->police_number,
|
|
"warranty" => $request->warranty,
|
|
"user_sa_id" => $request->user_sa_id,
|
|
"date" => $request->date,
|
|
"created_at" => date('Y-m-d H:i:s')
|
|
];
|
|
}
|
|
|
|
Transaction::insert($data);
|
|
|
|
return response()->json([
|
|
'message' => 'Successfully Add Works',
|
|
'data' => $data,
|
|
'status' => true,
|
|
'code' => 200
|
|
], 200);
|
|
}
|
|
|
|
public function spk_cuci(Request $request)
|
|
{
|
|
$wash_work = Work::leftJoin('categories as c', 'c.id', '=', 'works.category_id')->select('c.name as category_name', 'works.*')->where('c.name', 'LIKE', '%cuci%')->first();
|
|
$validation = Validator::make($request->all(), [
|
|
'spk_no' => ['required', function($attribute, $value, $fail) use($request, $wash_work) {
|
|
$date = $request->date;
|
|
|
|
$check = Transaction::with(['work'])->where('work_id', $wash_work->id)->where('date', $date)->where('spk', $value)->where('police_number', $request->police_number)->orderBy('id', 'DESC')->whereDate('created_at', date('Y-m-d'))->limit(1)->first();
|
|
if($check) {
|
|
$fail('SPK ini sudah digunakan untuk pekerjaan '.$check->work->name .' sebelumnya');
|
|
}
|
|
}],
|
|
'police_number' => ['required', function($attribute, $value, $fail) use($request, $wash_work) {
|
|
$date = $request->date;
|
|
|
|
$check = Transaction::with(['work'])->where('work_id', $wash_work->id)->where('date', $date)->where('spk', $request->spk_no)->where('police_number', $value)->orderBy('id', 'DESC')->whereDate('created_at', date('Y-m-d'))->limit(1)->first();
|
|
if($check) {
|
|
$fail('No Polisi ini sudah digunakan untuk pekerjaan '. $check->work->name .' sebelumnya');
|
|
}
|
|
}],
|
|
'warranty' => ['required'],
|
|
'date' => ['required', function($attribute, $value, $fail) use($request, $wash_work) {
|
|
$date = $request->date;
|
|
|
|
$check = Transaction::with(['work'])->where('work_id', $wash_work->id)->where('date', $date)->where('spk', $request->spk_no)->where('police_number', $request->police_number)->orderBy('id', 'DESC')->whereDate('created_at', date('Y-m-d'))->limit(1)->first();
|
|
if($check) {
|
|
$fail('Tanggal ini sudah digunakan untuk pekerjaan '. $check->work->name .' sebelumnya');
|
|
}
|
|
}],
|
|
'user_sa_id' => ['required', 'integer'],
|
|
]);
|
|
|
|
if($validation->fails()) {
|
|
return response()->json([
|
|
'message' => 'Save work failed',
|
|
'data' => $validation->errors(),
|
|
'status' => false,
|
|
'code' => 400
|
|
], 400);
|
|
}
|
|
|
|
$data = Transaction::create([
|
|
"user_id" => Auth::user()->id,
|
|
"dealer_id" => Auth::user()->dealer_id,
|
|
"form" => 'wash',
|
|
"work_id" => $wash_work->id,
|
|
"qty" => 1,
|
|
"spk" => $request->spk_no,
|
|
"police_number" => $request->police_number,
|
|
"warranty" => $request->warranty,
|
|
"user_sa_id" => $request->user_sa_id,
|
|
"date" => $request->date
|
|
]);
|
|
|
|
return response()->json([
|
|
'message' => 'Successfully Add Works',
|
|
'data' => $data,
|
|
'status' => true,
|
|
'code' => 200
|
|
], 200);
|
|
}
|
|
}
|