HEX
Server: Apache/2.4.46 (Ubuntu)
System: Linux localhost 5.11.0-49-generic #55-Ubuntu SMP Wed Jan 12 17:36:34 UTC 2022 x86_64
User: root (0)
PHP: 7.4.16
Disabled: pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare,
Upload Files
File: /var/www/html/fieldsblaze-heroku/app/Http/Controllers/APIProductController.php
<?php

namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Validator;
use DB;
use App\Library\UserLib;
use App\Models\User;
use App\Models\Product;
use App\Models\Customer;
use App\Models\PriceBookEntry;
use App\Models\UOM;
use App\Models\GST;
use Illuminate\Foundation\Bus\DispatchesJobs;
use Illuminate\Routing\Controller as BaseController;
use Illuminate\Foundation\Validation\ValidatesRequests;
use Illuminate\Foundation\Auth\Access\AuthorizesRequests;
use Illuminate\Support\Facades\Crypt;

class APIProductController extends BaseController
{
    use AuthorizesRequests, DispatchesJobs, ValidatesRequests;
 
    protected $userLib;
    public function __construct(UserLib $userLib)
	{
		$this->userLib = $userLib;		 
	}


       
    
    //Get products
    public function getProductList(Request $request) {
        $data = $request->json()->all();	                       
 
        $UserId = $request->header('UserId');
        $AuthToken = $request->header('AuthToken'); 
                   
        //check auth token
        if($this->userLib->tokenChecker($request) == FALSE)
        {
            $response = [
                'success' => false,
                'error_message' => "Authentication Failed",
                'error_code' => "301",
                'ApiVersion' => env('APP_VERSION'),    
            ];
            return response()->json($response);
        }

        $Products = Product::select('tbl_products.*', 'tbl_product_family.Name as Family', 'tbl_unit_of_measurement.MeasurementName as Unit','tbl_admin.FirstName as Updated_by', 'tbl_admin.FirstName as Created_by')
        ->leftJoin('tbl_admin', 'tbl_products.Updated_by', '=', 'tbl_admin.UserId')
        ->leftJoin('tbl_product_family', 'tbl_products.Family', '=', 'tbl_product_family.ProductFamilyId')
        ->leftJoin('tbl_unit_of_measurement', 'tbl_products.Unit', '=', 'tbl_unit_of_measurement.UnitId')
        ->where('tbl_products.IsDeleted', '=', '0')
        ->where('tbl_products.Status', '=', '1')
        ->get();

        if ($Products->count() > 0)
        {
            $response = [
                'Success' => true,
                'ResponseMessage' => "Success",
                'ResponseCode' => "200",
                'UserId' => $UserId,                            
                'AuthToken' => $AuthToken,                
                'Products' => $Products, 
                'ApiUrl' => env('APP_URL'),    
                'ApiVersion' => env('APP_VERSION'),                           
            ];                                               
            return response()->json($response);   
        }
        else
        {   
            // fail
            $response = [
                'Success' => false,
                'ResponseMessage' => "Product does not exist",
                'ResponseCode' => "201",   
                'ApiVersion' => env('APP_VERSION'),                      
            ];
            return response()->json($response);                                                                                                           
        }
    }
    
    
    //Get products
    public function getCustomerProductList(Request $request, $CustomerId='') {
        $data = $request->json()->all();	                       
 
        $UserId = $request->header('UserId');
        $AuthToken = $request->header('AuthToken'); 
                   
        //check auth token
        if($this->userLib->tokenChecker($request) == FALSE)
        {
            $response = [
                'success' => false,
                'error_message' => "Authentication Failed",
                'error_code' => "301",
                'ApiVersion' => env('APP_VERSION'),    
            ];
            return response()->json($response);
        }

        if(!$CustomerId)
        {
            $response = [
                'success' => false,
                'error_message' => "Customer Id required",
                'error_code' => "205",
                'ApiVersion' => env('APP_VERSION'),    
            ];
            return response()->json($response);
        }

        if($CustomerId){
        $Customer = Customer::select('*') 
        ->where('Status', '=', '1')                 
        ->where('IsDeleted', '=', '0')
        ->where('CustomerId', '=', $CustomerId)
        ->get();
        }
        else
        {
            $Customer = Customer::select('*') 
            ->where('Status', '=', '1')                 
            ->where('IsDeleted', '=', '0')             
            ->get();
        }

        if($Customer->count() == 0)
        {
            $response = [
                'success' => false,
                'error_message' => "Customer not found",
                'error_code' => "202",
                'ApiVersion' => env('APP_VERSION'),    
            ];
            return response()->json($response);
        }
        else
        {
            $Customer = $Customer->first();
            $PriceBookId = $Customer->PriceBookId;
            if(!$PriceBookId)
            {
                $response = [
                    'success' => false,
                    'error_message' => "Price book has not linked",
                    'error_code' => "206",
                    'ApiVersion' => env('APP_VERSION'),    
                ];
                return response()->json($response);
            }
            else
            {
                $PriceBookEntry = PriceBookEntry::select('tbl_price_book_entry.*', 'tbl_price_book.PriceBookName', 'tbl_admin.FirstName as Updated_by', 'tbl_admin.FirstName as Created_by', 'tbl_products.*', 'tbl_product_family.Name as FamilyName')
                ->leftJoin('tbl_admin', 'tbl_price_book_entry.Created_by', '=', 'tbl_admin.UserId')
                ->leftJoin('tbl_price_book', 'tbl_price_book_entry.PriceBookId', '=', 'tbl_price_book.PriceBookId')
                ->leftJoin('tbl_products', 'tbl_price_book_entry.ProductId', '=', 'tbl_products.ProductId')
                ->leftJoin('tbl_product_family', 'tbl_products.Family', '=', 'tbl_product_family.ProductFamilyId')
                ->where('tbl_price_book.IsDeleted', '=', '0')
                ->where('tbl_price_book.Status', '=', '1')
                ->where('tbl_price_book_entry.IsDeleted', '=', '0')
                ->where('tbl_price_book_entry.Status', '=', '1')
                ->where('tbl_products.IsDeleted', '=', '0')
                ->where('tbl_products.Status', '=', '1')
                ->where('tbl_price_book_entry.PriceBookId', '=', $PriceBookId)
                ->get();
                
                if ($PriceBookEntry->count() > 0)
                {                    
                    foreach ($PriceBookEntry as $key => $ProductValue) 
                    {                         
                        $ProductValue['CustomerId'] = $CustomerId;     

                        $Unit = $ProductValue['Unit'];
    
                        $MeasurementName = '';
                        $UnitData = UOM::where('UnitId', $Unit)->get();               
                        if ($UnitData->count() > 0)
                        {   //email is not exist
                
                            $UnitDt = $UnitData->first();   
                            $MeasurementName = $UnitDt->MeasurementName;
                        }
                        $ProductValue['UnitName'] = $MeasurementName;



                        $GstSlabId = $ProductValue['GstSlabId'];
    
                        $GstSlabName = '';
                        $GstSlabData = GST::where('GstSlabId', $GstSlabId)->get();               
                        if ($GstSlabData->count() > 0)
                        {   //email is not exist
                
                            $GstSlabDt = $GstSlabData->first();   
                            $GstSlabName = $GstSlabDt->Name;
                        }
                        $ProductValue['GstSlabName'] = $GstSlabName;


                        /** -------------------------------- */
                        $ProductFamilyId = $ProductValue['Family'];
    
                        $FamilyName = '';
                        $ProductFamilyData = DB::connection('DBD')->table('tbl_product_family')->where('ProductFamilyId', $ProductFamilyId)->get();               
                        if ($ProductFamilyData->count() > 0)
                        {   //email is not exist
                
                            $ProductFamilyDt = $ProductFamilyData->first();   
                            $FamilyName = $ProductFamilyDt->Name;
                        }
                        $ProductValue['FamilyName'] = $FamilyName;


                        /**-------------------------------- */
                        
                        
                        
                    }
                     
                    $response = [
                         
                        'Success' => true,
                        'ResponseMessage' => "Success",
                        'ResponseCode' => "200",
                        'CustomerId' => $CustomerId,
                        'UserId' => $UserId,                            
                        'AuthToken' => $AuthToken,                
                        'Products' => $PriceBookEntry, 
                        'ApiUrl' => env('APP_URL'),    
                        'ApiVersion' => env('APP_VERSION'),                           
                    ];                                               
                    return response()->json($response);   
                }
                else
                {   
                    // fail
                    $response = [
                        'Success' => false,
                        'ResponseMessage' => "Product does not exist",
                        'ResponseCode' => "201",   
                        'ApiVersion' => env('APP_VERSION'),                      
                    ];
                    return response()->json($response);                                                                                                           
                }
            }
        }
         


        // $Products = Product::select('tbl_products.*', 'tbl_product_family.Name as Family', 'tbl_unit_of_measurement.MeasurementName as Unit','tbl_admin.FirstName as Updated_by', 'tbl_admin.FirstName as Created_by')
        // ->leftJoin('tbl_admin', 'tbl_products.Updated_by', '=', 'tbl_admin.UserId')
        // ->leftJoin('tbl_product_family', 'tbl_products.Family', '=', 'tbl_product_family.id')
        // ->leftJoin('tbl_unit_of_measurement', 'tbl_products.Unit', '=', 'tbl_unit_of_measurement.id')
        // ->where('tbl_products.IsDeleted', '=', '0')
        // ->where('tbl_products.Status', '=', '1')
        // ->get();

        
    }


