Current File : /home/inlingua/public_html/crm.vprotectindia.com/app/Http/Controllers/Admin/HomeController.php
<?php

namespace App\Http\Controllers\Admin;

use App\Http\Controllers\Controller;
use App\Model\API\CustomerMasterModel;
use App\Model\API\InvoiceMasters;
use App\Model\API\SaleSubscription;
use App\Model\API\Vouchers;
use App\Model\UnRegisterPayment;
use App\Model\CustomerPayment;
use App\Model\OutstandingReport;
use App\Model\Customer;
use Barryvdh\DomPDF\Facade as PDF;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\DB;
use Yajra\Datatables\Datatables;

class HomeController extends Controller
{
    /**
     * Create a new controller instance.
     *
     * @return void
     */
    public function __construct()
    {
       $this->middleware('auth:admin');

        // $this->middleware('guest')->except('logout');
        // $this->middleware('guest:admin')->except('logout');
        // $this->middleware('guest:writer')->except('logout');
    }

    /**
     * Show the application dashboard.
     *
     * @return \Illuminate\Contracts\Support\Renderable
     */
    public function index()
    {
        $headData = $this->deshboard_count();
        //echo "<pre>";print_r($headData);//exit;
            return view('admin.home',compact('headData'));
    }

    public function sale_sub(Request $request)
    {   
        $headData = $this->deshboard_count();
        return view('admin.rptsales_subs',compact('headData'));
    }
    public function getsubs()
    {
        // $query= SaleSubscription::with('customer')->get();
        // $query=SaleSubscription::with(array('customer'=>function($query){
        //           $query->select('id','fname');
        // }))->get();
        $is_super = Auth::user()->is_super; 
        $user_name = Auth::user()->name; 
        $query=  DB::table('sales_subsc_details AS subsc')
            ->select('subsc.id','subsc.product','subsc.billing_type','subsc.kit_type','subsc.subs_valid_from','subsc.subs_valid_to','subsc.price','subsc.status','customer_master.fname')
        ->join('customer_master','customer_master.id','=','subsc.user_id');
        if($is_super!=1)
        { 
           $query->where('customer_master.created_by',$user_name);
        } 
        $query = $query->get();
        return Datatables::of($query)->make(true);
    }
    public function invoices()
    { 
        $headData = $this->deshboard_count();
        return view('admin.rpt_invoice',compact('headData'));
    }
    public function getinv()
    {
        $is_super = Auth::user()->is_super; 
        $user_name = Auth::user()->name;
        if($is_super==1)
        {
          $query=InvoiceMasters::query()->with('customer')->get();
        }
        else
        {
            $query=InvoiceMasters::where('salesperson',$user_name)->with('customer')->get();
        } 

        return Datatables::of($query)
             //->addColumn('totalamt', $InvoiceMasters) 
             //  ->addColumn('action', 'hello')

             ->addColumn('totalamt', function(InvoiceMasters $invoices) {
                $totalamt=isset(InvoiceMasters::find($invoices->id)->ledgers()->first()->amount)?InvoiceMasters::find($invoices->id)->ledgers()->first()->amount:"0";
                    return $totalamt;
                })
             ->addColumn('balance', function(InvoiceMasters $invoices) {
                $recamt=InvoiceMasters::find($invoices->id)->receipt()->sum('amount');
               // $totalamt=($totalamt-$recamt);
                    return $recamt;
                })

             ->addColumn('status', function(InvoiceMasters $invoices) {
                $totalamt=isset(InvoiceMasters::find($invoices->id)->ledgers()->first()->amount)?InvoiceMasters::find($invoices->id)->ledgers()->first()->amount:"0";
                $recamt=InvoiceMasters::find($invoices->id)->receipt()->sum('amount');
               $status="Pending";
               if($totalamt==$recamt)$status='Completed';
                    return $status;
                })

            ->addColumn('action', function(InvoiceMasters $invoices) {
            $totalamt=isset(InvoiceMasters::find($invoices->id)->ledgers()->first()->amount)?InvoiceMasters::find($invoices->id)->ledgers()->first()->amount:"0";

            $recamt=InvoiceMasters::find($invoices->id)->receipt()->sum('amount');
$status='<a class="btn btn-primary btn-sm" target="_blank" href="'.route('admin.home.print_invoice',$invoices->id).'" >Print</a>';
            if($totalamt!=$recamt)$status .='|<a class="btn btn-warning btn-sm" href="#">Pay</a>';
                return $status;
return '<a class="btn btn-primary btn-sm" target="_blank" href="'.route('admin.home.print_invoice',$invoices->id).'" >Print</a>';
            })->addColumn('details_url', function($invoices) {
                return route('admin.home.item_details', $invoices->id);
            }) 
                // ->addColumn('action', 'admin.pay')
                ->rawColumns(['action'])

        ->make(true);
    }
public function getItemDetailsSingleData($id)
    {
        $item_list = InvoiceMasters::findOrFail($id)->items;
        return Datatables::of($item_list)->make(true);
    }


    public function payments(Request $request)
    {  
         //dd($query);
        $headData = $this->deshboard_count();
        return view('admin.rpt_payments',compact('headData'));
    }
    public function getpayments()
    {
        //$id = Auth::user()->user_name;         
        //$cust_id=CustomerMasterModel::where('customer_code',$id)->first()->id;  
       
        $is_super = Auth::user()->is_super; 
        $user_name = Auth::user()->name; 
        if($is_super==1)
        {

          $query = Vouchers::with(['bankallocation'])->get(); 
        }
        else
        {
         $query = Vouchers::where('created_by',$user_name)->with(['bankallocation'])->get();
        }

        return Datatables::of($query)->addColumn('details_url', function($Vouchers) {
                return route('admin.home.voucher_details', $Vouchers->id);
            })->make(true);
    }
public function getVoucherDetailsSingleData($id)
    {
        $voucher_list = Vouchers::findOrFail($id)->voucher_list;
        return Datatables::of($voucher_list)->make(true);
    }



