Anons79 Mini Shell

Directory : /home/aplikasiposinfo/.trash/app.2/Http/Controllers/
Upload File :
Current File : /home/aplikasiposinfo/.trash/app.2/Http/Controllers/PelunasanController.php

<?php

namespace App\Http\Controllers;

use Carbon\Carbon;
use Helper\Helper;
use App\Models\Log;
use App\Models\NPA;

use App\Models\User;
use App\Mail\Emailing;
use App\Models\Target;
use App\Models\Jabatan;
use App\Models\Tagihan;
use App\Models\Pelanggan;
use App\Models\Pelunasan;
use App\Models\UptDaerah;
use App\Models\Pembayaran;
use App\Traits\TraitsDenda;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Mail;
use Maatwebsite\Excel\Facades\Excel;
use Yajra\DataTables\Facades\DataTables;
use App\Exports\PembayaranTagihansExport;
use App\Imports\PembayaranTagihansImport;

class PelunasanController extends Controller
{
    use TraitsDenda;

    protected $routeName = 'pelunasan';
    protected $viewName = 'pelunasan';
    protected $title = 'Pembayaran';
    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function index()
    {
        $route = $this->routeName;
        $title = $this->title;
        return view($this->viewName.'.index',compact('route','title'));
    }

    public function datatable()
    {

        //Penambahan tanggal penerimaan dan perbaikan tabel pelunasan.
        if (Auth::user()->roles->first()->name =='Admin') {
            $datas = Tagihan::join("pelanggans", 'pelanggans.id', '=', 'tagihans.pelanggan_id')->where("tagihans.status", '=', 2)->join('pembayarans', 'pembayarans.tagihan_id', '=', 'tagihans.id')->select("tagihans.id", 'meter_penggunaan', 'meter_penggunaan_awal', 'jumlah_pembayaran', 'tagihans.tanggal', 'tanggal_akhir', 'name', 'denda_harian', 'denda_admin', 'tanggal_penerimaan', 'status', 'pembayarans.file_name', 'pembayarans.file_path');
            // $datas = Pembayaran::doesntHave('pelunasan')->whereHas('tagihan.pelanggan.daerah',function($query){
            //     $query->where(['nama_daerah'=>Auth::user()->daerah->nama_daerah]);
            // })
            } else {
                $datas = Tagihan::join("pelanggans", 'pelanggans.id', '=', 'tagihans.pelanggan_id')->where("tagihans.status", '=', 2)->join('pembayarans', 'pembayarans.tagihan_id', '=', 'tagihans.id')->where("pelanggans.daerah_id", '=', Auth::user()->daerah_id)->select("tagihans.id", 'meter_penggunaan', 'meter_penggunaan_awal', 'jumlah_pembayaran', 'tagihans.tanggal', 'tanggal_akhir', 'name', 'denda_harian', 'denda_admin', 'tanggal_penerimaan', 'status', 'pembayarans.file_name', 'pembayarans.file_path');
            }
        $datatables = DataTables::of($datas)
            ->addIndexColumn()
            ->editColumn('jumlah_pembayaran',function($data){
                $jumlah = $data->jumlah_pembayaran + $data->denda_harian + $data->denda_admin;
                return "Rp. ".number_format($jumlah, 2);
            })
            ->editColumn('name',function($data){
                    return $data->name;
            })
            ->editColumn('tagihan',function($data){
                $jumlah = $data->jumlah_pembayaran;
                return "Rp. ".number_format($jumlah, 2);
            })
            ->editColumn('denda_harian',function($data){
                $jumlah = $data->denda_harian + $data->denda_admin;
                return "Rp. ".number_format($jumlah, 2);
            })
            ->editColumn('meter_penggunaan',function($data){
                $jumlah = $data->meter_penggunaan;
                return number_format($jumlah, 2);
            })
            ->editColumn('tanggal',function($data){
                return $data->tanggal->format('F-Y');
            })
            ->editColumn('tanggal_penerimaan',function($data){
                return date("d-F-Y", strtotime($data->tanggal_penerimaan));
            })
            ->editColumn('tanggal_akhir',function($data){
                return date("F-Y", strtotime($data->tanggal_akhir));
            })
            ->addColumn('action', function ($data) {
                $route = 'pelunasan';
                $file_name = $data->file_name;
                $file_path = $data->file_path;
                return view('layouts.includes.table-action-nota',compact('data','route', 'file_name', 'file_path'));
            });

        return $datatables->make(true);
    }