    //Get product Items
    public function getProductLineItem(Request $request, $ProductId) {
        $data = $request->json()->all();	                       
 
        $UserId = $request->header('UserId');
        $AuthToken = $request->header('AuthToken'); 
                   
        //check auth token
        if($this->userLib->tokenChecker($request) == FALSE)
        {
            $response = [
                'success' => false,
                'error_message' => "Authentication Failed",
                'error_code' => "301",
                'ApiVersion' => env('APP_VERSION'),    
            ];
            return response()->json($response);
        }

        //check validation
        if (!$ProductId)
        {
            $response = [
                'Success' => false,
                'ResponseMessage' => "ProductId is required!",
                'ResponseCode' => '220',
                'ApiVersion' => env('APP_VERSION'),    
            ];
            return response()->json($response);
        }

        

        $Products = Product::select('tbl_products.*', 'tbl_product_family.Name as Family', 'tbl_unit_of_measurement.MeasurementName as Unit','tbl_admin.FirstName as Updated_by', 'tbl_admin.FirstName as Created_by')
        ->leftJoin('tbl_admin', 'tbl_products.Updated_by', '=', 'tbl_admin.UserId')
        ->leftJoin('tbl_product_family', 'tbl_products.Family', '=', 'tbl_product_family.id')
        ->leftJoin('tbl_unit_of_measurement', 'tbl_products.Unit', '=', 'tbl_unit_of_measurement.id')
        ->where('tbl_products.IsDeleted', '=', '0')
        ->where('tbl_products.Status', '=', '1')         
        ->where('tbl_products.ParentId', '=', $ProductId)        
        ->get();

        if ($Products->count() > 0)
        {
            $response = [
                'Success' => true,
                'ResponseMessage' => "Success",
                'ResponseCode' => "200",
                'UserId' => $UserId,                            
                'AuthToken' => $AuthToken,                
                'ProductLineItems' => $Products, 
                'ApiUrl' => env('APP_URL'),    
                'ApiVersion' => env('APP_VERSION'),                           
            ];                                               
            return response()->json($response);   
        }
        else
        {   
            // fail
            $response = [
                'Success' => false,
                'ResponseMessage' => "Product does not exist",
                'ResponseCode' => "201",   
                'ApiVersion' => env('APP_VERSION'),                      
            ];
            return response()->json($response);                                                                                                           
        }
    }



