| Path : /var/www/html/jewelry-pos/app/Http/Controllers/ |
|
B-Con CMD Config cPanel C-Rdp D-Log Info Jump Mass Ransom Symlink vHost Zone-H |
| Current File : /var/www/html/jewelry-pos/app/Http/Controllers/ApiController.php |
<?php
namespace App\Http\Controllers;
use App\Imports\ProductImport;
use App\Models\ProductCategory;
use App\Models\QtyHistory;
use Carbon\Carbon;
use App\Models\Sale;
use App\Models\Member;
use App\Models\Product;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use App\Models\SellProductAttribute;
use Illuminate\Support\Facades\Auth;
use Intervention\Image\Facades\Image;
use Maatwebsite\Excel\Facades\Excel;
class ApiController extends Controller
{
public function scan(Request $request)
{
$sale = Sale::where('invoice_no', $request->scan)->first();
return response()->json($sale);
}
public function updateImage(Request $request)
{
$product = Product::findOrFail($request->product_id);
$save_url = '';
if ($request->hasFile('image')) {
$image = $request->file('image');
$name_gen = hexdec(uniqid()) . '.' . $image->getClientOriginalExtension(); //hexdec generate image
Image::make($image)->resize(800, 800, function ($constraint) {
$constraint->aspectRatio();
})->save('images/' . $name_gen);
$save_url = 'images/' . $name_gen;
}
$product->update([
'image' => $save_url
]);
return response()->json(['message' => __('message.updated successfully')]);
}
public function search(Request $request)
{
if(strlen($request->q) >= 5){
$products = Product::with('productCategory')->where('part_number', 'like','%'.$request->q.'%')
->where('qty','>',0)->where('is_active' , true)->get();
}
// else{
// $products = Product::with('productCategory')->where('id' , $request->q)
// ->where('qty','>',0)->whereIn('for_sale' , [1,2])->where('is_active' , true)->get();
// }
foreach($products as $product){
if($product->fixed_price || $product->productCategory->fixed_price){
$product['sellingPrice']=$product->price;
$product['upgradeSellingPrice']=$product->price;
}else{
if($product->purity_upgrade_to){
$product['upgradeSellingPrice'] = $product->upgradeSellingPrice();
}else{
$product['upgradeSellingPrice'] = $product->sellingPrice();
}
$product['sellingPrice']=$product->sellingPrice();
// dd($product['upgradeSellingPrice']);
}
if(!$product->weight){
$product->weight = 0;
}
$product->productCategory['selling_rate'] = $product->productCategory->sellingPrice($product->selling_purity);
$product->productCategory['goldRate'] = $product->productCategory->sellingPrice(1);
$product->productCategory['supplier_price'] = $product->productCategory->price();
$product->productCategory['upgrade_selling_rate'] = $product->productCategory->upgradeSellingRate($product->selling_purity);
if($product->purity_upgrade_to){
$productCategoryName = ProductCategory::where('purity_level' , $product->purity_upgrade_to)->first();
}else{
$productCategoryName = ProductCategory::where('id' , $product->id)->first();
}
$product->productCategory['name'] = $productCategoryName->name??$product->productCategory->name;
// dd($product->productCategory->name);
$product['productCategoryName'] = $product->productCategoryNameSelling();
}
return response()->json($products);
}
public function searchDiamond(Request $request)
{
$q = $request->q;
$products = Product::where('part_number' , 'like' , '%' . $q . '%')->where('is_active' , true)->where('qty' , '>' , 0)->where('for_sale' , false)->get();
return response()->json($products);
}
public function modify(Request $request)
{
$modify = $request->get('modify');
$products = Product::where('part_number', 'like' , '%' . $modify . '%')->get();
return response()->json($products);
}
public function store(Request $request)
{
// if($request->product_id){
if(($request->usd_amount!=null || $request->thb_amount!=null || $request->khr_amount!=null)){
$product = Product::findOrFail($request->product_id);
if($product->image){
$image = $product->image;
}else{
$save_url = '';
if ($request->hasFile('image')) {
$image = $request->file('image');
$name_gen = hexdec(uniqid()) . '.' . $image->getClientOriginalExtension(); //hexdec generate image
Image::make($image)->resize(800, 800, function ($constraint) {
$constraint->aspectRatio();
})->save('images/' . $name_gen);
$save_url = 'images/' . $name_gen;
}
$image = $save_url??'';
}
if($product->qty>=$request->qty) {
// $productAccessories = Product::where('for_sale' , false)->where('weight' , '!=' , 0)->where('product_category_id' , $product->product_category_id)->first();
if ($request->phone) {
$customer = Member::create([
'name' => $request->customer_name??'',
'phone' => $request->phone??'',
'note' => $request->note??'',
]);
}
$fixed_price = false;
if($product->fixed_price){
if($product->price != $request->sales_price){
$fixed_price = false;
}else{
$fixed_price = true;
}
}
// if($product->weight < $request->weight??0){
// $w = $request->weight - $product->weight;
// dd('request X = ' . $w);
// }
$wages = 0;
$original_wages = $product->original_wages;
$wages_in_weight = 0;
$original_wages_in_weight = $product->original_wages_in_weight;
$selling_purity = $product->selling_purity;
if(!$request->upgrade_purity){
// if($product->productCategory->fixed_price == true || $product->fixed_price == true){
// $wages = $request->wages??0;
// $original_wages = $request->original_wages??0;
// $wages_in_weight = $request->wages / ($product->supplier_rate / 1000);
// $original_wages_in_weight = $request->original_wages / ($product->supplier_rate / 1000);
// }else{
// $wages = $request->wages * ($product->productCategory->sellingPrice());
//// $original_wages = $request->original_wages * ($product->productCategory->price());
// $original_wages = $request->original_wages * ($product->productCategory->price(null,$product->purity_level));
// $wages_in_weight = $request->wages??0;
// $original_wages_in_weight = $request->original_wages??0;
// }
$wages = number_format($product->selling_wagesInWeight() , 2);
$original_wages = number_format($product->cost_wagesInWeight(),2);
$wages_in_weight = number_format($request->wages , 2);
$original_wages_in_weight = number_format($request->original_wages , 2);
$selling_purity = 0;
}
$selling_cost = $product->sellingCost($product->weight , null)??0;
$cost_product = $product->cost??0;
$rate_for_sale = 0;
if($product->productCategory->fixed_price == true){
$rate_for_sale = $product->productCategory->sellingPrice(floatval($product->weight_description));
}else{
$rate_for_sale = $product->productCategory->sellingPrice($product->selling_purity);
}
if($request->weight < $product->weight){
$wasts_weight = $product->weight - floatval($request->weight);
$name_for_accessory = $product->productCategory->name . ' គីឡូ';
$accessory_product = Product::where('name' , $name_for_accessory)->where('is_active',true)->first();
// if($accessory_product && $request->cut_weight == 1){
if($request->cut_weight == 1){
// $accessory_product->description = $accessory_product->description . ' | ' . $product->part_number . ' : -' . $wasts_weight;
$qtyHistory_note = $product->part_number . ' : -' . number_format($request->weight , 2);
if($product->for_sale != 0 && $accessory_product){
$accessory_product->weight = $accessory_product->weight + $wasts_weight;
$accessory_product->save();
}
$selling_cost = $product->sellingCost($request->weight , null)??0;
$cost_product = $request->weight * ($product->supplier_rate / 1000 )??0;
$weights = -$request->weight;
$weight_after_transaction = $wasts_weight;
$qtyHistory = QtyHistory::create([
'qty' => $product->qty,
'qty_after_transaction' => $product->qty,
'qty_before_transaction' => $product->qty,
'product_id' => $product->id,
'product_category_id' => $product->product_category_id,
'user_id' => $request->user_id??Auth::user()->id,
'note' => $qtyHistory_note,
'grn' => '',
'weight' => $weights,
'weight_before_transaction' => $product->weight,
'weight_after_transaction' => $weight_after_transaction,
'product_cost' => $product->sellingCost($weights),
]);
}
}
if($product->for_sale == 0){
if($product->weight >= $request->weight){
$product->weight = $product->weight - $request->weight;
$product->save();
}
}
$gain_lose_amount = ($product->weight * $request->rate)-$cost_product??0;
$not_use_rate = false;
if($request->not_use_rate == '1'){
$selling_cost = $cost_product;
$wages = $original_wages;
$wages_in_weight = $original_wages_in_weight;
$not_use_rate = true;
}
$sale = Sale::create([
// 'selling_to_usd_exchange_rate' => $request->selling_to_usd_exchange_rate ?? 0,
// 'for_sale' => $product->for_sale,
// 'note' => $request->note_not_for_sale,
'member_id' => $customer->id ?? '',
'product_id' => $request->product_id??0,
'part_number' => $product->part_number??'',
'sales_price' => $request->sales_price??0,
'name' => $request->name??'',
'discount' => $request->discount??0,
'cost' => $cost_product,
'is_active' => true,
'description' => $request->description??'',
// 'image' => $product->image,
'weight' => $request->weight??0,
'product_category_id' => $product->product_category_id,
'user_id' => $request->user_id??Auth::user()->id,
'wages' => $wages,
'wages_in_weight' => $wages_in_weight,
'original_wages_in_weight' => $original_wages_in_weight,
'invoice_no' => random_int(000000000, 999999999),
'diamond_size' => $request->diamond_size ?? '',
'usd_amount' => $request->usd_amount ?? 0,
'khr_amount' => $request->khr_amount ?? 0,
'thb_amount' => $request->thb_amount ?? 0,
'qty' => $request->qty ?? 1,
'original_wages' => $original_wages,
// 'selling_cost'=>$product->sellingCost($request->weight)??0,
'selling_cost'=> $selling_cost,
'selling_rate'=> $rate_for_sale??0,
'image' => $image??'',
'fixed_price' => $fixed_price,
'weight_description'=>$product->weight_description??'',
'purity_upgrade_to' => $product->purity_upgrade_to??0,
'selling_purity' => $selling_purity??0,
'supplier_rate' => $product->supplier_rate??0,
'old_code' => $product->old_code??'',
'purity_level' => $product->purity_level??0,
'original_invoice' => $product->original_invoice??'',
'not_use_rate' => $not_use_rate,
'gain_lose_amount' => $gain_lose_amount,
'rate' => $request->rate??0,
]);
if(isset($qtyHistory)){
$qtyHistory->note = $qtyHistory->note." : #sale_id=".$sale->id;
$qtyHistory->save();
}
if($request->for_sale == 1){
$product->qty = $product->qty - ($request->qty ?? 1);
}
$product->save();
$product = Product::find($request->product_id);
if (is_array($product->productAttributes) || is_object($product->productAttributes)){
foreach($product->productAttributes as $index => $productAttribute){
SellProductAttribute::create([
'name'=>$productAttribute->name??'',
'qty'=>$productAttribute->qty??0,
'cost'=>$productAttribute->cost??0,
'price'=>$productAttribute->price??0,
'sell_id'=>$sale->id
]);
}
}
return response()->json(["status"=>'success','sale_id'=>$sale->id,'message'=>__('message.created successfully')]);
}
else{
return response()->json(['status'=>'error','message'=>__('message.invalid qty')]);
}
}
else{
return response()->json(['status'=>'error','message'=>__('message.empty price')]);
}
// }
// else{
// return response()->json(['message'=>'empty product id']);
// }
}
public function update_price()
{
}
public function saleChart(Request $request)
{
$days = [];
$values = [];
$month = $request->month ?? now()->format('m');
$year = now()->year;
$today = now();
if ($month == $today->format('m') && $year == $today->year) {
$lastDay = $today->day;
} else {
$lastDay = Carbon::create($year, $month, 1)->daysInMonth;
}
for ($i = 1; $i <= $lastDay; $i++) {
$dateObj = Carbon::create($year, $month, $i);
$label = "{$i}/" . $dateObj->format('n');
if ($i == $today->day && $month == $today->format('m') && $year == $today->year) {
$label .= " today";
}
$days[] = $label;
$sales = Sale::whereBetween('created_at', [
$dateObj->startOfDay()->toDateTimeString(),
$dateObj->endOfDay()->toDateTimeString()
])->count('id');
$values[] = $sales;
}
return response()->json([
'categories' => $days,
'series' => $values,
'month' => $month,
]);
}
}