    /**
     * Show the form for creating a new resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function create(Request $request)
    {
        $route = $this->routeName;
        $title = $this->title;

        $start = \Carbon\Carbon::now()->subYear()->startOfYear();
        $end = \Carbon\Carbon::now()->subYear()->endOfYear();
        $months_to_render = $start->diffInMonths($end);
    
        $dates = [];
    
        for ($i = 0; $i <= $months_to_render; $i++) {
            $dates[] = $start->isoFormat('MMMM');
            $start->addMonth();
        }

        $pembayarans = Tagihan::where("status", 1)->orWhere('status', 5)->orWhere('status', 6)->get();


        $years = [];
        for ($year=2020; $year <= date('Y'); $year++) $years[$year] = $year;

        return view($this->viewName.'.create',compact('route','title','dates','years','pembayarans','request'));
    }

    /**
     * Store a newly created resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */
    public function store(Request $request)
    {
        $validator = $request->validate([
            'id_pembayaran' => 'required|string|max:100',
        ]);

        $datas = Tagihan::find($request->id_pembayaran);
        
        try{
            $number = rand(0,1000);
            $txt = date("Ymdhis").''.$number;
            
            $id = $txt.$number;
            $target = Target::where("id_daerah", "=", $datas->pelanggan->daerah_id)->first();
            Target::where("id_daerah", "=", $datas->pelanggan->daerah_id)->update(["realisasi" => $target->realisasi + $datas->jumlah_pembayaran]);
            $query = Pelunasan::create([
                'id_pelunasan' => $txt,
                'pembayaran_id' => $datas->id,
                'tanggal' => date('Y-m-d'),
            ]);
            $periode = $datas->tanggal->isoFormat("MMMM-Y");
            $datas->update([
                'tanggal_penerimaan' => Carbon::now()->format('Y-m-d'),
                'status' => 2,
            ]);
            Helper::sendWa($datas->pelanggan->no_telepon, "Tagihan untuk periode $periode sudah ditandai lunas.");
            Log::create([
                'pengguna' => Auth::user()->name,
                'kegiatan' => "Menambah Data Pelunasan ".$datas->pelanggan->name. " dengan Jumlah Rp. ". $datas->jumlah_pembayaran,
            ]);
            return redirect(route($this->routeName.'.index'))->with(['success'=>'Berhasil Menambah Data Pelunasan : '.$query->id]);
        } catch (\Exception $e){
            return redirect()->back()->with(['error'=>'Gagal Menambah Data Pelunasan : '.$e->getMessage()])->withErrors($request->all());
        }
    }