    //Get product Items
    public function getProductDetails(Request $request, $ProductId) {
        $data = $request->json()->all();	                       
 
        $UserId = $request->header('UserId');
        $AuthToken = $request->header('AuthToken'); 
                   
        //check auth token
        if($this->userLib->tokenChecker($request) == FALSE)
        {
            $response = [
                'success' => false,
                'error_message' => "Authentication Failed",
                'error_code' => "301",
                'ApiVersion' => env('APP_VERSION'),    
            ];
            return response()->json($response);
        }

        //check validation
        if (!$ProductId)
        {
            $response = [
                'Success' => false,
                'ResponseMessage' => "ProductId is required!",
                'ResponseCode' => '220',
                'ApiVersion' => env('APP_VERSION'),    
            ];
            return response()->json($response);
        }

        

        $Products = Product::select('tbl_products.*', 'tbl_product_family.Name as Family', 'tbl_unit_of_measurement.MeasurementName as Unit','tbl_admin.FirstName as Updated_by', 'tbl_admin.FirstName as Created_by')
        ->leftJoin('tbl_admin', 'tbl_products.Updated_by', '=', 'tbl_admin.UserId')
        ->leftJoin('tbl_product_family', 'tbl_products.Family', '=', 'tbl_product_family.id')
        ->leftJoin('tbl_unit_of_measurement', 'tbl_products.Unit', '=', 'tbl_unit_of_measurement.id')
        ->where('tbl_products.IsDeleted', '=', '0')
        ->where('tbl_products.Status', '=', '1')         
        ->where('tbl_products.ProductId', '=', $ProductId)        
        ->get();

        if ($Products->count() > 0)
        {
            $Product = $Products->first(); 
            
            
            $ProductLineItem = Product::select('tbl_products.*', 'tbl_product_family.Name as Family', 'tbl_unit_of_measurement.MeasurementName as Unit','tbl_admin.FirstName as Updated_by', 'tbl_admin.FirstName as Created_by')
            ->leftJoin('tbl_admin', 'tbl_products.Updated_by', '=', 'tbl_admin.UserId')
            ->leftJoin('tbl_product_family', 'tbl_products.Family', '=', 'tbl_product_family.id')
            ->leftJoin('tbl_unit_of_measurement', 'tbl_products.Unit', '=', 'tbl_unit_of_measurement.id')
            ->where('tbl_products.IsDeleted', '=', '0')
            ->where('tbl_products.Status', '=', '1')         
            ->where('tbl_products.ParentId', '=', $ProductId)        
            ->get();

            $Product->ProductLineItems = array();
            if ($ProductLineItem->count() > 0)
            {
                $Product->ProductLineItems = $ProductLineItem;
            }

            $response = [
                'Success' => true,
                'ResponseMessage' => "Success",
                'ResponseCode' => "200",
                'UserId' => $UserId,                            
                'AuthToken' => $AuthToken,                
                'Product' => $Product, 
                'ApiUrl' => env('APP_URL'),    
                'ApiVersion' => env('APP_VERSION'),                           
            ];                                               
            return response()->json($response);   
        }
        else
        {   
            // fail
            $response = [
                'Success' => false,
                'ResponseMessage' => "Product does not exist",
                'ResponseCode' => "201",   
                'ApiVersion' => env('APP_VERSION'),                      
            ];
            return response()->json($response);                                                                                                           
        }
    }          
}