Viewing File: /home/ubuntu/shop-website-base/app/Repositories/ProductRepository.php

<?php

namespace App\Repositories;

use App\Helpers\Helper;

use App\Models\Product, App\Models\ProductGallery;

use App\Models\Order, App\Models\OrderProduct, App\Models\ProductInventory;

use App\Models\Cart, App\Models\OrderPayment;

use App\Models\User, App\Models\UserBillingAddress;

use Illuminate\Support\Facades\Hash;

use Exception, DB, Validator, Setting, Log, Auth;

class ProductRepository {


    public static function product_gallery_upload($files, $product_id, $status = YES, $is_default = NO) {

        $allowedfileExtension=['jpeg','jpg','png'];

        $product = Product::find($product_id);

        $is_product_image = $product ? ($product->picture ? YES : NO): NO;

        $data = [];

        if(!is_array($files)) {

            $file = $files;

            $product_gallery = new ProductGallery;

            $product_gallery->product_id = $product_id;

            $product_gallery->picture = Helper::storage_upload_file($file, FILE_PATH_PRODUCT);

            $product_gallery->status = $status;

            $product_gallery->save();

            if($is_product_image == NO && $product) {

                $product->picture = $product_gallery->picture;

                $product->save();
            }

            $gallery_data = [];

            $gallery_data['product_gallery_id'] = $product_gallery->id;

            $gallery_data['file'] = $product_gallery->picture;

            array_push($data, $gallery_data);

            return $data;
        }

        foreach($files as $file) {

            $filename = $file->getClientOriginalName();

            $extension = $file->getClientOriginalExtension();

            $check_picture = in_array($extension, $allowedfileExtension);

            if($check_picture) {

                $product_gallery = new ProductGallery;

                $product_gallery->product_id = $product_id;

                $product_gallery->picture =Helper::storage_upload_file($file, FILE_PATH_PRODUCT);

                $product_gallery->status = $status;

                $product_gallery->save();

                if($is_product_image == NO && $product) {

                    $product->picture = $product_gallery->picture;

                    $product->save();

                }

                $gallery_data = [];

                $gallery_data['product_gallery_id'] = $product_gallery->id;

                $gallery_data['file'] = $product_gallery->picture;

                array_push($data, $gallery_data);

            }

        }

        return $data;

    }

    /**
     * @method store_orders_save()
     *
     * @uses Save Ordered Products
     *
     * @created Bhawya
     *
     * @updated Bhawya
     *
     * @param
     * 
     * @return
     */

    public static function orders_save($request) {
         
        try {

            DB::beginTransaction();

            if(Auth::guard('user')->check()) {

                $cart = Cart::where('carts.user_id', $request->id)->CommonResponse()
                    ->where('products.status', APPROVED)
                    ->get();

            } else {

                $cart = Cart::where('carts.ip_address', get_ip_address())->CommonResponse()
                    ->where('products.status', APPROVED)
                    ->get();
            }

            
            $total_amount = $cart->sum('total_price');

            $order = new Order;

            $order->user_id = $request->id;

            $order->user_billing_address_id = $request->user_billing_address_id;

            $order->total_products = count($cart);

            $order->total = $total_amount;

            $order->order_placed_date = date('Y-m-d H:i:s');

            $order->unique_id = "GF-".get_unique_number();
            
            $order->status = ORDER_PLACED;
            
            $order->save();

            foreach ($cart as $key => $value) {
                
                $order_products = new OrderProduct;

                $order_products->user_id = $request->id;

                $order_products->order_id = $order->id;

                $order_products->product_id = $value->product_id;

                $order_products->quantity = $value->quantity;

                $order_products->total = $value->total_price;

                $order_products->save();

                $products_inventory = ProductInventory::where('product_id',$value->product_id)->first();

                if($products_inventory) {

                    $products_inventory->used_quantity += $value->quantity;

                    $products_inventory->remaining_quantity -= $value->quantity;

                    $products_inventory->save();

                    
                    $product = Product::where('id',$value->product_id)->first();

                    $product->product_stock_status = $products_inventory->remaining_quantity == 0 ? PRODUCT_NOT_AVAILABLE : PRODUCT_AVAILABLE;

                    $product->save();
         

                }


            }
            
            DB::commit();

            return $order;

        } catch(Exception $e) {

            // Something else happened, completely unrelated to Stripe

            DB::rollback();

            $response = ['success' => false, 'error' => $e->getMessage(), 'error_code' => $e->getCode()];

            return response()->json($response, 200);

        }

    }

    /**
     * @method order_payment_save()
     *
     * @uses Order Payment Save
     *
     * @created Bhawya
     *
     * @updated Bhawya
     *
     * @param
     * 
     * @return
     */

