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);
}
}
}