    public function print_invoice($id)
    {
         
        $invoice_mast=InvoiceMasters::where('id',$id)->with('items','ledgers')->first(); 
        // return view('user.invoice_print',compact('invoice_mast'));
         $pdf = PDF::loadView('user.invoice_print',compact('invoice_mast'));
         return $pdf->stream('invoice.pdf');
    }

     public   function deshboard_count()
    { 
        $paid=0;
        $unpaid=0;
        $totalamt=0;
        $recamt=0;
        //$id = Auth::user()->user_name;         
        //$cust_id=CustomerMasterModel::where('customer_code',$id)->first()->id;
        $Subscriptionquery = Customer::count();
        //$Invoicequery = OutstandingReport::query()->get();
		$Invoicequery=OutstandingReport::query()->orderBy('id', 'DESC')->get();
		
		$total_recamt=DB::table('outstanding_reports')
            
        
         
           ->where('txn_status','0')
		   ->sum('bal_func_amt');
		   
		   

        foreach ($Invoicequery as $row) {
         //$totalamt = isset(InvoiceMasters::find($row->id)->ledgers()->first()->amount)?InvoiceMasters::find($row->id)->ledgers()->first()->amount:"0";
           //$recamt =InvoiceMasters::find($row->id)->receipt()->sum('amount');
		   
		   
            if($row->txn_status=='1')
            {
                $paid++;
            }
            else{
                $unpaid ++;
            }
        }

        return array(
            'subscription' =>$Subscriptionquery,
            'invoice'=>$Invoicequery->count(),
            'paid'=>$paid,
            'unpaid'=>$unpaid,
			'balance'=>$total_recamt,
        );
		
		
		
    }
 
    public function show()
    {
        $headData = $this->deshboard_count();
        return view('admin.rpt_unregister_payments',compact('headData'));
    }
	
	public function customer_payment()
    {
        $headData = $this->deshboard_count();
        return view('admin.rpt_customer_payments',compact('headData'));
    }
	
	
	
	  public function outstanding_report()
    {
        $headData = $this->deshboard_count();
        return view('admin.rpt_outstanding_report',compact('headData'));
    }
	public function customer_report()
    {
        $headData = $this->deshboard_count();
		 $customer=Customer::query()->orderBy('id', 'DESC')->get();
		 
		
        return view('admin.rpt_customer_report',compact('headData','customer'));
    }
	
    public function getunregisterpayments()
    {
        return Datatables::of(UnRegisterPayment::query()->orderBy('id', 'DESC'))->make(true);
    }
	
	public function getoutstandingreport()
    {
        return Datatables::of(OutstandingReport::query()->orderBy('id', 'DESC'))->make(true);
		dd(DB::getQueryLog());
    }
	
	public function getcustomerpayment()
    {
        
		return Datatables::of(CustomerPayment::query()->orderBy('id', 'DESC'))->make(true);
		dd(DB::getQueryLog());
		
    }
	
	public function getcustomerreport()
    {
        return Datatables::of(Customer::query()->orderBy('id', 'DESC'))->make(true);
		//dd(DB::getQueryLog());
    }
  public function getpaymentreport(Request $request)
    {
		
		$input = $request->all();
		$id=$input['id'];
		//$id='10000096';
	    $query=  DB::table('outstanding_reports')
			 ->where('customer_number',$id)
			 ->get();
		//$headData = $this->deshboard_count();
		echo '<table class="table table-bordered " id="customertable">
                <thead>
                    <tr>
                   <th scope="col">Sr.</th>
                    <th scope="col">organization id</th>
                    <th scope="col">party name</th>
                    <th scope="col">bal func amt</th>                    
                    <th scope="col">invoice number</th>
                    <th scope="col">invoice amount</th>
                    <th scope="col">customer number</th>
                    <th scope="col">rec account</th>
                    <th scope="col">customer trx_id</th> 
					<th scope="col">payment schedule_id</th>
					<th scope="col">ADD Date</th>
					<th scope="col">payment Status</th>
					</tr>
                </thead>';
				
			
            
     echo '<tbody>';       
		$i=1;
		if(count($query)>0){
		foreach($query as $value)
		{
echo '<tr><td>'.$i.'</td>';
echo '<td>'.$value->organization_id.'</td>';
echo '<td>'.$value->party_name.'</td>';
echo '<td>'.$value->bal_func_amt.'</td>';
echo '<td>'.$value->invoice_number.'</td>';
echo '<td>'.$value->invoice_amount.'</td>';
echo '<td>'.$value->customer_number.'</td>';
echo '<td>'.$value->rec_account.'</td>';
echo '<td>'.$value->customer_trx_id.'</td>';
echo '<td>'.$value->payment_schedule_id.'</td>';
echo '<td>'.$value->created_at.'</td>';
if($value->txn_status==1){
	
echo '<td>Payment Done</td>';	
}else {
	echo '<td>Pending</td>';
	
}


echo '</tr>';
$i++;
		}
		}else{
			
			echo '<tr><td colspan="12">No Record Found! </td>';
		}
		
		
		

echo '</tbody>';
echo '</table>';
		
		
		//print_r($query);
          //return Datatables::of($query)->make(true);
		
		
    }
     
}