    public static function order_payment_save($request,$order) {

        try {

            DB::beginTransaction();

            $store_order_payments = new OrderPayment;

            $store_order_payments->order_id = $order->id;

            $store_order_payments->user_id = $request->id;

            $store_order_payments->payment_id = $request->payment_id;

            $store_order_payments->payment_mode = COD;

            $store_order_payments->total = $order->total ?? 0.00;

            $store_order_payments->paid = $request->paid_amount ?? 0.00;

            $store_order_payments->status = PAID_STATUS;

            $store_order_payments->save();

            $order = Order::find($order->id);

            $order->status = ORDER_PLACED;

            $order->save();

            DB::commit();

            $response_array = ['success' => true, 'message' => 'paid', 'data' => ['order_id' => $order->id]];

            return response()->json($response_array, 200);

        } catch(Exception  $e) {
            
            DB::rollback();

            $response = ['success' => false, 'error' => $e->getMessage(), 'error_code' => $e->getCode()];

            return response()->json($response, 200);
    
        }

    }

    /**
     * @method store_orders_save()
     *
     * @uses Save Ordered Products
     *
     * @created Bhawya
     *
     * @updated Bhawya
     *
     * @param
     * 
     * @return
     */

    public static function user_details_save($request) {
         
        try {

            DB::beginTransaction();

            $user = New User;

            $user->name = $request->name;

            $user->first_name = $user->last_name ='';

            $user->email = $request->email;

            $user->status = USER_APPROVED;

            $user->mobile = $request->mobile;

            $user->login_by = 'manual';

            $user->password = Hash::make($request->password);

            $user->timezone = $request->has('timezone') ? $request->timezone : 'Asia/Kolkata';

            if($user->save()) {

                $email_data['subject'] = tr('user_welcome_title').' '.Setting::get('site_name');

                $email_data['page'] = "emails.users.welcome";

                $email_data['data'] = $user;

                $email_data['email'] = $user->email;

                $email_data['name'] = $user->email;

                $email_data['verification_code'] = $user->verification_code;

                dispatch(new \App\Jobs\SendEmailJob($email_data));

            }

            DB::commit();

            return $user;

        } catch(Exception $e) {

            // Something else happened, completely unrelated to Stripe

            DB::rollback();

            $response = ['success' => false, 'error' => $e->getMessage(), 'error_code' => $e->getCode()];

            return response()->json($response, 200);

        }

    }

    /**
     * @method user_billing_address_save()
     *
     * @uses
     *
     * @created Bhawya
     *
     * @updated Bhawya
     *
     * @param
     * 
     * @return
     */

    public static function user_billing_address_save($request) {
         
        try {

            DB::beginTransaction();

            $user_billing_address = new UserBillingAddress;

            $user_billing_address->user_id = $request->id;

            $user_billing_address->street_address = $request->street_address;

            $user_billing_address->address = $request->address;

            $user_billing_address->zipcode = $request->zipcode;

            $user_billing_address->city = $request->city;

            $user_billing_address->type = ADDRESS_HOME;
     
            $user_billing_address->save();

            DB::commit();

            return $user_billing_address;

        } catch(Exception $e) {

            // Something else happened, completely unrelated to Stripe

            DB::rollback();

            $response = ['success' => false, 'error' => $e->getMessage(), 'error_code' => $e->getCode()];

            return response()->json($response, 200);

        }

    }

    public static function order_confirmation_mail($request) {

        try {

        $user = User::find($request->id);

        $email_data['subject'] = tr('order_confirmation').' '.Setting::get('site_name');

        $email_data['page'] = "emails.users.order-status";

        $email_data['data'] = $user;

        $email_data['email'] = $user->email;

        $email_data['name'] = $user->name;

        $email_data['order'] = Order::find($request->order_id) ?? '';

        $email_data['order_products'] = OrderProduct::where('order_id',$request->order_id)->get() ?? [];

        $email_data['message'] = tr('user_order_confirm_message',$user->name ?? '');

        dispatch(new \App\Jobs\SendEmailJob($email_data));

        $admin = Setting::get('admin_email_id');

        $admin_email_data['subject'] = tr('order_confirmation').' '.Setting::get('site_name');

        $admin_email_data['page'] = "emails.admin.order-status";

        $admin_email_data['data'] = $admin;

        $admin_email_data['email'] = $admin->email;

        $admin_email_data['name'] = $admin->name;

        $admin_email_data['message'] = tr('admin_order_confirm_message',$user->name ?? '');

        dispatch(new \App\Jobs\SendEmailJob($admin_email_data));

        } catch(Exception $e) {

            $response = ['success' => false, 'error' => $e->getMessage(), 'error_code' => $e->getCode()];

            return response()->json($response, 200);

        }
         
    }

}
Back to Directory File Manager