    /**
     * Display the specified resource.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function show($id)
    {
        //
    }

    /**
     * Show the form for editing the specified resource.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function edit($id)
    {
        //
        $title = $this->title;
        $route = $this->routeName;

        $data = Tagihan::where("id", $id)->first();
        return view($this->viewName.'.edit',compact('route','title', 'data'));
    }

    /**
     * Update the specified resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function update(Request $request, $id)
    {
        //
        $data = Tagihan::where('id', $id)->first();
        try {
            if($request->pembayaran != $data->jumlah_pembayaran){
                $target = Target::where("id_daerah", $data->pelanggan->daerah_id)->first();
                $target->update([
                    'realisasi' => ($target->realisasi - $data->jumlah_pembayaran) + $request->pembayaran,
                ]);
            }
            $data->update([
                'jumlah_pembayaran' => $request->pembayaran,
                'meter_penggunaan' => $request->pemakaian,
                'tanggal' => $request->tanggal_awal,
                'denda_harian' => $request->denda,
                'tanggal_akhir' => $request->tanggal_akhir
            ]);
            Log::create([
                'pengguna' => Auth::user()->name,
                'kegiatan' => "Mengedit data pelunasan ".$data->pelanggan->name." dengan periode ".$request->tanggal_awal." dan jumlah pembayaran Rp. ".$request->pembayaran,
            ]);
            return redirect(route($this->routeName.'.index'))->with(['success'=>'Berhasil Edit Data Pelunasan : '.$data->id]);
        } catch (\Throwable $th) {
            //throw $th;
            dd($th->getMessage());
        }
    }

    /**
     * Remove the specified resource from storage.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function destroy(Request $request, $id)
    {
        //
        try{
            $query = Tagihan::where('id', $id)->first();
            $target = Target::where("id_daerah", $query->pelanggan->daerah_id)->first();
            Log::create([
                'pengguna' => Auth::user()->name,
                'kegiatan' => "Menghapus data pelunasan ".$query->pelanggan->name. " dengan jumlah Rp. ".$query->jumlah_pembayaran,
            ]);
            $target->update([
                'realisasi' => $target->realisasi - $query->jumlah_pembayaran,
            ]);
            $query->delete();


            return redirect(route($this->routeName.'.index'))->with(['success'=>'Berhasil Menghapus Data Pembayaran : '.$query->id]);
        }catch (\Exception $e){
            return redirect()->back()->with(['error'=>'Gagal Menghapus Data Pembayaran : '.$e->getMessage()])->withErrors($request->all());
        }
    }
    public function lunas()
    {
        $route = $this->routeName;
        $title = $this->title;

        $start = \Carbon\Carbon::now()->subYear()->startOfYear();
        $end = \Carbon\Carbon::now()->subYear()->endOfYear();
        $months_to_render = $start->diffInMonths($end);
    
        $dates = [];
    
        for ($i = 0; $i <= $months_to_render; $i++) {
            $dates[] = $start->isoFormat('MMMM');
            $start->addMonth();
        }
        if(Auth::user()->roles->first()->name == "Admin"){
            $jabatans = Jabatan::all();
        } else {
            $jabatans = Jabatan::where('daerah_id', Auth::user()->daerah->id)->get();
        }

        $pelanggans = Pelanggan::all();


        $years = [];
        for ($year=2020; $year <= date('Y'); $year++) $years[$year] = $year;

        return view($this->viewName.'.lunas',compact('route','title','dates','years','pelanggans', 'jabatans'));
    }
    public function lunasStore(Request $request){
        $datas = Pelanggan::where('id', $request->id_pelanggan)->first();
        try{
            $direktori=public_path().'/storage/image/';          
            $nama_file=str_replace(' ','-',$request->file->getClientOriginalName());
            $file_format= $request->file->getClientOriginalExtension();
            DB::beginTransaction();
            $number = rand(0,1000);
            $request['file_path'] = '/storage/image/';
            $request['file_name'] = $nama_file;
            $txt = date("Ymdhis").''.$number;
            $id = $txt;
            $request['id_tagihan'] = $id;
            $request['pelanggan_id'] = $request->id_pelanggan;
            $request['tanggal'] = $request->tanggal;
            $request['tanggal_akhir'] = $request->tanggal;
            $request['tanggal_penerimaan'] = $request->tanggal_penerimaan;
            $request['meter_penggunaan_awal'] = 0;
            $request['meter_penggunaan'] = (float)$request->pemakaian;
            $request['jumlah_pembayaran'] = $request->jumlah_pembayaran;
            $request['tarif'] = 0;
            $request['pesan'] = null;
            $request['status'] = 2;
            $request['denda_harian'] = $request->denda;
            $request['denda_admin'] = $request->denda_admin;
            $request['jabatan_id'] = $request->jabatan_id;
            $request['jabatan_id2'] = $request->jabatan_id2;
            $request['jabatan_id3'] = $request->jabatan_id3;
            $tagihan = Tagihan::create($request->all());
            $number2 = rand(0, 1000);
            $txt2 = date("Ymdhis").''.$number2;
            $pembayaran = Pembayaran::create([
                'id_pembayaran' => $txt2,
                'tagihan_id' => $tagihan->id,
                'tanggal' => date('Y-m-d'),
                'file_path' => '/storage/image/',
                'file_name' => $nama_file,

            ]);
            $number3 = rand(0, 1000);
            $txt3 = date("Ymdhis").''.$number3;
            $pelunasan = Pelunasan::create([
                'id_pelunasan' => $txt3,
                'pembayaran_id' => $pembayaran->id,
                'tanggal' => date('Y-m-d'),
            ]);
            $target = Target::where("id_daerah", "=", $datas->daerah_id)->first();
            Target::where("id_daerah", "=", $datas->daerah_id)
            ->update(["realisasi" => $target->realisasi + $request->jumlah_pembayaran]);
            // $vars  = array(
            //     '{id_pelanggan}' => $datas->id,
            //     '{nama_pelanggan}' => $datas->name,
            //     '{alamat}' => $datas->alamat,
            //     '{tanggal}' => strtoupper($date_formated),
            //     '{meter_penggunaan}' => $request["meter_penggunaan"],
            //     '{jumlah_pembayaran}' => $request["jumlah_pembayaran"],
            // );
            // $msg = "Pelanggan atas nama {nama_pelanggan} telah melakukan pelaporan untuk periode tagihan {tanggal}";    
            // $msg1 = strtr($msg, $vars);
            // $operator = User::role("Operator")->where("daerah_id", '=', $datas->daerah_id)->first();
            // Helper::sendWa($operator->no_telepon,$msg1);
            // // Helper::sendWa(Auth::user()->no_telepon, $msg1);
            // Mail::to($operator->email)->send(new Emailing($datas, false, $operator, $date_formated));
            // // Mail::to(Auth::user()->email)->send(new Emailing(Auth::user()->pelanggan, false, $operator, $date_formated));
            $number_pembayaran = date("Ymdhis").''.rand(1,1000);
            Log::create([
                'pengguna' => Auth::user()->name,
                'kegiatan' => "Melaporkan Penggunaan"
            ]);
            DB::commit();
            return redirect(route($this->routeName.'.index'))->with(['success'=>'Berhasil Menambah Data Tagihan : '.$tagihan->id_tagihan]);
        } catch (\Exception $e){
            DB::rollback();
            dd($e->getMessage());
            return redirect()->back()->with(['error'=>'Gagal Menambah Data Tagihan : '.$e->getMessage()])->withErrors($request->all());
        }
    }

    public function exportTemplateView()
    {
        $route = $this->routeName;
        $title = $this->title;
        
        $upts = UptDaerah::orderBy("nama_daerah")->get();
        return view($this->viewName.'.export-template',compact('route','title','upts'));
    }

    public function exportTemplate()
    {
        return Excel::download(new PembayaranTagihansExport, 'template_pembayaran'.date("Y_M_D_H_i").'.xlsx');
    }

    // mengambil data pelanggan/perusahaan berdasarkan upt/daerahnya
    public function ajaxGetPelanggan($upt_id)
    {   
        if($upt_id == 0){
            $pelanggans = Pelanggan::orderBy("name")->get()->toArray();
        } else {
            $pelanggans = Pelanggan::orderBy("name")->where('daerah_id',$upt_id)->get()->toArray();
        }
        
        $results = [
            [
                'id'=>0,
                'name'=>"-- Semua Perusahaan --"
            ]
        ];
        $results = array_merge($results,$pelanggans);
        return response()->json($results);
    }

    //fungsi ke view untuk import excel
    public function importExcelView()
    {
        $route = $this->routeName;
        $title = $this->title;
        $years = [];
        for ($year=2020; $year <= date('Y'); $year++) $years[$year] = $year;
        $upts = UptDaerah::orderBy("nama_daerah")->get();
        return view($this->viewName.'.import-excel',compact('route','title','upts','years'));
    }

    public function importExcel(Request $request)
    {   
        $import = new PembayaranTagihansImport;
        Excel::import($import, $request->file);
        $results = $import->results;
        $years = [];
        for ($year=2020; $year <= date('Y'); $year++) $years[$year] = $year;
        $session = ['success'=>'Berhasil Mengimport Data Tagihan Dari File : '.$request->file->getClientOriginalName(),'results'=>$results];
        
        //cek apakah import data lainnya walaupun ada data yang tidak sesuai format
        $error = false;
        foreach ($results as $result) {
            if($result['status'] == 'danger'){
                $error = true;
            }
        }
        if(!$request->import_data){
            if($error){
                $session = ['error'=>'Gagal Mengimport Data Tagihan Dari File : '.$request->file->getClientOriginalName(),'results'=>$results];
            }
        }
        return redirect('pelunasan/importExcel')->with($session);
    }
    public function delete(){
        $datas = Tagihan::whereHas('pelanggan', function($query) {
            $query->where('pelanggans.daerah_id', '=', Auth::user()->daerah_id);
        })->get();
        foreach($datas as $data){
            $target = Target::where('id_daerah', $data->pelanggan->daerah_id)->first();
            $target->update([
                'realisasi' => $target->realisasi - $data->jumlah_pembayaran,
            ]);
            $data->pembayaran->tagihan->delete();
            $data->pembayaran->delete();
            $data->delete();
        }
        return redirect(route($this->routeName.'.index'))->with(['success'=>'Berhasil Menghapus semua data tagihan']);

    }
    
}

Anons79 File Manager Version 1.0, Coded By Anons79
Email: [email protected]